Coq 即使对称,右侧也未简化

Coq 即使对称,右侧也未简化,coq,coq-tactic,Coq,Coq Tactic,在开始讨论Coq和“软件基础”问题时,我遇到了以下示例: Theorem plus_O_n : forall n : nat, 0 + n = n. Proof. intros n. simpl. reflexivity. Qed. 事实证明这很好。然而,当我尝试右边的等式时 Theorem plus_n_O : forall n, n = n + 0. Proof. intros n. simpl. (* Doesn't do anything! *) 事实上,这是书中的一个练习

在开始讨论Coq和“软件基础”问题时,我遇到了以下示例:

Theorem plus_O_n : forall n : nat, 0 + n = n.
Proof.
  intros n. simpl. reflexivity.  Qed.
事实证明这很好。然而,当我尝试右边的等式时

Theorem plus_n_O : forall n, n = n + 0.
Proof.
  intros n. simpl. (* Doesn't do anything! *)
事实上,这是书中的一个练习,为什么在这种情况下,
siml
不起作用。我试着变得聪明,所以我用
symmetry
逆转了这个等式

Theorem plus_n_O : forall n, n = n + 0.
Proof.
  intros n. simpl. symmetry. simpl. (* Doesn't do anything still!!! *)

但仍然没有布埃诺。这特别奇怪,因为
symmetry
的工作方式与预期的一样,并且将我的目标变成了与
相同的形式,再加上

仔细看,
symmetry
不会让你达到与以前相同的目标。然后看看
plus
是如何定义的,然后你会发现你的目标确实无法简化,你需要执行额外的步骤。我的加法是否还没有定义交换属性?看起来
0+n
的处理方式不同于
n+0
实际上
0+n
的处理方式不同于
n+0
。“+”是一个函数,您可以看到它的“规则”发出
Print plus
。然后,你应该在SF中找到你的答案。你最好从nat定义的开始就开始。它帮助你理解代数不过是一系列规则的逻辑结果。要完成验证,您需要使用特定的验证技术。尝试执行评估员的工作,手动计算
加0 n
,然后执行
加0
。有什么不同?仔细看看,
对称性
不会让你达到与以前相同的目标。然后看看
plus
是如何定义的,然后你会发现你的目标确实无法简化,你需要执行额外的步骤。我的加法是否还没有定义交换属性?看起来
0+n
的处理方式不同于
n+0
实际上
0+n
的处理方式不同于
n+0
。“+”是一个函数,您可以看到它的“规则”发出
Print plus
。然后,你应该在SF中找到你的答案。你最好从nat定义的开始就开始。它帮助你理解代数不过是一系列规则的逻辑结果。要完成验证,您需要使用特定的验证技术。尝试执行评估员的工作,手动计算
加0 n
,然后执行
加0
。有什么区别?