(* Another characterization of R* *)
(* Smallest reflexive P containing R o R* *)

Definition Rstar' (x y : A) :=
  forall P : A -> A -> Prop,
  P x x -> (forall u : A, R x u -> Rstar u y -> P x y) -> P x y.

(* Specifications: *)
Theorem Rstar'_reflexive : forall x : A, Rstar' x x.
Theorem Rstar'_R : forall x y z : A, R x z -> Rstar z y -> Rstar' x y.
Theorem Rstar'_Rstar : forall x y : A, Rstar' x y -> Rstar x y.
Theorem Rstar_Rstar' : forall x y : A, Rstar x y -> Rstar' x y.
Lemma Rstar_inv : forall x y : A, Rstar x y -> x = y \/ ex2 (fun z : A => R x z) (fun z : A => Rstar z y).