End Hilbert_2D_to_Tarski_2D.
Hint Resolve colH_trivial121 colH_trivial122 colH_trivial112 colH_trivial111 colH_permut_231
colH_permut_312 colH_permut_321 colH_permut_213 colH_permut_132 colH_permut_231
between_col bet_colH : col.
Ltac Col := auto 3 with col.
Ltac line A B l Hdiff := let H:=fresh in (assert(H:= line_existence A B Hdiff); destruct H as [l]; spliter).
Ltac line_col A B C := match goal with
|H1:(IncidL A ?l), H2:(IncidL B ?l), H3:(IncidL C ?l) |- _
=> let HH := fresh in assert(ColH A B C) by (unfold ColH; exists l; repeat split; auto); auto
end.
Ltac col_line H l := assert(HH:=H); unfold ColH in HH; destruct HH as [l HH]; spliter.
Ltac lines_eq l m :=
match goal with
| H0:(?X1 <> ?X2), H1:(IncidL ?X1 l), H2:(IncidL ?X1 m),
H3:(IncidL ?X2 l) , H4:(IncidL ?X2 m) |- _ => let HH := fresh in assert(HH : EqL l m)
by (apply (line_uniqueness X1 X2 l m);auto);
rewrite <-HH in *;
clean_duplicated_hyps
end.
Ltac ColHR :=
let tpoint := constr:(Point) in
let col := constr:(ColH) in
Col_refl tpoint col.
Hint Resolve between_comm : bet.
Ltac Bet := auto 3 with bet.
Ltac two_points l X Y := assert(_H := two_points_on_line l); destruct _H as [X _H]; destruct _H as [Y _H]; spliter.
Section HilbertContext_2.
Context `{Hi:Hilbert_neutral_dimensionless}.

(* Specifications: *)
Lemma ncolH_exists : forall A B, A <> B -> exists C, ~ColH A B C.
Lemma ncolH_distincts : forall A B C, ~ColH A B C -> A <> B /\ B <> C /\ A <> C.
Lemma betH_expand : forall A B C, BetH A B C -> BetH A B C /\ A <> B /\ B <> C /\ A <> C /\ ColH A B C.
Lemma inter_uniquenessH : forall A B A' B' X Y, A' <> B' -> ~ColH A B A' -> ColH A B X -> ColH A B Y -> ColH A' B' X -> ColH A' B' Y -> X = Y.
Lemma inter_incid_uniquenessH : forall P X Y l m,
~IncidL P l ->
IncidL P m -> IncidL X l -> IncidL Y l -> IncidL X m -> IncidL Y m ->
X = Y.
Lemma between_only_one' : forall A B C, BetH A B C -> ~ BetH B C A /\ ~ BetH B A C.
Lemma betH_colH : forall A B C, BetH A B C -> ColH A B C /\ A <> B /\ B <> C /\ A <> C.
Lemma cut_comm : forall A B l, cut l A B -> cut l B A.
Lemma line_on_plane' : forall A B C p, A <> B ->
IncidP A p -> IncidP B p -> ColH A B C -> IncidP C p.
Lemma inner_pasch_aux : forall A B C P Q,
~ ColH B C P -> Bet A P C -> Bet B Q C ->
exists X, Bet P X B /\ Bet Q X A.
Lemma betH_trans1 : forall A B C D, BetH A B C ->  BetH B C D -> BetH A C D.
Lemma betH_trans2 : forall A B C D, BetH A B C ->  BetH B C D -> BetH A B D.
Lemma betH_trans : forall A B C D, BetH A B C ->  BetH B C D -> BetH A B D /\ BetH A C D.
Lemma not_cut3 : forall A B C l p,
IncidP A p -> IncidP B p -> IncidP C p -> IncidLP l p ->
~ IncidL A l -> ~ ColH A B C -> ~ cut l A B -> ~ cut l A C ->
~ cut l B C.
Lemma betH_trans0 : forall A B C D, BetH A B C ->  BetH A C D -> BetH B C D /\ BetH A B D.
Lemma betH_outH2__betH: forall A B C A' C',
BetH A B C ->
outH B C C' ->
outH B A A' ->
BetH A' B C'.
Lemma cong_existence' : forall A B l M,
A <> B ->
IncidL M l ->
exists A' B', IncidL A' l /\ IncidL B' l /\ BetH A' M B' /\ CongH M A' A B /\ CongH M B' A B.