Library hilbert_axioms
Module Type HilbertLanguage.
We need a notion of point and line.
Parameter Point : Set.
Parameter Line : Set.
An incidence relation
Parameter Incid : Point -> Line -> Prop.
Two egalities
Parameter EqP : Point -> Point -> Prop.
Parameter EqL : Line -> Line -> Prop.
Axiom EqP_transitivity : forall l m n, EqP l m -> EqP m n -> EqP l n.
Axiom EqP_reflexivity : forall l, EqP l l.
Axiom EqP_symmetry : forall l m, EqP l m -> EqP m l.
Axiom EqL_transitivity : forall l m n, EqL l m -> EqL m n -> EqL l n.
Axiom EqL_reflexivity : forall l, EqL l l.
Axiom EqL_symmetry : forall l m, EqL l m -> EqL m l.
Axiom EqL_compat_incid : forall A l m, EqL l m -> Incid A l -> Incid A m.
Axiom EqP_compat_incid : forall A B l, EqP A B -> Incid A l -> Incid B l.
Definition Col A B C := exists l : Line, Incid A l /\ Incid B l /\ Incid C l.
Parameter Bet : Point -> Point -> Point -> Prop.
End HilbertLanguage.
Module Type HilbertIncidence.
Declare Module Export HilbertL : HilbertLanguage.
For every pair of distinct points there is a line containing them.
Axiom line_existence : forall A B, A<>B -> exists l, Incid A l /\ Incid B l.
There is only one line going through two points
Axiom line_unicity : forall A B l m, A <> B ->
Incid A l -> Incid B l -> Incid A m -> Incid B m -> EqL l m.
Every line contains at least two points
Axiom two_points_on_line : forall l,
exists A, exists B, Incid B l /\ Incid A l /\ A <> B.
There exists three non collinear points
Axiom plan : exists A, exists B, exists C, ~ Col A B C.
End HilbertIncidence.
Module Type HilbertOrder.
Declare Module Export HilbertL : HilbertLanguage.
Axiom between_col :
forall A B C : Point, Bet A B C ->Col A B C.
Axiom between_comm : forall A B C : Point, Bet A B C -> Bet C B A.
Axiom between_out :
forall A B : Point, A <> B -> exists C : Point, Bet A B C.
Axiom between_only_one :
forall A B C : Point,
Bet A B C -> ~ Bet B C A /\ ~ Bet B A C.
Axiom between_one : forall A B C,
A<>B -> A<>C -> B<>C -> Col A B C ->
Bet A B C \/ Bet B C A \/ Bet B A C.
Definition go_through := fun l A B => exists C, Incid C l /\ Bet A C B.
Axiom Pasch : forall A B C l,
~Col A B C -> ~ Incid A l -> ~ Incid B l -> ~ Incid C l ->
go_through l A B ->
(go_through l A C /\ ~go_through l B C) \/
(go_through l B C /\ ~ go_through l A C).
End HilbertOrder.
Module Type HilbertCongruence.
Declare Module Export HilbertL : HilbertLanguage.
Parameter Cong : Point -> Point -> Point -> Point -> Prop.
Axiom cong_pseudo_transitivity : forall A B C D E F,
Cong A B C D -> Cong A B E F -> Cong C D E F.
Axiom cong_reflexivity : forall A B, Cong A B A B.
Axiom addition : forall A B C D E F,
Bet A B C -> Bet D E F ->
Cong A B D E -> Cong B C E F -> Cong A C D F.
Axiom point_construction_existence : forall A B C D,
C<>D -> exists X, (Bet C X D \/ Bet C D X) /\ Cong C X A B.
Axiom point_construction_unicity : forall A B C D X1 X2,
C<>D ->
Bet C X1 D \/ Bet C D X1 -> Cong C X1 A B ->
Bet C X2 D \/ Bet C D X2 -> Cong C X2 A B ->
EqP X1 X2.
End HilbertCongruence.
Module Type Hilbert.
Declare Module Export HilbertL : HilbertLanguage.
Axiom line_existence : forall A B, A<>B -> exists l, Incid A l /\ Incid B l.
Axiom line_unicity : forall A B l m, A <> B ->
Incid A l -> Incid B l -> Incid A m -> Incid B m -> EqL l m.
Axiom two_points_on_line : forall l,
exists A, exists B, Incid B l /\ Incid A l /\ A <> B.
Axiom plan : exists A, exists B, exists C, ~ Col A B C.
Axiom between_col : forall A B C : Point, Bet A B C -> Col A B C.
Axiom between_comm : forall A B C : Point, Bet A B C -> Bet C B A.
Axiom between_out :
forall A B : Point, A <> B -> exists C : Point, Bet A B C.
Axiom between_only_one :
forall A B C : Point, Bet A B C -> ~ Bet B C A /\ ~ Bet B A C.
Axiom between_one : forall A B C,
A<>B -> A<>C -> B<>C -> Col A B C ->
Bet A B C \/ Bet B C A \/ Bet B A C.
Definition go_through := fun l A B => exists C, Incid C l /\ Bet A C B.
Axiom Pasch : forall A B C l,
~Col A B C -> ~ Incid A l -> ~ Incid B l -> ~ Incid C l ->
go_through l A B ->
(go_through l A C /\ ~go_through l B C) \/
(go_through l B C /\ ~ go_through l A C).
Parameter Cong : Point -> Point -> Point -> Point -> Prop.
Axiom cong_pseudo_transitivity : forall A B C D E F,
Cong A B C D -> Cong A B E F -> Cong C D E F.
Axiom cong_reflexivity : forall A B, Cong A B A B.
Axiom addition : forall A B C D E F,
Bet A B C -> Bet D E F ->
Cong A B D E -> Cong B C E F -> Cong A C D F.
Axiom point_construction_existence : forall A B C D,
C<>D -> exists X, (Bet C X D \/ Bet C D X) /\ Cong C X A B.
Axiom point_construction_unicity : forall A B C D X1 X2,
C<>D ->
Bet C X1 D \/ Bet C D X1 -> Cong C X1 A B ->
Bet C X2 D \/ Bet C D X2 -> Cong C X2 A B ->
EqP X1 X2.
End Hilbert.
Module Type HilbertParallels.
Declare Module Export HilbertL : HilbertLanguage.
Parameter Par : Point -> Point -> Point -> Point -> Prop.
Axiom euclid_existence : forall A B P,
exists C, exists D, C<>D /\ Par A B C D /\ Col P C D.
Axiom euclid_unicity : forall A B P C1 D1 C2 D2,
~ Col P A B ->
Par A B C1 D1 -> Col P C1 D1 ->
Par A B C2 D2 -> Col P C2 D2 ->
Col C1 C2 D2 /\ Col D1 C2 D2.
End HilbertParallels.