Library GeoCoq.Elements.OriginalProofs.lemma_altitudebisectsbase

Require Export GeoCoq.Elements.OriginalProofs.lemma_8_2.
Require Export GeoCoq.Elements.OriginalProofs.lemma_8_3.

Section Euclid.

Context `{Ax1:euclidean_neutral}.

Lemma lemma_altitudebisectsbase :
    A B M P,
   BetS A M B Cong A P B P Per A M P
   Midpoint A M B.
Proof.
intros.
let Tf:=fresh in
assert (Tf: C, (BetS A M C Cong A M C M Cong A P C P neq M P)) by (conclude_def Per );destruct Tf as [C];spliter.
assert (BetS C M A) by (conclude axiom_betweennesssymmetry).
assert (Cong C M A M) by (conclude lemma_congruencesymmetric).
assert (Cong C P A P) by (conclude lemma_congruencesymmetric).
assert (Per C M P) by (conclude_def Per ).
assert (Per P M A) by (conclude lemma_8_2).
let Tf:=fresh in
assert (Tf: Q, (BetS P M Q Cong P M Q M Cong P A Q A neq M A)) by (conclude_def Per );destruct Tf as [Q];spliter.
assert (BetS Q M P) by (conclude axiom_betweennesssymmetry).
assert (Cong Q M P M) by (conclude lemma_congruencesymmetric).
assert (Cong Q A P A) by (conclude lemma_congruencesymmetric).
assert (Per P M C) by (conclude lemma_8_2).
assert (Out M C B) by (conclude_def Out ).
assert (Per P M B) by (conclude lemma_8_3).
let Tf:=fresh in
assert (Tf: E, (BetS P M E Cong P M E M Cong P B E B neq M B)) by (conclude_def Per );destruct Tf as [E];spliter.
assert (Cong P A P B) by (forward_using lemma_congruenceflip).
assert (Cong M Q P M) by (forward_using lemma_congruenceflip).
assert (Cong P M M Q) by (conclude lemma_congruencesymmetric).
assert (Cong E M P M) by (conclude lemma_congruencesymmetric).
assert (Cong E M M Q) by (conclude lemma_congruencetransitive).
assert (Cong M E M Q) by (forward_using lemma_congruenceflip).
assert (Cong M Q M E) by (conclude lemma_congruencesymmetric).
assert (neq P M) by (forward_using lemma_betweennotequal).
assert (eq Q E) by (conclude lemma_extensionunique).
assert (Cong P B Q B) by (conclude cn_equalitysub).
assert (Cong A P P B) by (forward_using lemma_congruenceflip).
assert (Cong A P Q B) by (conclude lemma_congruencetransitive).
assert (Cong A Q A P) by (forward_using lemma_doublereverse).
assert (Cong A Q Q B) by (conclude lemma_congruencetransitive).
assert (Cong A Q B Q) by (forward_using lemma_congruenceflip).
assert (Cong P Q P Q) by (conclude cn_congruencereflexive).
assert (eq A A) by (conclude cn_equalityreflexive).
assert (eq B B) by (conclude cn_equalityreflexive).
assert (nCol A M P) by (conclude lemma_rightangleNC).
assert (¬ Col A P M).
 {
 intro.
 assert (Col A M P) by (forward_using lemma_collinearorder).
 contradict.
 }
assert (¬ eq A P).
 {
 intro.
 assert (Col A P M) by (conclude_def Col ).
 contradict.
 }
assert (neq P A) by (conclude lemma_inequalitysymmetric).
assert (Out P A A) by (conclude lemma_ray4).
assert (¬ eq P B).
 {
 intro.
 assert (Cong A P B B) by (conclude cn_equalitysub).
 assert (eq A P) by (conclude axiom_nullsegment1).
 contradict.
 }
assert (Out P B B) by (conclude lemma_ray4).
assert (Out P M Q) by (conclude lemma_ray4).
assert (CongA A P M B P M) by (conclude_def CongA ).
assert (Cong P M P M) by (conclude cn_congruencereflexive).
assert (nCol A M P) by (conclude lemma_rightangleNC).
assert (¬ Col A P M).
 {
 intro.
 assert (Col A M P) by (forward_using lemma_collinearorder).
 contradict.
 }
assert (Triangle A P M) by (conclude_def Triangle ).
assert (Per B M P) by (conclude lemma_8_2).
assert (nCol B M P) by (conclude lemma_rightangleNC).
assert (¬ Col B P M).
 {
 intro.
 assert (Col B M P) by (forward_using lemma_collinearorder).
 contradict.
 }
assert (Triangle B P M) by (conclude_def Triangle ).
assert ((Cong A M B M CongA P A M P B M CongA P M A P M B)) by (conclude proposition_04).
assert (Cong A M M B) by (forward_using lemma_congruenceflip).
assert (Midpoint A M B) by (conclude_def Midpoint ).
close.
Qed.

End Euclid.