Section T18.
Context `{T2D:Tarski_2D}.
Context `{TE:@Tarski_euclidean Tn TnEQD}.
Variable SS U1 U2 : Tpoint.
Variable orthonormal_grid : Cs O E SS U1 U2.
Definition F : Type := {P : Tpoint | Col O E P}.
Definition EqF (x y : F) := (proj1_sig x) = (proj1_sig y).
Instance eqF_Reflexive : Reflexive EqF.
Definition LeF (x y : F) := LeP O E E' (proj1_sig x) (proj1_sig y).
Instance leF_Antisymmetric : Antisymmetric F EqF LeF.
(* For 8.5 Instance leF_Antisymmetric : Antisymmetric eqF leF. *)
Definition MulF (x y : F) : F.
Add Ring GeometricRing : ringF.
Add Field GeometricField : fieldF.
Global Instance Fops: (@Ring_ops F OF OneF AddF MulF SubF OppF EqF) := {}.
Global Instance FRing : (Ring (Ro:=Fops)).
Global Instance Fintegral : (Integral_domain (Rcr:=Fcri)).
Definition sqrt3 := PythF 1 (PythF 1 1).
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.

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.