定理plus_n_n_injective,运动

时间:2014-04-16 20:11:08

标签: coq

来自Software Foundations的练习所需的帮助。这是定理:

Theorem plus_n_n_injective : ∀n m,
 n + n = m + m →
 n = m.
Proof.

我最终以n = 0为目标,n + n = 0为假设。如何继续前进?

3 个答案:

答案 0 :(得分:2)

n + n无法进一步简化,因为n是变量,而不是类型构造函数。 正如Ptival所说,你可以通过n公开destruct的所有构造案例。但是在这种情况下使用inversion在我看来有点极端,而不是这个Sf练习的内容。

当被O构造函数替换时,O + O将减少(例如使用simpl)到O,而reflexivity应该可以做到这一点。

当被S构造函数替换时,S foo + bar将始终缩小为S something形状,该形状不能等于O(断言的最简单方法)是使用discriminate),因为它们是两个相同类型的构造函数。

最佳, 诉

答案 1 :(得分:0)

如果您检查ndestruct它),那么它将是0,在这种情况下,目标可以通过反身性证明,或S n'在这种情况下假设与congruence / inversion相矛盾。

答案 2 :(得分:0)

解决这个问题的诀窍可以从length_snoc'的定理中获得。以前在同一章节中显示过。

由于这是本书迄今为止第一次在对n进行归纳后引入一些变量/假设,这对于新手(像我一样)来说可能并不常见。这样,您可以在证明基本情况后,在您的上下文中获得更一般的假设。

如前所述,您将能够通过反身性证明某些目标。其中一些可以通过对您的上下文中的错误假设进行反演来证明(一旦发现它们就会变得简单明了,2 + 2 = 5 -> anything为真的想法会有很长的路要走。)

最后,您将不得不使用先前定义的引理plus_n_Sm和eq_add_S以及对称性来重写您的一个假设,以便能够应用我们之前讨论过的更一般的假设。