Library GeoCoq.Axioms.hilbert_axioms
Require Export Setoid.
Require Export GeoCoq.Utils.triples.
Class Hilbert_neutral_2D :=
{
Point : Type;
Line : Type;
EqL : Line → Line → Prop;
EqL_Equiv : Equivalence EqL;
Incid : Point → Line → Prop;
Incid_morphism :
∀ P l m, Incid P l → EqL l m → Incid P m;
Incid_dec : ∀ P l, Incid P l ∨ ¬ Incid P l;
eq_dec_pointsH : ∀ A B : Point, A=B ∨ ¬ A=B;
Require Export GeoCoq.Utils.triples.
Class Hilbert_neutral_2D :=
{
Point : Type;
Line : Type;
EqL : Line → Line → Prop;
EqL_Equiv : Equivalence EqL;
Incid : Point → Line → Prop;
Incid_morphism :
∀ P l m, Incid P l → EqL l m → Incid P m;
Incid_dec : ∀ P l, Incid P l ∨ ¬ Incid P l;
eq_dec_pointsH : ∀ A B : Point, A=B ∨ ¬ A=B;
Group I Incidence
line_existence :
∀ A B, A ≠ B → ∃ l, Incid A l ∧ Incid B l;
line_uniqueness :
∀ A B l m,
A ≠ B →
Incid A l → Incid B l → Incid A m → Incid B m →
EqL l m;
two_points_on_line :
∀ l,
{ A : Point & { B | Incid B l ∧ Incid A l ∧ A ≠ B}};
ColH :=
fun A B C ⇒ ∃ l, Incid A l ∧ Incid B l ∧ Incid C l;
l0 : Line;
P0 : Point;
plan : ¬ Incid P0 l0;
∀ A B, A ≠ B → ∃ l, Incid A l ∧ Incid B l;
line_uniqueness :
∀ A B l m,
A ≠ B →
Incid A l → Incid B l → Incid A m → Incid B m →
EqL l m;
two_points_on_line :
∀ l,
{ A : Point & { B | Incid B l ∧ Incid A l ∧ A ≠ B}};
ColH :=
fun A B C ⇒ ∃ l, Incid A l ∧ Incid B l ∧ Incid C l;
l0 : Line;
P0 : Point;
plan : ¬ Incid P0 l0;
Group II Order
BetH : Point → Point → Point → Prop;
between_col : ∀ A B C, BetH A B C → ColH A B C;
between_diff : ∀ A B C, BetH A B C → A ≠ C;
between_comm : ∀ A B C, BetH A B C → BetH C B A;
between_out : ∀ A B, A ≠ B → ∃ C, BetH A B C;
between_only_one : ∀ A B C, BetH A B C → ¬ BetH B C A;
cut :=
fun l A B ⇒ ¬ Incid A l ∧ ¬ Incid B l ∧
∃ I, Incid I l ∧ BetH A I B;
pasch :
∀ A B C l,
¬ ColH A B C → ¬ Incid C l → cut l A B →
cut l A C ∨ cut l B C;
between_col : ∀ A B C, BetH A B C → ColH A B C;
between_diff : ∀ A B C, BetH A B C → A ≠ C;
between_comm : ∀ A B C, BetH A B C → BetH C B A;
between_out : ∀ A B, A ≠ B → ∃ C, BetH A B C;
between_only_one : ∀ A B C, BetH A B C → ¬ BetH B C A;
cut :=
fun l A B ⇒ ¬ Incid A l ∧ ¬ Incid B l ∧
∃ I, Incid I l ∧ BetH A I B;
pasch :
∀ A B C l,
¬ ColH A B C → ¬ Incid C l → cut l A B →
cut l A C ∨ cut l B C;
Group III Congruence
CongH : Point → Point → Point → Point → Prop;
cong_permr : ∀ A B C D, CongH A B C D → CongH A B D C;
cong_pseudo_transitivity :
∀ A B C D E F,
CongH A B C D → CongH A B E F → CongH C D E F;
outH :=
fun P A B ⇒ BetH P A B ∨ BetH P B A ∨ (P ≠ A ∧ A = B);
cong_existence :
∀ A B A' P l,
A ≠ B → A' ≠ P →
Incid A' l → Incid P l →
∃ B', Incid B' l ∧ outH A' P B' ∧ CongH A' B' A B;
disjoint := fun A B C D ⇒ ¬ ∃ P, BetH A P B ∧ BetH C P D;
addition :
∀ A B C A' B' C',
ColH A B C → ColH A' B' C' →
disjoint A B B C → disjoint A' B' B' C' →
CongH A B A' B' → CongH B C B' C' →
CongH A C A' C';
CongaH :
Point → Point → Point → Point → Point → Point → Prop;
conga_refl : ∀ A B C, ¬ ColH A B C → CongaH A B C A B C;
conga_comm : ∀ A B C, ¬ ColH A B C → CongaH A B C C B A;
congaH_permlr :
∀ A B C D E F, CongaH A B C D E F → CongaH C B A F E D;
cong_5 :
∀ A B C A' B' C',
¬ ColH A B C → ¬ ColH A' B' C' →
CongH A B A' B' → CongH A C A' C' →
CongaH B A C B' A' C' →
CongaH A B C A' B' C';
same_side := fun A B l ⇒ ∃ P, cut l A P ∧ cut l B P;
same_side' :=
fun A B X Y ⇒
X ≠ Y ∧
∀ l, Incid X l → Incid Y l → same_side A B l;
congaH_outH_congaH :
∀ A B C D E F A' C' D' F',
CongaH A B C D E F →
outH B A A' → outH B C C' → outH E D D' → outH E F F' →
CongaH A' B C' D' E F';
hcong_4_existence :
∀ A B C O X P,
¬ ColH P O X → ¬ ColH A B C →
∃ Y, CongaH A B C X O Y ∧ same_side' P Y O X;
hcong_4_uniqueness :
∀ A B C O P X Y Y',
¬ ColH P O X → ¬ ColH A B C →
CongaH A B C X O Y → CongaH A B C X O Y' →
same_side' P Y O X → same_side' P Y' O X →
outH O Y Y'
}.
Class Hilbert_euclidean_2D `(Hilbert2 : Hilbert_neutral_2D) :=
{
Para := fun l m ⇒ ¬ ∃ X, Incid X l ∧ Incid X m;
euclid_uniqueness :
∀ l P m1 m2,
¬ Incid P l →
Para l m1 → Incid P m1→ Para l m2 → Incid P m2 →
EqL m1 m2
}.
cong_permr : ∀ A B C D, CongH A B C D → CongH A B D C;
cong_pseudo_transitivity :
∀ A B C D E F,
CongH A B C D → CongH A B E F → CongH C D E F;
outH :=
fun P A B ⇒ BetH P A B ∨ BetH P B A ∨ (P ≠ A ∧ A = B);
cong_existence :
∀ A B A' P l,
A ≠ B → A' ≠ P →
Incid A' l → Incid P l →
∃ B', Incid B' l ∧ outH A' P B' ∧ CongH A' B' A B;
disjoint := fun A B C D ⇒ ¬ ∃ P, BetH A P B ∧ BetH C P D;
addition :
∀ A B C A' B' C',
ColH A B C → ColH A' B' C' →
disjoint A B B C → disjoint A' B' B' C' →
CongH A B A' B' → CongH B C B' C' →
CongH A C A' C';
CongaH :
Point → Point → Point → Point → Point → Point → Prop;
conga_refl : ∀ A B C, ¬ ColH A B C → CongaH A B C A B C;
conga_comm : ∀ A B C, ¬ ColH A B C → CongaH A B C C B A;
congaH_permlr :
∀ A B C D E F, CongaH A B C D E F → CongaH C B A F E D;
cong_5 :
∀ A B C A' B' C',
¬ ColH A B C → ¬ ColH A' B' C' →
CongH A B A' B' → CongH A C A' C' →
CongaH B A C B' A' C' →
CongaH A B C A' B' C';
same_side := fun A B l ⇒ ∃ P, cut l A P ∧ cut l B P;
same_side' :=
fun A B X Y ⇒
X ≠ Y ∧
∀ l, Incid X l → Incid Y l → same_side A B l;
congaH_outH_congaH :
∀ A B C D E F A' C' D' F',
CongaH A B C D E F →
outH B A A' → outH B C C' → outH E D D' → outH E F F' →
CongaH A' B C' D' E F';
hcong_4_existence :
∀ A B C O X P,
¬ ColH P O X → ¬ ColH A B C →
∃ Y, CongaH A B C X O Y ∧ same_side' P Y O X;
hcong_4_uniqueness :
∀ A B C O P X Y Y',
¬ ColH P O X → ¬ ColH A B C →
CongaH A B C X O Y → CongaH A B C X O Y' →
same_side' P Y O X → same_side' P Y' O X →
outH O Y Y'
}.
Class Hilbert_euclidean_2D `(Hilbert2 : Hilbert_neutral_2D) :=
{
Para := fun l m ⇒ ¬ ∃ X, Incid X l ∧ Incid X m;
euclid_uniqueness :
∀ l P m1 m2,
¬ Incid P l →
Para l m1 → Incid P m1→ Para l m2 → Incid P m2 →
EqL m1 m2
}.