Coq 即使对称,右侧也未简化
在开始讨论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! *) 事实上,这是书中的一个练习
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
。有什么区别?