(** We show here that from the axioms of neutral geometry we can deduce the existence of a parallel line. This is important because it shows that axioms of neutral geometry are inconsistent with those of elliptic geometry as elliptic geometry assumes that no parallel lines exist. *)
(** This corresponds to l12_10 in Tarski's book. *)

(* Specifications: *)
Lemma parallel_existence : forall A B P, A <> B ->
exists C, exists D, C<>D /\ Par A B C D /\ Col P C D.
Lemma par_col_par : forall A B C D D',
C <> D' -> Par A B C D -> Col C D D' -> Par A B C D'.
Lemma parallel_existence1 : forall A B P, A <> B -> exists Q, Par A B P Q.
Lemma par_not_col : forall A B C D X, Par_strict A B C D -> Col X A B -> ~Col X C D.
Lemma not_strict_par1 : forall A B C D X, Par A B C D -> Col A B X -> Col C D X -> Col A B C.
Lemma not_strict_par2 : forall A B C D X, Par A B C D -> Col A B X -> Col C D X -> Col A B D.
Lemma not_strict_par : forall A B C D X, Par A B C D -> Col A B X -> Col C D X -> Col A B C /\ Col A B D.
Lemma not_par_not_col : forall A B C, A <> B -> A <> C -> ~Par A B A C -> ~Col A B C.
Lemma not_par_inter_uniqueness : forall A B C D X Y,
A <> B -> C <> D -> ~Par A B C D -> Col A B X -> Col C D X -> Col A B Y -> Col C D Y ->
X = Y.
Lemma inter_uniqueness_not_par : forall A B C D P,
~Col A B C -> Col A B P -> Col C D P -> ~Par A B C D.
Lemma col_not_col_not_par :
forall A B C D,
(exists P, Col A B P /\ Col C D P) ->
(exists Q, Col C D Q /\ ~Col A B Q) -> ~Par A B C D.
Lemma par_distincts : forall A B C D,
Par A B C D -> (Par A B C D /\ A <> B /\ C <> D).
Lemma par_not_col_strict : forall A B C D P,
Par A B C D -> Col C D P -> ~Col A B P -> Par_strict A B C D.
Lemma all_one_side_par_strict : forall A B C D,
C <> D -> (forall P, Col C D P -> OS A B C P) ->
Par_strict A B C D.
Lemma par_col_par_2 : forall A B C D P,
A <> P -> Col A B P -> Par A B C D -> Par A P C D.
Lemma par_col2_par : forall A B C D E F,
E <> F -> Par A B C D -> Col C D E -> Col C D F -> Par A B E F.
Lemma par_col2_par_bis : forall A B C D E F,
E <> F -> Par A B C D -> Col E F C -> Col E F D -> Par A B E F.
Lemma par_strict_col_par_strict : forall A B C D E,
C <> E -> Par_strict A B C D -> Col C D E ->
Par_strict A B C E.
Lemma par_strict_col2_par_strict : forall A B C D E F,
E <> F -> Par_strict A B C D -> Col C D E -> Col C D F ->
Par_strict A B E F.
Lemma line_dec : forall B1 B2 C1 C2, (Col C1 B1 B2 /\ Col C2 B1 B2) \/ ~ (Col C1 B1 B2 /\ Col C2 B1 B2).
Lemma par_distinct : forall A B C D, Par A B C D -> A <> B /\ C <> D.
Lemma par_col4__par : forall A B C D E F G H, E <> F -> G <> H -> Par A B C D ->
Col A B E -> Col A B F -> Col C D G -> Col C D H -> Par E F G H.
Lemma par_strict_col4__par_strict : forall A B C D E F G H, E <> F -> G <> H ->
Par_strict A B C D -> Col A B E -> Col A B F -> Col C D G -> Col C D H ->
Par_strict E F G H.
Lemma par_strict_one_side : forall A B C D P,
Par_strict A B C D -> Col C D P -> OS A B C P.
Lemma par_strict_all_one_side : forall A B C D,
Par_strict A B C D -> (forall P, Col C D P -> OS A B C P).
Lemma inter_distincts : forall A B C D X, Inter A B C D X -> A <> B /\ C <> D.
Lemma inter_trivial : forall A B X, ~ Col A B X -> Inter A X B X X.
Lemma inter_sym : forall A B C D X, Inter A B C D X -> Inter C D A B X.
Lemma inter_left_comm : forall A B C D X, Inter A B C D X -> Inter B A C D X.
Lemma inter_right_comm : forall A B C D X, Inter A B C D X -> Inter A B D C X.
Lemma inter_comm : forall A B C D X, Inter A B C D X -> Inter B A D C X.
(** In the proof given by Tarski on page 125 the distinction of cases is explicit. This is a good example on the significance of decidability. *)
Lemma l12_17 : forall A B C D P,
A <> B -> Midpoint P A C -> Midpoint P B D -> Par A B C D.
Lemma l12_18_a :
forall A B C D P,
Cong A B C D -> Cong B C D A -> ~Col A B C ->
B <> D -> Col A P C -> Col B P D ->
Par A B C D.
Lemma l12_18_b :
forall A B C D P,
Cong A B C D -> Cong B C D A -> ~Col A B C ->
B <> D -> Col A P C -> Col B P D ->
Par B C D A.
Lemma l12_18_c :
forall A B C D P,
Cong A B C D -> Cong B C D A -> ~Col A B C ->
B <> D -> Col A P C -> Col B P D ->
TS B D A C.
Lemma l12_18_d :
forall A B C D P,
Cong A B C D -> Cong B C D A -> ~Col A B C ->
B <> D -> Col A P C -> Col B P D ->
TS A C B D.
Lemma l12_18 :
forall A B C D P,
Cong A B C D -> Cong B C D A -> ~Col A B C ->
B <> D -> Col A P C -> Col B P D ->
Par A B C D /\ Par B C D A /\ TS B D A C /\ TS A C B D.
Lemma par_two_sides_two_sides :
forall A B C D,
Par A B C D -> TS B D A C ->
TS A C B D.
Lemma par_one_or_two_sides :
forall A B C D,
Par_strict A B C D ->
TS A C B D /\ TS B D A C \/ OS A C B D /\ OS B D A C.
Lemma l12_21_b : forall A B C D,
TS A C B D ->
CongA B A C D C A -> Par A B C D.
Lemma l12_22_aux :
forall A B C D P,
P <> A -> A <> C -> Bet P A C -> OS P A B D ->
CongA B A P D C P ->
Par A B C D.
Lemma l12_22_b :
forall A B C D P,
Out P A C -> OS P A B D -> CongA B A P D C P ->
Par A B C D.
Lemma par_strict_par : forall A B C D,
Par_strict A B C D -> Par A B C D.
Lemma par_strict_distinct : forall A B C D,
Par_strict A B C D ->
A<>B /\ A<>C /\ A<>D /\ B<>C /\ B<>D /\ C<>D.
Lemma col_par : forall A B C,
A <> B -> B <> C ->
Col A B C -> Par A B B C.
Lemma acute_col_perp__out : forall A B C A',
Acute A B C -> Col B C A' -> Perp B C A A' -> Out B A' C.
Lemma acute_col_perp__out_1 : forall A B C A',
Acute A B C -> Col B C A' -> Perp B A A A' -> Out B A' C.
Lemma conga_cop_inangle_per2__inangle : forall A B C P T,
Per A B C -> InAngle T A B C -> CongA P B A P B C -> Per B P T -> Coplanar A B C P ->
InAngle P A B C.