重写Coq中的假设,保持暗示

时间:2017-11-27 21:58:35

标签: coq coq-tactic

我正在做一个Coq证明。我有P -> Q作为假设,(P -> Q) -> (~Q -> ~P)作为引理。如何将假设转换为~Q -> ~P

当我尝试apply时,我只会产生新的子目标,这没有帮助。

换句话说,我希望从:

开始
P : Prop
Q : Prop
H : P -> Q

并以

结束
P : Prop
Q : Prop
H : ~Q -> ~P

给出上面的引理 - 即(P -> Q) -> (~Q -> ~P)

1 个答案:

答案 0 :(得分:1)

如果我想将H 转换为,我会选择@ ejgallego的答案,因为SSReflect现在(从Coq 8.7.0开始)是标准Coq的一部分,但是这里是另一种选择:

Ltac dumb_apply_in f H := generalize (f H); clear H; intros H.

Tactic Notation "dumb" "apply" constr(f) "in" hyp(H) := dumb_apply_in f H.

一个简单的测试:

Variable (P Q : Prop).
Axiom u : (P -> Q) -> (~Q -> ~P).

Lemma test (H : P -> Q) : False.
Proof. dumb apply u in H. Abort.