Library GeoCoq.Axioms.euclidean_axioms

The following axiom systems are used to formalize Euclid's proofs of Euclid's Elements.OriginalProofs.statements.
First, we define an axiom system for neutral geometry, i.e. geometry without continuity axioms nor parallel postulate.

Class euclidean_neutral :=
{
  Point : Type;
  Circle : Type;
  Cong : Point -> Point -> Point -> Point -> Prop;
  BetS : Point -> Point -> Point -> Prop;
  InCirc : Point -> Circle -> Prop;
  OnCirc : Point -> Circle -> Prop;
  OutCirc : Point -> Circle -> Prop;
  PA : Point;
  PB : Point;
  PC : Point;
  CI : Circle -> Point -> Point -> Point -> Prop;
  eq := @eq Point;
  neq A B := ~ eq A B;
  TE A B C := ~ (neq A B /\ neq B C /\ ~ BetS A B C);
  nCol A B C := neq A B /\ neq A C /\ neq B C /\ ~ BetS A B C /\ ~ BetS A C B /\ ~ BetS B A C;
  Col A B C := (eq A B \/ eq A C \/ eq B C \/ BetS B A C \/ BetS A B C \/ BetS A C B);
  Cong_3 A B C a b c := Cong A B a b /\ Cong B C b c /\ Cong A C a c;
  TS P A B Q := exists X, BetS P X Q /\ Col A B X /\ nCol A B P;
  Triangle A B C := nCol A B C;

  cn_equalitytransitive :
   forall A B C, eq A C -> eq B C -> eq A B;
  cn_congruencetransitive :
   forall B C D E P Q, Cong P Q B C -> Cong P Q D E -> Cong B C D E;
  cn_equalityreflexive :
   forall A, eq A A;
  cn_congruencereflexive :
   forall A B, Cong A B A B;
  cn_equalityreverse :
   forall A B, Cong A B B A;
  cn_stability :
   forall A B, ~ neq A B -> eq A B;
  cn_equalitysub :
   forall A B C D, eq D A -> BetS A B C -> BetS D B C;
  circle : forall A B C, neq A B -> exists X, CI X C A B;
  inside : forall A B C J P, CI J C A B /\ InCirc P J <-> exists X Y, CI J C A B /\ BetS X C Y /\ Cong C Y A B /\ Cong C X A B /\ BetS X P Y;
  outside : forall A B C J P, CI J C A B /\ OutCirc P J <-> exists X, CI J C A B /\ BetS C X P /\ Cong C X A B;
  on : forall A B C D J, CI J A C D /\ OnCirc B J <-> CI J A C D /\ Cong A B C D;
  axiom_lower_dim : nCol PA PB PC;
  axiom_betweennessidentity :
   forall A B, ~ BetS A B A;
  axiom_betweennesssymmetry :
   forall A B C, BetS A B C -> BetS C B A;
  axiom_innertransitivity :
   forall A B C D,
    BetS A B D -> BetS B C D -> BetS A B C;
  axiom_connectivity :
   forall A B C D,
    BetS A B D -> BetS A C D -> ~ BetS A B C -> ~ BetS A C B ->
    eq B C;
  axiom_nullsegment1 :
   forall A B C, Cong A B C C -> eq A B;
  axiom_nullsegment2 :
   forall A B, Cong A A B B;
  axiom_5_line :
   forall A B C D a b c d,
    Cong B C b c -> Cong A D a d -> Cong B D b d ->
    BetS A B C -> BetS a b c -> Cong A B a b ->
    Cong D C d c;
  postulate_extension :
   forall A B C D,
    neq A B -> neq C D ->
    exists X, BetS A B X /\ Cong B X C D;
  postulate_extension2 :
   forall A B C D,
    neq A B ->
    exists X, TE A B X /\ Cong B X C D;
  postulate_Pasch_inner :
   forall A B C P Q,
    BetS A P C -> BetS B Q C -> nCol A C B ->
    exists X, BetS A X Q /\ BetS B X P;
  postulate_Pasch_outer :
   forall A B C P Q,
    BetS A P C -> BetS B C Q -> nCol B Q A ->
    exists X, BetS A X Q /\ BetS B P X;
}.

Second, we enrich the axiom system with line-circle and circle-circle continuity axioms. Those two axioms states that we allow ruler and compass constructions.

