# Library GeoCoq.Elements.OriginalProofs.lemma_parallelflip

Require Export GeoCoq.Elements.OriginalProofs.lemma_collinearorder.

Require Export GeoCoq.Elements.OriginalProofs.lemma_inequalitysymmetric.

Section Euclid.

Context `{Ax:euclidean_neutral}.

Lemma lemma_parallelflip :

∀ A B C D,

Par A B C D →

Par B A C D ∧ Par A B D C ∧ Par B A D C.

Proof.

intros.

let Tf:=fresh in

assert (Tf:∃ 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.

assert (Col B A a) by (forward_using lemma_collinearorder).

assert (Col B A b) by (forward_using lemma_collinearorder).

assert (Col D C c) by (forward_using lemma_collinearorder).

assert (Col D C d) by (forward_using lemma_collinearorder).

assert (neq B A) by (conclude lemma_inequalitysymmetric).

assert (neq D C) by (conclude lemma_inequalitysymmetric).

assert (BetS d M a) by (conclude axiom_betweennesssymmetry).

assert (BetS b M c) by (conclude axiom_betweennesssymmetry).

assert (neq d c) by (conclude lemma_inequalitysymmetric).

assert (neq b a) by (conclude lemma_inequalitysymmetric).

assert (¬ Meet A B D C).

{

intro.

let Tf:=fresh in

assert (Tf:∃ P, (neq A B ∧ neq D C ∧ Col A B P ∧ Col D C P)) by (conclude_def Meet );destruct Tf as [P];spliter.

assert (Col C D P) by (forward_using lemma_collinearorder).

assert (Meet A B C D) by (conclude_def Meet ).

contradict.

}

assert (¬ Meet B A C D).

{

intro.

let Tf:=fresh in

assert (Tf:∃ P, (neq B A ∧ neq C D ∧ Col B A P ∧ Col C D P)) by (conclude_def Meet );destruct Tf as [P];spliter.

assert (Col A B P) by (forward_using lemma_collinearorder).

assert (Meet A B C D) by (conclude_def Meet ).

contradict.

}

assert (¬ Meet B A D C).

{

intro.

let Tf:=fresh in

assert (Tf:∃ P, (neq B A ∧ neq D C ∧ Col B A P ∧ Col D C P)) by (conclude_def Meet );destruct Tf as [P];spliter.

assert (Col A B P) by (forward_using lemma_collinearorder).

assert (Col C D P) by (forward_using lemma_collinearorder).

assert (Meet A B C D) by (conclude_def Meet ).

contradict.

}

assert (Par B A C D) by (conclude_def Par ).

assert (Par A B D C) by (conclude_def Par ).

assert (Par B A D C) by (conclude_def Par ).

close.

Qed.

End Euclid.

Require Export GeoCoq.Elements.OriginalProofs.lemma_inequalitysymmetric.

Section Euclid.

Context `{Ax:euclidean_neutral}.

Lemma lemma_parallelflip :

∀ A B C D,

Par A B C D →

Par B A C D ∧ Par A B D C ∧ Par B A D C.

Proof.

intros.

let Tf:=fresh in

assert (Tf:∃ 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.

assert (Col B A a) by (forward_using lemma_collinearorder).

assert (Col B A b) by (forward_using lemma_collinearorder).

assert (Col D C c) by (forward_using lemma_collinearorder).

assert (Col D C d) by (forward_using lemma_collinearorder).

assert (neq B A) by (conclude lemma_inequalitysymmetric).

assert (neq D C) by (conclude lemma_inequalitysymmetric).

assert (BetS d M a) by (conclude axiom_betweennesssymmetry).

assert (BetS b M c) by (conclude axiom_betweennesssymmetry).

assert (neq d c) by (conclude lemma_inequalitysymmetric).

assert (neq b a) by (conclude lemma_inequalitysymmetric).

assert (¬ Meet A B D C).

{

intro.

let Tf:=fresh in

assert (Tf:∃ P, (neq A B ∧ neq D C ∧ Col A B P ∧ Col D C P)) by (conclude_def Meet );destruct Tf as [P];spliter.

assert (Col C D P) by (forward_using lemma_collinearorder).

assert (Meet A B C D) by (conclude_def Meet ).

contradict.

}

assert (¬ Meet B A C D).

{

intro.

let Tf:=fresh in

assert (Tf:∃ P, (neq B A ∧ neq C D ∧ Col B A P ∧ Col C D P)) by (conclude_def Meet );destruct Tf as [P];spliter.

assert (Col A B P) by (forward_using lemma_collinearorder).

assert (Meet A B C D) by (conclude_def Meet ).

contradict.

}

assert (¬ Meet B A D C).

{

intro.

let Tf:=fresh in

assert (Tf:∃ P, (neq B A ∧ neq D C ∧ Col B A P ∧ Col D C P)) by (conclude_def Meet );destruct Tf as [P];spliter.

assert (Col A B P) by (forward_using lemma_collinearorder).

assert (Col C D P) by (forward_using lemma_collinearorder).

assert (Meet A B C D) by (conclude_def Meet ).

contradict.

}

assert (Par B A C D) by (conclude_def Par ).

assert (Par A B D C) by (conclude_def Par ).

assert (Par B A D C) by (conclude_def Par ).

close.

Qed.

End Euclid.