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 congaH_existence_congH :
forall A B C O X P U V : Point,
U<>V ->
~ ColH P O X ->
~ ColH A B C ->
exists Y : Point, CongaH A B C X O Y /\ same_side' P Y O X /\ CongH O Y U V.