4

我是 Coq 证明系统的初学者(大约 4 天)。我已经很努力了,但我无法证明以下内容。

forall a b c : nat, S (S (a + b)) = S (S (a + c)) -> b = c.

据我所知,我们需要证明 + 的双射性,这样我们才能以某种方式使用f(b) = f(c) -> b = c. 我该怎么做呢 ?

4

2 回答 2

3

使用SearchAbout plus或者SearchPattern (_ + _ = _ + _ -> _)您可以检查关于+. 但是如果你没有导入正确的模块,那可能就没用了。我通常做的是去看在线文档。这是 plus 的文档,您可以对 and 有一个特别的plus_reg_l了解plus_reg_r

于 2015-11-16T15:21:07.610 回答
3

正如 Vinz 的回答所指出的,您可以plus直接在 Coq 标准库中找到关于双射性定理。您也可以使用原始策略和数学归纳法直接证明它a,如下所示。

Theorem plus_l_bij: forall a b c : nat, a + b = a + c -> b = c.
Proof.
induction a as [|a'].
  intros b c H. apply H.
  intros b c H. simpl plus in H. inversion H. apply IHa' in H1. apply H1.
Qed.

之后induction a,基本情况a = 0是微不足道的。

第二种情况的证明a = S a',重新排列

S a' + b = S a' + c 

S (a' + b) = S (a' + c)

然后S使用其双射性删除构造函数。最后,可以应用归纳假设来完成证明。

于 2015-11-25T20:55:27.393 回答