在 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) 0
到 add n (S 0)
.
反而减少了
add (S n) 0
到 add n 1
我怀疑simpl
命令只要能执行就执行多个步骤
我的问题:有没有一个命令可以减少一步,减少
add (S n) 0 = S n
到
add n (S 0) = S n
?
S 0
和1
是相同的表达式。
"Same" 不仅意味着 S 0 = 1
成立,而且 coq 的系统无法区分它们。相比之下,1 + 0
和 1
不同,而 1 + 0 = 1
成立。
0
是 O
的符号,1
是 S O
的符号。
所以 S 0
和 1
都表示相同的表达式 S O
.
如果您开始证明 S 0 = 1
,您将立即看到目标是 1 = 1
,或者如果您禁用 Unset Printing Notations
的符号,则 eq (S O) (S O)
。
我对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) 0
到 add n (S 0)
.
反而减少了
add (S n) 0
到 add n 1
我怀疑simpl
命令只要能执行就执行多个步骤
我的问题:有没有一个命令可以减少一步,减少
add (S n) 0 = S n
到
add n (S 0) = S n
?
S 0
和1
是相同的表达式。
"Same" 不仅意味着 S 0 = 1
成立,而且 coq 的系统无法区分它们。相比之下,1 + 0
和 1
不同,而 1 + 0 = 1
成立。
0
是 O
的符号,1
是 S O
的符号。
所以 S 0
和 1
都表示相同的表达式 S O
.
如果您开始证明 S 0 = 1
,您将立即看到目标是 1 = 1
,或者如果您禁用 Unset Printing Notations
的符号,则 eq (S O) (S O)
。