Inductive Point :=
  P0 | P1 | P2 | P3.Inductive Point :=
  P0 | P1 | P2 | P3.Inductive Point :=
  P0 | P1 | P2 | P3.Inductive Point :=
  P0 | P1 | P2 | P3.Inductive Point :=
  P0 | P1 | P2 | P3.Definition Bet (A B C : Point) :=
  A = B \/ B = C \/ A = C.Definition Cong (A B C D : Point) :=
  (A = B /\ C = D) \/ (A <> B /\ C <> D).

(* Specifications: *)
Lemma not_between_identity : ~ (forall A B, Bet A B A -> A=B).
Lemma cong_pseudo_reflexivity : forall A B, Cong A B B A.
Lemma cong_identity : forall A B C, Cong A B C C -> A = B.
Lemma cong_inner_transitivity : forall A B C D E F, Cong A B C D -> Cong A B E F -> Cong C D E F.
Lemma inner_pasch : forall A B C P Q, Bet A P C -> Bet B Q C -> exists x, Bet P x B /\ Bet Q x A.
Lemma five_segment : forall A A' B B' C C' D D', Cong A B A' B' -> Cong B C B' C' -> Cong A D A' D' -> Cong B D B' D' -> Bet A B C -> Bet A' B' C' -> A <> B -> Cong C D C' D'.
Lemma point_eq_dec : forall A B : Point, A=B \/ A<>B.
Lemma segment_construction : forall A B C D, exists E, Bet A B E /\ Cong B E C D.
Lemma lower_dim : exists A, exists B, exists C, ~ (Bet A B C \/ Bet B C A \/ Bet C A B).
Lemma cong_sym : forall A B C D, Cong A B C D -> Cong C D A B.
Lemma cong_aux : forall A, Cong A P0 A P1 -> A = P2 \/ A = P3.
Lemma cong_aux_2 : forall A, Cong A P0 A P2 -> A = P1 \/ A = P3.
Lemma cong_aux_3 : forall A, Cong A P1 A P2 -> A = P0 \/ A = P3.
Lemma cong_aux_4 : forall A, Cong A P0 A P3 -> A = P1 \/ A = P2.
Lemma cong_aux_5 : forall A, Cong A P1 A P3 -> A = P0 \/ A = P2.
Lemma cong_aux_6 : forall A, Cong A P2 A P3 -> A = P0 \/ A = P1.
Lemma upper_dim : forall A B C P Q , P <> Q -> 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).
Lemma not_bet_diff : forall A B C, ~ (Bet A B C \/ Bet B C A \/ Bet C A B) -> A <> B /\ B <> C /\ A <> C.
Lemma euclid : forall A B C, ~ (Bet A B C \/ Bet B C A \/ Bet C A B) -> exists CC, Cong A CC B CC /\ Cong A CC C CC.