【问题标题】:How in Coq to make `simpl` command perform only one step reduction?在 Coq 中如何使 `simpl` 命令只执行一步缩减?
【发布时间】:2020-06-12 09:36:57
【问题描述】:

我对add的定义如下:

Fixpoint add n m :=
  match n with
  | 0 => m
  | S p => add p (S m)
end.

在文件的后面,我试图证明以下目标: add (S n) 0 = S n

我调用simpl 命令期望它减少

add (S n) 0add n (S 0)

反而减少了

add (S n) 0add n 1

我怀疑simpl 命令只要能执行就执行多个步骤。

我的问题:是否有一个命令可以减少一步,减少

add (S n) 0 = S n

add n (S 0) = S n

?

【问题讨论】:

    标签: logic coq induction


    【解决方案1】:

    S 01 是相同的表达式。

    “相同”不仅意味着S 0 = 1 成立,而且coq 的系统无法区分它们。相比之下,1 + 011 + 0 = 1 成立时并不相同。

    0O 的符号,1S O 的符号。 所以S 01都代表同一个表达式S O

    如果您开始证明S 0 = 1,您将立即看到目标是1 = 1,如果您禁用Unset Printing Notations 的Notations,您将立即看到目标是eq (S O) (S O)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      相关资源
      最近更新 更多