Library Cantor.prelude.not_decreasing
Require Import Relations.
Section Sequences.
Variable A : Set.
Variable R : A → A → Prop.
Lemma not_acc : ∀ a b:A, R a b → ¬ Acc R a → ¬ Acc R b.
Proof.
intros a b H H0 H1.
absurd (Acc R a); auto.
generalize a H.
elim H1; auto.
Qed.
Lemma acc_imp : ∀ a b:A, R a b → Acc R b → Acc R a.
Proof.
intros a b H H0.
generalize a H.
elim H0; auto.
Qed.
Hypothesis W : well_founded R.
Hint Resolve W.
Section seq_intro.
Variable seq : nat → A.
Let is_in_seq (x:A) := ∃ i : nat, x = seq i.
Lemma not_decreasing_aux : ¬ (∀ n:nat, R (seq (S n)) (seq n)).
Proof.
unfold not in |- *; intro dec.
cut (∀ a:A, is_in_seq a → ¬ Acc R a).
intro H.
absurd (Acc R (seq 0)).
apply H.
∃ 0; trivial.
apply W.
intro a; pattern a in |- ×.
apply well_founded_ind with A R.
assumption.
intros x Hx H.
elim H.
intros i egi.
cut (R (seq (S i)) (seq i)).
intro H1.
rewrite egi.
apply not_acc with (seq (S i)); auto.
apply Hx.
rewrite egi; auto.
∃ (S i); auto.
auto.
Qed.
End seq_intro.
Theorem not_decreasing :
¬ (∃ seq : nat → A, (∀ i:nat, R (seq (S i)) (seq i))).
Proof.
unfold not in |- *; intro H.
case H; intros s Hs.
absurd (∀ i:nat, R (s (S i)) (s i)); auto.
apply not_decreasing_aux.
Qed.
End Sequences.
