(* Julien Narboux *)
(* Formalization of *)
(* Tarski's axiomatic *)
Require Export Ch06_out_lines.
Unset Regular Subst Tactic.
Definition is_midpoint := fun M A B => Bet A M B /\ Cong A M M B.
Proof with Tarski.
unfold is_midpoint.
intros.
intuition.
Qed.
Proof with Tarski.
unfold is_midpoint.
intros.
intuition.
eTarski.
Qed.
Proof with Tarski.
unfold is_midpoint.
intros.
intuition.
Qed.
Hint Resolve l7_2 l7_3 l7_3_2 : Midpoint.
Ltac Midpoint := eauto with Midpoint.
Proof with Tarski.
unfold is_midpoint.
intros.
assert (exists E : Point, Bet A P E /\ Cong P E A P)...
DecompExAnd H E.
exists E.
intuition.
Qed.
Hint Resolve symmetric_point_construction : Midpoint.
Proof with Tarski.
unfold is_midpoint.
intros.
intuition.
cases_equality A P.
treat_equalities...
eapply construction_unicity; try apply H0...
esTarski.
Qed.
Proof with Tarski.
unfold is_midpoint.
intros;intuition.
cases_equality A X.
treat_equalities...
eapply (construction_unicity X A X A P Q);Between;sTarski.
Qed.
Proof with sTarski.
intros.
cases_equality P A.
unfold is_midpoint in *.
intuition.
(* *)
treat_equalities...
(* *)
assert (exists X, Bet P' P X /\ Cong P X Q A)...
DecompExAnd H2 X.
assert (exists X', Bet X P' X' /\ Cong P' X' Q A)...
DecompExAnd H2 X'.
assert (exists Y, Bet Q' Q Y /\ Cong Q Y P A)...
DecompExAnd H2 Y.
assert (exists Y', Bet Y Q' Y' /\ Cong Q' Y' P A)...
DecompExAnd H2 Y'.
(* *)
unfold is_midpoint in *;intuition.
(* *)
assert (Cong A X Y A).
apply (l2_11 A P X Y Q A);Between...
(* *)
assert (Cong A Y' X' A).
apply (l2_11 A Q' Y' X' P' A);Between.
eapply cong_transitivity.
apply cong_commutativity.
apply H12.
sTarski.
eapply cong_transitivity;eauto...
(* *)
assert (Cong A Y A Y').
apply (l2_11 A Q Y A Q' Y');Between;eauto...
eapply cong_transitivity;eauto...
(* *)
assert (FSC X A X' Y' Y' A Y X).
unfold FSC;repeat split.
unfold Col;left;Between.
eapply cong_transitivity with (C:=Y) (D:=A)...
4:eapply cong_transitivity with (C:=Y) (D:=A)...
2:eapply cong_transitivity with (C:=Y') (D:=A)...
2:Tarski.
(* *)
eapply (l2_11 X A X' Y' A Y);Between.
eapply cong_transitivity with (C:=Y) (D:=A)...
eapply cong_transitivity with (C:=Y') (D:=A)...
(* *)
assert (X<>A).
unfold not;intro.
treat_equalities...
(* *)
assert (Cong X' Y' Y X).
eapply l4_16.
apply H15.
auto.
(* *)
assert (IFSC Y Q A X Y' Q' A X').
unfold IFSC,FSC in *;intuition;Between...
eapply cong_transitivity with (C:=Y') (D:=A)...
(* *)
assert (Cong Q X Q' X').
eapply l4_2.
apply H18.
(* *)
assert (IFSC X P A Q X' P' A Q').
unfold IFSC,FSC in *;intuition;Between...
(* *)
eapply l4_2.
apply H20.
Qed.
(** Symmetry preserves Bet. *)
Proof with Midpoint.
intros.
eapply l4_6.
apply H2.
unfold Cong_3.
repeat split;eapply l7_13...
Qed.
(** Symmetry preserves Cong. *)
Proof with Midpoint.
intros.
assert (Cong P Q P' Q').
eapply l7_13...
assert (Cong R S R' S').
eapply l7_13...
eapply cong_transitivity with (C:=P) (D:=Q);sTarski.
eapply cong_transitivity with (C:=R) (D:=S);sTarski.
Qed.
(** Symmetry preserves midpoint *)
Hint Resolve symmetry_preserves_midpoint : Midpoint.
Proof with Midpoint.
intros.
assert (Cong P B P' B).
eapply l7_13...
assert (exists B', is_midpoint A B B')...
DecompEx H2 B'.
assert (Cong P' B P B').
eapply l7_13.
apply H.
Midpoint.
(* *)
assert (Cong P B P B').
eTarski.
assert (Cong P B P' B').
eapply l7_13.
apply l7_2.
apply H.
Midpoint.
(* *)
assert (Cong P' B P' B').
eTarski.
(* *)
assert (Bet P B P').
unfold is_midpoint in *;intuition.
assert (B=B').
eapply l4_19.
apply H7.
sTarski.
sTarski.
treat_equalities.
eapply l7_3...
Qed.
Proof with Tarski.
unfold is_midpoint.
intros.
unfold Col in *;intuition.
(* *)
assert (Cong A B B B).
eapply l4_3.
apply between_symmetry;apply H.
2:apply cong_commutativity;apply H0.
Tarski.
Tarski.
treat_equalities.
left;auto.
(* *)
assert (Cong B A A A).
eapply l4_3.
apply H.
2:apply cong_commutativity;apply cong_symmetry;apply H0.
Tarski.
Tarski.
treat_equalities.
left;auto.
Qed.
Proof with Tarski.
intros.
assert (exists P', Cong_3 B D P D B P').
apply l4_14;Col...
DecompEx H5 P'.
assert (Col D B P').
eapply l4_13;try apply H6;Col...
assert (FSC B D P A D B P' C).
unfold FSC;intuition...
assert (FSC B D P C D B P' A).
unfold FSC;intuition...
assert (Cong P A P' C).
eapply l4_16; try apply H7...
assert (Cong P C P' A).
eapply l4_16; try apply H8...
assert (Cong_3 A P C C P' A).
unfold Cong_3;intuition...
assert (Col C P' A).
eapply l4_13;try apply H11...
assert (P=P').
unfold FSC in *;intuition.
eapply (l6_21 A C B D);Col...
treat_equalities.
assert (C = A \/ is_midpoint P C A).
eapply l7_20;Col...
assert (B = D \/ is_midpoint P B D).
eapply l7_20;Col...
unfold FSC,Cong_3 in *.
intuition;sTarski...
intuition.
unfold is_midpoint,FSC,Cong_3 in *;intuition.
treat_equalities.
clear H13 H21 H26 H2 H4 H5 H6.
unfold Col in H.
intuition.
assert (Bet C C B)...
intuition.
Qed.

Lemma l7_22_aux : 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 -> le C A1 C A2 ->
Bet M1 C M2.