一种简化的方法是使用一个相当无聊的引理
Lemma add_zero_r : forall n, n + 0 = n.
Proof.
intros n. induction n. reflexivity.
simpl. rewrite IHn. reflexivity.
Qed.
然后用它来重写你的目标:
Theorem add_increase: (forall a b: nat, a > 0 -> a + b > b).
Proof.
intros A.
intros B.
intros H.
case B.
rewrite (add_zero_r A).
assumption.
为了完成另一个证明案例,我使用了一个小引理和一种策略,可以简化证明自然不等式的任务的任务。
首先,我已经导入了Omega 库。
Require Import Omega.
证明另一个无聊的事实。
Lemma add_succ_r : forall n m, n + (S m) = S (n + m).
Proof.
intros n m. induction n. reflexivity.
simpl. rewrite IHn. reflexivity.
Qed.
回到add_increase prove,我们有以下目标:
A, B : nat
H : A > 0
============================
forall n : nat, A + S n > S n
可以通过以下方式解决:
intros C.
rewrite (add_succ_r A C).
omega.
再一次,我使用了之前已证明的引理来重写目标。 omega 策略非常有用,因为它是对所谓的quantifier free Presburger arithmetic 的完整决策过程,并且根据您的上下文,它可以解决目标automagically。
这是您证明的完整解决方案:
Require Import Omega.
Lemma add_zero_r : forall n, n + 0 = n.
Proof.
intros n. induction n. reflexivity.
simpl. rewrite IHn. reflexivity.
Qed.
Lemma add_succ_r : forall n m, n + (S m) = S (n + m).
Proof.
intros n m. induction n. reflexivity.
simpl. rewrite IHn. reflexivity.
Qed.
Theorem add_increase: (forall a b: nat, a > 0 -> a + b > b).
Proof.
intros A.
intros B.
intros H.
case B.
rewrite (add_zero_r A).
assumption.
intros C.
rewrite (add_succ_r A C).
omega.
Qed.