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}.

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.