Definition eqo := fun A B P A1 B1 P1 => ~Col A B P /\ ~Col A1 B1 P1 /\
                      forall C C1 B2 M B' C' K,
                             Perp A B C A  -> Per P C A -> Perp A1 B1 C1 A1 -> Per P1 C1 A1 ->
                             Out A1 B1 B2 -> Cong A B A1 B2 ->
                             Midpoint M A A1 -> Midpoint M B2 B' -> Midpoint M C1 C' -> Midpoint K B B' ->
                             Bet C A C' \/ OS A K C C'.Definition eq_o := fun A B P A1 B1 P1 => ~Col A B P /\ ~Col A1 B1 P1 /\
                      forall C C1 B2 M B' C' K,
                             Perp A B C A -> proj P A C C -> Perp A1 B1 C1 A1 -> proj P1 A1 C1 C1 ->
                             Out A1 B1 B2 -> Cong A B A1 B2 ->
                             Midpoint M A A1 -> Midpoint M B2 B' -> Midpoint M C1 C' -> Midpoint K B B' ->
                             Bet C A C' \/ OS A K C C'.

(* Specifications: *)
Lemma eqo_eq_o : forall A B P A1 B1 P1, eqo A B P A1 B1 P1 -> eq_o A B P A1 B1 P1.
Lemma eq_o_eqo : forall A B P A1 B1 P1, eq_o A B P A1 B1 P1 -> eqo A B P A1 B1 P1.
Lemma eq_o_one_side : forall A B X Y, eq_o A B X A B Y -> OS A B X Y.
Lemma eqo_one_side : forall A B X Y, eqo A B X A B Y -> OS A B X Y.
Lemma eq_o_refl : forall A B P, ~Col A B P -> eq_o A B P A B P.
Lemma eqo_refl : forall A B P, ~Col A B P -> eqo A B P A B P.
Lemma per_id : forall A B B' C, A <> B -> B <> C -> B' <> C -> Per A B C -> Per A B' C -> Col C B B' -> B = B'.
Lemma proj_one_side : forall A B A' B' P Q, A <> A' -> proj A P Q A' -> proj B P Q B' -> Col B A A' \/ OS A A' B B'.
Lemma proj_eq_col : forall A B P Q C, proj A P Q C -> proj B P Q C -> Col A B C.
Lemma proj_par : forall A B A' B' P Q, A <> A' -> B <> B' -> proj A P Q A' -> proj B P Q B' -> Par A A' B B'.
Lemma proj_not_col : forall A A' P Q, A <> A' -> proj A P Q A' -> ~Col P Q A.
Lemma proj_comm : forall A B P Q, proj A P Q B -> proj A Q P B.
Lemma proj_not_eq : forall A B A' B' P Q, A' <> B' -> proj A P Q A' -> proj B P Q B' -> A <> B.
Lemma proj_not_eq_not_col : forall A B A' B' P Q, A' <> B' -> A <> A' -> proj A P Q A' -> proj B P Q B' -> ~Col A A' B'.
Lemma proj_par_strict : forall A B A' B' P Q, A <> A' -> B <> B' -> A' <> B' -> proj A P Q A' -> proj B P Q B' -> Par_strict A A' B B'.
Lemma col_proj_col : forall A B A' B' P Q, A <> A' -> Col A B A' -> proj A P Q A' -> proj B P Q B' -> Col A B B'.
Lemma col_proj_proj : forall A B A' P Q, A <> A' -> Col A B A' -> proj A P Q A' -> proj B P Q A'.
Lemma proj_id : forall A B A' B' P Q, A <> A' -> Col A B A' -> proj A P Q A' -> proj B P Q B' -> A'= B'.
Lemma proj_diff : forall A P Q A' , proj A P Q A' -> P <> Q.
Lemma proj3_col : forall A B C A' B' C' P Q , proj A P Q A' -> proj B P Q B' -> proj C P Q C' -> Col A' B' C'.
Lemma proj3_id : forall A B C C' P Q, A <> B -> Col A B C -> proj A P Q A -> proj B P Q B -> proj C P Q C' -> C = C'.
Lemma proj_inv_exists : forall P Q A', P <> Q -> Col P Q A' -> exists A, A <> A' /\ proj A P Q A'.
Lemma proj_perp_id : forall A B C A' B' P Q, A <> C -> Col A B C -> proj A P Q A' -> proj B P Q B' -> proj C P Q A' -> A' = B'.
Lemma proj_diff_not_col : forall A B A' B' P Q, A <> A' -> proj A P Q A' -> proj B P Q B' -> (A' <> B' <-> ~Col A B A').
Lemma proj_diff_not_col_inv : forall A B A' B' P Q, A <> A' -> proj A P Q A' -> proj B P Q B' -> (A' = B' <-> Col A B A').
Lemma proj_preserves_bet1 : forall A B C B' C' P Q, Bet A B C -> proj A P Q A -> proj B P Q B' -> proj C P Q C' -> Bet A B' C'.
Lemma proj_preserves_bet : forall A B C A' B' C' P Q, Bet A B C -> proj A P Q A' -> proj B P Q B' -> proj C P Q C' -> Bet A' B' C'.
Lemma one_side_eq_o : forall A B C D, A <> B -> OS A B C D -> eq_o A B C A B D.
Lemma out_preserves_eq_o : forall A B B' P, ~Col A B P -> Out A B B' -> eq_o A B P A B' P.
Lemma cong_identity_inv : forall A B C, A <> B -> ~Cong A B C C.
Lemma midpoint_col : forall A B A' B' M, A <> B -> Midpoint M A A' -> Midpoint M B B' -> Col A B B' -> A' <> B' /\ Col A A' B' /\ Col B A' B'.
Lemma midpoint_par : forall A B A' B' M, A <> B -> Midpoint M A A' -> Midpoint M B B' -> Par A B A' B'.
Lemma midpoint_par_strict : forall A B A' B' M, A <> B -> ~Col A B B' -> Midpoint M A A' -> Midpoint M B B' -> Par_strict A B A' B'.
Lemma le_left_comm : forall A B C D, Le A B C D -> Le B A C D.
Lemma le_right_comm : forall A B C D, Le A B C D -> Le A B D C.
Lemma le_comm : forall A B C D, Le A B C D -> Le B A D C.
Lemma le_cong_le : forall A B C A' B' C', Bet A B C -> Bet A' B' C' -> Le A B A' B' -> Cong B C B' C' -> Le A C A' C'.
Lemma cong_le_le : forall A B C A' B' C', Bet A B C -> Bet A' B' C' -> Le B C B' C' -> Cong A B A' B' -> Le A C A' C'.
Lemma bet_le_le : forall A B C A' B' C', Bet A B C -> Bet A' B' C' -> Le A B A' B' -> Le B C B' C' -> Le A C A' C'.
Lemma bet_double_bet : forall A B C B' C', Midpoint B' A B -> Midpoint C' A C -> Bet A B' C' -> Bet A B C.
Lemma bet_half_bet : forall A B C B' C', Bet A B C -> Midpoint B' A B -> Midpoint C' A C -> Bet A B' C'.
Lemma midpoint_preserves_bet : forall A B C B' C', Midpoint B' A B -> Midpoint C' A C -> (Bet A B C <-> Bet A B' C').
Lemma symmetry_preseves_bet1 : forall A B M A' B', Midpoint M A A' -> Midpoint M B B' -> Bet M A B -> Bet M A' B'.
Lemma symmetry_preseves_bet2 : forall A B M A' B', Midpoint M A A' -> Midpoint M B B' -> Bet M A' B' -> Bet M A B.
Lemma symmetry_preserves_bet : forall A B M A' B', Midpoint M A A' -> Midpoint M B B' -> (Bet M A' B' <-> Bet M A B).
Lemma par_cong_mid : forall A B A' B', Par A B A' B' -> Cong A B A' B' -> exists M, Midpoint M A A' /\ Midpoint M B B' \/ Midpoint M A B' /\ Midpoint M B A'.
Lemma per_preserves_bet_aux1 : forall P Q A B C B' C', P <> Q -> Bet A B C -> Col P Q A -> Per B B' P -> Col P Q B' -> Per C C' P -> Col P Q C' -> P <> A -> P <> B' -> P <> C' -> Bet A B' C'.
Lemma perp_not_eq_3 : forall A B C, Perp A B B C -> A <> C.
Lemma per_preserves_bet_aux2 : forall P Q A B C A' C', P <> Q -> Bet A B C -> Per A A' P -> Col P Q A' -> Col P Q B -> Per C C' P -> Col P Q C' -> P <> A'-> P <> B -> P <> C' -> Bet A' B C'.
Lemma par_col : forall A B C, Par A B A C -> Col A B C.
Lemma per_diff : forall A B A' B' P, A <> B -> ~ Col A B A' -> Per A A' P -> Per B B' P -> A' <> P -> B' <> P -> A' <> B'.
Lemma per_preserves_bet : forall P Q A B C A' B' C', P <> Q -> Bet A B C -> Per A A' P -> Col P Q A' -> Per B B' P -> Col P Q B' -> Per C C' P -> Col P Q C' -> P <> A'-> P <> B' -> P <> C' -> Bet A' B' C'.
Lemma ex_col : forall A B C, A <> B /\ A <> C /\ B <> C -> Col A B C -> exists D, Col A B D /\ A <> D /\ B <> D /\ C <> D.
Lemma out_preserves_eqo1 : forall A B P B', ~Col A B P -> Out A B B' -> eqo A B P A B' P.
Lemma out_preserves_eqo : forall A B P B' P', ~Col A B P -> Out A B B' -> Out A P P' -> eqo A B P A B' P'.
Lemma per_one_side : forall A B P Q C C', A <> P -> C' <> P -> ~Col A B C -> Col P Q A -> Col P Q C' -> Perp A B P Q -> Per C C' P -> OS A B C C'.
Lemma one_side_eqo : forall A B X Y, OS A B X Y -> eqo A B X A B Y.
Lemma ex_col1 : forall A B C, A <> B -> Col A B C -> exists D, Col A B D /\ A <> D /\ B <> D /\ C <> D.