Section HilbertContext_2.
Context `{Hi:Hilbert_neutral_dimensionless}.
Definition Cong A B C D := (CongH A B C D /\ A <> B /\ C <> D) \/ (A = B /\ C = D).
(****************** between_identity ************************)
(************************************************************)
(***************************** cong_identity ***********************)
(************************ cong_inner_transitivity ****************************)
intros.
unfold disjoint.
intro.
destruct H0 as [P []].
assert(HP:= betH_trans0 A P B C H0 H).
spliter.
apply between_only_one' in H1.
spliter.
contradiction.
Qed.
Definition Para := fun l m =>
(~ exists X, IncidL X l /\ IncidL X m) /\ exists p, IncidLP l p /\ IncidLP m p.
Definition ParaP := fun A B C D =>
forall l m, IncidL A l -> IncidL B l -> IncidL C m -> IncidL D m -> Para l m.
Definition is_line A B l := A <> B /\ IncidL A l /\ IncidL B l.
intros.
unfold outH in H.
induction H.
apply between_col in H.
auto.
induction H.
apply between_col in H.
Col.
spliter.
subst C.
Col.
Qed.
Global Instance IncidLP_morphisml : Proper(EqL ==> eq ==> iff) IncidLP.
(** Theorem 11 of Hilbert: the angles at the base of an isosceles triangle are congruent *)
intros.
unfold Cong in *.
induction H.
left; intuition.
apply congH_sym.
assumption.
assumption.
right.
tauto.
Qed.
(** First case of congruence of triangles *)
Definition cut' A B X Y := X <> Y /\ forall l, IncidL X l -> IncidL Y l -> cut l A B.
Global Instance cut_morphism : Proper(EqL ==> eq ==> eq ==> iff) cut.

Lemma cong_preserves_col_stronger : forall A B C A' B' C',
A <> B -> A <> C -> B <> C ->
ColH A B C -> CongH A B A' B' -> CongH B C B' C' -> CongH A C A' C' ->
ColH A' B' C'.