Ltac let_symmetric C P A :=
let id1:=fresh in (assert (id1:(exists A', Midpoint P A A'));
[apply symmetric_point_construction|ex_and id1 C]).Ltac symmetric B' A B :=
assert(sp:= symmetric_point_construction B A); ex_and sp B'.

(* Specifications: *)
Lemma l8_7 : forall A B C, Per A B C -> Per A C B -> B=C.
Lemma l8_8 : forall A B, Per A B A -> A=B.
Lemma per_distinct : forall A B C, Per A B C -> A <> B -> A <> C.
Lemma per_distinct_1 : forall A B C, Per A B C -> B <> C -> A <> C.
Lemma l8_9 : forall A B C, Per A B C -> Col A B C -> A=B \/ C=B.
Lemma l8_10 : forall A B C A' B' C', Per A B C -> Cong_3 A B C A' B' C' -> Per A' B' C'.
Lemma col_col_per_per : forall A X C U V, A<>X -> C<>X -> Col U A X -> Col V C X -> Per A X C -> Per U X V.
Lemma perp_in_dec : forall X A B C D, Perp_at X A B C D \/ ~ Perp_at X A B C D.
Lemma perp_distinct : forall A B C D, Perp A B C D -> A <> B /\ C <> D.
Lemma l8_12 : forall A B C D X, Perp_at X A B C D -> Perp_at X C D A B.
Lemma per_col : forall A B C D, B <> C -> Per A B C -> Col B C D -> Per A B D.
Lemma l8_13_2 : forall A B C D X, A <> B -> C <> D -> Col X A B -> Col X C D -> (exists U, exists V :Tpoint, Col U A B /\ Col V C D /\ U<>X /\ V<>X /\ Per U X V) -> Perp_at X A B C D.
Lemma l8_14_1 : forall A B, ~ Perp A B A B.
Lemma l8_14_2_1a : forall X A B C D, Perp_at X A B C D -> Perp A B C D.
Lemma perp_in_distinct : forall X A B C D , Perp_at X A B C D -> A <> B /\ C <> D.
Lemma l8_14_2_1b : forall X A B C D Y, Perp_at X A B C D -> Col Y A B -> Col Y C D -> X=Y.
Lemma l8_14_2_1b_bis : forall A B C D X, Perp A B C D -> Col X A B -> Col X C D -> Perp_at X A B C D.
Lemma l8_14_2_2 : forall X A B C D, Perp A B C D -> (forall Y, Col Y A B -> Col Y C D -> X=Y) -> Perp_at X A B C D.
Lemma l8_14_3 : forall A B C D X Y, Perp_at X A B C D -> Perp_at Y A B C D -> X=Y.
Lemma l8_15_1 : forall A B C X, Col A B X -> Perp A B C X -> Perp_at X A B C X.
Lemma l8_15_2 : forall A B C X, Col A B X -> Perp_at X A B C X -> Perp A B C X.
Lemma perp_in_per : forall A B C, Perp_at B A B B C-> Per A B C.
Lemma perp_sym : forall A B C D, Perp A B C D -> Perp C D A B.
Lemma perp_col0 : forall A B C D X Y, Perp A B C D -> X <> Y -> Col A B X -> Col A B Y -> Perp C D X Y.
Lemma per_perp_in : forall A B C, A <> B -> B <> C -> Per A B C -> Perp_at B A B B C.
Lemma per_perp : forall A B C, A <> B -> B <> C -> Per A B C -> Perp A B B C.
Lemma perp_left_comm : forall A B C D, Perp A B C D -> Perp B A C D.
Lemma perp_right_comm : forall A B C D, Perp A B C D -> Perp A B D C.
Lemma perp_comm : forall A B C D, Perp A B C D -> Perp B A D C.
Lemma perp_in_sym : forall A B C D X, Perp_at X A B C D -> Perp_at X C D A B.
Lemma perp_in_left_comm : forall A B C D X, Perp_at X A B C D -> Perp_at X B A C D.
Lemma perp_in_right_comm : forall A B C D X, Perp_at X A B C D -> Perp_at X A B D C.
Lemma perp_in_comm : forall A B C D X, Perp_at X A B C D -> Perp_at X B A D C.