Require Export GeoCoq.Elements.OriginalProofs.lemma_samenotopposite.
Require Export GeoCoq.Elements.OriginalProofs.lemma_crisscross.
Require Export GeoCoq.Elements.OriginalProofs.proposition_33.

Section Euclid.

Context `{Ax:euclidean_euclidean}.

Lemma proposition_33B : 
   forall A B C D, 
   Par A B C D -> Cong A B C D -> OS A C B D ->
   Par A C B D /\ Cong A C B D.
Proof.
(* Goal: forall (A B C D : @Point Ax0) (_ : @Par Ax0 A B C D) (_ : @Cong Ax0 A B C D) (_ : @OS Ax0 A C B D), and (@Par Ax0 A C B D) (@Cong Ax0 A C B D) *)
intros.
(* Goal: and (@Par Ax0 A C B D) (@Cong Ax0 A C B D) *)
assert (~ CR A C B D).
(* Goal: not (@CR Ax0 A C B D) *)
(* Goal: and (@Par Ax0 A C B D) (@Cong Ax0 A C B D) *)
 {
(* Goal: not (@CR Ax0 A C B D) *)
 intro.
 let Tf:=fresh in
 assert (Tf:exists M, (BetS A M C /\ BetS B M D)) by (conclude_def CR );destruct Tf as [M];spliter.
(* Goal: False *)
 assert (Col B M D) by (conclude_def Col ).
(* Goal: False *)
 assert (Col B D M) by (forward_using lemma_collinearorder).
(* Goal: False *)
 assert (nCol A B D) by (forward_using lemma_parallelNC).
(* Goal: False *)
 assert (nCol B D A) by (forward_using lemma_NCorder).
(* Goal: False *)
 assert (TS A B D C) by (conclude_def TS ).
(* Goal: False *)
 assert (~ TS A B D C) by (conclude lemma_samenotopposite).
(* Goal: False *)
 contradict.
 }
(* Goal: and (@Par Ax0 A C B D) (@Cong Ax0 A C B D) *)
assert (CR A D C B) by (conclude lemma_crisscross).
let Tf:=fresh in
assert (Tf:exists m, (BetS A m D /\ BetS C m B)) by (conclude_def CR );destruct Tf as [m];spliter.
(* Goal: and (@Par Ax0 A C B D) (@Cong Ax0 A C B D) *)
assert (BetS B m C) by (conclude axiom_betweennesssymmetry).
(* Goal: and (@Par Ax0 A C B D) (@Cong Ax0 A C B D) *)
assert ((Par A C B D /\ Cong A C B D)) by (conclude proposition_33).
(* Goal: and (@Par Ax0 A C B D) (@Cong Ax0 A C B D) *)
close.
Qed.

End Euclid.


