Section T.
Context `{TnEQD:Tarski_neutral_dimensionless_with_decidable_point_equality}.
(** We need a notion of line. *)
Definition Line := @Couple Tpoint.
Definition Lin := build_couple Tpoint.
Definition IncidentL := fun A l => Col A (P1 l) (P2 l).
(** * Group I Incidence *)
(** For every pair of distinct points there is a line containing them. *)
(** We need a notion of equality over lines. *)
Definition EqL : relation Line := fun l m => forall X, IncidentL X l <-> IncidentL X m.
Infix "=l=" := EqL (at level 70):type_scope.
(** Our equality is an equivalence relation. *)
Instance EqL_Equiv : Equivalence EqL.
Instance incident_Proper (A:Tpoint) :
Proper (EqL ==>iff) (IncidentL A).
(** There is only one line going through two points. *)
(** Every line contains at least two points. *)
(** Definition of the collinearity predicate. We say that three points are collinear if they belongs to the same line. *)
Definition Col_H := fun A B C =>
exists l, IncidentL A l /\ IncidentL B l /\ IncidentL C l.
(** We show that the notion of collinearity we just defined is equivalent to the notion of collinearity of Tarski. *)
(** There exists three non collinear points. *)
(** We need a notion of plane. *)
Record Plane := Plan {M1; M2; M3; NCol : ~ Col_H M1 M2 M3}.
Definition IncidentP := fun A p => Coplanar (M1 p) (M2 p) (M3 p) A.
(** For every triplet of non collinear points there is a plane containing them. *)
(** We need a notion of equality over planes. *)
Definition EqP : relation Plane := fun p q => forall X, IncidentP X p <-> IncidentP X q.
Infix "=p=" := EqP (at level 70):type_scope.
(** Our equality is an equivalence relation. *)
Instance EqP_Equiv : Equivalence EqP.
Instance incidentp_Proper (A:Tpoint) :
Proper (EqP ==>iff) (IncidentP A).

Lemma axiom_Incidp_dec : forall M p, IncidentP M p \/ ~ IncidentP M p.