我如何证明 `add_le_cases` (`forall n m p q, n + m <= p + q -> n <= p \/ m <= q`)

How can I prove `add_le_cases` (`forall n m p q, n + m <= p + q -> n <= p \/ m <= q`)

我正在尝试完成 Logical Foundations' chapter on inductive propositions 中的 le_exercises 系列练习。

本级数主要基于归纳关系le,定义如下:

Inductive le : nat -> nat -> Prop :=
  | le_n (n : nat)                : le n n
  | le_S (n m : nat) (H : le n m) : le n (S m).

Notation "n <= m" := (le n m).

我坚持的特定定理如下:

Theorem add_le_cases : forall n m p q,
  n + m <= p + q -> n <= p \/ m <= q.

到目前为止,我设法证明的这些系列中的先前定理是:

Lemma le_trans : ∀ m n o, m ≤ n → n ≤ o → m ≤ o.

Theorem O_le_n : ∀ n, 0 ≤ n.

Theorem n_le_m__Sn_le_Sm : ∀ n m, n ≤ m → S n ≤ S m.

Theorem Sn_le_Sm__n_le_m : ∀ n m, S n ≤ S m → n ≤ m.

Theorem lt_ge_cases : ∀ n m, n < m ∨ n ≥ m.

Theorem le_plus_l : ∀ a b, a ≤ a + b.

Theorem plus_le : ∀ n1 n2 m, n1 + n2 ≤ m → n1 ≤ m ∧ n2 ≤ m.

这本书给出了一个提示,指出定理 add_le_cases 可能“更容易通过对 n 的归纳法来证明”,我尝试了各种方法,但似乎无处可去。

Theorem add_le_cases : forall n m p q,
  n + m <= p + q -> n <= p \/ m <= q.
Proof.
  intros n. induction n.
  - intros. left. apply O_le_n.
  - intros. inversion H.
    + destruct m.
      * right. apply O_le_n.
      *  (* stuck *)

我考虑过使用 plus_le 定理,但似乎无法从中得到任何有用的信息。我觉得我的理解中肯定缺少一些关键的东西,但你不能知道你不知道什么。

好吧,我不会做 inversion Hdestruct m。我会 destruct p 并在解决 O 案例后,然后稍微按摩 H 以便能够应用归纳假设。