End HilbertContext_2.
Ltac out_exists A B X := try match goal with |H : A <> B |- _
=> assert(HH:=between_out A B H);auto; destruct HH as [X]
end.
Ltac not_on_line A B X :=  try match goal with |H : A <> B |- _
=> assert(HH:=ncolH_exists A B H);auto; destruct HH as [X]
end.
Hint Resolve betH_trans0 betH_trans1 betH2_out out2_out : bet.
Hint Resolve congH_sym congH_perm congH_perml cong_permr congH_refl
cong_pseudo_transitivity congH_perms: cong.
Ltac Cong := eauto 3 with cong.
Section HilbertContext_2D.
Context `{H2D : Hilbert_neutral_2D}.

(* Specifications: *)
Lemma plane_separation_2D : forall A B X Y,
~ ColH A X Y -> ~ ColH B X Y ->
cut' A B X Y \/ same_side' A B X Y.
Lemma col_upper_dim : forall A B C P Q,
ColH A P Q -> P <> Q -> A <> B -> A <> C -> B <> C ->
A <> P -> A <> Q -> B <> P -> B <> Q -> C <> P -> C <> Q ->
CongH A P A Q -> CongH B P B Q -> CongH C P C Q ->
(Bet A B C \/ Bet B C A \/ Bet C A B).
Lemma TS_upper_dim : forall A B C P Q,
cut' A B P Q -> P <> Q -> A <> B -> A <> C -> B <> C ->
A <> P -> A <> Q -> B <> P -> B <> Q -> C <> P -> C <> Q ->
CongH A P A Q -> CongH B P B Q -> CongH C P C Q ->
(Bet A B C \/ Bet B C A \/ Bet C A B).
Lemma cut'_comm: forall A B X Y, cut' A B X Y -> cut' B A X Y.
Lemma TS_upper_dim_bis : forall A B C P Q I,
BetH P I Q -> BetH I B A -> P <> Q -> A <> B -> A <> C -> B <> C ->
A <> P -> A <> Q -> B <> P -> B <> Q -> C <> P -> C <> Q ->
CongH A P A Q -> CongH B P B Q -> CongH C P C Q ->
(Bet A B C \/ Bet B C A \/ Bet C A B).
Lemma upper_dim : forall A B C P Q,
P <> Q -> A <> B -> A <> C -> B <> C ->
Cong A P A Q -> Cong B P B Q -> Cong C P C Q ->
(Bet A B C \/ Bet B C A \/ Bet C A B).