Class euclidean_neutral_ruler_compass `(Ax : euclidean_neutral) :=
{
  postulate_line_circle :
   forall A B C K P Q,
    CI K C P Q -> InCirc B K -> neq A B ->
    exists X Y, Col A B X /\ Col A B Y /\ OnCirc X K /\ OnCirc Y K /\ BetS X B Y;
  postulate_circle_circle :
   forall C D F G J K P Q R S,
    CI J C R S -> InCirc P J ->
    OutCirc Q J -> CI K D F G ->
    OnCirc P K -> OnCirc Q K ->
    exists X, OnCirc X J /\ OnCirc X K
}.

Third, we introduce the famous fifth postulate of Euclid, which ensure that the geometry is Euclidean (i.e. not hyperbolic).

Class euclidean_euclidean `(Ax : euclidean_neutral_ruler_compass) :=
{
  postulate_Euclid5 :
   forall a p q r s t,
    BetS r t s -> BetS p t q -> BetS r a q ->
    Cong p t q t -> Cong t r t s -> nCol p q s ->
    exists X, BetS p a X /\ BetS s q X
}.

Last, we enrich the axiom system with axioms for equality of areas.

Class area `(Ax : euclidean_euclidean) :=
{
  EF : Point -> Point -> Point -> Point -> Point -> Point -> Point -> Point -> Prop;
  ET : Point -> Point -> Point -> Point -> Point -> Point -> Prop;
  axiom_EFreflexive :
   forall A B C D, EF A B C D A B C D;
  axiom_ETreflexive :
   forall A B C, ET A B C A B C;
  axiom_congruentequal :
   forall A B C a b c, Cong_3 A B C a b c -> ET A B C a b c;
  axiom_ETpermutation :
   forall A B C a b c,
    ET A B C a b c ->
    ET A B C b c a /\
    ET A B C a c b /\
    ET A B C b a c /\
    ET A B C c b a /\
    ET A B C c a b;
  axiom_ETsymmetric :
   forall A B C a b c, ET A B C a b c -> ET a b c A B C;
  axiom_EFpermutation :
   forall A B C D a b c d,
   EF A B C D a b c d ->
     EF A B C D b c d a /\
     EF A B C D d c b a /\
     EF A B C D c d a b /\
     EF A B C D b a d c /\
     EF A B C D d a b c /\
     EF A B C D c b a d /\
     EF A B C D a d c b;
  axiom_halvesofequals :
   forall A B C D a b c d, ET A B C B C D ->
                           TS A B C D -> ET a b c b c d ->
                           TS a b c d -> EF A B D C a b d c -> ET A B C a b c;
  axiom_EFsymmetric :
   forall A B C D a b c d, EF A B C D a b c d ->
                           EF a b c d A B C D;
  axiom_EFtransitive :
   forall A B C D P Q R S a b c d,
     EF A B C D a b c d -> EF a b c d P Q R S ->
     EF A B C D P Q R S;
  axiom_ETtransitive :
   forall A B C P Q R a b c,
    ET A B C a b c -> ET a b c P Q R -> ET A B C P Q R;
  axiom_cutoff1 :
   forall A B C D E a b c d e,
    BetS A B C -> BetS a b c -> BetS E D C -> BetS e d c ->
    ET B C D b c d -> ET A C E a c e ->
    EF A B D E a b d e;
  axiom_cutoff2 :
   forall A B C D E a b c d e,
    BetS B C D -> BetS b c d -> ET C D E c d e -> EF A B D E a b d e ->
    EF A B C E a b c e;
  axiom_paste1 :
   forall A B C D E a b c d e,
    BetS A B C -> BetS a b c -> BetS E D C -> BetS e d c ->
    ET B C D b c d -> EF A B D E a b d e ->
    ET A C E a c e;
  axiom_deZolt1 :
   forall B C D E, BetS B E D -> ~ ET D B C E B C;
  axiom_deZolt2 :
   forall A B C E F,
    Triangle A B C -> BetS B E A -> BetS B F C ->
  ~ ET A B C E B F;
  axiom_paste2 :
   forall A B C D E a b c d e,
    BetS B C D -> BetS b c d -> ET C D E c d e ->
    EF A B C E a b c e -> EF A B D E a b d e;
  axiom_paste3 :
   forall A B C D a b c d,
    ET A B C a b c -> ET A B D a b d ->
    TS C A B D -> TS c a b d ->
    EF A C B D a c b d;
  axiom_paste4 :
   forall A B C D F G H K L M e m,
    EF A B m D F K H G -> EF D B e C G H M L ->
    TS A B D C -> BetS K H M -> BetS F G L -> BetS B m D -> BetS B e C ->
    EF A B C D F K M L;
  axiom_paste5 :
   forall B C D E L M b c d e l m,
    EF B M L D b m l d -> EF M C E L m c e l ->
    BetS B M C -> BetS b m c -> BetS E L D -> BetS e l d ->
    EF B C E D b c e d;
}.