(***********************************************************************) (* v * The Coq Proof Assistant / The Coq Development Team *) (* (x,y:A)(clos_trans A R1 y x)->(z:A)(R2 z y) ->(EX y':A | (R2 y' x) & (clos_trans A R1 z y')). Proof. Induction 2;Intros. Elim H with y0 x0 z ;Auto with sets;Intros. Exists x1;Auto with sets. Elim H2 with z0 ;Auto with sets;Intros. Elim H4 with x1 ;Auto with sets;Intros. Exists x2;Auto with sets. Apply t_trans with x1 ;Auto with sets. Qed. Lemma Acc_union: (commut A R1 R2)->((x:A)(Acc A R2 x)->(Acc A R1 x)) ->(a:A)(Acc A R2 a)->(Acc A Union a). Proof. Induction 3. Intros. Apply Acc_intro;Intros. Elim H4;Intros;Auto with sets. Cut (clos_trans A R1 y x);Auto with sets. ElimType (Acc A (clos_trans A R1) y);Intros. Apply Acc_intro;Intros. Elim H9;Intros. Apply H7;Auto with sets. Apply t_trans with x0 ;Auto with sets. Elim strip_commut with x x0 y0 ;Auto with sets;Intros. Apply Acc_inv_trans with x1 ;Auto with sets. Unfold union . Elim H12;Auto with sets;Intros. Apply t_trans with y1 ;Auto with sets. Apply (Acc_clos_trans A). Apply Acc_inv with x ;Auto with sets. Apply H0. Apply Acc_intro;Auto with sets. Qed. Theorem wf_union: (commut A R1 R2)->(well_founded A R1)->(well_founded A R2) ->(well_founded A Union). Proof. Unfold well_founded . Intros. Apply Acc_union;Auto with sets. Qed. End WfUnion.