Ltac unfold_non_primitive_constructions :=
unfold is_midpoint, m_ratio, on_circle, inter_lc,
inversion, eq_angle, eq_distance, co_circle, harmonic in *.
(* This definition is used to have a symetric statement to ease simplification *)
Definition parallel_s (A B C D : Point) : Prop := S A C B = S B A D.

Lemma parallel_equiv : forall A B C D, parallel_s A B C D <-> parallel A B C D.
Ltac assert_non_zero_hyps_circum_ortho_center :=
repeat
( match goal with
| H: is_circumcenter ?O ?A ?B ?C |- _ =>
assert_if_not_exist (2 * (Py A B A * Py A C A - Py B A C * Py B A C) <> 0);
[(apply  (is_circumcenter_non_zero O A B C H))|idtac]
| H: is_orthocenter ?O ?A ?B ?C |- _ =>
assert_if_not_exist ((Py A B A * Py A C A - Py B A C * Py B A C) <> 0);
[(apply  (is_orthocenter_non_zero O A B C H))|idtac]
end).