Ltac decompose_coordinates :=
  repeat
  match goal with
    H: _ |- context[ (coordinates_of_point_F ?X) ] =>
      let fx := fresh X "x" in
      let fy := fresh X "y" in
      destruct (coordinates_of_point_F X) as [[fx fy] _]
  end.Ltac convert_to_algebra :=
  try setoid_rewrite characterization_of_betweenness_F;
  try setoid_rewrite characterization_of_congruence_F;
  try setoid_rewrite characterization_of_midpoint_F;
  try setoid_rewrite characterization_of_collinearity_F;
  try setoid_rewrite characterization_of_right_triangle_F;
  try setoid_rewrite characterization_of_perpendicularity_F;
  try setoid_rewrite characterization_of_parallelism_F;
  try setoid_rewrite characterization_of_equality_F;
  try setoid_rewrite characterization_of_neq_F.Ltac express_disj_as_a_single_poly := repeat rewrite <- mulF__eq0.

(* Specifications: *)
Lemma centroid_theorem : forall A B C A1 B1 C1 G, Midpoint A1 B C -> Midpoint B1 A C -> Midpoint C1 A B -> Col A A1 G -> Col B B1 G -> Col C C1 G \/ Col A B C.
Lemma put_neg_in_goal : forall A B, A \/ B -> (~ A -> B).