【发布时间】:2016-11-14 19:06:45
【问题描述】:
我正在做一个证明,我的一个子目标看起来有点像这样:
Goal forall
(a b : bool)
(p: Prop)
(H1: p -> a = b)
(H2: p),
negb a = negb b.
Proof.
intros.
apply H1 in H2. rewrite H2. reflexivity.
Qed.
证明不依赖于任何外部引理,仅包括将上下文中的一个假设应用于另一个假设并使用已知假设重写步骤。
有没有办法让这个自动化?我尝试做intros. auto.,但没有效果。我怀疑这是因为auto 只能执行apply 步骤但不能执行rewrite 步骤,但我不确定。也许我需要一些更强的策略?
我想要自动执行此操作的原因是,在我最初的问题中,我实际上有大量与这个非常相似的子目标,但假设的名称(H1、H2 等)略有不同,假设的数量(有时还有一个或两个额外的归纳假设)和最后的布尔公式。我认为如果我可以使用自动化来解决这个问题,我的整体证明脚本会更加简洁和健壮。
编辑:如果其中一个假设有一个 forall 怎么办?
Goal forall
(a b c : bool)
(p: bool -> Prop)
(H1: forall x, p x -> a = b)
(H2: p c),
negb a = negb b.
Proof.
intros.
apply H1 in H2. subst. reflexivity.
Qed
【问题讨论】:
标签: automation coq