Я занимаюсь доказательством эквивалентности слабой и сильной индукции.
У меня есть такое определение:
Definition strong_induct (nP : nat->Prop) : Prop :=
nP 0 /\
(forall n : nat,
(forall k : nat, k <= n -> nP k) ->
nP (S n))
.
И я хотел доказать следующее и написал:
Lemma n_le_m__Sn_le_Sm : forall n m,
n <= m -> S n <= S m
.
Lemma strong_induct_nP__nP_n__nP_k : forall (nP : nat->Prop)(n : nat),
strong_induct nP -> nP n ->
(forall k, k < n -> nP k)
.
Proof.
intros nP n [Hl Hr].
induction n as [|n' IHn].
- intros H k H'. inversion H'.
- intros H k H'.
inversion H'.
+ destruct n' as [|n''] eqn : En'.
* apply Hl.
* apply Hr.
unfold lt in IHn.
assert(H'' : nP (S n'') -> forall k : nat, k <= n'' -> nP k). {
intros Hx kx Hxx.
apply n_le_m__Sn_le_Sm in Hxx.
apply IHn.
- apply Hx.
- apply Hxx.
}
Однако я не могу продолжать доказательство дальше. Как мне доказать лемму в этой ситуации?
strong_induct nP
всегда верно, независимо отnP
. Таким образом, лемма действительно говоритnP n -> forall k, k < n -> nP k
, что неверно. - person Li-yao Xia   schedule 07.12.2019