在 Coq 中如何使 `simpl` 命令只执行一步缩减?

How in Coq to make `simpl` command perform only one step reduction?

我对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

?

S 01是相同的表达式。

"Same" 不仅意味着 S 0 = 1 成立,而且 coq 的系统无法区分它们。相比之下,1 + 01 不同,而 1 + 0 = 1 成立。

0O 的符号,1S O 的符号。 所以 S 01 都表示相同的表达式 S O.

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