Coq 引入先前证明的定理作为假设
假设我已经在coq中证明了一些定理,然后我想把它作为一个假设引入另一个定理的证明中。有没有一种简洁的方法可以做到这一点 当我想做一些类似于案例证明的事情时,我通常需要这样做。我发现这样做的一种方法是断言定理的陈述,然后立即证明它,但这似乎有点麻烦。例如,我倾向于写以下内容:Coq 引入先前证明的定理作为假设,coq,Coq,假设我已经在coq中证明了一些定理,然后我想把它作为一个假设引入另一个定理的证明中。有没有一种简洁的方法可以做到这一点 当我想做一些类似于案例证明的事情时,我通常需要这样做。我发现这样做的一种方法是断言定理的陈述,然后立即证明它,但这似乎有点麻烦。例如,我倾向于写以下内容: Require Import Arith.EqNat. Definition Decide P := P \/ ~P. Theorem decide_eq_nat: forall x y: nat, Decide (x
Require Import Arith.EqNat.
Definition Decide P := P \/ ~P.
Theorem decide_eq_nat: forall x y: nat, Decide (x = y).
Proof.
intros x y. remember (beq_nat x y) as b eqn:E. destruct b.
left. apply beq_nat_eq. assumption.
right. apply beq_nat_false. symmetry. assumption. Qed.
Theorem silly: forall x y: nat, x = y \/ x <> y.
Proof.
intros x y.
assert (Decide (x = y)) as [E|N] by apply decide_eq_nat.
left. assumption.
right. assumption. Qed.
需要导入Arith.EqNat。
定义决定P:=P\/~P。
定理decision_eq_nat:forall xy:nat,decise(x=y)。
证明。
简介xy。记住(beq_nat x y)作为b等式:E.析构函数b。
左边应用beq_nat_等式假设。
正确的。应用beq_nat_false。对称性假设。Qed。
愚蠢的定理:对于所有xy:nat,x=y\/xy。
证明。
简介xy。
通过apply decise eq_nat将(decise(x=y))断言为[E | N]。
左边假设。
正确的。假设。Qed。
但是有没有一种方法比必须通过应用[定理]来键入整个
断言[语句]更简单?你可以使用姿势证明定理的名称作为X。
,其中X
是你想要介绍的名称
如果要立即销毁它,还可以:destruct(decision\u eq\u nat x y)。