(** We are not faithful to Tarski's def because for uniqueness we do not need the assumption that A and B are on line OE as it is implied by the definition of sum. *)

(* Specifications: *)
Lemma sum_uniqueness : forall A B C1 C2,
Sum O E E' A B C1 ->
Sum O E E' A B C2 ->
C1 = C2.
Lemma opp_exists : forall A,
Col O E A ->
exists MA, Opp O E E' A MA.
Lemma opp0 : Opp O E E' O O.
Lemma pj_trivial : forall A B C, Pj A B C C.
Lemma sum_O_O : Sum O E E' O O O.
Lemma sum_A_O : forall A, Col O E A -> Sum O E E' A O A.
Lemma sum_O_B : forall B, Col O E B -> Sum O E E' O B B.
Lemma opp0_uniqueness : forall M, Opp O E E' O M -> M = O.
Lemma proj_pars : forall A A' C' , A <> O -> Col O E A -> Par O E A' C' -> Proj A A' O E' E E' -> Par_strict O E A' C'.
Lemma proj_col : forall A A' C' , A = O -> Col O E A -> Par O E A' C' -> Proj A A' O E' E E' -> A' = O.
Lemma grid_not_par : ~Par O E E E' /\ ~Par O E O E' /\ ~Par O E' E E' /\ O <> E /\ O <> E' /\ E <> E'.
Lemma proj_id : forall A A', Proj A A' O E' E E' -> Col O E A -> Col O E A' -> A = O.
Lemma sum_O_B_eq : forall B C, Sum O E E' O B C -> B = C.
Lemma sum_A_O_eq : forall A C, Sum O E E' A O C -> A = C.
Lemma sum_par_strict : forall A B C A' C', Ar2 O E E' A B C -> A <> O -> Pj E E' A A' -> Col O E' A' -> Pj O E A' C' -> Pj O E' B C' -> Pj E' E C' C
-> A' <> O /\ (Par_strict O E A' C' \/ B = O).
Lemma sum_A_B_A : forall A B, Sum O E E' A B A -> B = O.
Lemma sum_A_B_B : forall A B, Sum O E E' A B B -> A = O.
Lemma sum_uniquenessB : forall A X Y C, Sum O E E' A X C -> Sum O E E' A Y C -> X = Y.
Lemma sum_uniquenessA : forall B X Y C, Sum O E E' X B C -> Sum O E E' Y B C -> X = Y.
Lemma sum_B_null : forall A B, Sum O E E' A B A -> B = O.
Lemma sum_A_null : forall A B, Sum O E E' A B B -> A = O.
Lemma sum_plg : forall A B C, Sum O E E' A B C -> (A <> O ) \/ ( B <> O) -> exists A', exists C', Plg O B C' A' /\ Plg C' A' A C.
Lemma sum_cong : forall A B C, Sum O E E' A B C -> (A <> O \/ B <> O) -> Parallelogram_flat O A C B.
Lemma sum_cong2 : forall A B C,
Sum O E E' A B C ->
(A <> O \/ B <> O) ->
(Cong O A B C /\ Cong O B A C).
Lemma sum_comm : forall A B C, Sum O E E' A B C -> Sum O E E' B A C.
Lemma cong_sum : forall A B C,
O <> C \/ B <> A -> Ar2 O E E' A B C ->
Cong O A B C -> Cong O B A C ->
Sum O E E' A B C.
Lemma sum_iff_cong : forall A B C,
Ar2 O E E' A B C -> (O <> C \/ B <> A) ->
((Cong O A B C /\ Cong O B A C) <-> Sum O E E' A B C).
Lemma opp_comm : forall X Y, Opp O E E' X Y -> Opp O E E' Y X.
Lemma opp_uniqueness :
forall A MA1 MA2,
Opp O E E' A MA1 ->
Opp O E E' A MA2 ->
MA1 = MA2.