Coq 引入先前证明的定理作为假设

Coq 引入先前证明的定理作为假设,coq,Coq,假设我已经在coq中证明了一些定理,然后我想把它作为一个假设引入另一个定理的证明中。有没有一种简洁的方法可以做到这一点 当我想做一些类似于案例证明的事情时,我通常需要这样做。我发现这样做的一种方法是断言定理的陈述,然后立即证明它,但这似乎有点麻烦。例如,我倾向于写以下内容: Require Import Arith.EqNat. Definition Decide P := P \/ ~P. Theorem decide_eq_nat: forall x y: nat, Decide (x

假设我已经在coq中证明了一些定理,然后我想把它作为一个假设引入另一个定理的证明中。有没有一种简洁的方法可以做到这一点

当我想做一些类似于案例证明的事情时,我通常需要这样做。我发现这样做的一种方法是断言定理的陈述,然后立即证明它,但这似乎有点麻烦。例如,我倾向于写以下内容:

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)。