Library GeoCoq.Elements.OriginalProofs.lemma_rightreflection

Require Export GeoCoq.Elements.OriginalProofs.lemma_pointreflectionisometry.

Section Euclid.

Context `{Ax:euclidean_neutral}.

Lemma lemma_rightreflection :
    A B C E a b c,
   Per A B C Midpoint A E a Midpoint B E b Midpoint C E c
   Per a b c.
Proof.
intros.
let Tf:=fresh in
assert (Tf: D, (BetS A B D Cong A B D B Cong A C D C neq B C)) by (conclude_def Per );destruct Tf as [D];spliter.
assert (Cong A B a b) by (conclude lemma_pointreflectionisometry).
assert (Cong A C a c) by (conclude lemma_pointreflectionisometry).
assert (Cong B C b c) by (conclude lemma_pointreflectionisometry).
assert (Per a b c).
by cases on (eq D E neq D E).
{
 assert (Cong B E E b) by (conclude_def Midpoint ).
 assert (Cong B D D b) by (conclude cn_equalitysub).
 assert (Cong B D b D) by (forward_using lemma_congruenceflip).
 assert (Cong C E E c) by (conclude_def Midpoint ).
 assert (Cong C D D c) by (conclude cn_equalitysub).
 assert (Cong D C D c) by (forward_using lemma_congruenceflip).
 assert (Cong A C D c) by (conclude lemma_congruencetransitive).
 assert (Cong a c A C) by (conclude lemma_congruencesymmetric).
 assert (Cong a c D c) by (conclude lemma_congruencetransitive).
 assert (Cong A E E a) by (conclude_def Midpoint ).
 assert (Cong A D D a) by (conclude cn_equalitysub).
 assert (Cong A D a D) by (forward_using lemma_congruenceflip).
 assert (Cong B E E b) by (conclude_def Midpoint ).
 assert (Cong B D D b) by (conclude cn_equalitysub).
 assert (Cong B D b D) by (forward_using lemma_congruenceflip).
 assert (Cong D B D b) by (forward_using lemma_congruenceflip).
 assert (BetS a b D) by (conclude lemma_betweennesspreserved).
 assert (Cong a b A B) by (conclude lemma_congruencesymmetric).
 assert (Cong a b D B) by (conclude lemma_congruencetransitive).
 assert (Cong a b D b) by (conclude lemma_congruencetransitive).
 assert (Cong a c A C) by (conclude lemma_congruencesymmetric).
 assert (Cong a c D C) by (conclude lemma_congruencetransitive).
 assert (Cong C E E c) by (conclude_def Midpoint ).
 assert (Cong C D D c) by (conclude cn_equalitysub).
 assert (Cong D C D c) by (forward_using lemma_congruenceflip).
 assert (Cong a c D c) by (conclude lemma_congruencetransitive).
 assert (neq b c) by (conclude lemma_nullsegment3).
 assert (Per a b c) by (conclude_def Per ).
 close.
 }
{
 let Tf:=fresh in
 assert (Tf: d, (BetS D E d Cong E d D E)) by (conclude postulate_extension);destruct Tf as [d];spliter.
 assert (Cong E D d E) by (forward_using lemma_doublereverse).
 assert (Cong D E E d) by (forward_using lemma_congruenceflip).
 assert (Midpoint D E d) by (conclude_def Midpoint ).
 assert (Cong B D b d) by (conclude lemma_pointreflectionisometry).
 assert (Cong D C d c) by (conclude lemma_pointreflectionisometry).
 assert (Cong a c A C) by (conclude lemma_congruencesymmetric).
 assert (Cong a c D C) by (conclude lemma_congruencetransitive).
 assert (Cong a c d c) by (conclude lemma_congruencetransitive).
 assert (neq b c) by (conclude lemma_nullsegment3).
 assert (Cong A D a d) by (conclude lemma_pointreflectionisometry).
 assert (BetS a b d) by (conclude lemma_betweennesspreserved).
 assert (Cong a b A B) by (conclude lemma_congruencesymmetric).
 assert (Cong a b D B) by (conclude lemma_congruencetransitive).
 assert (Cong D B d b) by (conclude lemma_pointreflectionisometry).
 assert (Cong a b d b) by (conclude lemma_congruencetransitive).
 assert (Per a b c) by (conclude_def Per ).
 close.
 }

close.
Qed.

End Euclid.