Library GeoCoq.Meta_theory.Parallel_postulates.tarski_s_euclid_remove_degenerated_cases
Require Import GeoCoq.Axioms.parallel_postulates.
Require Import GeoCoq.Tarski_dev.Ch05_bet_le.
Section tarski_s_euclid_remove_degenerated_cases.
Context `{T2D:Tarski_2D}.
Lemma tarski_s_euclid_remove_degenerated_cases :
(∀ A B C D T,
A ≠ B →
A ≠ C →
A ≠ D →
A ≠ T →
B ≠ C →
B ≠ D →
B ≠ T →
C ≠ D →
C ≠ T →
D ≠ T →
¬ Col A B C →
Bet A D T →
Bet B D C →
∃ x y : Tpoint, Bet A B x ∧ Bet A C y ∧ Bet x T y) →
∀ A B C D T,
Bet A D T →
Bet B D C →
A ≠ D → ∃ x y : Tpoint, Bet A B x ∧ Bet A C y ∧ Bet x T y.
Proof.
intro HGC; intros A B C D T HADT HBDC HAD.
elim (eq_dec_points A B); intro HAB.
subst; ∃ T; ∃ C; Between.
elim (eq_dec_points A C); intro HAC.
subst; ∃ B; ∃ T; Between.
elim (eq_dec_points A T); intro HAT.
exfalso; apply HAD; treat_equalities; reflexivity.
elim (eq_dec_points B C); intro HBC.
subst; ∃ T; ∃ T; Between.
elim (eq_dec_points B D); intro HBD.
subst; ∃ T; ∃ C; Between.
elim (eq_dec_points B T); intro HBT.
subst; ∃ T; ∃ C; Between.
elim (eq_dec_points C D); intro HCD.
subst; ∃ B; ∃ T; Between.
elim (eq_dec_points C T); intro HCT.
subst; ∃ B; ∃ T; Between.
elim (eq_dec_points D T); intro HDT.
subst; ∃ B; ∃ C; Between.
elim (Col_dec A B C); intro HABC.
{
elim HABC; clear HABC; intro HABC.
{
assert (H : Bet A B D) by eBetween; assert (Bet A B T) by eBetween.
∃ T; ∃ C; Between.
}
{
elim HABC; clear HABC; intro HABC.
{
assert (H : Bet A C D) by eBetween; assert (Bet A C T) by eBetween.
∃ B; ∃ T; Between.
}
{
assert (H : Bet B A D ∨ Bet B D A) by (apply l5_3 with C; Between).
elim H; clear H; intro H.
{
assert (H' : Bet A C T ∨ Bet A T C) by (apply l5_2 with B; eBetween).
elim H'; clear H'; intro H'.
{
∃ B; ∃ T; Between.
}
{
∃ B; ∃ C; split ; try Between.
split; try Between.
eBetween.
}
}
{
assert (H' : Bet A B T ∨ Bet A T B) by (apply l5_1 with D; Between).
elim H'; clear H'; intro H'.
{
∃ T; ∃ C; Between.
}
{
∃ B; ∃ C; split ; try Between.
split; try Between.
eBetween.
}
}
}
}
}
{
apply HGC with D; assumption.
}
Qed.
End tarski_s_euclid_remove_degenerated_cases.
Require Import GeoCoq.Tarski_dev.Ch05_bet_le.
Section tarski_s_euclid_remove_degenerated_cases.
Context `{T2D:Tarski_2D}.
Lemma tarski_s_euclid_remove_degenerated_cases :
(∀ A B C D T,
A ≠ B →
A ≠ C →
A ≠ D →
A ≠ T →
B ≠ C →
B ≠ D →
B ≠ T →
C ≠ D →
C ≠ T →
D ≠ T →
¬ Col A B C →
Bet A D T →
Bet B D C →
∃ x y : Tpoint, Bet A B x ∧ Bet A C y ∧ Bet x T y) →
∀ A B C D T,
Bet A D T →
Bet B D C →
A ≠ D → ∃ x y : Tpoint, Bet A B x ∧ Bet A C y ∧ Bet x T y.
Proof.
intro HGC; intros A B C D T HADT HBDC HAD.
elim (eq_dec_points A B); intro HAB.
subst; ∃ T; ∃ C; Between.
elim (eq_dec_points A C); intro HAC.
subst; ∃ B; ∃ T; Between.
elim (eq_dec_points A T); intro HAT.
exfalso; apply HAD; treat_equalities; reflexivity.
elim (eq_dec_points B C); intro HBC.
subst; ∃ T; ∃ T; Between.
elim (eq_dec_points B D); intro HBD.
subst; ∃ T; ∃ C; Between.
elim (eq_dec_points B T); intro HBT.
subst; ∃ T; ∃ C; Between.
elim (eq_dec_points C D); intro HCD.
subst; ∃ B; ∃ T; Between.
elim (eq_dec_points C T); intro HCT.
subst; ∃ B; ∃ T; Between.
elim (eq_dec_points D T); intro HDT.
subst; ∃ B; ∃ C; Between.
elim (Col_dec A B C); intro HABC.
{
elim HABC; clear HABC; intro HABC.
{
assert (H : Bet A B D) by eBetween; assert (Bet A B T) by eBetween.
∃ T; ∃ C; Between.
}
{
elim HABC; clear HABC; intro HABC.
{
assert (H : Bet A C D) by eBetween; assert (Bet A C T) by eBetween.
∃ B; ∃ T; Between.
}
{
assert (H : Bet B A D ∨ Bet B D A) by (apply l5_3 with C; Between).
elim H; clear H; intro H.
{
assert (H' : Bet A C T ∨ Bet A T C) by (apply l5_2 with B; eBetween).
elim H'; clear H'; intro H'.
{
∃ B; ∃ T; Between.
}
{
∃ B; ∃ C; split ; try Between.
split; try Between.
eBetween.
}
}
{
assert (H' : Bet A B T ∨ Bet A T B) by (apply l5_1 with D; Between).
elim H'; clear H'; intro H'.
{
∃ T; ∃ C; Between.
}
{
∃ B; ∃ C; split ; try Between.
split; try Between.
eBetween.
}
}
}
}
}
{
apply HGC with D; assumption.
}
Qed.
End tarski_s_euclid_remove_degenerated_cases.