我是Coq证明系统的初学者(大约4天)。我努力了,但我无法证明以下事项。
forall a b c : nat, S (S (a + b)) = S (S (a + c)) -> b = c.
据我所知,我们需要证明+的生物性,以便我们可以某种方式使用f(b) = f(c) -> b = c
。我该怎么做?
答案 0 :(得分:3)
使用 SearchAbout plus
或 SearchPattern(_ + _ = _ + _ - > _)
,您可以查看有关 +
的可用引理。但是如果你没有导入正确的模块,这可能是无用的。我通常做的是看看在线文档。 以下是plus的文档,您可以特别关注< code> plus_reg_l 和 plus_reg_r
。
答案 1 :(得分:2)
正如Vinz的回答所指出的,你可以直接在Coq标准库中找到关于plus
的生物学定理。您也可以使用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)
然后使用其bijectivity删除构造函数S
。最后,归纳假设可用于完成证明。