(* Contribution to the Coq Library   V6.3 (July 1999)                    *)
(****************************************************************************)
(* This contribution was updated for Coq V5.10 by the COQ workgroup.        *)
(* January 1995                                                             *)
(****************************************************************************)
(*                           Relations_2_facts.v                            *)
(****************************************************************************)
auto.
Qed.
auto.
Qed.
intros U R; red in |- *; intros x y H'; apply Rstar_n with y; auto.
Qed.
intros U R; red in |- *.
intros x y H'; elim H'.
generalize Rstar_contains_R; intro T; red in T; auto.
intros x0 y0 z H'0 H'1 H'2; apply Rstar_n with y0; auto.
Qed.
intros U R; red in |- *.
intros x y z H'; elim H'; auto.
intros x0 y0 z0 H'0 H'1 H'2 H'3; apply Rstar_n with y0; auto.
Qed.
intros U R x y H'; elim H'; auto.
intros x0 y0 z H'0 H'1 H'2; right; exists y0; auto.
Qed.
generalize Rstar_contains_R; intro T; red in T.
intros U R; unfold same_relation, contains in |- *.
split; intros x y H'; elim H'; auto.
generalize Rstar_transitive; intro T1; red in T1.
intros x0 y0 z H'0 H'1 H'2 H'3; apply T1 with y0; auto.
intros x0 y0 z H'0 H'1 H'2; apply Rstar1_n with y0; auto.
Qed.
intros U R H'; red in |- *.
intros x y H'0; elim H'0; auto.
intros x0 y0 z H'1 H'2 H'3.
generalize Rstar_transitive; intro T; red in T.
apply T with y0; auto.
apply Rstar_n with x0; auto.
Qed.
unfold contains in |- *.
intros U R S H' x y H'0; elim H'0; auto.
generalize Rstar_transitive; intro T; red in T.
intros x0 y0 z H'1 H'2 H'3; apply T with y0; auto.
Qed.
intros U R S H'.
apply Sstar_contains_Rstar.
generalize (Rstar_contains_R U S); auto.
Qed.

Theorem RstarRplus_RRstar :
forall (U : Type) (R : Relation U) (x y z : U),
Rstar U R x y -> Rplus U R y z -> exists u : U, R x u /\ Rstar U R u z.