Proof with Tarski.
intros.
cases_equality A2 C.
treat_equalities.
assert (M2=A2).
apply l7_3...
treat_equalities.
Tarski.
assert (exists A, is_midpoint C A2 A).
eapply symmetric_point_construction.
DecompEx H7 A.
assert (exists B, is_midpoint C B2 B).
eapply symmetric_point_construction.
DecompEx H7 B.
assert (exists M, is_midpoint C M2 M).
eapply symmetric_point_construction.
DecompEx H7 M.
assert (is_midpoint M A B).
unfold is_midpoint.
split.
eapply l7_15.
apply H8.
apply H10.
apply H9.
unfold is_midpoint in H4;intuition...
eapply l7_16.
apply H8.
apply H10.
apply H10.
apply H9.
unfold is_midpoint in *;intuition...
assert (le C A1 C A).
eapply l5_6.
split.
apply H5.
split...
unfold is_midpoint in H8;intuition.
assert (Bet C A1 A).
cases_equality A1 C.
subst;Tarski.
eapply l6_13_1.
2:auto.
unfold out;repeat split;auto.
unfold not;intro;treat_equalities.
assert (A=A1).
eapply le_zero.
apply H11.
treat_equalities.
assert (M1=A).
Midpoint.
treat_equalities.
auto.
unfold is_midpoint in H8.
decompose [and] H8;clear H8.
eapply l5_2.
3:apply H13.
auto.
Between.
assert (le C B1 C B).
eapply l5_6.
split.
apply H11.
split...
eapply cong_transitivity with (C:=C)  (D:=A2).
unfold is_midpoint in H8;intuition.
eapply cong_transitivity with (C:=C)  (D:=B2).
unfold is_midpoint in H8;intuition.
unfold is_midpoint in H9;intuition.
assert (Bet C B1 B).
cases_equality B1 C.
subst;Tarski.
eapply l6_13_1.
2:auto.
unfold out;repeat split;auto.
unfold not;intro;treat_equalities.
assert (B=B1).
eapply le_zero.
apply H13.
treat_equalities.
assert (M1=B).
Midpoint.
treat_equalities.
auto.
unfold is_midpoint in H9.
decompose [and] H9;clear H9.
eapply l5_2.
3:apply H15.
2:Between.
unfold not;intro.
treat_equalities.
auto.
assert (exists Q, Bet M Q C /\ Bet A1 Q B1).
eapply l3_17.
apply between_symmetry.
apply H12.
Between.
unfold is_midpoint in H7;intuition.
DecompExAnd H15 Q.
assert (Bet Q C M2).
unfold is_midpoint in H10;intuition;Between.
cut (Q=M1).
intro.
subst M1;auto.
assert (IFSC A A1 C M B B1 C M).
unfold IFSC;unfold is_midpoint in *;intuition.
eapply cong_transitivity with (C:=C)  (D:=A2).
unfold is_midpoint in H8;intuition.
eapply cong_transitivity with (C:=C)  (D:=B2).
unfold is_midpoint in H8;intuition.
unfold is_midpoint in H9;intuition.
assert (Cong A1 M B1 M).
eapply l4_2;eauto.
assert (Cong Q A1 Q B1).
cases_equality M C.
treat_equalities.
sTarski.
eapply l4_17.
apply H20.
Col.
sTarski.
sTarski.
assert (is_midpoint Q A1 B1).
unfold is_midpoint;intuition.
eapply l7_17;eauto.
Qed.

(* Specifications: *)
Lemma l7_22  : forall A1 A2 B1 B2 C M1 M2,
Bet A1 C A2 -> Bet B1 C B2 ->
Cong C A1 C B1 -> Cong C A2 C B2 ->
is_midpoint M1 A1 B1 -> is_midpoint M2 A2 B2 ->
Bet M1 C M2.
Lemma l7_25 : forall A B C, Cong C A C B -> exists X, is_midpoint X A B.
Proof with Tarski.