Section INTERSECTION.
Inductive Intersection (F1 F2 : Figure) : Figure -> Type :=
| InterLines : forall (D1 : Line F1) (D2 : Line F2),
SecantLines F1 F2 D1 D2 ->
Intersection F1 F2 (fun M : Point => F1 M /\ F2 M)
| InterCirclesClock : forall (G1 : Circle F1) (G2 : Circle F2),
SecantCircles F1 F2 G1 G2 ->
Intersection F1 F2 (fun M : Point => F1 M /\ F2 M /\ Clockwise (Center F1 G1) (Center F2 G2) M)
| InterCirclesAntiClock : forall (G1 : Circle F1) (G2 : Circle F2),
SecantCircles F1 F2 G1 G2 ->
Intersection F1 F2 (fun M : Point => F1 M /\ F2 M /\ Clockwise (Center F2 G2) (Center F1 G1) M)
| InterDiameterCirclePos : forall (D : Line F1) (G : Circle F2),
SecantDiameterCircle F1 F2 D G ->
Intersection F1 F2 (fun M : Point => F1 M /\ F2 M /\ EquiOriented (LineA F1 D) (LineB F1 D) (Center F2 G) M)
| InterDiameterCircleNeg : forall (D : Line F1) (G : Circle F2),
SecantDiameterCircle F1 F2 D G ->
Intersection F1 F2 (fun M : Point => F1 M /\ F2 M /\ EquiOriented (LineB F1 D) (LineA F1 D) (Center F2 G) M).

Axiom PointDef : forall F1 F2 F : Figure,
Intersection F1 F2 F ->
{M : Point | F M /\ Unicity M F}.