Require Export GeoCoq.Elements.OriginalProofs.lemma_collinearorder.

Section Euclid.

Context `{Ax:euclidean_neutral}.

Lemma lemma_parallelNC : 
   forall A B C D, 
   Par A B C D ->
   nCol A B C /\ nCol A C D /\ nCol B C D /\ nCol A B D.
Proof.
(* Goal: forall (A B C D : @Point Ax) (_ : @Par Ax A B C D), and (@nCol Ax A B C) (and (@nCol Ax A C D) (and (@nCol Ax B C D) (@nCol Ax A B D))) *)
intros.
let Tf:=fresh in
assert (Tf:exists M a b c d, (neq A B /\ neq C D /\ Col A B a /\ Col A B b /\ neq a b /\ Col C D c /\ Col C D d /\ neq c d /\ ~ Meet A B C D /\ BetS a M d /\ BetS c M b)) by (conclude_def Par );destruct Tf as [M[a[b[c[d]]]]];spliter.
(* Goal: and (@nCol Ax A B C) (and (@nCol Ax A C D) (and (@nCol Ax B C D) (@nCol Ax A B D))) *)
assert (~ Col A C D).
(* Goal: not (@Col Ax A B D) *)
(* Goal: and (@nCol Ax A B C) (and (@nCol Ax A C D) (and (@nCol Ax B C D) (@nCol Ax A B D))) *)
 {
(* Goal: not (@Col Ax A B D) *)
 intro.
(* Goal: False *)
 assert (Col C D A) by (forward_using lemma_collinearorder).
(* Goal: False *)
 assert (eq A A) by (conclude cn_equalityreflexive).
(* Goal: False *)
 assert (Col A B A) by (conclude_def Col ).
(* Goal: False *)
 assert (Meet A B C D) by (conclude_def Meet ).
(* Goal: False *)
 contradict.
 }
(* Goal: and (@nCol Ax A B C) (and (@nCol Ax A C D) (and (@nCol Ax B C D) (@nCol Ax A B D))) *)
assert (~ Col A B C).
(* Goal: not (@Col Ax A B D) *)
(* Goal: and (@nCol Ax A B C) (and (@nCol Ax A C D) (and (@nCol Ax B C D) (@nCol Ax A B D))) *)
 {
(* Goal: not (@Col Ax A B D) *)
 intro.
(* Goal: False *)
 assert (eq C C) by (conclude cn_equalityreflexive).
(* Goal: False *)
 assert (Col C D C) by (conclude_def Col ).
(* Goal: False *)
 assert (Meet A B C D) by (conclude_def Meet ).
(* Goal: False *)
 contradict.
 }
(* Goal: and (@nCol Ax A B C) (and (@nCol Ax A C D) (and (@nCol Ax B C D) (@nCol Ax A B D))) *)
assert (~ Col B C D).
(* Goal: not (@Col Ax A B D) *)
(* Goal: and (@nCol Ax A B C) (and (@nCol Ax A C D) (and (@nCol Ax B C D) (@nCol Ax A B D))) *)
 {
(* Goal: not (@Col Ax A B D) *)
 intro.
(* Goal: False *)
 assert (Col C D B) by (forward_using lemma_collinearorder).
(* Goal: False *)
 assert (eq B B) by (conclude cn_equalityreflexive).
(* Goal: False *)
 assert (Col A B B) by (conclude_def Col ).
(* Goal: False *)
 assert (Meet A B C D) by (conclude_def Meet ).
(* Goal: False *)
 contradict.
 }
(* Goal: and (@nCol Ax A B C) (and (@nCol Ax A C D) (and (@nCol Ax B C D) (@nCol Ax A B D))) *)
assert (~ Col A B D).
(* Goal: not (@Col Ax A B D) *)
(* Goal: and (@nCol Ax A B C) (and (@nCol Ax A C D) (and (@nCol Ax B C D) (@nCol Ax A B D))) *)
 {
(* Goal: not (@Col Ax A B D) *)
 intro.
(* Goal: False *)
 assert (eq D D) by (conclude cn_equalityreflexive).
(* Goal: False *)
 assert (Col C D D) by (conclude_def Col ).
(* Goal: False *)
 assert (Meet A B C D) by (conclude_def Meet ).
(* Goal: False *)
 contradict.
 }
(* Goal: and (@nCol Ax A B C) (and (@nCol Ax A C D) (and (@nCol Ax B C D) (@nCol Ax A B D))) *)
close.
Qed.

End Euclid.


