Ltac put_negs_in_goal :=
  repeat
  match goal with
    H: ~ ?X |- _ => revert H; apply put_neg_in_goal
  end.(** We only need to prove discrimination results
as so far the only constant different from 0 or 1 which occurs is 2. *)
Ltac prove_discr_for_powers_of_2 :=
  simpl; try rewrite <- oppF_neq0; repeat apply neqO_mul_neqO; apply neq20.

Lemma nine_point_circle : forall A B C A1 B1 C1 A2 B2 C2 A3 B3 C3 H O, ~ Col A B C -> Col A B C2 -> Col B C A2 -> Col A C B2 -> Perp A B C C2 -> Perp B C A A2 -> Perp A C B B2 -> Perp A B C2 H -> Perp B C A2 H -> Perp A C B2 H -> Midpoint A3 A H -> Midpoint B3 B H -> Midpoint C3 C H -> Midpoint C1 A B -> Midpoint A1 B C -> Midpoint B1 C A -> Cong O A1 O B1 -> Cong O A1 O C1 -> Cong O A2 O A1 /\ Cong O B2 O A1 /\ Cong O C2 O A1 /\ Cong O A3 O A1 /\ Cong O B3 O A1 /\ Cong O C3 O A1.