Coq证明战术

时间:2015-11-16 14:50:02

标签: coq coq-tactic

我是Coq证明系统的初学者(大约4天)。我努力了,但我无法证明以下事项。

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

据我所知,我们需要证明+的生物性,以便我们可以某种方式使用f(b) = f(c) -> b = c。我该怎么做?

2 个答案:

答案 0 :(得分:3)

使用 SearchAbout plus SearchPattern(_ + _ = _ + _ - &gt; _),您可以查看有关 + 的可用引理。但是如果你没有导入正确的模块,这可能是无用的。我通常做的是看看在线文档。 以下是plus的文档,您可以特别关注< code> plus_reg_l 和 plus_reg_r

&#xA;

答案 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。最后,归纳假设可用于完成证明。