Library rt.util.fixedpoint
Require Import
rt.util.tactics
rt.util.induction.
Section FixedPoint.
Lemma iter_fix T (F : T → T) x k n :
iter k F x = iter k.+1 F x →
k ≤ n →
iter n F x = iter n.+1 F x.
Lemma fun_mon_iter_mon :
∀ (f: nat → nat) x0 x1 x2,
x1 ≤ x2 →
f x0 ≥ x0 →
(∀ x1 x2, x1 ≤ x2 → f x1 ≤ f x2) →
iter x1 f x0 ≤ iter x2 f x0.
Lemma fun_mon_iter_mon_helper :
∀ T (f: T → T) (le: rel T) x0 x1,
reflexive le →
transitive le →
(∀ x2, le x0 (iter x2 f x0)) →
(∀ x1 x2, le x0 x1 → le x1 x2 → le (f x1) (f x2)) →
le (iter x1 f x0) (iter x1.+1 f x0).
Lemma fun_mon_iter_mon_generic :
∀ T (f: T → T) (le: rel T) x0 x1 x2,
reflexive le →
transitive le →
x1 ≤ x2 →
(∀ x1 x2, le x0 x1 → le x1 x2 → le (f x1) (f x2)) →
(∀ x2 : nat, le x0 (iter x2 f x0)) →
le (iter x1 f x0) (iter x2 f x0).
End FixedPoint.
Section FixedPoint.
Lemma iter_fix T (F : T → T) x k n :
iter k F x = iter k.+1 F x →
k ≤ n →
iter n F x = iter n.+1 F x.
Lemma fun_mon_iter_mon :
∀ (f: nat → nat) x0 x1 x2,
x1 ≤ x2 →
f x0 ≥ x0 →
(∀ x1 x2, x1 ≤ x2 → f x1 ≤ f x2) →
iter x1 f x0 ≤ iter x2 f x0.
Lemma fun_mon_iter_mon_helper :
∀ T (f: T → T) (le: rel T) x0 x1,
reflexive le →
transitive le →
(∀ x2, le x0 (iter x2 f x0)) →
(∀ x1 x2, le x0 x1 → le x1 x2 → le (f x1) (f x2)) →
le (iter x1 f x0) (iter x1.+1 f x0).
Lemma fun_mon_iter_mon_generic :
∀ T (f: T → T) (le: rel T) x0 x1 x2,
reflexive le →
transitive le →
x1 ≤ x2 →
(∀ x1 x2, le x0 x1 → le x1 x2 → le (f x1) (f x2)) →
(∀ x2 : nat, le x0 (iter x2 f x0)) →
le (iter x1 f x0) (iter x2 f x0).
End FixedPoint.