小编Ant*_*erM的帖子

选择要重写的子术语的惯用方式

假设我们有以下形式的结论:a + b + c + d + e
我们还有一个引理:plus_assoc : forall n m p : nat, n + (m + p) = n + m + p

将术语任意“插入一对括号”的惯用方法是什么?也就是说,如果有多个可用位置,我们如何轻松地选择重写位置。

我最终要做的事情如下:

replace (a + b + c + d + e)
with (a + b + c + (d + e))
by now rewrite <- ?plus_assoc
Run Code Online (Sandbox Code Playgroud)

尽管此公式确实说明了我要执行的操作,但是对于比“ ab c ...”更复杂的公式而言,它变得非常漫长。

coq

6
推荐指数
1
解决办法
478
查看次数

为什么不能对结论中使用的术语进行归纳?

假设以下特定场景.

我们有一个平等的定义:

Inductive eqwal {A : Type} (x : A) : A -> Prop :=
    eqw_refl : eqwal x x.
Run Code Online (Sandbox Code Playgroud)

和peano nats:

Inductive nawt : Prop :=
    | zewro : nawt
    | sawc  : nawt -> nawt.
Run Code Online (Sandbox Code Playgroud)

我们在nat上定义了加法:

Fixpoint plaws (m n : nawt) : nawt :=
    match m with
      | zewro => n
      | sawc m' => sawc (plaws m' n)
    end.
Run Code Online (Sandbox Code Playgroud)

现在我们想证明零从正确的wrt中立.总结:

Theorem neutral_r : forall n : nawt, eqwal (plaws n zewro) n.
Run Code Online (Sandbox Code Playgroud)

可悲的是,以下证明文件的最后一行说" 错误:n用于结论. ".

Proof. …
Run Code Online (Sandbox Code Playgroud)

coq

3
推荐指数
1
解决办法
216
查看次数

标签 统计

coq ×2