Coq 将策略应用于前提而不是目标
如果目标状态如下所示:Coq 将策略应用于前提而不是目标,coq,Coq,如果目标状态如下所示: a : Prop b : Prop H1 : a H2 : b -> c ============================ c 然后我可以使用apply H2策略将其转换为以下状态: a : Prop b : Prop H1 : a H2 : b -> c ============================ b 现在,我想做同样的事情,只是为了假设: a : Prop b : Pro
a : Prop
b : Prop
H1 : a
H2 : b -> c
============================
c
然后我可以使用apply H2
策略将其转换为以下状态:
a : Prop
b : Prop
H1 : a
H2 : b -> c
============================
b
现在,我想做同样的事情,只是为了假设:
a : Prop
b : Prop
H1 : a
H2 : b -> a
============================
b
我想引入一个新的假设(或者简化现有的假设),这样我就有了一个新的H3:b
。可能吗
我尝试了各种不同的apply
,但一切都导致了某种错误。达到上述状态的代码:
Lemma test : forall {a b : Prop},
a /\ (b -> a) -> b.
Proof.
intros a b.
intros [H1 H2].
Abort.
这是不可能的,因为你的
测试引理不成立。例如,将a
设为True
,将b
设为False
。两个前提(a
和b->a
)都成立,但b
不成立
但是,如果您稍微更改一下结果声明,这将起作用:
Lemma test : forall a b : Prop, a /\ (a -> b) -> b.
Proof. intros [H1 H2]. apply H2 in H1. exact H1. Qed.
这是不可能的,因为你的测试引理不成立。例如,将a
设为True
,将b
设为False
。两个前提(a
和b->a
)都成立,但b
不成立
但是,如果您稍微更改一下结果声明,这将起作用:
Lemma test : forall a b : Prop, a /\ (a -> b) -> b.
Proof. intros [H1 H2]. apply H2 in H1. exact H1. Qed.