Section WF_ROOT.
(* application au cas qui nous preoccupe, la relation est bien fondee car il existe une fonction f de E dans nat strictement croissante, la relation est decidable en ce sens qu'il existe une preuve qu'un element a ou non des antecedents et un algorithme permettant de choisir un antecedent quand il en a, il est alors possible de definir par point fixe une fonction root qui a tout element associe l'antecedent sans parent accessible par l'algorithme *)
Variable E : Set.
Variable f : E -> nat.
Variable R : E -> E -> Prop.
Hypothesis R_dec : forall x : E, {y : E | R y x} + {(forall y : E, ~ R y x)}.
Hypothesis strict : forall x y : E, R x y -> f x < f y.
Definition F (x : E) (f : forall y : E, R y x -> E) :=
match R_dec x with
| inleft z => let (y0, r0) := z in f y0 r0
| inright _ => x
end.
Definition root := Fix E (fun _ : E => E) R wf_R F.
Definition root_eq := fix_eq E (fun _ : E => E) R wf_R F F_eq.

Lemma prop_root :
forall (P : E -> Prop) (x : E),
P x -> (forall y z : E, P y -> R z y -> P z) -> P (root x).