Theory Tarski_Postulate_Parallels
theory Tarski_Postulate_Parallels
imports
Tarski_Neutral_Archimedes
begin
context Tarski_neutral_dimensionless
begin
section "Parallel's Postulate"
subsection "Definitions"
definition tarski_s_parallel_postulate ::
"bool"
("TarskiSParallelPostulate")
where
"tarski_s_parallel_postulate ≡
∀ A B C D T.
Bet A D T ∧ Bet B D C ∧ A ≠ D
⟶
(∃ X Y. Bet A B X ∧ Bet A C Y ∧ Bet X T Y)"
definition euclid_5 ::
"bool" ("Euclid5")
where
"euclid_5 ≡
∀ P Q R S T U.
BetS P T Q ∧ BetS R T S ∧ BetS Q U R ∧ ¬ Col P Q S ∧ Cong P T Q T ∧ Cong R T S T
⟶
(∃ I. BetS S Q I ∧ BetS P U I)"
definition euclid_s_parallel_postulate ::
"bool" ("EuclidSParallelPostulate")
where
"euclid_s_parallel_postulate ≡
∀ A B C D P Q R.
B C OS A D ∧ SAMS A B C B C D ∧ A B C B C D SumA P Q R ∧ ¬ Bet P Q R
⟶
(∃ Y. B Out A Y ∧ C Out D Y)"
definition playfair_s_postulate ::
"bool"
("PlayfairSPostulate")
where
"playfair_s_postulate ≡
∀ A1 A2 B1 B2 C1 C2 P.
A1 A2 Par B1 B2 ∧ Col P B1 B2 ∧ A1 A2 Par C1 C2 ∧ Col P C1 C2
⟶
Col C1 B1 B2 ∧ Col C2 B1 B2"
definition decidability_of_intersection ::
"bool"
("DecidabilityIntersection")
where
"decidability_of_intersection ≡
∀ A B C D.
(∃ I. Col I A B ∧ Col I C D) ∨ ¬ (∃ I. Col I A B ∧ Col I C D)"
definition alternate_interior_angles_postulate ::
"bool"
("AlternateInteriorAnglesPostulate")
where
"alternate_interior_angles_postulate ≡
∀ A B C D.
A C TS B D ∧ A B Par C D
⟶
B A C CongA D C A"
definition consecutive_interior_angles_postulate ::
"bool"
("ConsecutiveInteriorAnglesPostulate")
where
"consecutive_interior_angles_postulate ≡
∀ A B C D.
B C OS A D ∧ A B Par C D
⟶
A B C SuppA B C D"
definition alternative_playfair_s_postulate ::
"bool"
("AlternativePlayfairSPostulate")
where
"alternative_playfair_s_postulate ≡
∀ A1 A2 B1 B2 C1 C2 P.
P Perp2 A1 A2 B1 B2 ∧ ¬ Col A1 A2 P ∧ Col P B1 B2 ∧
Coplanar A1 A2 B1 B2 ∧ A1 A2 Par C1 C2 ∧ Col P C1 C2
⟶
Col C1 B1 B2 ∧ Col C2 B1 B2"
definition proclus_postulate ::
"bool"
("ProclusPostulate")
where
"proclus_postulate ≡
∀ A B C D P Q.
A B Par C D ∧ Col A B P ∧ ¬ Col A B Q ∧ Coplanar C D P Q
⟶
(∃ Y. Col P Q Y ∧ Col C D Y)"
definition triangle_postulate ::
"bool"
("TrianglePostulate")
where
"triangle_postulate ≡
∀ A B C D E F.
A B C TriSumA D E F
⟶
Bet D E F"
definition bachmann_s_lotschnittaxiom ::
"bool"
("BachmannsLotschnittaxiom")
where
"bachmann_s_lotschnittaxiom ≡
∀ P Q R P1 R1.
(P ≠ Q ∧ Q ≠ R ∧ Per P Q R ∧ Per Q P P1 ∧ Per Q R R1 ∧
Coplanar P Q R P1 ∧ Coplanar P Q R R1
⟶
(∃ S. Col P P1 S ∧ Col R R1 S))"
definition legendre_s_parallel_postulate ::
"bool"
("LegendresParallelPostulate")
where
"legendre_s_parallel_postulate ≡
∃ A B C.
¬ Col A B C ∧
Acute A B C ∧
(∀ T. T InAngle A B C ⟶ (∃ X Y. B Out A X ∧ B Out C Y ∧ Bet X T Y))"
definition weak_inverse_projection_postulate ::
"bool"
("WeakInverseProjectionPostulate")
where
"weak_inverse_projection_postulate ≡
∀ A B C D E F P Q.
((Acute A B C ∧ Per D E F ∧ A B C A B C SumA D E F ∧
B Out A P ∧ P ≠ Q ∧ Per B P Q ∧ Coplanar A B C Q)
⟶
(∃ Y. B Out C Y ∧ Col P Q Y))"
definition weak_triangle_circumscription_principle ::
"bool"
("WeakTriangleCircumscriptionPrinciple")
where
"weak_triangle_circumscription_principle ≡
∀ A B C A1 A2 B1 B2.
(¬ Col A B C ∧ Per A C B ∧ A1 A2 PerpBisect B C ∧
B1 B2 PerpBisect A C ∧ Coplanar A B C A1 ∧ Coplanar A B C A2 ∧
Coplanar A B C B1 ∧ Coplanar A B C B2
⟶
(∃ I. Col A1 A2 I ∧ Col B1 B2 I))"
definition weak_tarski_s_parallel_postulate ::
"bool"
("WeakTarskiParallelPostulate")
where
"weak_tarski_s_parallel_postulate ≡
∀ A B C T.
(Per A B C ∧ T InAngle A B C
⟶
(∃ X Y. B Out A X ∧ B Out C Y ∧ Bet X T Y))"
definition existential_playfair_s_postulate ::
"bool"
("ExistentialPlayfairPostulate")
where
"existential_playfair_s_postulate ≡
∃ A1 A2 P.
¬ Col A1 A2 P ∧
(∀ B1 B2 C1 C2.
A1 A2 Par B1 B2 ∧ Col P B1 B2 ∧ A1 A2 Par C1 C2 ∧ Col P C1 C2
⟶
(Col C1 B1 B2 ∧ Col C2 B1 B2))"
definition postulate_of_right_saccheri_quadrilaterals ::
"bool"
("PostulateRightSaccheriQuadrilaterals")
where
"postulate_of_right_saccheri_quadrilaterals ≡
∀ A B C D.
Saccheri A B C D
⟶
Per A B C"
definition postulate_of_existence_of_a_right_saccheri_quadrilateral ::
"bool"
("PostulateExistenceRightSaccheriQuadrilateral")
where
"postulate_of_existence_of_a_right_saccheri_quadrilateral ≡
∃ A B C D.
Saccheri A B C D ∧ Per A B C"
definition postulate_of_existence_of_a_triangle_whose_angles_sum_to_two_rights ::
"bool"
("PostulateExistenceTriangleAnglesSumTwoRights")
where
"postulate_of_existence_of_a_triangle_whose_angles_sum_to_two_rights ≡
∃ A B C D E F.
¬ Col A B C ∧ A B C TriSumA D E F ∧ Bet D E F"
definition inverse_projection_postulate ::
"bool"
("InverseProjectionPostulate")
where
"inverse_projection_postulate ≡
∀ A B C P Q.
Acute A B C ∧ B Out A P ∧ P ≠ Q ∧ Per B P Q ∧ Coplanar A B C Q
⟶
(∃ Y. B Out C Y ∧ Col P Q Y)"
definition alternative_proclus_postulate ::
"bool"
("AlternativeProclusPostulate")
where
"alternative_proclus_postulate ≡
∀ A B C D P Q.
P Perp2 A B C D ∧ ¬ Col C D P ∧ Coplanar A B C D ∧ Col A B P ∧
¬ Col A B Q ∧ Coplanar C D P Q
⟶
(∃ Y. (Col P Q Y ∧ Col C D Y))"
definition strong_parallel_postulate ::
"bool"
("StrongParallelPostulate")
where
"strong_parallel_postulate ≡
∀ P Q R S T U.
BetS P T Q ∧ BetS R T S ∧ ¬ Col P R U ∧ Coplanar P Q R U ∧
Cong P T Q T ∧ Cong R T S T
⟶
(∃ I. (Col S Q I ∧ Col P U I))"
definition triangle_circumscription_principle ::
"bool"
("TriangleCircumscriptionPrinciple")
where
"triangle_circumscription_principle ≡
∀ A B C.
¬ Col A B C
⟶
(∃ D. Cong A D B D ∧ Cong A D C D ∧ Coplanar A B C D)"
definition thales_converse_postulate::
"bool"
("ThalesConversePostulate") where
"thales_converse_postulate ≡
∀ A B C M.
M Midpoint A B ∧ Per A C B
⟶
Cong M A M C"
definition existential_thales_postulate ::
"bool"
("ExistentialThalesPostulate") where
"existential_thales_postulate ≡
∃ A B C M.
¬ Col A B C ∧ M Midpoint A B ∧ Cong M A M C ∧ Per A C B"
definition thales_postulate::
"bool"
("ThalesPostulate") where
"thales_postulate ≡
∀ A B C M.
M Midpoint A B ∧ Cong M A M C
⟶
Per A C B"
definition posidonius_postulate ::
"bool"
("PosidoniusPostulate") where
"posidonius_postulate ≡
∃ A1 A2 B1 B2.
¬ Col A1 A2 B1 ∧ B1 ≠ B2 ∧ Coplanar A1 A2 B1 B2 ∧
(∀ A3 A4 B3 B4.
Col A1 A2 A3 ∧ Col B1 B2 B3 ∧ A1 A2 Perp A3 B3 ∧
Col A1 A2 A4 ∧ Col B1 B2 B4 ∧ A1 A2 Perp A4 B4
⟶
Cong A3 B3 A4 B4)"
definition postulate_of_right_lambert_quadrilaterals ::
"bool"
("PostulateOfRightLambertQuadrilaterals") where
"postulate_of_right_lambert_quadrilaterals ≡
∀ A B C D.
Lambert A B C D
⟶
Per B C D"
definition postulate_of_existence_of_a_right_lambert_quadrilateral ::
"bool"
("PostulateExistenceRightLambertQuadrilateral") where
"postulate_of_existence_of_a_right_lambert_quadrilateral ≡
∃ A B C D.
Lambert A B C D ∧ Per B C D"
definition postulate_of_existence_of_similar_triangles ::
"bool"
("PostulateOfExistenceOfSimilarTriangles") where
"postulate_of_existence_of_similar_triangles ≡
∃ A B C D E F.
¬ Col A B C ∧ ¬ Cong A B D E ∧ A B C CongA D E F ∧
B C A CongA E F D ∧ C A B CongA F D E"
definition midpoint_converse_postulate ::
"bool"
("MidpointConversePostulate") where
"midpoint_converse_postulate ≡
∀ A B C P Q.
¬ Col A B C ∧ P Midpoint B C ∧ A B Par Q P ∧ Col A C Q
⟶
Q Midpoint A C"
definition postulate_of_transitivity_of_parallelism::
"bool"
("PostulateOfTransitivityOfParallelism") where
"postulate_of_transitivity_of_parallelism ≡
∀ A1 A2 B1 B2 C1 C2.
A1 A2 Par B1 B2 ∧ B1 B2 Par C1 C2
⟶
A1 A2 Par C1 C2"
definition perpendicular_transversal_postulate ::
"bool"
("PerpendicularTransversalPostulate") where
"perpendicular_transversal_postulate ≡
∀ A B C D P Q.
A B Par C D ∧ A B Perp P Q ∧ Coplanar C D P Q
⟶
C D Perp P Q"
definition postulate_of_parallelism_of_perpendicular_transversals ::
"bool"
("PostulateOfParallelismOfPerpendicularTransversals") where
"postulate_of_parallelism_of_perpendicular_transversals ≡
∀ A1 A2 B1 B2 C1 C2 D1 D2.
A1 A2 Par B1 B2 ∧ A1 A2 Perp C1 C2 ∧ B1 B2 Perp D1 D2 ∧
Coplanar A1 A2 C1 D1 ∧ Coplanar A1 A2 C1 D2 ∧
Coplanar A1 A2 C2 D1 ∧ Coplanar A1 A2 C2 D2
⟶
C1 C2 Par D1 D2"
definition universal_posidonius_postulate ::
"bool"
("UniversalPosidoniusPostulate") where
"universal_posidonius_postulate ≡
∀ A1 A2 A3 A4 B1 B2 B3 B4.
A1 A2 Par B1 B2 ∧ Col A1 A2 A3 ∧ Col B1 B2 B3 ∧ A1 A2 Perp A3 B3 ∧
Col A1 A2 A4 ∧ Col B1 B2 B4 ∧ A1 A2 Perp A4 B4
⟶
Cong A3 B3 A4 B4"
definition alternative_strong_parallel_postulate ::
"bool"
("AlternativeStrongParallelPostulate") where
"alternative_strong_parallel_postulate ≡
∀ A B C D P Q R.
B C OS A D ∧ A B C B C D SumA P Q R ∧ ¬ Bet P Q R
⟶
(∃ Y. Col B A Y ∧ Col C D Y)"
definition Postulate01 :: "bool" where
"Postulate01 ≡ tarski_s_parallel_postulate"
definition Postulate02 :: "bool" where
"Postulate02 ≡ playfair_s_postulate"
definition Postulate03 :: "bool" where
"Postulate03 ≡ triangle_postulate"
definition Postulate04 :: "bool" where
"Postulate04 ≡ bachmann_s_lotschnittaxiom"
definition Postulate05 :: "bool" where
"Postulate05 ≡ postulate_of_transitivity_of_parallelism"
definition Postulate06 :: "bool" where
"Postulate06 ≡ midpoint_converse_postulate"
definition Postulate07 :: "bool" where
"Postulate07 ≡ alternate_interior_angles_postulate"
definition Postulate08 :: "bool" where
"Postulate08 ≡ consecutive_interior_angles_postulate"
definition Postulate09 :: "bool" where
"Postulate09 ≡ perpendicular_transversal_postulate"
definition Postulate10 :: "bool" where
"Postulate10 ≡ postulate_of_parallelism_of_perpendicular_transversals"
definition Postulate11 :: "bool" where
"Postulate11 ≡ universal_posidonius_postulate"
definition Postulate12 :: "bool" where
"Postulate12 ≡ alternative_playfair_s_postulate"
definition Postulate13 :: "bool" where
"Postulate13 ≡ proclus_postulate"
definition Postulate14 :: "bool" where
"Postulate14 ≡ alternative_proclus_postulate"
definition Postulate15 :: "bool" where
"Postulate15 ≡ triangle_circumscription_principle"
definition Postulate16 :: "bool" where
"Postulate16 ≡ inverse_projection_postulate"
definition Postulate17 :: "bool" where
"Postulate17 ≡ euclid_5"
definition Postulate18 :: "bool" where
"Postulate18 ≡ strong_parallel_postulate"
definition Postulate19 :: "bool" where
"Postulate19 ≡ alternative_strong_parallel_postulate"
definition Postulate20 :: "bool" where
"Postulate20 ≡ euclid_s_parallel_postulate"
definition Postulate21 :: "bool" where
"Postulate21 ≡ postulate_of_existence_of_a_triangle_whose_angles_sum_to_two_rights"
definition Postulate22 :: "bool" where
"Postulate22 ≡ posidonius_postulate"
definition Postulate23 :: "bool" where
"Postulate23 ≡ postulate_of_existence_of_similar_triangles"
definition Postulate24 :: "bool" where
"Postulate24 ≡ thales_postulate"
definition Postulate25 :: "bool" where
"Postulate25 ≡ thales_converse_postulate"
definition Postulate26 :: "bool" where
"Postulate26 ≡ existential_thales_postulate"
definition Postulate27 :: "bool" where
"Postulate27 ≡ postulate_of_right_saccheri_quadrilaterals"
definition Postulate28 :: "bool" where
"Postulate28 ≡ postulate_of_existence_of_a_right_saccheri_quadrilateral"
definition Postulate29 :: "bool" where
"Postulate29 ≡ postulate_of_right_lambert_quadrilaterals"
definition Postulate30 :: "bool" where
"Postulate30 ≡ postulate_of_existence_of_a_right_lambert_quadrilateral"
definition Postulate31 :: "bool" where
"Postulate31 ≡ weak_inverse_projection_postulate"
definition Postulate32 :: "bool" where
"Postulate32 ≡ weak_tarski_s_parallel_postulate"
definition Postulate33 :: "bool" where
"Postulate33 ≡ weak_triangle_circumscription_principle"
definition Postulate34 :: "bool" where
"Postulate34 ≡ legendre_s_parallel_postulate"
definition Postulate35 :: "bool" where
"Postulate35 ≡ existential_playfair_s_postulate"
subsection "Propositions"
lemma euclid_5__original_euclid:
assumes "Euclid5"
shows "EuclidSParallelPostulate"
proof -
{
fix A B C D P Q R
assume P1: "B C OS A D ∧ SAMS A B C B C D ∧ A B C B C D SumA P Q R ∧ ¬ Bet P Q R"
obtain M where P2: "M Midpoint B C"
using midpoint_existence by auto
obtain D' where P3: "C Midpoint D D'"
using symmetric_point_construction by auto
obtain E where P4: "M Midpoint D' E"
using symmetric_point_construction by auto
have P5: "A ≠ B"
using P1 os_distincts by blast
have P6: "B ≠ C"
using P1 os_distincts by blast
have P7: "C ≠ D"
using P1 os_distincts by blast
have P10: "M ≠ B"
using P2 P6 is_midpoint_id by auto
have P11: "M ≠ C"
using P2 P6 is_midpoint_id_2 by auto
have P13: "C ≠ D'"
using P3 P7 is_midpoint_id_2 by blast
have P16: "¬ Col B C A"
using one_side_not_col123 P1 by blast
have "B C OS D A"
using P1 one_side_symmetry by blast
then have P17: "¬ Col B C D"
using one_side_not_col123 P1 by blast
then have P18: "¬ Col M C D"
using P2 Col_perm P11 col_transitivity_2 midpoint_col by blast
then have P19: "¬ Col M C D'"
by (metis P13 P3 Col_perm col_transitivity_2 midpoint_col)
then have P20: "¬ Col D' C B"
by (metis Col_perm P13 P17 P3 col_transitivity_2 midpoint_col)
then have P21: "¬ Col M C E"
by (metis P19 P4 bet_col col2__eq col_permutation_4 midpoint_bet midpoint_distinct_2)
have P22: "M C D' CongA M B E ∧ M D' C CongA M E B" using P13 l11_49
by (metis Cong_cases P19 P2 P4 l11_51 l7_13_R1 l7_2 midpoint_cong not_col_distincts)
have P23: "Cong C D' B E"
using P11 P2 P4 l7_13_R1 l7_2 by blast
have P27: "C B TS D D'"
by (simp add: P13 P17 P3 bet__ts midpoint_bet not_col_permutation_4)
have P28: "A InAngle C B E"
proof -
have "C B A LeA C B E"
proof -
have "A B C LeA B C D'"
proof -
have "Bet D C D'"
by (simp add: P3 midpoint_bet)
then show ?thesis using P1 P7 P13 sams_chara
by (metis sams_left_comm sams_sym)
qed
moreover have "A B C CongA C B A"
using P5 P6 conga_pseudo_refl by auto
moreover have "B C D' CongA C B E"
by (metis CongA_def Mid_cases P2 P22 P4 P6 symmetry_preserves_conga)
ultimately show ?thesis
using l11_30 by blast
qed
moreover have "C B OS E A"
proof -
have "C B TS E D'"
using P2 P20 P4 l7_2 l9_2 mid_two_sides not_col_permutation_1 by blast
moreover have "C B TS A D'"
using P27 ‹B C OS D A› invert_two_sides l9_8_2 by blast
ultimately show ?thesis
using OS_def by blast
qed
ultimately show ?thesis
using lea_in_angle by simp
qed
obtain A' where P30: "Bet C A' E ∧ (A' = B ∨ B Out A' A)" using P28 InAngle_def by auto
{
assume "A' = B"
then have "Col D' C B"
by (metis Col_def P2 P21 P30 P6 col_transitivity_1 midpoint_col)
then have "False"
by (simp add: P20)
then have "∃ Y. B Out A Y ∧ C Out D Y" by auto
}
{
assume P31: "B Out A' A"
have "∃ I. BetS D' C I ∧ BetS B A' I"
proof -
have P32: "BetS B M C"
using BetS_def Midpoint_def P10 P11 P2 by auto
moreover have "BetS E M D'"
using BetS_def Bet_cases P19 P21 P4 midpoint_bet not_col_distincts by fastforce
moreover have "BetS C A' E"
proof -
have P32A: "C ≠ A'"
using P16 P31 out_col by auto
{
assume "A' = E"
then have P33: "B Out A E"
using P31 l6_6 by blast
then have "A B C B C D SumA D' C D"
proof -
have "D' C B CongA A B C"
proof -
have "D' C M CongA E B M"
by (simp add: P22 conga_comm)
moreover have "C Out D' D'"
using P13 out_trivial by auto
moreover have "C Out B M"
using BetSEq Out_cases P32 bet_out_1 by blast
moreover have "B Out A E"
using P33 by auto
moreover have "B Out C M"
using BetSEq Out_def P32 by blast
ultimately show ?thesis
using l11_10 by blast
qed
moreover have "D' C B B C D SumA D' C D"
by (simp add: P27 l9_2 ts__suma_1)
moreover have "B C D CongA B C D"
using P6 P7 conga_refl by auto
moreover have "D' C D CongA D' C D"
using P13 P7 conga_refl by presburger
ultimately show ?thesis
using conga3_suma__suma by blast
qed
then have "D' C D CongA P Q R"
using P1 suma2__conga by auto
then have "Bet P Q R"
using Bet_cases P3 bet_conga__bet midpoint_bet by blast
then have "False" using P1 by simp
}
then have "A' ≠ E" by auto
then show ?thesis
by (simp add: BetS_def P30 P32A)
qed
moreover have "¬ Col B C D'"
by (simp add: P20 not_col_permutation_3)
moreover have "Cong B M C M"
using Midpoint_def P2 not_cong_1243 by blast
moreover have "Cong E M D' M"
using Cong_perm Midpoint_def P4 by blast
ultimately show ?thesis
using euclid_5_def assms by blast
qed
then obtain Y where P34: "Bet D' C Y ∧ BetS B A' Y" using BetSEq by blast
then have "∃ Y. B Out A Y ∧ C Out D Y"
proof -
have P35: "B Out A Y"
by (metis BetSEq Out_def P31 P34 l6_7)
moreover have "C Out D Y"
proof -
have "D ≠ C"
using P7 by auto
moreover have "Y ≠ C"
using P16 P35 l6_6 out_col by blast
moreover have "D' ≠ C"
using P13 by auto
moreover have "Bet D C D'"
by (simp add: P3 midpoint_bet)
moreover have "Bet Y C D'"
by (simp add: Bet_perm P34)
ultimately show ?thesis
using l6_2 by blast
qed
ultimately show ?thesis by auto
qed
}
then have "∃ Y. B Out A Y ∧ C Out D Y"
using P30 ‹A' = B ⟹ ∃Y. B Out A Y ∧ C Out D Y› by blast
}
then show ?thesis using euclid_s_parallel_postulate_def by blast
qed
lemma tarski_s_euclid_implies_euclid_5:
assumes "TarskiSParallelPostulate"
shows "Euclid5"
proof -
{
fix P Q R S T U
assume
P1: "BetS P T Q ∧ BetS R T S ∧ BetS Q U R ∧ ¬ Col P Q S ∧ Cong P T Q T ∧ Cong R T S T"
have P1A: "BetS P T Q" using P1 by simp
have P1B: "BetS R T S" using P1 by simp
have P1C: "BetS Q U R" using P1 by simp
have P1D: "¬ Col P Q S" using P1 by simp
have P1E: "Cong P T Q T" using P1 by simp
have P1F: "Cong R T S T" using P1 by simp
obtain V where P2: "P Midpoint R V"
using symmetric_point_construction by auto
have P3: "Bet V P R"
using Mid_cases P2 midpoint_bet by blast
then obtain W where P4: "Bet P W Q ∧ Bet U W V" using inner_pasch
using BetSEq P1C by blast
{
assume "P = W"
have "P ≠ V"
by (metis BetSEq Bet_perm Col_def Cong_perm Midpoint_def P1A P1B P1D P1E P1F
P2 between_trivial is_midpoint_id_2 l7_9)
have "Col P Q S"
proof -
have f1: "Col V P R"
by (meson Col_def P3)
have f2: "Col U R Q"
by (simp add: BetSEq Col_def P1)
have f3: "Bet P T Q"
using BetSEq P1 by fastforce
have f4: "R = P ∨ Col V P U"
by (metis (no_types) Col_def P4 ‹P = W› ‹P ≠ V› l6_16_1)
have f5: "Col Q P T"
using f3 by (meson Col_def)
have f6: "Col T Q P"
using f3 by (meson Col_def)
have f7: "Col P T Q"
using f3 by (meson Col_def)
have f8: "Col P Q P"
using Col_def P4 ‹P = W› by blast
have "Col R T S"
by (meson BetSEq Col_def P1)
then have "T = P ∨ Q = P"
using f8 f7 f6 f5 f4 f2 f1 by (metis (no_types) BetSEq P1 ‹P ≠ V› colx l6_16_1)
then show ?thesis
by (metis BetSEq P1)
qed
then have "False"
by (simp add: P1D)
}
then have P5: "P ≠ W" by auto
have "Bet V W U"
using Bet_cases P4 by auto
then obtain X Y where P7: "Bet P V X ∧ Bet P U Y ∧ Bet X Q Y"
using assms(1) P1 P4 P5 tarski_s_parallel_postulate_def by blast
have "Q S Par P R"
proof -
have "Q ≠ S"
using P1D col_trivial_2 by auto
moreover have "T Midpoint Q P"
using BetSEq P1A P1E l7_2 midpoint_def not_cong_1243 by blast
moreover have "T Midpoint S R"
using BetSEq P1B P1F l7_2 midpoint_def not_cong_1243 by blast
ultimately show ?thesis
using l12_17 by auto
qed
then have P9: "Q S ParStrict P R"
using P1D Par_def par_strict_symmetry par_symmetry by blast
have P10: "Q S TS P Y"
proof -
have P10A: "P ≠ R"
using P9 par_strict_distinct by auto
then have P11: "P ≠ X"
by (metis P2 P7 bet_neq12__neq midpoint_not_midpoint)
have P12: "¬ Col X Q S"
proof -
have "Q S ParStrict P R"
by (simp add: P9)
then have "Col P R X"
by (metis P2 P3 P7 bet_col between_symmetry midpoint_not_midpoint
not_col_permutation_4 outer_transitivity_between)
then have "P X ParStrict Q S"
using P9 Par_strict_perm P11 par_strict_col_par_strict by blast
then show ?thesis
using par_strict_not_col_2 by auto
qed
{
assume W1: "Col Y Q S"
have W2: "Q = Y"
by (metis P12 P7 W1 bet_col bet_col1 colx)
then have "¬ Col Q P R"
using P9 W1 par_not_col by auto
then have W3: "Q = U"
by (smt BetS_def Col_def P1C P7 W2 col_transitivity_2)
then have "False"
using BetS_def P1C by auto
}
then have "¬ Col Y Q S" by auto
then have "Q S TS X Y"
by (metis P7 P12 bet__ts not_col_distincts not_col_permutation_1)
moreover have "Q S OS X P"
proof -
have "P ≠ V"
using P10A P2 is_midpoint_id_2 by blast
then have "Q S ParStrict P X"
by (meson Bet_perm P3 P7 P9 P11 bet_col not_col_permutation_4 par_strict_col_par_strict)
then have "Q S ParStrict X P"
by (simp add: par_strict_right_comm)
then show ?thesis
by (simp add: l12_6)
qed
ultimately show ?thesis
using l9_8_2 by auto
qed
then obtain I where W4: "Col I Q S ∧ Bet P I Y"
using TS_def by blast
have "∃ I. (BetS S Q I ∧ BetS P U I)"
proof -
have "BetS P U I"
proof -
have "P ≠ Y"
using P10 not_two_sides_id by auto
have W4A: "Bet P U I"
proof -
have W5: "Col P U I"
using P7 W4 bet_col1 by auto
{
assume W6: "Bet U I P"
have W7: "Q S OS P U"
proof -
have "Q S OS R U"
proof -
have "¬ Col Q S R"
using P9 par_strict_not_col_4 by auto
moreover have "Q Out R U"
using BetSEq Out_def P1C by blast
ultimately show ?thesis
by (simp add: out_one_side)
qed
moreover have "Q S OS P R"
by (simp add: P9 l12_6)
ultimately show ?thesis
using one_side_transitivity by blast
qed
have W8: "I Out P U ∨ ¬ Col Q S P"
by (simp add: P1D not_col_permutation_1)
have "False"
proof -
have "I Out U P"
using W4 W6 W7 between_symmetry one_side_chara by blast
then show ?thesis
using W6 not_bet_and_out by blast
qed
}
{
assume V1: "Bet I P U"
have "P R OS I U"
proof -
have "P R OS I Q"
proof -
{
assume "Q = I"
then have "Col P Q S"
by (metis BetSEq Col_def P1C P7 P9 V1 W4 between_equality
outer_transitivity_between par_not_col)
then have "False"
using P1D by blast
}
then have "Q ≠ I" by blast
moreover have "P R ParStrict Q S"
using P9 par_strict_symmetry by blast
moreover have "Col Q S I"
using Col_cases W4 by blast
ultimately show ?thesis
using one_side_symmetry par_strict_all_one_side by blast
qed
moreover have "P R OS Q U"
proof -
have "Q S ParStrict P R"
using P9 by blast
have "R Out Q U ∧ ¬ Col P R Q"
by (metis BetSEq Bet_cases Out_def P1C calculation col124__nos)
then show ?thesis
by (metis P7 V1 W4 ‹Bet U I P ⟹ False› between_equality
col_permutation_2 not_bet_distincts out_col outer_transitivity_between)
qed
ultimately show ?thesis
using one_side_transitivity by blast
qed
then have V2: "P Out I U"
using P7 W4 bet2__out os_distincts by blast
then have "Col P I U"
using V1 not_bet_and_out by blast
then have "False"
using V1 V2 not_bet_and_out by blast
}
then moreover have "¬ (Bet U I P ∨ Bet I P U)"
using ‹Bet U I P ⟹ False› by auto
ultimately show ?thesis
using Col_def W5 by blast
qed
{
assume "P = U"
then have "Col P R Q"
using BetSEq Col_def P1C by blast
then have "False"
using P9 par_strict_not_col_3 by blast
}
then have V6: "P ≠ U" by auto
{
assume "U = I"
have "Q = U"
proof -
have f1: "BetS Q I R"
using P1C ‹U = I› by blast
then have f2: "Col Q I R"
using BetSEq Col_def by blast
have f3: "Col I R Q"
using f1 by (simp add: BetSEq Col_def)
{ assume "R ≠ Q"
moreover
{ assume "(R ≠ Q ∧ R ≠ I) ∧ ¬ Col I Q R"
moreover
{ assume "∃p. (R ≠ Q ∧ ¬ Col I p I) ∧ Col Q I p"
then have "I = Q"
using f1 by (metis (no_types) BetSEq Col_def col_transitivity_2) }
ultimately have "(∃p pa. ((pa ≠ I ∧ ¬ Col pa p R) ∧ Col Q I pa) ∧ Col I pa p) ∨ I = Q"
using f3 f2 by (metis (no_types) col_transitivity_2) }
ultimately have "(∃p pa. ((pa ≠ I ∧ ¬ Col pa p R) ∧ Col Q I pa) ∧ Col I pa p) ∨ I = Q"
using f1 by (metis (no_types) BetSEq P9 W4 col_transitivity_2 par_strict_not_col_4) }
then show ?thesis
using f2 by (metis P9 W4 ‹U = I› col_transitivity_2 par_strict_not_col_4)
qed
then have "False"
using BetSEq P1C by blast
}
then have "U ≠ I" by auto
then show ?thesis
by (simp add: W4A V6 BetS_def)
qed
moreover have "BetS S Q I"
proof -
have "Q R TS S I"
proof -
have "Q R TS P I"
proof -
have "¬ Col P Q R"
using P9 col_permutation_5 par_strict_not_col_3 by blast
moreover have "¬ Col I Q R"
proof -
{
assume "Col I Q R"
then have "Col Q S R"
proof -
have f1: "∀p pa pb. Col p pa pb ∨ ¬ BetS pb p pa"
by (meson BetSEq Col_def)
then have f2: "Col U I P"
using ‹BetS P U I› by blast
have f3: "Col I P U"
by (simp add: BetSEq Col_def ‹BetS P U I›)
have f4: "∀p. (U = Q ∨ Col Q p R) ∨ ¬ Col Q U p"
by (metis BetSEq Col_def P1C col_transitivity_1)
{ assume "P ≠ Q"
moreover
{ assume "(P ≠ Q ∧ U ≠ Q) ∧ Col Q P Q"
then have "(P ≠ Q ∧ U ≠ Q) ∧ ¬ Col Q P R"
using Col_cases ‹¬ Col P Q R› by blast
moreover
{ assume "∃p. ((U ≠ Q ∧ P ≠ Q) ∧ ¬ Col Q p P) ∧ Col Q P p"
then have "U ≠ Q ∧ ¬ Col Q P P"
by (metis col_transitivity_1)
then have "¬ Col U Q P"
using col_transitivity_2 by blast }
ultimately have "¬ Col U Q P ∨ I ≠ Q"
using f4 f3 by blast }
ultimately have "I ≠ Q"
using f2 f1 by (metis BetSEq P1C col_transitivity_1 col_transitivity_2) }
then have "I ≠ Q"
using BetSEq ‹BetS P U I› by blast
then show ?thesis
by (simp add: W4 ‹Col I Q R› col_transitivity_2)
qed
then have "False"
using P9 par_strict_not_col_4 by blast
}
then show ?thesis by blast
qed
moreover have "Col U Q R"
using BetSEq Bet_cases Col_def P1C by blast
moreover have "Bet P U I"
by (simp add: BetSEq ‹BetS P U I›)
ultimately show ?thesis
using TS_def by blast
qed
moreover have "Q R OS P S"
proof -
have "Q R Par P S"
proof -
have "Q ≠ R"
using BetSEq P1 by blast
moreover have "T Midpoint Q P"
using BetSEq Bet_cases P1A P1E cong_3421 midpoint_def by blast
moreover have "T Midpoint R S"
using BetSEq P1B P1F midpoint_def not_cong_1243 by blast
ultimately show ?thesis
using l12_17 by blast
qed
then have "Q R ParStrict P S"
by (simp add: P1D Par_def not_col_permutation_4)
then show ?thesis
using l12_6 by blast
qed
ultimately show ?thesis
using l9_8_2 by blast
qed
then show ?thesis
by (metis BetS_def W4 col_two_sides_bet not_col_permutation_2 ts_distincts)
qed
ultimately show ?thesis
by auto
qed
}
then show ?thesis using euclid_5_def by blast
qed
lemma tarski_s_implies_euclid_s_parallel_postulate:
assumes "TarskiSParallelPostulate"
shows "EuclidSParallelPostulate"
by (simp add: assms euclid_5__original_euclid tarski_s_euclid_implies_euclid_5)
theorem tarski_s_euclid_implies_playfair_s_postulate:
assumes "TarskiSParallelPostulate"
shows "PlayfairSPostulate"
proof -
{
fix A1 A2 B1 B2 P C1 C2
assume P1: "¬ Col P A1 A2 ∧ A1 A2 Par B1 B2 ∧ Col P B1 B2 ∧ A1 A2 Par C1 C2 ∧ Col P C1 C2"
have P1A: "¬ Col P A1 A2"
by (simp add: P1)
have P2: "A1 A2 Par B1 B2"
by (simp add: P1)
have P3: "Col P B1 B2"
by (simp add: P1)
have P4: "A1 A2 Par C1 C2"
by (simp add: P1)
have P5: "Col P C1 C2"
by (simp add: P1)
have P6: "A1 A2 ParStrict B1 B2"
proof -
have "A1 A2 Par B1 B2"
by (simp add: P1)
moreover have "Col B1 B2 P"
using P3 not_col_permutation_2 by blast
moreover have "¬ Col A1 A2 P"
by (simp add: P1A not_col_permutation_1)
ultimately show ?thesis
using par_not_col_strict by auto
qed
have P7: "A1 A2 ParStrict C1 C2"
proof -
have "A1 A2 Par C1 C2"
by (simp add: P1)
moreover have "Col C1 C2 P"
using Col_cases P1 by blast
moreover have "¬ Col A1 A2 P"
by (simp add: P1A not_col_permutation_1)
ultimately show ?thesis
using par_not_col_strict by auto
qed
{
assume "¬ Col C1 B1 B2 ∨ ¬ Col C2 B1 B2"
have "∃ C'. Col C1 C2 C' ∧ B1 B2 TS A1 C'"
proof -
have T2: "Coplanar A1 A2 P A1"
using ncop_distincts by auto
have T3: "Coplanar A1 A2 B1 B2"
by (simp add: P1 par__coplanar)
have T4: "Coplanar A1 A2 C1 C2"
by (simp add: P7 pars__coplanar)
have T5: "Coplanar A1 A2 P B1"
using P1 col_trivial_2 ncop_distincts par__coplanar par_col2_par_bis by blast
then have T6: "Coplanar A1 A2 P B2"
using P3 T3 col_cop__cop by blast
have T7: "Coplanar A1 A2 P C1"
using P1 T4 col_cop__cop coplanar_perm_1 not_col_permutation_2 par_distincts by blast
then have T8: "Coplanar A1 A2 P C2"
using P5 T4 col_cop__cop by blast
{
assume "¬ Col C1 B1 B2"
moreover have "C1 ≠ C2"
using P1 par_neq2 by auto
moreover have "Col B1 B2 P"
using P1 not_col_permutation_2 by blast
moreover have "Col C1 C2 P"
using Col_cases P5 by auto
moreover have "¬ Col B1 B2 C1"
using Col_cases calculation(1) by auto
moreover have "¬ Col B1 B2 A1"
using P6 par_strict_not_col_3 by auto
moreover have "Coplanar B1 B2 C1 A1"
using Col_cases P1A T5 T2 T6 T7 coplanar_pseudo_trans by blast
ultimately have "∃ C'. Col C1 C2 C' ∧ B1 B2 TS A1 C'"
using cop_not_par_other_side by blast
}
{
assume "¬ Col C2 B1 B2"
moreover have "C2 ≠ C1"
using P1 par_neq2 by blast
moreover have "Col B1 B2 P"
using Col_cases P3 by auto
moreover have "Col C2 C1 P"
using Col_cases P5 by auto
moreover have "¬ Col B1 B2 C2"
by (simp add: calculation(1) not_col_permutation_1)
moreover have "¬ Col B1 B2 A1"
using P6 par_strict_not_col_3 by auto
moreover have "Coplanar B1 B2 C2 A1"
using Col_cases P1A T2 T5 T6 T8 coplanar_pseudo_trans by blast
ultimately have "∃ C'. Col C1 C2 C' ∧ B1 B2 TS A1 C'" using cop_not_par_other_side
by (meson not_col_permutation_4)
}
then show ?thesis
using ‹¬ Col C1 B1 B2 ⟹ ∃C'. Col C1 C2 C' ∧ B1 B2 TS A1 C'› ‹¬ Col C1 B1 B2 ∨ ¬ Col C2 B1 B2› by blast
qed
then obtain C' where W1: "Col C1 C2 C' ∧ B1 B2 TS A1 C'" by auto
then have W2: "¬ Col A1 B1 B2"
using TS_def by blast
obtain B where W3: "Col B B1 B2 ∧ Bet A1 B C'"
using TS_def W1 by blast
obtain C where W4: "P Midpoint C' C"
using symmetric_point_construction by blast
then have W4A: "Bet A1 B C' ∧ Bet C P C'"
using Mid_cases W3 midpoint_bet by blast
then obtain D where W5: "Bet B D C ∧ Bet P D A1" using inner_pasch by blast
have W6: "C' ≠ P"
using P3 TS_def W1 by blast
then have "A1 A2 Par C' P"
by (meson P1 W1 not_col_permutation_2 par_col2_par)
have W9: "A1 A2 ParStrict C' P"
using Col_cases P5 P7 W1 W6 par_strict_col2_par_strict by blast
then have W10: "B ≠ P"
by (metis W6 W4A bet_out_1 out_col par_strict_not_col_3)
have W11: "P ≠ C"
using W6 W4 is_midpoint_id_2 by blast
{
assume "P = D"
then have "False"
by (metis Col_def P3 W1 W3 W4A W5 W10 W11 col_trivial_2 colx l9_18_R1)
}
then have "P ≠ D" by auto
then obtain X Y where W12: "Bet P B X ∧ Bet P C Y ∧ Bet X A1 Y"
using W5 assms tarski_s_parallel_postulate_def by blast
then have "P ≠ X"
using W10 bet_neq12__neq by auto
then have "A1 A2 ParStrict P X"
by (metis Col_cases P3 P6 W10 W12 W3 bet_col colx par_strict_col2_par_strict)
then have W15: "A1 A2 OS P X"
by (simp add: l12_6)
have "P ≠ Y"
using W11 W12 between_identity by blast
then have "A1 A2 ParStrict P Y"
by (metis Col_def W11 W12 W4A W9 col_trivial_2 par_strict_col2_par_strict)
then have W16: "A1 A2 OS P Y"
using l12_6 by auto
have "Col A1 X Y"
by (simp add: W12 bet_col col_permutation_4)
then have "A1 Out X Y" using col_one_side_out W15 W16
using one_side_symmetry one_side_transitivity by blast
then have "False"
using W12 not_bet_and_out by blast
}
then have "Col C1 B1 B2 ∧ Col C2 B1 B2"
by auto
}
{
fix A1 A2 B1 B2 P C1 C2
assume P1: "Col P A1 A2 ∧ A1 A2 Par B1 B2 ∧ Col P B1 B2 ∧ A1 A2 Par C1 C2 ∧ Col P C1 C2"
have "Col C1 B1 B2"
by (smt P1 l9_10 not_col_permutation_3 not_strict_par2 par_col2_par par_comm par_id_5 par_symmetry ts_distincts)
moreover have "Col C2 B1 B2"
by (smt P1 l9_10 not_col_permutation_3 not_strict_par2 par_col2_par par_id_5 par_left_comm par_symmetry ts_distincts)
ultimately have "Col C1 B1 B2 ∧ Col C2 B1 B2" by auto
}
then show ?thesis
using playfair_s_postulate_def
by (metis ‹⋀P C2 C1 B2 B1 A2 A1. ¬ Col P A1 A2 ∧ A1 A2 Par B1 B2 ∧ Col P B1 B2 ∧ A1 A2 Par C1 C2 ∧ Col P C1 C2 ⟹ Col C1 B1 B2 ∧ Col C2 B1 B2›)
qed
lemma tarski_s_euclid_remove_degenerated_cases:
assumes "∀ 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 ∧ ¬ Col B C T ⟶
(∃ x y. (Bet A B x ∧ Bet A C y ∧ Bet x T y))"
shows "∀ A B C D T. Bet A D T ∧ Bet B D C ∧ A ≠ D ⟶
(∃ x y. (Bet A B x ∧ Bet A C y ∧ Bet x T y))"
proof -
{
fix A B C D T
assume P1: "Bet A D T ∧ Bet B D C ∧ A ≠ D"
hence P2: "Bet A D T"
by auto
have P3: "Bet B D C"
by (simp add: P1)
have P4: "A ≠ D"
using P1 by blast
have "(∃ x y. (Bet A B x ∧ Bet A C y ∧ Bet x T y))"
proof cases
assume "A = B"
thus ?thesis
using between_trivial between_trivial2 by blast
next
assume P5: "A ≠ B"
thus ?thesis
proof cases
assume "A = C"
thus ?thesis
using between_trivial between_trivial2 by auto
next
assume P6: "A ≠ C"
thus ?thesis
proof cases
assume "A = T"
thus ?thesis
using ‹Bet A D T ∧ Bet B D C ∧ A ≠ D› between_identity by blast
next
assume P7: "A ≠ T"
thus ?thesis
proof cases
assume "B = C"
thus ?thesis
using ‹Bet A D T ∧ Bet B D C ∧ A ≠ D› between_identity
between_trivial2 by blast
next
assume P8: "B ≠ C"
thus ?thesis
proof cases
assume "B = D"
thus ?thesis
using ‹Bet A D T ∧ Bet B D C ∧ A ≠ D› between_trivial2
segment_construction by blast
next
assume P9: "B ≠ D"
thus ?thesis
proof cases
assume "B = T"
thus ?thesis
using between_trivial between_trivial2 by blast
next
assume P10: "B ≠ T"
thus ?thesis
proof cases
assume "C = D"
thus ?thesis
using ‹Bet A D T ∧ Bet B D C ∧ A ≠ D› between_trivial by blast
next
assume P11: "C ≠ D"
thus ?thesis
proof cases
assume "C = T"
thus ?thesis
using between_trivial by blast
next
assume P12: "C ≠ T"
thus ?thesis
proof cases
assume "D = T"
thus ?thesis
using ‹Bet A D T ∧ Bet B D C ∧ A ≠ D› between_trivial by blast
next
assume P13: "D ≠ T"
{
assume "Col A B C"
have "Bet A B C ⟶ ?thesis"
by (metis ‹Bet A D T› ‹Bet B D C› between_equality
between_exchange2 between_exchange3 between_exchange4
between_trivial between_trivial2 l5_3)
moreover
have "Bet B C A ⟶ ?thesis"
by (meson Bet_perm P1 between_exchange3 between_exchange4
between_trivial)
moreover
have "Bet C A B ⟶?thesis"
by (metis between_exchange3 Bet_perm P1
between_exchange2 l5_3
between_exchange4 between_trivial
between_trivial2 l5_1)
ultimately
have "?thesis"
using Col_def ‹Col A B C› by blast
}
moreover
{
assume P14: "¬ Col A B C"
{
assume "Col B C T"
hence "D = T"
by (meson P1 P14 bet_col col_permutation_2
col_permutation_5 colx)
hence False
by (simp add: P13)
}
hence "?thesis"
using assms P14 P13 P2 P3 P4 P5 P6 P7 P8
P9 P10 P11 P12 by blast
}
ultimately
show ?thesis
by blast
qed
qed
qed
qed
qed
qed
qed
qed
qed
}
thus ?thesis by auto
qed
lemma alternate_interior__consecutive_interior:
assumes "AlternateInteriorAnglesPostulate"
shows "ConsecutiveInteriorAnglesPostulate"
proof -
{
fix A B C D
assume "B C OS A D ∧ A B Par C D"
hence "A ≠ B"
using os_distincts by blast
obtain A' where P3: "Bet A B A' ∧ Cong B A' B A"
using segment_construction by blast
have "¬ Col B C A"
using ‹B C OS A D ∧ A B Par C D› l9_19 not_col_distincts by blast
hence "B C TS A A'"
using P3 ‹A ≠ B› bet__ts cong_diff_4 by blast
hence "B C TS A' D"
by (meson l9_8_2 ‹B C OS A D ∧ A B Par C D› l9_2)
hence "B C D CongA C B A'"
by (metis (full_types) P3 Par_cases l9_2
‹B C OS A D ∧ A B Par C D› alternate_interior_angles_postulate_def
assms bet_col bet_col1 conga_comm invert_two_sides
par_col2_par ts_distincts)
hence "A B C SuppA B C D"
using P3 SuppA_def ‹A ≠ B› by auto
}
thus ?thesis
using consecutive_interior_angles_postulate_def by blast
qed
lemma alternate_interior__playfair_aux_1:
assumes "A1 A2 Par C1 C2" and
"Col P C1 C2" and
"Col P P1 P2" and
"P1 P2 Perp A1 A2" and
"Col Q A1 A2"
shows "Coplanar P Q A1 C1"
proof -
have "Coplanar A1 A2 C1 C1"
using ncop_distincts by blast
moreover have "Coplanar A1 A2 C1 A1"
using ncop_distincts by blast
moreover have "Coplanar A1 A2 C1 Q"
using Col_cases assms(5) ncop__ncols by blast
moreover have "Coplanar A1 A2 C1 P"
using assms(1) assms(2) col_cop__cop col_permutation_1
par__coplanar par_neq2 by blast
ultimately show ?thesis
by (metis assms(1) assms(5) col_cop__cop col_permutation_1
ncoplanar_perm_16 ncoplanar_perm_19 par_neq1)
qed
lemma alternate_interior__playfair_aux_2:
assumes "A1 A2 Par C1 C2" and
"Col P C1 C2" and
"Col Q A1 A2" and
"Col B1 B2 B3" and
"¬ Col A1 A2 P" and
"Col P B1 B2" and
"Coplanar A1 A2 B1 B2" and
"A1 A2 ParStrict B1 B2"
shows "Coplanar P Q C1 B3"
proof -
have "Coplanar A1 A2 P Q"
using assms(3) Col_cases ncop__ncols by blast
moreover have "Coplanar A1 A2 P B3"
using NCol_perm col2_cop__cop par_strict_neq2
assms(4) assms(6) assms(7) assms(8) by blast
moreover have "Coplanar A1 A2 P P"
using ncop_distincts by blast
moreover have "Coplanar A1 A2 P C1"
using assms(1) assms(2)
by (metis col_cop__cop coplanar_perm_1 not_col_permutation_2
par__coplanar par_neq2)
ultimately show ?thesis
using assms(5) coplanar_pseudo_trans by presburger
qed
lemma alternate_interior__playfair_aux:
assumes "alternate_interior_angles_postulate"
shows "∀ A1 A2 B1 B2 C1 C2 P.
(P Perp2 A1 A2 B1 B2 ∧ ¬ Col A1 A2 P ∧ Col P B1 B2 ∧
Coplanar A1 A2 B1 B2 ∧
A1 A2 Par C1 C2 ∧ Col P C1 C2) ⟶
Col C1 B1 B2"
proof -
{
fix A1 A2 B1 B2 C1 C2 P
assume 1: "P Perp2 A1 A2 B1 B2" and
2: "¬ Col A1 A2 P" and
3: "Col P B1 B2" and
4: "Coplanar A1 A2 B1 B2" and
5: "A1 A2 Par C1 C2" and
6: "Col P C1 C2"
have "Col C1 B1 B2"
proof cases
assume "P = C1"
thus ?thesis
using "3" by blast
next
assume "P ≠ C1"
have "A1 A2 ParStrict B1 B2"
using "1" "2" "3" "4" col_cop_perp2__pars_bis col_permutation_1 by blast
have "A1 A2 ParStrict C1 C2"
using "2" "5" "6" col_permutation_1 par_not_col_strict by blast
obtain P1 P2 where P1: "Col P P1 P2 ∧ P1 P2 Perp A1 A2 ∧ P1 P2 Perp B1 B2"
using 1 Perp2_def by blast
hence "Col P P1 P2"
by blast
have P1A: "P1 P2 Perp A1 A2"
using P1 by blast
then obtain Q where P1B: "Col Q P1 P2 ∧ Col Q A1 A2"
using Perp_def by (meson NCol_cases perp_inter_perp_in_n)
hence P1C: "Col Q P1 P2"
by blast
have P1D: "Col Q A1 A2"
using P1B by blast
have "P1 P2 Perp B1 B2"
using P1 by blast
then obtain P' where P2: "P' PerpAt P1 P2 B1 B2"
using perp_inter_perp_in_n by blast
hence "P = P'"
using "3" ‹Col P P1 P2› l8_14_2_1b by blast
have "P ≠ Q"
using "2" NCol_cases ‹Col Q P1 P2 ∧ Col Q A1 A2› by blast
hence "A1 A2 Perp P Q"
using perp_col0 P1A Perp_cases ‹Col P P1 P2›
‹Col Q P1 P2 ∧ Col Q A1 A2› not_col_permutation_3 by blast
have "B1 B2 Perp P Q"
using perp_col0
by (meson P1 ‹Col Q P1 P2 ∧ Col Q A1 A2› ‹P ≠ Q›
col_permutation_3 perp_left_comm)
have "¬ Col Q C1 P"
using "6" ‹A1 A2 ParStrict C1 C2› ‹Col Q P1 P2 ∧ Col Q A1 A2›
‹P ≠ C1› col_trivial_2 colx par_not_col by blast
obtain B3 where P4: "Col B1 B2 B3 ∧ B3 ≠ P"
using col_trivial_2 diff_col_ex by blast
hence P4A: "Col B1 B2 B3"
by blast
have "B3 ≠ P"
using P4 by blast
have "Q ≠ C1"
using ‹¬ Col Q C1 P› col_trivial_1 by blast
have "A1 ≠ A2"
using "2" col_trivial_1 by blast
have "A2 ≠ P"
using "2" col_trivial_2 by blast
have "A1 ≠ P"
using "2" col_trivial_3 by auto
have "B1 ≠ B2"
using ‹P1 P2 Perp B1 B2› perp_distinct by blast
have "A1 ≠ B1"
using ‹A1 A2 ParStrict B1 B2› col_trivial_3 par_strict_not_col_1 by blast
have "A1 ≠ B2"
using ‹A1 A2 ParStrict B1 B2› col_trivial_1 col_trivial_3 par_not_col by blast
have "A2 ≠ B1"
using ‹A1 A2 ParStrict B1 B2› col_trivial_2 par_strict_not_col_1 by blast
have "A2 ≠ B2"
using ‹A1 A2 ParStrict B1 B2› col_trivial_2 par_strict_not_col_4 by blast
have "A1 ≠ C1"
using ‹A1 A2 ParStrict C1 C2› not_par_strict_id by blast
have "A1 ≠ C2"
using ‹A1 A2 ParStrict C1 C2› col_trivial_3 par_strict_not_col_4 by blast
have "A2 ≠ C1"
using Par_strict_cases ‹A1 A2 ParStrict C1 C2› not_par_strict_id by blast
have "A2 ≠ C2"
using Par_strict_cases ‹A1 A2 ParStrict C1 C2› not_par_strict_id by blast
have "C1 ≠ C2"
using "5" par_distincts by blast
have "Col P C1 B3"
proof -
have "Per C1 P Q"
proof -
have "∃ A3. Col A1 A2 A3 ∧ P Q TS C1 A3"
proof cases
assume "Col P Q A1"
have "A2 ≠ A1"
using ‹A1 ≠ A2› by auto
moreover
have "Col P Q Q"
by (simp add: col_trivial_2)
moreover
have "Col A2 A1 Q"
by (simp add: P1D col_permutation_3)
moreover
have "¬ Col P Q A2"
using "2" ‹Col P Q A1› ‹P ≠ Q› col3 col_trivial_3 by blast
moreover
have "¬ Col P Q C1"
using NCol_cases ‹¬ Col Q C1 P› by blast
moreover
have "Coplanar P Q A2 C1"
by (metis "5" "6" P1D ‹Col P Q A1› ‹P ≠ C1›
calculation(2) calculation(4) col_permutation_1 colx
coplanar_perm_18 par__coplanar par_col_par)
ultimately
have "∃ Q0. Col A2 A1 Q0 ∧ P Q TS C1 Q0"
using cop_not_par_other_side by blast
thus ?thesis
using col_permutation_4 by blast
next
assume "¬ Col P Q A1"
have "A1 ≠ A2"
by (simp add: ‹A1 ≠ A2›)
moreover
have "Col P Q Q"
using col_trivial_2 by auto
moreover
have "Col A1 A2 Q"
by (simp add: P1D col_permutation_2)
moreover
{
assume "Col P' Q A1"
hence "Col A1 P1 P2"
using ‹P = P'› ‹¬ Col P Q A1› by auto
hence "A1 = Q"
using ‹Col P' Q A1› ‹P = P'› ‹¬ Col P Q A1› by auto
hence "False"
using ‹¬ Col P Q A1› col_trivial_2 by blast
}
hence "¬ Col P Q A1"
using ‹P = P'› by blast
moreover
have "¬ Col P Q C1"
using NCol_cases ‹¬ Col Q C1 P› by blast
moreover
have "Coplanar P Q A1 C1"
using alternate_interior__playfair_aux_1 5 6 P1 P1A P1D by blast
ultimately
show ?thesis
using cop_not_par_other_side by blast
qed
then obtain A3 where "Col A1 A2 A3 ∧ P Q TS C1 A3"
by blast
hence "¬ Col A3 P Q"
using TS_def by blast
have "A3 ≠ P"
using "2" ‹Col A1 A2 A3 ∧ P Q TS C1 A3› by auto
have "A3 ≠ Q"
using ‹¬ Col A3 P Q› col_trivial_3 by blast
have "C1 ≠ A3"
using ‹Col A1 A2 A3 ∧ P Q TS C1 A3› ts_distincts by blast
have "Q A3 Perp P Q"
proof -
have "A1 A2 Perp P Q"
using ‹A1 A2 Perp P Q› by blast
moreover
have "Q ≠ A3"
using ‹¬ Col A3 P Q› col_trivial_3 by blast
moreover
have "Col A1 A2 Q"
using NCol_cases P1B by blast
moreover
have "Col A1 A2 A3"
using ‹Col A1 A2 A3 ∧ P Q TS C1 A3› by blast
ultimately
show ?thesis
using perp_col2 by blast
qed
hence "Per A3 Q P"
by (simp add: perp_per_1)
moreover
have "C1 P Q CongA A3 Q P"
proof -
have "P Q TS C1 A3"
by (simp add: ‹Col A1 A2 A3 ∧ P Q TS C1 A3›)
moreover
have "P C1 Par Q A3"
proof -
have "P ≠ C1"
by (simp add: ‹P ≠ C1›)
moreover
have "Q ≠ A3"
using ‹¬ Col A3 P Q› col_trivial_3 by blast
moreover
have "C1 C2 Par A1 A2"
by (simp add: "5" par_symmetry)
moreover
have "Col C1 C2 P"
by (simp add: "6" col_permutation_1)
moreover
have "Col C1 C2 C1"
by (simp add: col_trivial_3)
moreover
have "Col A1 A2 Q"
using NCol_cases P1B by blast
moreover
have "Col A1 A2 A3"
by (simp add: ‹Col A1 A2 A3 ∧ P Q TS C1 A3›)
ultimately
show ?thesis
using par_col4__par by blast
qed
ultimately
show ?thesis
using assms(1) alternate_interior_angles_postulate_def by blast
qed
hence "A3 Q P CongA C1 P Q"
by (simp add: conga_sym)
ultimately
show ?thesis
using l11_17 by blast
qed
hence "P C1 Perp P Q"
using ‹P ≠ C1› ‹P ≠ Q› per_perp perp_left_comm by auto
moreover
have "P B3 Perp P Q"
proof -
have "B1 B2 Perp P Q"
by (simp add: ‹B1 B2 Perp P Q›)
moreover
have "P ≠ B3"
using ‹B3 ≠ P› by fastforce
moreover
have "Col B1 B2 P"
using "3" not_col_permutation_2 by blast
moreover
have "Col B1 B2 B3"
using P4A by auto
ultimately
show ?thesis
using perp_col2 by blast
qed
moreover
have "Coplanar P Q C1 B3"
using P1D P4A 2 3 4 5 6 alternate_interior__playfair_aux_2
‹A1 A2 ParStrict B1 B2› by blast
ultimately
show ?thesis
using cop_perp2__col by blast
qed
thus ?thesis
using "3" P4 colx not_col_permutation_1 by blast
qed
}
thus ?thesis by blast
qed
lemma alternate_interior__playfair_bis:
assumes "alternate_interior_angles_postulate"
shows "alternative_playfair_s_postulate"
proof -
{
fix A1 A2 B1 B2 C1 C2 P
assume 1: "P Perp2 A1 A2 B1 B2" and
2: "¬ Col A1 A2 P" and
3: "Col P B1 B2" and
4: "Coplanar A1 A2 B1 B2" and
5: "A1 A2 Par C1 C2" and
6: "Col P C1 C2"
have "Col C1 B1 B2"
using alternate_interior__playfair_aux assms(1) 1 2 3 4 5 6
by blast
moreover
have "Col C2 B1 B2"
using alternate_interior__playfair_aux assms(1) 1 2 3 4 5 6
by (meson col_permutation_5 par_right_comm)
ultimately
have "Col C1 B1 B2 ∧ Col C2 B1 B2"
by blast
}
thus ?thesis
using alternative_playfair_s_postulate_def by blast
qed
lemma alternate_interior__proclus_aux:
assumes "greenberg_s_axiom" and
"alternate_interior_angles_postulate"
shows "∀ A C D P Q. (P A ParStrict C D ∧ C D Perp P C ∧
P A OS C Q ∧ P C OS Q A ∧ P C OS Q D)
⟶
(∃ Y. Col P Q Y ∧ Col C D Y)"
proof -
{
fix A C D P Q
assume 1: "P A ParStrict C D" and
2: "C D Perp P C" and
3: "P A OS C Q" and
4: "P C OS Q A" and
5: "P C OS Q D"
obtain D' where P1: "Bet D C D' ∧ Cong D C C D'"
using Cong_perm segment_construction by blast
hence "Bet D C D'"
by blast
have "Cong D C C D'"
using P1 by blast
have "C ≠ D"
using "1" par_strict_neq2 by auto
have "C ≠ D'"
using ‹C ≠ D› ‹Cong D C C D'› cong_identity by blast
have "P ≠ Q"
using "3" col124__nos col_trivial_3 by blast
have "P ≠ A"
using "3" col124__nos not_col_distincts by blast
have "¬ Col P A Q"
using "3" one_side_not_col124 by auto
have "¬ Col P C Q"
using "4" one_side_not_col123 by auto
have "¬ Col P C D"
using "5" one_side_not_col124 by blast
have "A P Q LtA A P C"
by (meson "3" "4" col_permutation_3 col_permutation_5
inangle__lta l9_2 l9_9 one_side_not_col123 os_ts__inangle
two_sides_cases)
have "P C OS D A"
using "4" "5" one_side_symmetry one_side_transitivity by blast
have "Per A P C"
proof -
have "Per P C D'"
using "2" P1 Perp_cases ‹C ≠ D'› bet_col bet_col1
perp_col2_bis perp_per_2 by blast
moreover
have "P C D' CongA A P C"
proof -
have "P C TS D D'"
by (simp add: ‹Bet D C D'› ‹C ≠ D'› ‹¬ Col P C D›
bet__ts invert_two_sides not_col_permutation_4)
hence "P C TS A D'"
using ‹P C OS D A› l9_8_2 by blast
moreover
have "P A Par C D'"
by (meson "1" Par_def ‹Bet D C D'› ‹C ≠ D'› bet_col
bet_col1 par_strict_col2_par_strict par_strict_right_comm)
ultimately
show ?thesis
using alternate_interior_angles_postulate_def assms(2)
conga_left_comm conga_sym by blast
qed
ultimately
show ?thesis
using l11_17 by blast
qed
hence "Acute A P Q"
using ‹A P Q LtA A P C› Acute_def by blast
have "¬ Col A P Q"
by (simp add: ‹¬ Col P A Q› not_col_permutation_4)
have "Per P C D"
using "2" Perp_perm perp_per_1 by blast
then obtain S where P2: "P S C LtA A P Q ∧ C Out S D"
using ‹Acute A P Q› ‹¬ Col A P Q› ‹C ≠ D› assms(1)
greenberg_s_axiom_def by blast
hence "P S C LtA A P Q"
by blast
have "C Out S D"
using P2 by blast
have "P C OS S D"
using ‹C Out S D› ‹¬ Col P C D› col_permutation_4
invert_one_side out_one_side by blast
have "Q InAngle C P S"
proof -
have "P C OS S Q"
using "5" ‹P C OS S D› one_side_symmetry
one_side_transitivity by blast
moreover
have "P S OS C Q"
proof -
have "P C OS S A"
using "4" calculation one_side_transitivity by blast
hence "P A ParStrict S C"
by (metis "1" Out_cases ‹C Out S D› os_distincts
out_col par_strict_col_par_strict par_strict_comm
par_strict_left_comm)
hence "P S TS C A"
by (simp add: ‹P C OS S A› l12_6 l9_31)
moreover
have "A P S CongA C S P"
using assms(2) alternate_interior_angles_postulate_def
by (meson par_strict_par ‹P A ParStrict S C› calculation l9_2)
have "A P S LtA A P Q"
using conga_preserves_lta
by (metis ‹A P S CongA C S P› ‹P S C LtA A P Q›
‹P ≠ A› ‹P ≠ Q› conga_right_comm conga_sym
nlta or_lta2_conga)
hence P4: "A P S LeA A P Q ∧ ¬ A P S CongA A P Q"
using lta__lea not_lta_and_conga by auto
hence "A P S LeA A P Q"
by blast
have "¬ A P S CongA A P Q"
using P4 by blast
have "P S TS Q A"
proof -
{
assume "Col P Q S"
have "P C OS Q S"
by (simp add: ‹P C OS S Q› one_side_symmetry)
hence "P Out Q S"
using ‹Col P Q S› col_one_side_out by blast
have "P Out A A"
using ‹P ≠ A› out_trivial by auto
hence "False"
using out2__conga ‹P Out Q S› ‹¬ A P S CongA A P Q› by blast
}
hence "¬ Col P Q S"
by auto
moreover
have "A P OS Q S"
using "3" ‹P C OS S A› ‹P S TS C A› invert_one_side
one_side_symmetry one_side_transitivity
os_ts1324__os by blast
hence "S InAngle Q P A"
using l11_24 lea_in_angle ‹A P S LeA A P Q› by blast
ultimately
show ?thesis
by (metis NCol_cases TS_def ‹P S TS C A› in_angle_two_sides)
qed
ultimately
show ?thesis
using l9_8_1 by blast
qed
ultimately
show ?thesis
using os2__inangle by blast
qed
then obtain Y where P3: "Bet C Y S ∧ (Y = P ∨ P Out Y Q)"
using InAngle_def by auto
hence "Bet C Y S"
by blast
have "Y = P ∨ P Out Y Q"
using P3 by blast
have P4: "Col P Q Y"
using ‹Y = P ∨ P Out Y Q› col_permutation_5 col_trivial_3 out_col by blast
have "Col C D Y"
by (meson Bet_cases Col_def Out_def ‹Bet C Y S›
‹C Out S D› bet_col1 between_exchange4)
hence "∃ Y. Col P Q Y ∧ Col C D Y"
using P4 by blast
}
thus ?thesis by blast
qed
lemma alternate_interior__proclus:
assumes "greenberg_s_axiom" and
"alternate_interior_angles_postulate"
shows "proclus_postulate"
proof -
{
fix A B C D P Q
assume 1: "A B Par C D" and
2: "Col A B P" and
3: "¬ Col A B Q" and
4: "Coplanar C D P Q"
have "Col C D P ⟶ (∃ Y. Col P Q Y ∧ Col C D Y)"
using col_trivial_3 by blast
moreover
{
assume "¬ Col C D P"
hence "A B ParStrict C D"
using "1" "2" par_not_col_strict par_strict_symmetry par_symmetry by blast
obtain C0 where P4: "Col C D C0 ∧ C D Perp P C0"
using l8_18_existence ‹¬ Col C D P› by blast
have "Col P Q C0 ⟶ (∃ Y. Col P Q Y ∧ Col C D Y)"
using ‹Col C D C0 ∧ C D Perp P C0› by blast
moreover
{
assume "¬ Col P Q C0"
have "∃ Q1. Col Q P Q1 ∧ A B OS C0 Q1"
proof -
have "Q ≠ P"
using "2" "3" by blast
moreover
have "Col A B P"
by (simp add: "2")
moreover
have "Col Q P P"
by (simp add: col_trivial_2)
moreover
have "¬ Col A B Q"
by (simp add: "3")
moreover
have "¬ Col C0 A B"
proof -
have "C D ParStrict A B"
by (simp add: ‹A B ParStrict C D› par_strict_symmetry)
moreover
have "Col C0 C D"
by (simp add: ‹Col C D C0 ∧ C D Perp P C0› col_permutation_2)
ultimately
show ?thesis
using par_not_col by blast
qed
hence "¬ Col A B C0"
using col_permutation_2 by blast
moreover
have "Coplanar A B Q C0"
proof -
have "Coplanar C D P A"
using "1" "2" col_trivial_3 ncop_distincts
par__coplanar par_col2_par par_symmetry by blast
moreover
have "Coplanar C D P B"
using "1" "2" Col_cases Par_cases calculation
col_cop__cop par__coplanar by blast
moreover
have "Coplanar C D P C0"
using ‹Col C D C0 ∧ C D Perp P C0› ncop__ncols by blast
ultimately
show ?thesis
using ‹¬ Col C D P› 4 coplanar_pseudo_trans by blast
qed
ultimately
show ?thesis
using cop_not_par_same_side by blast
qed
then obtain Q1 where P5: "Col Q P Q1 ∧ A B OS C0 Q1"
by blast
hence "Col Q P Q1"
by blast
have "A B OS C0 Q1"
using P5 by blast
have "P ≠ Q1"
using "2" P5 one_side_not_col124 by blast
have "¬ Col P C0 Q1"
by (metis ‹Col Q P Q1› ‹P ≠ Q1› ‹¬ Col P Q C0›
col_permutation_1 col_transitivity_1)
have "∃ A1. Col A B A1 ∧ P C0 OS Q1 A1"
proof -
{
assume "Col P C0 A"
have "?thesis"
proof -
have "B ≠ A"
using "3" col_trivial_1 by blast
moreover
have "Col P C0 P"
by (simp add: col_trivial_3)
moreover
have "Col B A P"
by (simp add: "2" col_permutation_4)
moreover
have "¬ Col P C0 B"
by (metis P5 ‹Col P C0 A› ‹¬ Col P C0 Q1›
col_permutation_4 col_transitivity_1 not_col_distincts
one_side_not_col123)
moreover
have "¬ Col P C0 Q1"
by (simp add: ‹¬ Col P C0 Q1›)
moreover
have "Coplanar P C0 B Q1"
by (metis P5 ‹Col P C0 A› calculation(2) calculation(3)
calculation(4) calculation(5) col_trivial_2 l6_21
ncoplanar_perm_5 ts__coplanar two_sides_cases)
ultimately
show ?thesis
using NCol_perm cop_not_par_same_side by blast
qed
}
moreover
{
assume "¬ Col P C0 A"
have "?thesis"
proof -
have "B ≠ A"
using "3" col_trivial_1 by blast
moreover
have "Col P C0 P"
by (simp add: col_trivial_3)
moreover
have "Col A B P"
by (simp add: "2")
moreover
have "¬ Col P C0 A"
by (simp add: ‹¬ Col P C0 A›)
moreover
have "¬ Col P C0 Q1"
using ‹¬ Col P C0 Q1› by auto
moreover
have "Coplanar P C0 A Q1"
by (metis "2" P5 calculation(4) calculation(5)
col_one_side invert_one_side ncoplanar_perm_5 not_col_distincts
ts__coplanar two_sides_cases)
ultimately
show ?thesis
using cop_not_par_same_side by auto
qed
}
ultimately
show ?thesis
by blast
qed
then obtain A1 where P6: "Col A B A1 ∧ P C0 OS Q1 A1"
by blast
hence "Col A B A1"
by blast
have "P C0 OS Q1 A1"
using P6 by blast
have "∃ C1. Col C D C1 ∧ P C0 OS Q1 C1"
proof -
have "Coplanar C D P Q1"
using "4" ‹Col Q P Q1› ‹¬ Col P Q C0› col_cop__cop
col_permutation_4 not_col_distincts by blast
have "P C0 Perp C D"
using Perp_perm ‹Col C D C0 ∧ C D Perp P C0› by blast
moreover
{
assume "¬ Col P C0 C"
have "C ≠ D"
using "1" par_neq2 by auto
moreover
have "Col P C0 C0"
by (simp add: col_trivial_2)
moreover
have "Col C D C0"
using P4 by blast
moreover
have "¬ Col P C0 C"
by (simp add: ‹¬ Col P C0 C›)
moreover
have "¬ Col P C0 Q1"
by (simp add: ‹¬ Col P C0 Q1›)
moreover
have "Coplanar P C0 C Q1"
using ‹Coplanar C D P Q1› calculation(1) calculation(3)
col2_cop__cop col_trivial_3 ncoplanar_perm_17
ncoplanar_perm_18 by blast
ultimately
have "?thesis"
using cop_not_par_same_side by blast
}
moreover
{
assume "¬ Col P C0 D"
have "D ≠ C"
using "1" par_distinct by blast
moreover
have "Col P C0 C0"
by (simp add: col_trivial_2)
moreover
have "Col D C C0"
using P4 Col_perm by blast
moreover
have "¬ Col P C0 D"
by (simp add: ‹¬ Col P C0 D›)
moreover
have "¬ Col P C0 Q1"
by (simp add: ‹¬ Col P C0 Q1›)
moreover
have "Coplanar P C0 D Q1"
using ‹Coplanar C D P Q1› calculation(1)
calculation(3) col_cop__cop ncoplanar_perm_22
ncoplanar_perm_5 by blast
ultimately
have "?thesis"
using NCol_perm cop_not_par_same_side by blast
}
ultimately
show ?thesis
using perp_not_col2 by blast
qed
then obtain C1 where P7: "Col C D C1 ∧ P C0 OS Q1 C1"
by blast
hence "Col C D C1"
by blast
have "P C0 OS Q1 C1"
using P7 by blast
have "C0 ≠ C1"
using ‹P C0 OS Q1 C1› col_trivial_2 one_side_not_col124 by blast
have "P ≠ A1"
using ‹P C0 OS Q1 A1› col_trivial_3 one_side_not_col124 by blast
have "∃ Y. Col P Q Y ∧ Col C D Y"
proof -
have "P A1 ParStrict C0 C1"
proof -
have "P ≠ A1"
by (simp add: ‹P ≠ A1›)
moreover
have "C0 ≠ C1"
using ‹C0 ≠ C1› by blast
moreover
have "A B ParStrict C D"
using ‹A B ParStrict C D› by auto
moreover
have "Col A B P"
by (simp add: "2")
moreover
have "Col A B A1"
by (simp add: ‹Col A B A1›)
moreover
have "Col C D C0"
using P4 by blast
moreover
have "Col C D C1"
by (simp add: ‹Col C D C1›)
moreover
have "C0 C1 Perp P C0"
proof -
have "C D Perp P C0"
by (simp add: P4)
moreover
have "C0 ≠ C1"
by (simp add: ‹C0 ≠ C1›)
moreover
have "Col C D C0"
by (simp add: ‹Col C D C0›)
moreover
have "Col C D C1"
by (simp add: ‹Col C D C1›)
ultimately
show ?thesis
by (meson perp_col2)
qed
moreover
have "P A1 OS C0 Q1"
using "2" P5 P6 calculation(1) col2_os__os by blast
ultimately
show ?thesis
using par_strict_col4__par_strict P6 by blast
qed
moreover
have "C0 C1 Perp P C0"
proof -
have "C D Perp P C0"
by (simp add: P4)
moreover
have "C0 ≠ C1"
by (simp add: ‹C0 ≠ C1›)
moreover
have "Col C D C0"
using P4 by blast
moreover
have "Col C D C1"
by (simp add: ‹Col C D C1›)
ultimately
show ?thesis
by (meson perp_col2)
qed
moreover
have "P A1 OS C0 Q1"
using "2" P5 P6 ‹P ≠ A1› col2_os__os by blast
moreover
have "P C0 OS Q1 A1"
by (simp add: ‹P C0 OS Q1 A1›)
moreover
have "P C0 OS Q1 C1"
by (simp add: ‹P C0 OS Q1 C1›)
ultimately
have "∃ Y. Col P Q1 Y ∧ Col C0 C1 Y"
using alternate_interior__proclus_aux assms(1) assms(2)
by blast
then obtain Y1 where "Col P Q1 Y1" and "Col C0 C1 Y1"
by blast
hence "Col P Q1 Y1"
by blast
hence "Col P Q Y1"
using NCol_cases ‹Col Q P Q1› ‹P ≠ Q1› col_transitivity_1 by blast
moreover
have "Col C D Y1"
using P4 ‹C0 ≠ C1› ‹Col C D C1› ‹Col C0 C1 Y1› colx by blast
ultimately show ?thesis
by blast
qed
}
ultimately
have "∃ Y. Col P Q Y ∧ Col C D Y"
by blast
}
ultimately
have "∃ Y. Col P Q Y ∧ Col C D Y"
by blast
}
thus ?thesis
using proclus_postulate_def by blast
qed
lemma alternate_interior__triangle:
assumes "alternate_interior_angles_postulate"
shows "triangle_postulate"
proof -
{
fix A B C D E F
assume "A B C TriSumA D E F"
have "Bet D E F"
proof -
have "Col A B C ⟶ ?thesis"
using col_trisuma__bet by (simp add: ‹A B C TriSumA D E F›)
moreover
{
assume "¬ Col A B C"
have "∃ B1. B C A CongA C B B1 ∧ C B TS B1 A"
proof -
have "¬ Col B C A"
by (simp add: ‹¬ Col A B C› not_col_permutation_1)
moreover
have "¬ Col C B A"
by (simp add: ‹¬ Col A B C› not_col_permutation_3)
ultimately
show ?thesis
by (simp add: ex_conga_ts)
qed
then obtain B1 where P1: "B C A CongA C B B1 ∧ C B TS B1 A"
by blast
hence "B C A CongA C B B1"
by blast
have "C B TS B1 A"
using P1 by blast
have "A C Par B B1"
using P1 conga_comm l12_21_b l9_2 par_left_comm by blast
hence "A C ParStrict B B1"
using NCol_cases ‹¬ Col A B C› col_trivial_3 par_not_col_strict by blast
have "¬ Col C B B1"
using ‹A C ParStrict B B1› par_strict_not_col_2 by auto
have "¬ Col A B B1"
using ‹A C ParStrict B B1› col_permutation_1 par_strict_not_col_3 by blast
obtain B2 where P2: "Bet B1 B B2 ∧ Cong B1 B B B2"
using Cong_perm segment_construction by blast
hence "Bet B1 B B2"
by blast
have "Cong B1 B B B2"
using P2 by blast
have "A ≠ B"
using ‹¬ Col A B B1› col_trivial_1 by blast
have "B ≠ B1"
using ‹¬ Col C B B1› col_trivial_2 by blast
have "C ≠ B"
using ‹¬ Col A B C› col_trivial_2 by auto
have "B2 ≠ B1"
using ‹B ≠ B1› ‹Bet B1 B B2› between_identity by blast
have "B ≠ B2"
using ‹B2 ≠ B1› ‹Cong B1 B B B2› cong_identity by blast
have "B A TS B1 B2"
using ‹B ≠ B2› ‹Bet B1 B B2› ‹¬ Col A B B1› bet__ts col_permutation_4 by blast
obtain D1 E1 F1 where P3: "A B C B C A SumA D1 E1 F1 ∧ D1 E1 F1 C A B SumA D E F"
using TriSumA_def ‹A B C TriSumA D E F› by blast
hence "A B C B C A SumA D1 E1 F1"
by blast
have "D1 E1 F1 C A B SumA D E F"
using P3 by blast
have "B1 B B2 CongA D E F"
proof -
have "D1 E1 F1 C A B SumA B1 B B2"
proof -
have "B1 B A A B B2 SumA B1 B B2"
by (simp add: ‹B A TS B1 B2› ts__suma_1)
moreover
have "B1 B A CongA D1 E1 F1"
proof -
have "A B C B C A SumA B1 B A"
proof -
have "A B C C B B1 SumA A B B1"
by (simp add: ‹C B TS B1 A› l9_2 ts__suma)
moreover
have "A B C CongA A B C"
by (simp add: ‹A ≠ B› ‹C ≠ B› conga_refl)
moreover
have "C B B1 CongA B C A"
using ‹B C A CongA C B B1› not_conga_sym by blast
moreover
have "A B B1 CongA B1 B A"
using ‹A ≠ B› ‹B ≠ B1› conga_pseudo_refl by auto
ultimately
show ?thesis
using conga3_suma__suma by blast
qed
moreover
have "A B C B C A SumA D1 E1 F1"
by (simp add: ‹A B C B C A SumA D1 E1 F1›)
ultimately
show ?thesis
using suma2__conga by blast
qed
moreover
have "A B B2 CongA C A B"
proof -
have "B A TS B2 C"
by (metis Par_cases ‹A C Par B B1› ‹B A TS B1 B2› ‹C B TS B1 A›
invert_two_sides l9_2 l9_8_2 par_two_sides_two_sides ts_ts_os)
moreover
have "B B2 Par A C"
by (metis Par_perm ‹A C Par B B1› ‹B ≠ B2› ‹Bet B1 B B2›
bet_col bet_col1 par_col2_par)
ultimately
show ?thesis
using conga_left_comm alternate_interior_angles_postulate_def assms by blast
qed
moreover
have "B1 B B2 CongA B1 B B2"
using ‹B ≠ B1› ‹B ≠ B2› conga_refl by auto
ultimately
show ?thesis
using conga3_suma__suma by blast
qed
moreover
have "D1 E1 F1 C A B SumA D E F"
by (simp add: P3)
ultimately
show ?thesis
using suma2__conga by blast
qed
hence ?thesis
using P2 bet_conga__bet by blast
}
ultimately
show ?thesis
by blast
qed
}
thus ?thesis
using triangle_postulate_def by blast
qed
lemma bachmann_s_lotschnittaxiom_aux_R1:
assumes "bachmann_s_lotschnittaxiom"
shows "∀ A1 A2 B1 B2 C1 C2 D1 D2 IAB IAC IBD.
IAB ≠ IAC ∧ IAB ≠ IBD ∧
A1 A2 Perp B1 B2 ∧
A1 A2 Perp C1 C2 ∧
B1 B2 Perp D1 D2 ∧
Col A1 A2 IAB ∧
Col B1 B2 IAB ∧ Col A1 A2 IAC ∧
Col C1 C2 IAC ∧ Col B1 B2 IBD ∧ Col D1 D2 IBD ∧
Coplanar IAB IAC IBD C1 ∧
Coplanar IAB IAC IBD C2 ∧
Coplanar IAB IAC IBD D1 ∧ Coplanar IAB IAC IBD D2 ⟶
(∃ I. Col C1 C2 I ∧ Col D1 D2 I)"
proof -
{
fix A1 A2 B1 B2 C1 C2 D1 D2 IAB IAC IBD
assume 1: "IAB ≠ IAC" and
2: "IAB ≠ IBD" and
3: "A1 A2 Perp B1 B2" and
4: "A1 A2 Perp C1 C2" and
5: "B1 B2 Perp D1 D2" and
6: "Col A1 A2 IAB" and
7: "Col B1 B2 IAB" and
8: "Col A1 A2 IAC" and
9: "Col C1 C2 IAC" and
10: "Col B1 B2 IBD" and
11: "Col D1 D2 IBD" and
12: "Coplanar IAB IAC IBD C1" and
13: "Coplanar IAB IAC IBD C2" and
14: "Coplanar IAB IAC IBD D1" and
15: "Coplanar IAB IAC IBD D2"
have "Col IAB IAC A1"
using "4" "6" "8" col_transitivity_1 not_col_permutation_3 perp_distinct by blast
have "Col IAB IAC A2"
using "4" "6" "8" col_permutation_3 col_transitivity_2 perp_distinct by blast
have "Col IAB IBD B1"
using "10" "5" "7" col_transitivity_1 not_col_permutation_2 perp_not_eq_1 by blast
have "Col IAB IBD B2"
using "10" "5" "7" Col_perm col_transitivity_2 perp_distinct by blast
have "Coplanar IAB IAC IBD A1"
using ‹Col IAB IAC A1› ncop__ncols by blast
have "Coplanar IAB IAC IBD A2"
using ‹Col IAB IAC A2› ncop__ncols by blast
have "Coplanar IAB IAC IBD B1"
using ‹Col IAB IBD B1› ncop__ncols by blast
have "Coplanar IAB IAC IBD B2"
using ‹Col IAB IBD B2› ncop__ncols by blast
have "IAB IAC Perp IBD IAB"
using perp_col4 1 "2" "3" 6 7 8 10 by auto
hence H1: "Per IAC IAB IBD"
using perp_per_1 "1" l8_8 by blast
have "¬ Col IAC IAB IBD"
using per_not_col "1" "2" ‹Per IAC IAB IBD› by auto
have "¬ Col A1 A2 IBD"
using "6" "8" col3 par_neq1 "4" ‹¬ Col IAC IAB IBD› perp_distinct by fastforce
have "A1 A2 ParStrict D1 D2"
proof -
have "A1 A2 Par D1 D2"
proof -
have "Coplanar B1 B2 A1 D1"
proof -
have "Coplanar IAB IAC IBD B1"
by (simp add: ‹Coplanar IAB IAC IBD B1›)
moreover
have "Coplanar IAB IAC IBD B2"
by (simp add: ‹Coplanar IAB IAC IBD B2›)
moreover
have "Coplanar IAB IAC IBD A1"
using ‹Coplanar IAB IAC IBD A1› by force
moreover
have "Coplanar IAB IAC IBD D1"
using "14" by blast
ultimately
show ?thesis
by (meson ‹¬ Col IAC IAB IBD› coplanar_perm_6 coplanar_pseudo_trans)
qed
moreover
have "Coplanar B1 B2 A1 D2"
using coplanar_pseudo_trans not_par_not_col par_id_1
by (meson "15" ‹Coplanar IAB IAC IBD A1› ‹Coplanar IAB IAC IBD B1›
‹Coplanar IAB IAC IBD B2› ‹¬ Col IAC IAB IBD› not_col_permutation_4)
moreover
have "Coplanar B1 B2 A2 D1"
proof -
have "Coplanar IAB IAC IBD B1"
by (simp add: ‹Coplanar IAB IAC IBD B1›)
moreover
have "Coplanar IAB IAC IBD B2"
by (simp add: ‹Coplanar IAB IAC IBD B2›)
moreover
have "Coplanar IAB IAC IBD A2"
using ‹Coplanar IAB IAC IBD A2› by blast
moreover
have "Coplanar IAB IAC IBD D1"
using "14" by blast
ultimately
show ?thesis
by (meson ‹¬ Col IAC IAB IBD› coplanar_perm_6 coplanar_pseudo_trans)
qed
moreover
have "Coplanar B1 B2 A2 D2"
proof -
have "Coplanar IAB IAC IBD B1"
by (simp add: ‹Coplanar IAB IAC IBD B1›)
moreover
have "Coplanar IAB IAC IBD B2"
by (simp add: ‹Coplanar IAB IAC IBD B2›)
moreover
have "Coplanar IAB IAC IBD A2"
using ‹Coplanar IAB IAC IBD A2› by blast
moreover
have "Coplanar IAB IAC IBD D2"
using "15" by blast
ultimately
show ?thesis
by (meson ‹¬ Col IAC IAB IBD› coplanar_perm_6 coplanar_pseudo_trans)
qed
moreover
have "A1 A2 Perp B1 B2"
by (simp add: "3")
moreover
have "D1 D2 Perp B1 B2"
using "5" Perp_perm by blast
ultimately
show ?thesis
using l12_9 by blast
qed
moreover
have "Col D1 D2 IBD"
by (simp add: "11")
moreover
have "¬ Col A1 A2 IBD"
using "6" "8" ‹¬ Col IAC IAB IBD› calculation(1) col3 par_neq1 by blast
ultimately
show ?thesis
using par_not_col_strict by blast
qed
have Q1: "B1 B2 ParStrict C1 C2"
proof -
have "B1 B2 Par C1 C2"
proof -
have "Coplanar A1 A2 B1 C1"
proof -
have "Coplanar IAB IAC IBD A1"
by (simp add: ‹Coplanar IAB IAC IBD A1›)
moreover
have "Coplanar IAB IAC IBD A2"
by (simp add: ‹Coplanar IAB IAC IBD A2›)
moreover
have "Coplanar IAB IAC IBD B1"
using ‹Coplanar IAB IAC IBD B1› by blast
moreover
have "Coplanar IAB IAC IBD C1"
using "12" by blast
ultimately
show ?thesis
by (meson ‹¬ Col IAC IAB IBD› coplanar_perm_6 coplanar_pseudo_trans)
qed
moreover
have "Coplanar A1 A2 B1 C2"
proof -
have "Coplanar IAB IAC IBD A1"
by (simp add: ‹Coplanar IAB IAC IBD A1›)
moreover
have "Coplanar IAB IAC IBD A2"
by (simp add: ‹Coplanar IAB IAC IBD A2›)
moreover
have "Coplanar IAB IAC IBD B1"
by (simp add: ‹Coplanar IAB IAC IBD B1›)
moreover
have "Coplanar IAB IAC IBD C2"
by (simp add: "13")
ultimately
show ?thesis
by (meson ‹¬ Col IAC IAB IBD› coplanar_perm_6 coplanar_pseudo_trans)
qed
moreover
have "Coplanar A1 A2 B2 C1"
proof -
have "Coplanar IAB IAC IBD A1"
by (simp add: ‹Coplanar IAB IAC IBD A1›)
moreover
have "Coplanar IAB IAC IBD A2"
by (simp add: ‹Coplanar IAB IAC IBD A2›)
moreover
have "Coplanar IAB IAC IBD B2"
by (simp add: ‹Coplanar IAB IAC IBD B2›)
moreover
have "Coplanar IAB IAC IBD C1"
using "12" by blast
ultimately
show ?thesis
by (meson ‹¬ Col IAC IAB IBD› coplanar_perm_6 coplanar_pseudo_trans)
qed
moreover
have "Coplanar A1 A2 B2 C2"
proof -
have "Coplanar IAB IAC IBD A1"
by (simp add: ‹Coplanar IAB IAC IBD A1›)
moreover
have "Coplanar IAB IAC IBD A2"
by (simp add: ‹Coplanar IAB IAC IBD A2›)
moreover
have "Coplanar IAB IAC IBD B2"
using ‹Coplanar IAB IAC IBD B2› by blast
moreover
have "Coplanar IAB IAC IBD C2"
using ‹Coplanar IAB IAC IBD C2› by blast
ultimately
show ?thesis
by (meson ‹¬ Col IAC IAB IBD› coplanar_perm_6 coplanar_pseudo_trans)
qed
moreover
have "B1 B2 Perp A1 A2"
using 3 Perp_perm by blast
moreover
have "C1 C2 Perp A1 A2"
using 4 Perp_perm by blast
ultimately
show ?thesis
using l12_9 by blast
qed
moreover
have "Col C1 C2 IAC"
using 9 by auto
moreover
have "¬ Col B1 B2 IAC"
using "10" "7" ‹¬ Col IAC IAB IBD› calculation(1) col3 par_neq1 by blast
ultimately
show ?thesis
using par_not_col_strict by blast
qed
have "IAC ≠ IAB"
using 1 by auto
have "IAB ≠ IBD"
using 2 by auto
have "Col C1 C2 IAC"
using 9 by auto
then obtain P1 where P1: "C1 ≠ P1 ∧ C2 ≠ P1 ∧ IAC ≠ P1 ∧ Col C1 C2 P1"
using diff_col_ex3 by blast
hence "C1 ≠ P1"
by blast
have "C2 ≠ P1"
using P1 by blast
have "IAC ≠ P1"
using P1 by blast
have "Col C1 C2 P1"
using P1 by blast
have "Col D1 D2 IBD"
by (simp add: "11")
then obtain R1 where P2: "D1 ≠ R1 ∧ D2 ≠ R1 ∧ IBD ≠ R1 ∧ Col D1 D2 R1"
using diff_col_ex3 by blast
hence "D1 ≠ R1"
by blast
have "D2 ≠ R1"
using P2 by blast
have "IBD ≠ R1"
using P2 by blast
have "Col D1 D2 R1"
using P2 by blast
have "IAC ≠ IBD"
using "8" ‹¬ Col A1 A2 IBD› by auto
have "D1 ≠ D2"
using ‹A1 A2 ParStrict D1 D2› par_strict_distinct by blast
have "C1 ≠ C2"
using Q1 par_strict_neq2 by auto
have P3: "C1 ≠ Q ∧ Q ≠ D1 ∧ Per C1 Q D1 ∧ Per Q C1 C2 ∧
Per Q D1 D2 ∧ Coplanar C1 Q D1 C2 ∧ Coplanar C1 Q D1 D2
⟶
(∃ S. Col C1 C2 S ∧ Col D1 D2 S)"
using assms(1) bachmann_s_lotschnittaxiom_def by blast
have "∃ I. Col IAC P1 I ∧ Col IBD R1 I"
proof -
have "IAC ≠ IAB"
using 1 by auto
moreover
have "IAB ≠ IBD"
using 2 by auto
moreover
have "Per IAC IAB IBD"
using H1 by blast
moreover
have "IAC IAB Perp P1 IAC"
proof -
have "IAC ≠ IAB"
using 1 by blast
moreover
have "P1 ≠ IAC"
using P1 by blast
ultimately
show ?thesis
using 8 6 P1 9 4 perp_col4 by blast
qed
hence "Per IAB IAC P1"
using perp_per_1 by blast
moreover
have "IBD IAB Perp R1 IBD"
proof -
have "IBD ≠ IAB"
using 2 by auto
moreover
have "R1 ≠ IBD"
using P2 by auto
ultimately
show ?thesis
using 10 7 P2 5 11 perp_col4 by blast
qed
hence "Per IAB IBD R1"
using perp_per_1 by blast
moreover
have "Coplanar IAC IAB IBD P1"
proof -
have "C1 ≠ C2"
using Q1 par_strict_neq2 by auto
moreover
have "Coplanar IAC IAB IBD C1"
using 12 coplanar_perm_6 by blast
moreover
have "Coplanar IAC IAB IBD C2"
using 13 coplanar_perm_6 by blast
moreover
have "Col C1 C2 P1"
using P1 by blast
ultimately
show ?thesis
using col_cop2__cop by blast
qed
moreover
have "Coplanar IAC IAB IBD R1"
using "14" "15" P2 ‹D1 ≠ D2› col_cop2__cop coplanar_perm_6 by blast
ultimately
show ?thesis
using assms(1) bachmann_s_lotschnittaxiom_def by blast
qed
then obtain I where P5: "Col IAC P1 I ∧ Col IBD R1 I"
by auto
hence "Col IAC P1 I"
by blast
have "Col IBD R1 I"
using P5 by blast
have "Col C1 C2 I"
using "9" ‹Col C1 C2 P1› ‹Col IAC P1 I› ‹IAC ≠ P1› colx by blast
moreover
have "Col D1 D2 I"
using "11" ‹Col D1 D2 R1› ‹Col IBD R1 I› ‹IBD ≠ R1› colx by blast
ultimately
have "∃ I0. (Col C1 C2 I0 ∧ Col D1 D2 I0)"
by blast
}
thus ?thesis by blast
qed
lemma bachmann_s_lotschnittaxiom_aux_R2:
assumes "∀ A1 A2 B1 B2 C1 C2 D1 D2 IAB IAC IBD.
IAB ≠ IAC ∧ IAB ≠ IBD ∧
A1 A2 Perp B1 B2 ∧
A1 A2 Perp C1 C2 ∧
B1 B2 Perp D1 D2 ∧
Col A1 A2 IAB ∧
Col B1 B2 IAB ∧ Col A1 A2 IAC ∧
Col C1 C2 IAC ∧ Col B1 B2 IBD ∧ Col D1 D2 IBD ∧
Coplanar IAB IAC IBD C1 ∧
Coplanar IAB IAC IBD C2 ∧
Coplanar IAB IAC IBD D1 ∧ Coplanar IAB IAC IBD D2 ⟶
(∃ I. Col C1 C2 I ∧ Col D1 D2 I)"
shows "bachmann_s_lotschnittaxiom"
proof -
{
fix P Q R P1 R1
assume 1: "P ≠ Q" and
2: "Q ≠ R" and
3: "Per P Q R" and
4: "Per Q P P1" and
5: "Per Q R R1" and
6: "Coplanar P Q R P1" and
7: "Coplanar P Q R R1"
have "∃ S. Col P P1 S ∧ Col R R1 S"
proof cases
assume "P = P1"
thus ?thesis
using col_trivial_1 col_trivial_2 by blast
next
assume "P ≠ P1"
thus ?thesis
proof cases
assume "R = R1"
thus ?thesis
using col_trivial_1 col_trivial_2 by blast
next
assume "R ≠ R1"
have "Q ≠ P"
using "1" by auto
moreover
have "Q ≠ R"
by (simp add: "2")
moreover
have "P Q Perp Q R"
by (simp add: "1" "2" "3" per_perp)
moreover
have "P Q Perp P P1"
using "1" "4" ‹P ≠ P1› per_perp perp_left_comm by auto
moreover
have "Q R Perp R R1"
by (simp add: "2" "5" ‹R ≠ R1› per_perp)
moreover
have "Col P Q Q"
by (simp add: col_trivial_2)
moreover
have "Col Q R Q"
using col_trivial_3 by auto
moreover
have "Col P Q P"
by (simp add: col_trivial_3)
moreover
have "Col P P1 P"
by (simp add: col_trivial_3)
moreover
have "Col Q R R"
by (simp add: col_trivial_2)
moreover
have "Col R R1 R"
by (simp add: col_trivial_3)
moreover
have "Coplanar Q P R P"
using ncop_distincts by blast
moreover
have "Coplanar Q P R P1"
using "6" ncoplanar_perm_6 by blast
moreover
have "Coplanar Q P R R"
using ncop_distincts by blast
moreover
have "Coplanar Q P R R1"
using "7" ncoplanar_perm_6 by blast
ultimately
show ?thesis
using assms(1) by blast
qed
qed
}
thus ?thesis
using bachmann_s_lotschnittaxiom_def by blast
qed
lemma bachmann_s_lotschnittaxiom_aux:
shows "bachmann_s_lotschnittaxiom ⟷
(∀ A1 A2 B1 B2 C1 C2 D1 D2 IAB IAC IBD.
IAB ≠ IAC ∧ IAB ≠ IBD ∧
A1 A2 Perp B1 B2 ∧
A1 A2 Perp C1 C2 ∧
B1 B2 Perp D1 D2 ∧
Col A1 A2 IAB ∧
Col B1 B2 IAB ∧ Col A1 A2 IAC ∧
Col C1 C2 IAC ∧ Col B1 B2 IBD ∧ Col D1 D2 IBD ∧
Coplanar IAB IAC IBD C1 ∧
Coplanar IAB IAC IBD C2 ∧
Coplanar IAB IAC IBD D1 ∧ Coplanar IAB IAC IBD D2 ⟶
(∃ I. Col C1 C2 I ∧ Col D1 D2 I))"
using bachmann_s_lotschnittaxiom_aux_R2 bachmann_s_lotschnittaxiom_aux_R1 by blast
lemma bachmann_s_lotschnittaxiom__legendre_s_parallel_postulate:
assumes "bachmann_s_lotschnittaxiom"
shows "legendre_s_parallel_postulate"
proof -
have P0: "∀ A1 A2 B1 B2 C1 C2 D1 D2 IAB IAC IBD.
IAB ≠ IAC ∧ IAB ≠ IBD ∧
A1 A2 Perp B1 B2 ∧
A1 A2 Perp C1 C2 ∧
B1 B2 Perp D1 D2 ∧
Col A1 A2 IAB ∧
Col B1 B2 IAB ∧ Col A1 A2 IAC ∧
Col C1 C2 IAC ∧ Col B1 B2 IBD ∧ Col D1 D2 IBD ∧
Coplanar IAB IAC IBD C1 ∧
Coplanar IAB IAC IBD C2 ∧
Coplanar IAB IAC IBD D1 ∧ Coplanar IAB IAC IBD D2 ⟶
(∃ I. Col C1 C2 I ∧ Col D1 D2 I)"
using assms(1) bachmann_s_lotschnittaxiom_aux_R1 by blast
{
assume "(∃ A B C. (¬ Col A B C ∧ Acute A B C ∧
(∀ P Q. B Out A P ∧ P ≠ Q ∧ Per B P Q ∧ Coplanar A B C Q
⟶ (∃ Y. B Out C Y ∧ Col P Q Y))))"
then obtain A B C where P1: "(¬ Col A B C ∧ Acute A B C ∧
(∀ P Q. B Out A P ∧ P ≠ Q ∧ Per B P Q ∧ Coplanar A B C Q
⟶ (∃ Y. B Out C Y ∧ Col P Q Y)))"
by auto
hence "¬ Col A B C"
by auto
have "Acute A B C"
using P1 by blast
have Q1: "∀ P Q. B Out A P ∧ P ≠ Q ∧ Per B P Q ∧ Coplanar A B C Q
⟶ (∃ Y. B Out C Y ∧ Col P Q Y)"
using P1 by blast
{
fix T
assume "T InAngle A B C"
{
assume "Col A B T"
have "¬ Col B C T"
by (metis ‹Col A B T› ‹T InAngle A B C› ‹¬ Col A B C› col_trivial_3
colx inangle_distincts not_col_permutation_2)
then obtain Y where P2: "Col B C Y ∧ B C Perp T Y"
using l8_18_existence by blast
hence "Col B C Y"
by auto
have "B C Perp T Y"
using P2 by blast
have "B Out A T"
using Col_def NCol_perm ‹Col A B T› ‹T InAngle A B C› ‹¬ Col A B C›
col_in_angle_out by blast
moreover
have "T B A A B C SumA T B C"
proof -
have "A B C CongA A B C"
using ‹¬ Col A B C› conga_refl not_col_distincts by fastforce
moreover
have "¬ B A OS T C"
using ‹B Out A T› one_side_not_col123 out_col by blast
moreover
have "Coplanar T B A C"
by (simp add: ‹Col A B T› col__coplanar col_permutation_3)
moreover
have "T B C CongA T B C"
using ‹T InAngle A B C› conga_refl inangle_distincts by auto
ultimately
show ?thesis
using SumA_def by blast
qed
hence "A B C CongA T B C"
by (meson ‹Col A B T› ‹T InAngle A B C› ‹¬ Col A B C› bet_col
col_in_angle_out col_permutation_4 l6_6 out213_suma__conga)
hence "Acute T B C"
using ‹Acute A B C› acute_conga__acute by blast
hence "B Out C Y"
using P2 acute_col_perp__out l6_6 by blast
moreover
have "Bet T T Y"
by (simp add: between_trivial2)
ultimately
have "(∃ X Y. B Out A X ∧ B Out C Y ∧ Bet X T Y)"
by blast
}
moreover
{
assume "¬ Col A B T"
then obtain X where P3: "Col A B X ∧ A B Perp T X"
using l8_18_existence by blast
hence "Col A B X"
by auto
have "A B Perp T X"
using P3 by blast
have "B Out A X"
proof -
have "Acute T B A"
proof -
have "Acute A B C"
by (simp add: ‹Acute A B C›)
moreover
have "A B T LeA A B C"
by (simp add: ‹T InAngle A B C› inangle__lea)
hence "T B A LeA A B C"
using lea_left_comm by blast
ultimately
show ?thesis
using acute_lea_acute by blast
qed
moreover
have "Col B A X"
using ‹Col A B X› not_col_permutation_4 by blast
moreover
have "B A Perp T X"
by (simp add: ‹A B Perp T X› perp_left_comm)
ultimately
show ?thesis
using acute_col_perp__out l6_6 by blast
qed
have "∃ Y. B Out C Y ∧ Col X T Y"
proof -
have "X ≠ T"
using P3 ‹¬ Col A B T› by blast
moreover
have "Col A B B"
by (simp add: col_trivial_2)
hence "Per B X T"
using ‹Col A B X› ‹A B Perp T X› Per_perm l8_16_1 by blast
moreover
have "Coplanar A B C T"
using ‹T InAngle A B C› coplanar_perm_9 inangle__coplanar by blast
ultimately
show ?thesis
using ‹B Out A X› Q1 by blast
qed
then obtain Y where P5: "B Out C Y ∧ Col X T Y"
by auto
hence "B Out C Y"
by auto
have "Col X T Y"
using P5 by blast
{
assume "Bet T Y X ∨ Bet Y X T"
have "Bet X T Y"
proof cases
assume "T = Y"
thus ?thesis
by (simp add: between_trivial)
next
assume "T ≠ Y"
have "¬ Col B C T"
by (metis (full_types) P5 ‹B Out A X› ‹T ≠ Y›
‹¬ Col A B C› col_trivial_3 colx
not_col_permutation_2 out_col out_distinct)
{
assume "Bet T Y X"
have "C B OS T A"
by (simp add: ‹T InAngle A B C› ‹¬ Col A B C›
‹¬ Col B C T› in_angle_one_side
l11_24 not_col_permutation_3)
have "C B TS T A"
proof -
have "C B TS X T"
proof -
have "¬ Col X C B"
by (metis Out_def ‹B Out A X› ‹Col A B X›
‹¬ Col A B C› col_permutation_2 col_transitivity_1)
moreover have "¬ Col T C B"
using NCol_perm ‹¬ Col B C T› by blast
moreover have "∃ Z. Col Z C B ∧ Bet X Z T"
using Col_perm P5 ‹Bet T Y X› between_symmetry out_col by blast
ultimately show ?thesis
using TS_def by blast
qed
moreover
have "C B OS X A"
using ‹B Out A X› ‹¬ Col A B C› col_trivial_3
invert_one_side one_side_reflexivity
os_out_os by blast
ultimately
show ?thesis
using l9_2 l9_8_2 by blast
qed
hence "Bet X T Y"
using ‹C B OS T A› l9_9 by blast
}
moreover
{
assume "Bet Y X T"
have "A B OS T C"
by (simp add: NCol_perm ‹T InAngle A B C›
‹¬ Col A B C› ‹¬ Col A B T› in_angle_one_side)
have "A B TS T C"
proof -
have "A B TS Y T"
by (metis (full_types) ‹Bet Y X T› ‹Col A B X›
‹Col X T Y› ‹¬ Col A B T› between_equality between_trivial
calculation col_permutation_5 colx l9_18 not_col_permutation_2)
moreover
have "A B OS Y C"
using ‹A B OS T C› ‹B Out C Y› col124__nos
invert_one_side l6_6 out_one_side by blast
ultimately
show ?thesis
using l9_2 l9_8_2 by blast
qed
hence "Bet X T Y"
using ‹A B OS T C› l9_9 by blast
}
ultimately
show ?thesis
using ‹Bet T Y X ∨ Bet Y X T› by blast
qed
}
hence "Bet X T Y"
using Col_def ‹Col X T Y› by blast
hence "∃ X Y. B Out A X ∧ B Out C Y ∧ Bet X T Y"
using ‹B Out A X› ‹B Out C Y› by blast
}
ultimately
have "(∃ X Y. B Out A X ∧ B Out C Y ∧ Bet X T Y)"
by blast
}
hence "legendre_s_parallel_postulate"
using legendre_s_parallel_postulate_def ‹Acute A B C›
‹¬ Col A B C› by blast
}
hence "(∃ A B C. (¬ Col A B C ∧ Acute A B C ∧
(∀ P Q. B Out A P ∧ P ≠ Q ∧ Per B P Q ∧ Coplanar A B C Q
⟶ (∃ Y. B Out C Y ∧ Col P Q Y)))) ⟶
legendre_s_parallel_postulate"
by blast
moreover
have "∃ A B C. ( ¬ Col A B C ∧
Acute A B C ∧
(∀ P Q. B Out A P ∧ P ≠ Q ∧
Per B P Q ∧
Coplanar A B C Q
⟶
(∃ Y. B Out C Y ∧ Col P Q Y)))"
proof -
obtain C E D9 where P6: "¬ (Bet C E D9 ∨ Bet E D9 C ∨ Bet D9 C E)"
using lower_dim by blast
hence "¬ Col C E D9"
by (simp add: Col_def)
then obtain B where P7: "Col D9 E B ∧ D9 E Perp C B"
using l8_18_existence NCol_cases by blast
hence "Col D9 E B"
by auto
have "D9 E Perp C B"
using P7 by blast
have "∃ F. Col D9 E F ∧ B ≠ F"
using ‹Col D9 E B› diff_col_ex3 by blast
then obtain F where P8: "Col D9 E F ∧ B ≠ F"
by blast
hence "Col D9 E F"
by auto
have "B ≠ F"
using P8 by auto
then obtain A where P9: "(Bet B F A ∨ Bet B A F) ∧ Cong B A B C"
using segment_construction_2 by presburger
hence "Bet B F A ∨ Bet B A F"
by auto
have "Cong B A B C"
using P9 by auto
have "Col D9 E A"
using ‹B ≠ F› ‹Bet B F A ∨ Bet B A F› ‹Col D9 E B›
‹Col D9 E F› bet_col1 between_trivial colx by blast
have "C B Perp B A"
proof -
have "D9 E Perp C B"
by (simp add: ‹D9 E Perp C B›)
moreover
have "B ≠ A"
by (metis NCol_cases ‹Col D9 E A› ‹Cong B A B C›
‹¬ Col C E D9› cong_diff_3)
moreover
have "Col D9 E B"
using ‹Col D9 E B› by blast
moreover
have "Col D9 E A"
using ‹Col D9 E A› by auto
ultimately
show ?thesis
using perp_col0 by blast
qed
hence "B A Perp C B"
using Perp_perm by blast
have K1: "¬ Col B A C"
by (simp add: ‹B A Perp C B› perp_not_col)
obtain D where P8B: "D Midpoint A C"
using midpoint_existence by blast
have "¬ Col A B D"
by (metis P8B ‹¬ Col B A C› col_transitivity_2
midpoint_col midpoint_distinct_1
not_col_permutation_1)
moreover
have "B ≠ A"
using ‹¬ Col B A C› col_trivial_1 by blast
have "A ≠ C"
using ‹¬ Col B A C› col_trivial_2 by blast
have "B ≠ C"
using ‹¬ Col B A C› col_trivial_3 by blast
have "D ≠ A"
using calculation not_col_distincts by blast
have "D ≠ C"
using P8B ‹A ≠ C› midpoint_not_midpoint by blast
have "Acute A B D"
proof -
have "D ≠ B"
using calculation col_trivial_2 by blast
have "Per A B C"
using Perp_cases ‹C B Perp B A› perp_per_2 by blast
moreover
have "A B D LtA A B C"
proof -
have "A B D LeA A B C"
proof -
have "D InAngle A B C"
proof -
have "Bet A D C"
using Midpoint_def P8B by blast
moreover
have "D = B ∨ B Out D D"
using out_trivial by blast
ultimately
show ?thesis
using InAngle_def ‹B ≠ A› ‹B ≠ C› ‹D ≠ B› by auto
qed
moreover
have "A B D CongA A B D"
using ‹B ≠ A› ‹D ≠ B› conga_refl by auto
ultimately
show ?thesis
by (simp add: inangle__lea)
qed
moreover
{
assume "A B D CongA A B C"
hence "Per A B D"
using ‹Per A B C› conga_sym l11_17 by blast
have "Per C B D"
using P8B ‹B ≠ A› ‹D ≠ C› ‹Per A B C› ‹Per A B D›
col_per2__per l7_2 l8_2 l8_8 midpoint_col by blast
have "A B D C B D SumA A B C"
proof -
have "D B C CongA C B D"
using ‹B ≠ C› ‹D ≠ B› conga_pseudo_refl by auto
moreover
have "¬ B D OS A C"
by (meson P8B midpoint_bet col_trivial_3 one_side_chara)
moreover
have "Coplanar A B D C"
proof -
have "Bet A D C"
using P8B by (simp add: midpoint_bet)
thus ?thesis
using bet_col ncop__ncols by blast
qed
moreover
have "A B C CongA A B C"
using ‹B ≠ A› ‹B ≠ C› conga_refl by auto
ultimately
show ?thesis
using SumA_def by blast
qed
hence "Bet A B C"
using per2_suma__bet ‹Per A B D› ‹Per C B D› by blast
hence "False"
using Col_def ‹¬ Col B A C› between_symmetry by blast
}
hence "¬ A B D CongA A B C"
by auto
ultimately
show ?thesis
by (simp add: LtA_def)
qed
ultimately
show ?thesis
using Acute_def by blast
qed
moreover
{
fix P Q
assume H1: "B Out A P" and
H2: "P ≠ Q" and
H3: "Per B P Q" and
H4: "Coplanar A B D Q"
have "B ≠ P"
using H1 Out_def by auto
then obtain P' where H5: "B Out P' C ∧ Cong B P' B P"
using ‹B ≠ C› l6_11_existence by fastforce
hence H5A: "B Out P' C"
by auto
have H5B: "Cong B P' B P"
using H5 by auto
obtain Q' where H6: "B C Perp Q' P' ∧ Coplanar B C A Q'"
using ex_perp_cop ‹B ≠ C› by blast
hence H6A: "B C Perp Q' P'"
by auto
have H6B: "Coplanar B C A Q'"
using H6 by blast
have "B A Perp Q P"
by (metis H1 H2 H3 NCol_cases ‹B ≠ A› ‹B ≠ P› col_per_perp l8_2 out_col)
have "Coplanar B Q A C"
proof -
have "Coplanar B Q A D"
by (simp add: H4 coplanar_perm_10)
moreover
have "Col A D A"
by (simp add: col_trivial_3)
moreover
have "Col A D C"
using P8B by (simp add: Midpoint_def bet_col)
ultimately
show ?thesis
using ‹D ≠ A› col2_cop__cop by blast
qed
have "∃ I. Col P Q I ∧ Col P' Q' I"
proof -
have "B ≠ P'"
using ‹B Out P' C› l6_3_1 by blast
moreover
have "B ≠ P"
using ‹B ≠ P› by auto
moreover
have "B A Perp B C"
by (simp add: ‹B A Perp C B› perp_right_comm)
moreover
have "B A Perp P Q"
by (simp add: ‹B A Perp Q P› perp_right_comm)
moreover
have "B C Perp P' Q'"
by (simp add: ‹B C Perp Q' P'› perp_right_comm)
moreover
have "Col B A B"
by (simp add: col_trivial_3)
moreover
have "Col B C B"
by (simp add: col_trivial_3)
moreover
have "Col B A P"
by (simp add: H1 out_col)
moreover
have "Col P Q P"
by (simp add: col_trivial_3)
moreover
have "Col B C P'"
using Out_cases ‹B Out P' C› out_col by blast
moreover
have "Col P' Q' P'"
by (simp add: col_trivial_3)
moreover
have "Coplanar B P P' P"
using ncop_distincts by blast
moreover
have "Coplanar B P P' Q"
proof -
have "Coplanar B A C Q"
by (simp add: ‹Coplanar B Q A C› coplanar_perm_3)
moreover have "Coplanar B A C P'"
using ‹Col B C P'› ncop__ncols by blast
moreover have "Coplanar B A C P"
using ‹Col B A P› ncop__ncols by blast
moreover have "Coplanar B A C B"
using ncop_distincts by blast
ultimately show ?thesis
using K1 coplanar_pseudo_trans by presburger
qed
moreover
have "Coplanar B P P' P'"
using ncop_distincts by blast
moreover
have "Coplanar B P P' Q'"
using H6B col2_cop__cop
by (meson ‹B ≠ A› ‹B ≠ C› calculation(10) calculation(6)
calculation(7) calculation(8) coplanar_perm_16
coplanar_perm_21)
ultimately
show ?thesis
using P0 by blast
qed
then obtain I where H7: "Col P Q I ∧ Col P' Q' I"
by auto
hence "Col P Q I"
by auto
have "Col P' Q' I"
using H7 by blast
have "B ≠ D"
using ‹¬ Col A B D› col_trivial_2 by blast
hence "B C ParStrict P I"
proof -
have "P ≠ I"
proof -
{
assume "P = I"
{
assume "Col B A C"
hence "¬ B A Perp C B"
using K1 by blast
hence "False"
using perp_not_col using ‹B A Perp C B› by blast
}
moreover
have "Col B A C"
proof -
have "A B Par P' Q'"
proof -
have "Coplanar B C A P'"
using H5A ncop__ncols ncoplanar_perm_3 out_col by blast
moreover
have "Coplanar B C A Q'"
by (simp add: H6B)
moreover
have "Coplanar B C B P'"
using ncop_distincts by blast
moreover
have "Coplanar B C B Q'"
using ncop_distincts by blast
moreover
have "A B Perp B C"
using Perp_perm ‹B A Perp C B› by blast
moreover
have "P' Q' Perp B C"
using H6A Perp_perm by blast
ultimately
show ?thesis
using l12_9 by blast
qed
moreover
have "Col A B P"
using Col_perm H1 out_col by blast
moreover
have "Col P' Q' P"
by (simp add: ‹Col P' Q' I› ‹P = I›)
ultimately
show ?thesis
using not_strict_par
by (metis H5A col_trivial_2 col_trivial_3
colx out_col out_distinct)
qed
ultimately
have "False"
by blast
}
thus ?thesis
by auto
qed
moreover
have "B C ParStrict P Q"
proof -
have "B C Par P Q"
proof -
have "Coplanar A B B P"
using ncop_distincts by blast
moreover
have "Coplanar A B B Q"
using ncop_distincts by blast
moreover
have "Coplanar A B C P"
using H1 ncop__ncols ncoplanar_perm_14 out_col by blast
moreover
have "Coplanar A B C Q"
using ‹Coplanar B Q A C› ncoplanar_perm_10 by blast
moreover
have "B C Perp A B"
by (simp add: ‹C B Perp B A› perp_comm)
moreover
have "P Q Perp A B"
using Perp_perm ‹B A Perp Q P› by blast
ultimately
show ?thesis
using l12_9 by blast
qed
moreover
have"Col P Q P"
using col_trivial_3 by auto
moreover
have "¬ Col B C P"
using H1 ‹B ≠ P› ‹¬ Col B A C› col_permutation_5
col_trivial_3 colx out_col by blast
ultimately
show ?thesis
using par_not_col_strict by blast
qed
ultimately
show ?thesis
using ‹Col P Q I› par_strict_col_par_strict by blast
qed
hence "B C OS P I"
by (simp add: l12_6)
have "Col D B I"
proof cases
assume "D = I"
thus ?thesis
using col_trivial_3 by blast
next
assume "D ≠ I"
have "Coplanar A B C I"
proof -
have "P ≠ Q"
by (simp add: H2)
moreover
have "Coplanar A B C P"
using H1 ncoplanar_perm_7 out__coplanar by blast
moreover
have "Coplanar A B C Q"
using ‹Coplanar B Q A C› ncoplanar_perm_10 by blast
moreover
have "Col P Q I"
by (simp add: ‹Col P Q I›)
ultimately
show ?thesis
using col_cop2__cop by blast
qed
moreover
have "B D PerpBisect A C"
by (simp add: P8B ‹A ≠ C› ‹B ≠ D› ‹Cong B A B C›
cong_commutativity cong_mid_perp_bisect)
hence "D B Perp A C"
using Perp_perm perp_bisect_perp by blast
moreover
have "D I PerpBisect A C"
proof -
have "D ≠ I"
by (simp add: ‹D ≠ I›)
moreover
have "A ≠ C"
using ‹A ≠ C› by blast
moreover
have "Cong A I C I"
proof -
have "P I Perp B P"
proof -
have "A B Perp P I"
proof -
have "P Q Perp A B"
using Perp_perm ‹B A Perp Q P› by blast
moreover
{
assume "P = I"
have "B A Par P' Q'"
proof -
have "Coplanar B C B P'"
using ncop_distincts by blast
moreover
have "Coplanar B C B Q'"
using ncop_distincts by blast
moreover
have "Coplanar B C A P'"
using H5A coplanar_perm_4 ncop__ncols out_col by blast
moreover
have "Coplanar B C A Q'"
using H6B by blast
moreover
have "B A Perp B C"
by (simp add: ‹B A Perp C B› perp_right_comm)
moreover
have "P' Q' Perp B C"
using H6A Perp_perm by blast
ultimately
show ?thesis using l12_9 by blast
qed
have "Col B A P"
by (simp add: H1 out_col)
have "Col P' Q' P"
by (simp add: ‹Col P' Q' I› ‹P = I›)
hence "Col B A C"
using not_strict_par
by (metis H5A ‹B A Par P' Q'› ‹Col B A P›
col_trivial_3 colx out_col out_distinct)
hence "False"
using K1 by blast
}
hence "P ≠ I"
by auto
moreover
have "Col P Q P"
by (simp add: col_trivial_3)
moreover
have "Col P Q I"
by (simp add: ‹Col P Q I›)
ultimately
show ?thesis
using perp_col0 by blast
qed
moreover
have "B ≠ P"
by (simp add: ‹B ≠ P›)
moreover
have "Col A B B"
using not_col_distincts by blast
moreover
have "Col A B P"
using Col_perm H1 out_col by blast
ultimately
show ?thesis
using perp_col0 by blast
qed
have "P' I Perp B P'"
proof -
have "B C Perp P' I"
proof -
have "P' Q' Perp B C"
using H6A Perp_perm by blast
moreover
{
assume "P' = I"
have "B C Par P Q"
proof -
have "Coplanar B A B P"
using ncop_distincts by blast
moreover
have "Coplanar B A B Q"
using ncop_distincts by blast
moreover
have "Coplanar B A C P"
using H1 ncop__ncols out_col by blast
moreover
have "Coplanar B A C Q"
by (simp add: ‹Coplanar B Q A C› coplanar_perm_3)
moreover
have "B C Perp B A"
by (simp add: perp_left_comm ‹C B Perp B A›)
moreover
have "P Q Perp B A"
using Perp_cases ‹B A Perp Q P› by blast
ultimately
show ?thesis using l12_9 by blast
qed
have "Col B C P'"
using H5A col_permutation_5 out_col by blast
have "Col P Q P'"
by (simp add: ‹Col P Q I› ‹P' = I›)
hence "Col B A C"
using not_strict_par not_par_inter_uniqueness
by (metis H1 ‹B C Par P Q› ‹B ≠ A› ‹B ≠ P›
‹Col B C P'› col_trivial_3 out_col)
hence "False"
using K1 by blast
}
hence "P' ≠ I"
by auto
moreover
have "Col P' Q' P'"
by (simp add: col_trivial_3)
moreover
have "Col P' Q' I"
by (simp add: ‹Col P' Q' I›)
ultimately
show ?thesis
using perp_col0 by blast
qed
moreover
have "B ≠ P'"
using H5A out_diff1 by blast
moreover
have "Col B C B"
using not_col_distincts by blast
moreover
have "Col B C P'"
using Col_perm H5A out_col by blast
ultimately
show ?thesis
using perp_col0 by blast
qed
have "P' ≠ I"
using ‹P' I Perp B P'› perp_distinct by blast
have "P ≠ I"
using ‹P I Perp B P› perp_distinct by auto
have "B P Lt B I"
using H2 H3 ‹B ≠ P› ‹Col P Q I› ‹P ≠ I› per_col per_lt by presburger
have "A B I CongA C B I"
proof -
have "P B I CongA P' B I"
proof -
have "I P B CongA I P' B"
using H5B ‹B ≠ P› ‹P I Perp B P› ‹P ≠ I›
‹P' I Perp B P'› ‹P' ≠ I› cong_diff_3 l11_16
perp_per_1 by blast
show ?thesis
using H5B ‹B ≠ P› ‹P I Perp B P› ‹P ≠ I›
‹P' I Perp B P'› cong2_per2__cong_conga2 cong_4321
cong_reflexivity perp_per_1 by auto
qed
moreover
have "B Out A P"
by (simp add: H1)
moreover
have "B ≠ I"
using ‹B C OS P I› os_distincts by blast
hence "B Out I I"
using out_trivial by auto
moreover
have "B Out C P'"
by (simp add: H5A l6_6)
ultimately
show ?thesis using l11_10 by blast
qed
thus ?thesis
using ‹Cong B A B C› cong2_conga_cong
cong_reflexivity not_cong_2143 by blast
qed
moreover
have "D Midpoint A C"
by (simp add: P8B)
ultimately
show ?thesis
using cong_mid_perp_bisect perp_bisect_sym_1 by auto
qed
ultimately
show ?thesis
using cop_perp2__col ncoplanar_perm_2 perp_bisect_perp by blast
qed
moreover
have "¬ Bet D B I"
proof -
{
assume "Bet D B I"
have "B C TS P I"
proof -
have "¬ Col B C D"
by (metis NCol_cases P8B midpoint_out ‹A ≠ C›
‹C B Perp B A› ‹D ≠ C› l6_16_1 out_col perp_not_col2)
have "B C TS D I"
proof -
have "B C OS I P"
by (simp add: ‹B C OS P I› one_side_symmetry)
hence "¬ Col B C I"
using col123__nos by blast
have "Bet D B I"
by (simp add: ‹Bet D B I›)
thus ?thesis
using ‹¬ Col B C D› ‹¬ Col B C I› bet__ts
not_col_distincts by auto
qed
moreover
have "B C OS D A"
proof -
have "Col B C C"
by (simp add: col_trivial_2)
moreover
have "Col D A C"
by (simp add: P8B midpoint_col)
moreover
have "C Out D A"
using P8B by (simp add: ‹D ≠ C› bet_out_1 midpoint_bet)
ultimately
show ?thesis
using ‹¬ Col B C D› l9_19_R2 by blast
qed
moreover
have "B C OS A P"
proof -
have "Col B C C"
by (simp add: col_trivial_2)
moreover
have "Col D A C"
by (simp add: P8B midpoint_col)
moreover
have "C Out D A"
using P8B
by (simp add: ‹D ≠ C› bet_out_1 midpoint_bet)
ultimately
show ?thesis
using ‹¬ Col B C D› H1 K1 col_trivial_3
not_col_permutation_5 out_one_side_1 by blast
qed
ultimately
show ?thesis
using l9_8_2 by blast
qed
hence "¬ Bet D B I"
using ‹B C OS P I› l9_9 by blast
hence "False"
by (simp add: ‹Bet D B I›)
}
thus ?thesis
by auto
qed
ultimately
have "∃ Y. B Out D Y ∧ Col P Q Y"
using l6_4_2 ‹Col P Q I› by blast
}
ultimately
show ?thesis
by blast
qed
ultimately
show ?thesis by blast
qed
lemma bachmann_s_lotschnittaxiom__weak_inverse_projection_postulate:
assumes "bachmann_s_lotschnittaxiom"
shows "weak_inverse_projection_postulate"
proof -
have lotschnitt: "∀ A1 A2 B1 B2 C1 C2 D1 D2 IAB IAC IBD.
IAB ≠ IAC ∧ IAB ≠ IBD ∧
A1 A2 Perp B1 B2 ∧ A1 A2 Perp C1 C2 ∧
B1 B2 Perp D1 D2 ∧ Col A1 A2 IAB ∧
Col B1 B2 IAB ∧ Col A1 A2 IAC ∧
Col C1 C2 IAC ∧ Col B1 B2 IBD ∧
Col D1 D2 IBD ∧ Coplanar IAB IAC IBD C1 ∧
Coplanar IAB IAC IBD C2 ∧
Coplanar IAB IAC IBD D1 ∧
Coplanar IAB IAC IBD D2
⟶
(∃ I. Col C1 C2 I ∧ Col D1 D2 I)"
using assms bachmann_s_lotschnittaxiom_aux_R1 by auto
{
fix A B C D E F P Q
assume 1 :"Acute A B C" and
2: "Per D E F" and
3: "A B C A B C SumA D E F" and
4: "B Out A P" and
5: "P ≠ Q" and
6: "Per B P Q" and
7: "Coplanar A B C Q"
have "A ≠ B"
using "4" l6_3_1 by blast
have "P ≠ B"
using "4" l6_3_1 by blast
have "B ≠ C"
using "1" acute_distincts by blast
have "D ≠ E"
using "3" suma_distincts by blast
have "E ≠ F"
using "3" suma_distincts by blast
{
assume "Col A B C"
hence "Col D E F" using col2_suma__col
using "3" by blast
hence "False"
using "2" ‹D ≠ E› ‹E ≠ F› per_col_eq by blast
}
hence "¬ Col A B C"
by auto
have "¬ Col B C P"
by (metis "4" ‹P ≠ B› ‹¬ Col A B C› col_permutation_5
col_trivial_2 col_trivial_3 colx out_col)
obtain P' where P2: "P P' ReflectL B C"
using l10_6_existence_spec by (metis col__refl col_trivial_2)
hence "P P' Reflect B C"
by (simp add: ‹B ≠ C› is_image_is_image_spec)
have "¬ Col B C P'"
using P2 ‹¬ Col B C P› col_image_spec__eq l10_4_spec by blast
obtain Q' where P3: "Q Q' ReflectL B C"
using l10_6_existence_spec by (metis image_spec_triv)
hence "Q Q' Reflect B C"
by (simp add: ‹B ≠ C› is_image_is_image_spec)
have "B ≠ P'"
using ‹¬ Col B C P'› col_trivial_3 by blast
have "P' ≠ Q'"
using "5" P2 P3 l10_2_uniqueness_spec by blast
have "C B P' CongA A B C"
proof -
have "C B P' CongA P B C"
by (metis P2 ‹B ≠ C› ‹P ≠ B› conga_left_comm
is_image_spec_rev not_conga_sym reflectl__conga)
moreover
have "B Out C C"
using ‹B ≠ C› out_trivial by auto
moreover
have "B Out P' P'"
using ‹B ≠ P'› out_trivial by auto
ultimately
show ?thesis
using "4" l11_10 by blast
qed
obtain X where "X Midpoint P' P ∧ Col B C X"
using P2 ReflectL_def by blast
hence "∃ T. Col T B C ∧ Bet P T P'"
using Mid_cases col_permutation_2 midpoint_bet by blast
hence "B C TS P P'"
using TS_def ‹¬ Col B C P'› ‹¬ Col B C P› col_permutation_1 by blast
have "B Out P A"
by (simp add: "4" l6_6)
have "Coplanar P' C A B"
proof -
have "Coplanar P' C P B"
using ‹B C TS P P'› ncoplanar_perm_21 ts__coplanar by blast
moreover
have "P ≠ B"
by (simp add: ‹P ≠ B›)
moreover
have "Col P B A"
using "4" col_permutation_2 out_col by blast
moreover
have "Col P B B"
by (simp add: col_trivial_2)
ultimately
show ?thesis
using col2_cop__cop by blast
qed
have "Coplanar B P P' Q"
proof -
have "Coplanar C A B B"
using ncop_distincts by blast
moreover have "Coplanar C A B P"
using "4" coplanar_perm_20 out__coplanar by blast
moreover have "Coplanar C A B P'"
using ‹Coplanar P' C A B› ncoplanar_perm_18 by blast
moreover have "Coplanar C A B Q"
using "7" ncoplanar_perm_8 by blast
ultimately show ?thesis
using ‹¬ Col A B C› NCol_cases coplanar_pseudo_trans by blast
qed
have "A B C A B C SumA A B P'"
proof -
have "A B C C B P' SumA A B P'"
proof -
have "Col B B C"
by (simp add: col_trivial_1)
hence "¬ B C OS A P'"
using l9_5 l9_9 ‹B Out P A› ‹B C TS P P'› by blast
moreover
have "Coplanar A B C P'"
by (simp add: ‹Coplanar P' C A B› coplanar_perm_17)
ultimately
show ?thesis
using conga_refl
by (metis SumA_def ‹A ≠ B› ‹B ≠ C› ‹B ≠ P'›)
qed
moreover
have "A B C CongA A B C"
using ‹A ≠ B› ‹B ≠ C› conga_refl by auto
moreover
have "C B P' CongA A B C"
by (simp add: ‹C B P' CongA A B C›)
moreover
have "A B P' CongA A B P'"
using calculation(1) suma2__conga by blast
ultimately
show ?thesis
using conga3_suma__suma by blast
qed
hence "D E F CongA A B P'"
using suma2__conga 3 by blast
hence "Per A B P'"
using l11_17 "2" by blast
have "¬ Col A B P'"
using perp_not_col ‹A ≠ B› ‹B ≠ P'› ‹Per A B P'›
per_col_eq by blast
have "¬ Col B P' P"
by (meson ‹B Out P A› ‹P ≠ B› ‹¬ Col A B P'›
col_trivial_3 colx not_col_permutation_1 out_col)
have "A B Perp B P'"
by (simp add: ‹A ≠ B› ‹B ≠ P'› ‹Per A B P'› per_perp)
have Q1: "A B Perp P Q"
by (metis "4" "5" "6" Col_perm Per_cases col_per_perp
‹A ≠ B› ‹P ≠ B› out_col perp_comm)
have "B B ReflectL B C"
by (simp add: col__image_spec col_trivial_3)
hence "B P' Perp P' Q'"
using 6 P2 P3 ‹B ≠ P'› ‹P' ≠ Q'› image_spec_preserves_per
per_perp by auto
have "¬ Col P' P Q"
proof -
have "B P' Par P Q"
proof -
have "Coplanar A B B P"
using ncop_distincts by blast
moreover
have "Coplanar A B B Q"
using ncop_distincts by blast
moreover
have "Coplanar A B P' P"
by (meson ‹B Out P A› ncop__ncols
ncoplanar_perm_9 out_col)
moreover
have "Coplanar A B P' Q"
using ‹B Out P A› ‹Coplanar B P P' Q›
‹P ≠ B› col_cop__cop ncoplanar_perm_17 out_col
coplanar_perm_16 by blast
moreover
have "B P' Perp A B"
using Perp_perm ‹A B Perp B P'› by blast
moreover
have "P Q Perp A B"
using Perp_perm ‹A B Perp P Q› by blast
ultimately
show ?thesis
using l12_9 by blast
qed
hence "B P' ParStrict P Q"
using Par_def ‹¬ Col B P' P› not_col_permutation_2
par_strict_symmetry par_symmetry by blast
moreover
have "Col P' B P'"
by (simp add: col_trivial_3)
ultimately
show ?thesis
using par_strict_not_col_2 by blast
qed
obtain I where P5: "Col I A B ∧ Col I P Q"
using Q1 NCol_cases perp_inter_perp_in_n by blast
hence "Col I A B"
by simp
have "Col I P Q"
using P5 by simp
have "∃ Y. Col P' Q' Y ∧ Col P Q Y"
proof -
have "B ≠ P"
using ‹P ≠ B› by blast
moreover
have "B ≠ P'"
by (simp add: ‹B ≠ P'›)
moreover
have "A B Perp B P'"
by (simp add: ‹A B Perp B P'›)
moreover
have "A B Perp P Q"
by (simp add: Q1)
moreover
have "B P' Perp P' Q'"
by (simp add: ‹B P' Perp P' Q'›)
moreover
have "Col A B B"
by (simp add: col_trivial_2)
moreover
have "Col B P' B"
by (simp add: col_trivial_3)
moreover
have "Col A B P"
using "4" not_col_permutation_4 out_col by blast
moreover
have "Col P Q P"
by (simp add: col_trivial_3)
moreover
have "Col B P' P'"
by (simp add: col_trivial_2)
moreover
have "Col P' Q' P'"
by (simp add: col_trivial_3)
moreover
have "Coplanar B P P' P"
using ncop_distincts by blast
moreover
have "Coplanar B P P' Q"
using ‹Coplanar B P P' Q› by blast
moreover
have "Coplanar B P P' P'"
using ncop_distincts by blast
moreover
have "Coplanar B P P' Q'"
proof -
{
assume "Col B C Q"
have "Q = Q'"
using P3 ‹Col B C Q› col_image_spec__eq by blast
hence "Coplanar B P P' Q'"
using calculation(13) by blast
}
moreover
{
assume "¬ Col B C Q"
moreover
have "Coplanar B C Q B"
using ncop_distincts by blast
moreover
have "Coplanar B C Q P"
using "7" ‹A ≠ B› ‹Col A B B› ‹Col A B P›
col2_cop__cop ncoplanar_perm_14
ncoplanar_perm_17 by blast
moreover
have "Coplanar B C Q P'"
by (metis ‹∃T. Col T B C ∧ Bet P T P'›
‹¬ Col B C P› bet_col calculation(3) col_cop2__cop
col_permutation_1 ncop__ncols)
moreover
have "Coplanar B C Q Q'"
using P3 ncoplanar_perm_16 reflectl__coplanar by blast
ultimately
have "?thesis"
using coplanar_pseudo_trans by blast
}
ultimately
show ?thesis by auto
qed
ultimately
show ?thesis using lotschnitt by blast
qed
then obtain Y where P7: "Col P' Q' Y ∧ Col P Q Y"
by auto
hence "Col P' Q' Y"
by simp
have "Col P Q Y"
using P7 by simp
have "B Out C Y"
proof -
have "Col B C Y"
proof -
have "P P' Reflect B C"
by (simp add: ‹P P' Reflect B C›)
moreover
have "Q Q' Reflect B C"
by (simp add: ‹Q Q' Reflect B C›)
moreover
have "¬ Col P Q P'"
using NCol_perm ‹¬ Col P' P Q› by blast
moreover
have "Col P Q Y"
using ‹Col P Q Y› by blast
moreover
have "Col P' Q' Y"
using ‹Col P' Q' Y› by blast
ultimately
show ?thesis
using intersection_with_image_gen not_col_permutation_2 by blast
qed
moreover
have "B A OS C Y"
proof -
have "A B OS C P'"
proof -
have "Coplanar A B C P'"
by (simp add: ‹Coplanar P' C A B› coplanar_perm_17)
moreover
have "¬ Col C A B"
by (simp add: ‹¬ Col A B C› not_col_permutation_2)
moreover
have "¬ Col P' A B"
using Col_cases ‹¬ Col A B P'› by blast
moreover
have "¬ A B TS C P'"
proof -
have "SAMS A B C A B C"
by (simp add: "1" acute__sams)
moreover
have "C B P' CongA A B C"
using ‹C B P' CongA A B C› by blast
moreover
have "¬ B C OS A P'"
proof -
have "B C TS P P'"
using ‹B C TS P P'› by blast
moreover
have "Col B B C"
by (simp add: col_trivial_1)
moreover
have "B Out P A"
by (simp add: ‹B Out P A›)
ultimately
show ?thesis
using l9_5 l9_9 by blast
qed
ultimately
show ?thesis
using conga_sams_nos__nts by blast
qed
ultimately
show ?thesis
using cop_nts__os by blast
qed
moreover
have "A B OS P' Y"
proof -
have "P' ≠ Y"
using ‹Col B C Y› ‹¬ Col B C P'› by blast
moreover
have "A B ParStrict P' Q'"
proof -
have "A B Par P' Q'"
proof -
have "Coplanar B P' A P'"
using ncop_distincts by blast
moreover
have "Coplanar B P' A Q'"
proof -
{
assume "Col B C Q"
hence "Q = Q'"
using P3 col_image_spec__eq by blast
have "?thesis"
using P3 ‹Col B C Q› ‹B ≠ C› ‹Coplanar P' C A B›
‹Q = Q'› col2_cop__cop col_trivial_3 coplanar_perm_13
ncoplanar_perm_14 by blast
}
moreover
{
assume "¬ Col B C Q"
have "Coplanar B C Q B"
using ncop_distincts by blast
moreover
have "Coplanar B C Q P'"
using "7" ‹Coplanar P' C A B› ‹¬ Col A B C›
coplanar_trans_1 ncoplanar_perm_22 by blast
moreover
have "Coplanar B C Q A"
by (meson "7" ncoplanar_perm_18)
moreover
have "Coplanar B C Q Q'"
proof -
have "Coplanar A B C B"
using ncop_distincts by blast
moreover have "Coplanar A B C C"
using ncop_distincts by blast
moreover have "Coplanar A B C Q'"
by (meson ‹B ≠ C› ‹Col B C Y› ‹Col P' Q' Y›
‹Coplanar P' C A B› ‹P' ≠ Y› calculation(1)
calculation(2) col_cop2__cop
col_permutation_5 coplanar_perm_17)
ultimately show ?thesis
using ‹¬ Col A B C› "7" coplanar_trans_1 by blast
qed
ultimately
have "Coplanar B P' A Q'"
using ‹¬ Col B C Q› coplanar_pseudo_trans by blast
}
ultimately
show ?thesis
by auto
qed
moreover
have "Coplanar B P' B P'"
using ncop_distincts by blast
moreover
have "Coplanar B P' B Q'"
using ncop_distincts by blast
moreover
have "A B Perp B P'"
by (simp add: ‹A B Perp B P'›)
moreover
have "P' Q' Perp B P'"
using Perp_perm ‹B P' Perp P' Q'› by blast
ultimately
show ?thesis
using l12_9 by blast
qed
moreover
have "Col P' Q' P'"
by (simp add: col_trivial_3)
moreover
have "¬ Col A B P'"
by (simp add: ‹¬ Col A B P'›)
ultimately
show ?thesis
using par_not_col_strict by blast
qed
moreover
have "Col P' Q' Y"
by (simp add: ‹Col P' Q' Y›)
ultimately
show ?thesis
using par_strict_all_one_side by blast
qed
ultimately
show ?thesis
using invert_one_side one_side_transitivity by blast
qed
ultimately
show ?thesis
using col_one_side_out by blast
qed
hence "∃ Y. B Out C Y ∧ Col P Q Y"
using P7 by auto
}
thus ?thesis
using weak_inverse_projection_postulate_def by blast
qed
lemma bachmann_s_lotschnittaxiom__weak_triangle_circumscription_principle:
assumes "bachmann_s_lotschnittaxiom"
shows "weak_triangle_circumscription_principle"
proof -
have P1: "∀ A1 A2 B1 B2 C1 C2 D1 D2 IAB IAC IBD.
IAB ≠ IAC ∧ IAB ≠ IBD ∧ A1 A2 Perp B1 B2 ∧
A1 A2 Perp C1 C2 ∧ B1 B2 Perp D1 D2 ∧
Col A1 A2 IAB ∧ Col B1 B2 IAB ∧
Col A1 A2 IAC ∧ Col C1 C2 IAC ∧
Col B1 B2 IBD ∧ Col D1 D2 IBD ∧
Coplanar IAB IAC IBD C1 ∧ Coplanar IAB IAC IBD C2 ∧
Coplanar IAB IAC IBD D1 ∧ Coplanar IAB IAC IBD D2
⟶
(∃ I. Col C1 C2 I ∧ Col D1 D2 I)"
using assms bachmann_s_lotschnittaxiom_aux by auto
moreover
{
fix A B C A1 A2 B1 B2
assume 1: "¬ Col A B C" and
2: "Per A C B" and
3: "A1 A2 PerpBisect B C" and
4: "B1 B2 PerpBisect A C" and
5: "Coplanar A B C A1" and
6: "Coplanar A B C A2" and
7: "Coplanar A B C B1" and
8: "Coplanar A B C B2"
obtain A3 where 9: "A1 ≠ A2 ∧ Col A3 A1 A2 ∧ Col A3 B C"
using 3 perp_bisect_perp Perp_def PerpAt_def by blast
obtain B3 where 10: "B1 ≠ B2 ∧ Col B3 B1 B2 ∧ Col B3 A C"
using 4 perp_bisect_perp Perp_def PerpAt_def by blast
have "A ≠ B"
using "1" col_trivial_1 by blast
have "B ≠ C"
using "1" col_trivial_2 by auto
have "A ≠ C"
using "1" col_trivial_3 by blast
have "C ≠ A3"
proof -
obtain C' where 11: "C' Midpoint C B ∧ Col A1 A2 C'"
by (metis (full_types) "3" "9" ‹B ≠ C› l4_17
l7_20_bis not_col_permutation_2 not_cong_4321
perp_bisect_cong_1 perp_bisect_cong_2)
have "C' ≠ C"
using "11" ‹B ≠ C› cong_reverse_identity midpoint_cong by blast
have "C' ≠ B"
using "11" ‹B ≠ C› is_midpoint_id_2 by blast
{
assume "C = A3"
{
assume "¬ Col A1 A2 B"
have "C = C'"
by (metis "11" "9" ‹C = A3› ‹¬ Col A1 A2 B›
colx midpoint_col not_col_permutation_2)
}
moreover
{
assume "¬ Col A1 A2 C"
have "C = C'"
using "9" ‹C = A3› ‹¬ Col A1 A2 C› col_permutation_1 by blast
}
ultimately
have "C = C'"
using 3 perp_not_col2 perp_bisect_perp by blast
hence "False"
using ‹C' ≠ C› by blast
}
thus ?thesis by auto
qed
moreover
have "C ≠ B3"
proof -
obtain C' where 12: "C' Midpoint C A ∧ Col B1 B2 C'"
by (metis (full_types) "10" "4" ‹A ≠ C› l4_17
l7_20_bis not_col_permutation_2 not_cong_4321
perp_bisect_cong_1 perp_bisect_cong_2)
have "C' ≠ C"
by (metis "12" ‹A ≠ C› midpoint_distinct_1)
have "C' ≠ A"
using "12" ‹A ≠ C› is_midpoint_id_2 by force
{
assume "C = B3"
{
assume "¬ Col B1 B2 A"
have "C = C'"
by (metis "10" "12" ‹C = B3› ‹¬ Col B1 B2 A›
colx midpoint_col not_col_permutation_2)
}
moreover
{
assume "¬ Col B1 B2 C"
have "C = C'"
using "10" ‹C = B3› ‹¬ Col B1 B2 C› not_col_permutation_2 by blast
}
ultimately
have "C = C'"
using "4" perp_not_col2 perp_bisect_perp by blast
hence "False"
using ‹C' ≠ C› by blast
}
thus ?thesis by auto
qed
moreover
have "B C Perp A C"
by (metis "2" Perp_perm ‹A ≠ C› ‹B ≠ C› per_perp)
moreover
have "B C Perp A1 A2"
using "3" Perp_perm perp_bisect_perp by blast
moreover
have "A C Perp B1 B2"
using "4" Perp_perm perp_bisect_perp by blast
moreover
have "Col B C C"
by (simp add: col_trivial_2)
moreover
have "Col A C C"
by (simp add: col_trivial_2)
moreover
have "Col B C A3"
using "9" not_col_permutation_2 by blast
moreover
have "Col A1 A2 A3"
using "9" NCol_cases by blast
moreover
have "Col A C B3"
using "10" Col_perm by blast
moreover
have "Col B1 B2 B3"
using "10" Col_cases by blast
moreover
have "Coplanar C A3 B3 A1"
proof -
have "Coplanar A B C C"
using ncop_distincts by blast
moreover have "Coplanar A B C A3"
using ‹Col B C A3› ncop__ncols by blast
moreover have "Coplanar A B C B3"
using ‹Col A C B3› ncop__ncols by auto
ultimately show ?thesis
using "1" "5" coplanar_pseudo_trans by blast
qed
moreover
have "Coplanar C A3 B3 A2"
proof -
have "Coplanar A B C C"
using ncop_distincts by blast
moreover have "Coplanar A B C A3"
using ‹Col B C A3› ncop__ncols by blast
moreover have "Coplanar A B C B3"
by (meson ‹Col A C B3› ncop__ncols)
ultimately show ?thesis
using "1" "6" coplanar_pseudo_trans by blast
qed
moreover
have "Coplanar C A3 B3 B1"
proof -
have "Coplanar A B C C"
using ncop_distincts by blast
moreover have "Coplanar A B C A3"
using ‹Col B C A3› ncop__ncols by blast
moreover have "Coplanar A B C B3"
using ‹Col A C B3› ncop__ncols by blast
ultimately show ?thesis
using "1" "7" coplanar_pseudo_trans by blast
qed
moreover
have "Coplanar C A3 B3 B2"
proof -
have "Coplanar A B C C"
using ncop_distincts by blast
moreover have "Coplanar A B C A3"
using ‹Col B C A3› ncop__ncols by blast
moreover have "Coplanar A B C B3"
using ‹Col A C B3› ncop__ncols by blast
ultimately show ?thesis
using "1" coplanar_pseudo_trans "8" by blast
qed
ultimately
have "∃ I. Col A1 A2 I ∧ Col B1 B2 I"
using P1 by blast
}
thus ?thesis using P1 weak_triangle_circumscription_principle_def by auto
qed
lemma consecutive_interior__alternate_interior:
assumes "consecutive_interior_angles_postulate"
shows "alternate_interior_angles_postulate"
proof -
{
fix A B C D
assume 1: "A C TS B D" and
2: "A B Par C D"
obtain D' where 3: "Bet D C D' ∧ Cong C D' C D"
using segment_construction by blast
have "A C TS D' D"
by (metis "1" "3" bet__ts bet_col between_trivial
cong_reverse_identity invert_two_sides l9_18 l9_2)
hence "A C OS B D'"
using "1" l9_8_1 by blast
hence "B A C SuppA A C D'"
by (metis "2" "3" assms bet_col bet_col1
consecutive_interior_angles_postulate_def
os_distincts par_col2_par par_comm)
moreover
have "D C A SuppA A C D'"
by (metis "2" "3" ‹A C OS B D'› bet__suppa os_distincts par_neq2)
ultimately
have "B A C CongA D C A"
using suppa2__conga123 by blast
}
thus ?thesis
by (simp add: alternate_interior_angles_postulate_def)
qed
lemma existential_playfair__rah_1:
"postulate_of_right_saccheri_quadrilaterals ⟷
hypothesis_of_right_saccheri_quadrilaterals"
proof -
{
assume "postulate_of_right_saccheri_quadrilaterals"
{
fix A B C D
assume "Saccheri A B C D"
have "Per A B C"
using ‹PostulateRightSaccheriQuadrilaterals›
‹Saccheri A B C D› postulate_of_right_saccheri_quadrilaterals_def
by blast
}
hence "hypothesis_of_right_saccheri_quadrilaterals"
by (simp add: hypothesis_of_right_saccheri_quadrilaterals_def)
}
moreover
{
assume "hypothesis_of_right_saccheri_quadrilaterals"
{
fix A B C D
assume "Saccheri A B C D"
have "Per A B C"
using ‹HypothesisRightSaccheriQuadrilaterals›
‹Saccheri A B C D› hypothesis_of_right_saccheri_quadrilaterals_def
by blast
}
hence "postulate_of_right_saccheri_quadrilaterals"
by (simp add: postulate_of_right_saccheri_quadrilaterals_def)
}
ultimately
show ?thesis by auto
qed
lemma existential_playfair__rah:
assumes "existential_playfair_s_postulate"
shows "postulate_of_right_saccheri_quadrilaterals"
proof -
obtain A1 A2 P where 1: "¬ Col A1 A2 P ∧
(∀ B1 B2 C1 C2.
(A1 A2 Par B1 B2 ∧ Col P B1 B2 ∧
A1 A2 Par C1 C2 ∧ Col P C1 C2) ⟶
(Col C1 B1 B2 ∧ Col C2 B1 B2))"
using assms existential_playfair_s_postulate_def by blast
have "¬ Col A1 A2 P"
using 1 by blast
have "∀ B1 B2 C1 C2.
(A1 A2 Par B1 B2 ∧ Col P B1 B2 ∧
A1 A2 Par C1 C2 ∧ Col P C1 C2) ⟶
(Col C1 B1 B2 ∧ Col C2 B1 B2)"
using 1 by blast
obtain Q where "Col A1 A2 Q ∧ A1 A2 Perp P Q"
using ‹¬ Col A1 A2 P› l8_18_existence by presburger
have "∃ A3. Col A1 A2 A3 ∧ A3 ≠ Q"
by (metis col_trivial_2 diff_col_ex)
then obtain A3 where "Col A1 A2 A3 ∧ A3 ≠ Q"
by auto
have "P ≠ Q"
using ‹Col A1 A2 Q ∧ A1 A2 Perp P Q› ‹¬ Col A1 A2 P› by auto
then obtain R where "P Q Perp R P ∧ Coplanar P Q A3 R"
using ex_perp_cop by presburger
have "P Q Perp R P"
by (simp add: ‹P Q Perp R P ∧ Coplanar P Q A3 R›)
have "Coplanar P Q A3 R"
by (simp add: ‹P Q Perp R P ∧ Coplanar P Q A3 R›)
have "A1 ≠ A2"
using ‹¬ Col A1 A2 P› col_trivial_1 by blast
have "Q ≠ P"
using ‹P ≠ Q› by auto
have "R ≠ P"
using ‹P Q Perp R P› perp_distinct by auto
have "A1 A2 Par P R"
proof -
have "Coplanar P Q A1 P"
using ncop_distincts by blast
moreover
have "Coplanar P R Q A1"
proof -
have "Coplanar P R Q A3"
by (simp add: ‹P Q Perp R P ∧ Coplanar P Q A3 R› coplanar_perm_4)
moreover
have "Q ≠ A3"
using ‹Col A1 A2 A3 ∧ A3 ≠ Q› by auto
moreover
have "Col Q A3 A1"
by (meson ‹A1 ≠ A2› ‹Col A1 A2 A3 ∧ A3 ≠ Q›
‹Col A1 A2 Q ∧ A1 A2 Perp P Q› col3 col_trivial_3)
ultimately
show ?thesis
using col_cop__cop by blast
qed
hence "Coplanar P Q A1 R"
using ncoplanar_perm_4 by blast
moreover
have "Coplanar P Q A2 P"
using ncop_distincts by blast
moreover
have "Coplanar P R Q A2"
proof -
have "Coplanar P R Q A3"
by (simp add: ‹P Q Perp R P ∧ Coplanar P Q A3 R› coplanar_perm_4)
moreover
have "Q ≠ A3"
using ‹Col A1 A2 A3 ∧ A3 ≠ Q› by auto
moreover
have "Col Q A3 A2"
by (meson ‹A1 ≠ A2› ‹Col A1 A2 A3 ∧ A3 ≠ Q›
‹Col A1 A2 Q ∧ A1 A2 Perp P Q› col3 col_trivial_2)
ultimately
show ?thesis
using col_cop__cop by blast
qed
hence "Coplanar P Q A2 R"
by (simp add: coplanar_perm_3)
moreover
have "A1 A2 Perp P Q"
by (simp add: ‹Col A1 A2 Q ∧ A1 A2 Perp P Q›)
moreover
have "P R Perp P Q"
using Perp_perm ‹P Q Perp R P ∧ Coplanar P Q A3 R› by blast
ultimately
show ?thesis
using l12_9 by blast
qed
have "Coplanar A1 A2 P R"
by (simp add: ‹A1 A2 Par P R› par__coplanar)
have "A1 A2 ParStrict P R"
using ‹A1 A2 Par P R› ‹¬ Col A1 A2 P› col_trivial_3
par_not_col_strict by blast
have "¬ Col A1 A2 R"
using ‹A1 A2 ParStrict P R› par_strict_not_col_4 by auto
obtain S where "Col A1 A2 S ∧ A1 A2 Perp R S"
using ‹¬ Col A1 A2 R› l8_18_existence by blast
hence "Col A1 A2 S"
by auto
have "A1 A2 Perp R S"
by (simp add: ‹Col A1 A2 S ∧ A1 A2 Perp R S›)
have "P Q Par R S"
proof -
have "Coplanar A1 A2 P R"
by (simp add: ‹Coplanar A1 A2 P R›)
moreover
have "Coplanar A1 A2 P S"
using ‹Col A1 A2 S ∧ A1 A2 Perp R S› ncop__ncols by blast
moreover
have "Coplanar A1 A2 Q R"
using ‹Col A1 A2 Q ∧ A1 A2 Perp P Q› ncop__ncols by blast
moreover
have "Coplanar A1 A2 Q S"
by (meson ‹¬ Col A1 A2 P› ‹¬ Col A1 A2 R› calculation(1)
calculation(2) calculation(3) l9_30 ncop_distincts)
moreover
have "P Q Perp A1 A2"
using Perp_perm ‹Col A1 A2 Q ∧ A1 A2 Perp P Q› by blast
moreover
have "R S Perp A1 A2"
using Perp_perm ‹Col A1 A2 S ∧ A1 A2 Perp R S› by blast
ultimately
show ?thesis
using l12_9 by blast
qed
have "¬ Col P Q R"
by (simp add: ‹P Q Perp R P ∧ Coplanar P Q A3 R› perp_not_col)
hence "P Q ParStrict R S"
using ‹P Q Par R S› col_trivial_3 par_not_col_strict by blast
hence "¬ Col R S P"
by (meson par_strict_not_col_3)
then obtain R' where "Col R S R' ∧ R S Perp P R'"
using l8_18_existence by blast
hence "Col R S R'"
by auto
have "R S Perp P R'"
by (simp add: ‹Col R S R' ∧ R S Perp P R'›)
have "A1 A2 Par P R'"
proof -
have "Coplanar R P A1 A2"
using ‹Coplanar A1 A2 P R› ncoplanar_perm_17 by blast
hence "Coplanar R S A1 P"
using ‹Col A1 A2 S› ‹A1 ≠ A2› col_cop__cop coplanar_perm_5 by blast
moreover
have "Coplanar R S A1 R'"
using ‹Col R S R'› ncop__ncols by blast
moreover
have "Coplanar R S A2 P"
by (metis ‹Col A1 A2 S› ‹Coplanar R P A1 A2›
calculation(1) col_cop__cop coplanar_perm_4
not_col_permutation_1)
moreover
have "Coplanar R S A2 R'"
using ‹Col R S R'› ncop__ncols by blast
moreover
have "A1 A2 Perp R S"
by (simp add: ‹Col A1 A2 S ∧ A1 A2 Perp R S›)
moreover
have "P R' Perp R S"
using Perp_perm ‹R S Perp P R'› by blast
ultimately
show ?thesis
using l12_9 by blast
qed
have "Col R' P R"
using 1 ‹A1 A2 Par P R'› ‹A1 A2 Par P R› col_trivial_1 by blast
hence "R = R'"
using l6_21
by (metis Perp_perm ‹Col R S R' ∧ R S Perp P R'›
perp_col perp_not_col)
have "P Q ParStrict R S"
by (simp add: ‹P Q ParStrict R S›)
have "Per Q S R"
proof -
have "Q S Perp R S"
proof -
have "Q ≠ S"
using ‹P Q ParStrict R S› col_trivial_2
par_strict_not_col_4 by blast
moreover
have "Col A1 A2 Q"
using ‹Col A1 A2 Q ∧ A1 A2 Perp P Q› by auto
ultimately
show ?thesis
using ‹A1 A2 Perp R S› ‹Col A1 A2 S› perp_col2 by blast
qed
moreover
have "Col S Q S"
using col_trivial_3 by blast
moreover
have "Col S R S"
by (simp add: col_trivial_3)
ultimately
show ?thesis
using perp_comm perp_per_2 by blast
qed
moreover
have "Lambert P Q S R"
proof -
have "Q ≠ S"
using ‹P Q ParStrict R S› col_trivial_3
par_strict_not_col_2 by blast
moreover
have "S ≠ R"
using ‹¬ Col R S P› col_trivial_1 by blast
moreover
have "Per Q P R"
by (simp add: ‹P Q Perp R P› perp_per_1)
moreover
have "Per P R S"
using ‹R = R'› ‹R S Perp P R'› l8_2 perp_per_1 by blast
moreover
have "Per P Q S"
proof -
have "A1 A2 Perp P Q"
by (simp add: ‹Col A1 A2 Q ∧ A1 A2 Perp P Q›)
moreover
have "Col A1 A2 Q"
using ‹Col A1 A2 Q ∧ A1 A2 Perp P Q› by auto
ultimately
show ?thesis
using ‹Q ≠ S› ‹Col A1 A2 S› l8_16_1 by blast
qed
moreover
have "Coplanar P Q S R"
using ‹P Q Par R S› coplanar_perm_1 par__coplanar by blast
ultimately
show ?thesis
using Lambert_def ‹Q ≠ P› ‹R ≠ P› by blast
qed
ultimately
have "hypothesis_of_right_saccheri_quadrilaterals"
using lam_per__rah_1 by blast
show ?thesis
by (simp add: ‹HypothesisRightSaccheriQuadrilaterals›
existential_playfair__rah_1)
qed
lemma existential_saccheri__rah:
assumes "postulate_of_existence_of_a_right_saccheri_quadrilateral"
shows "postulate_of_right_saccheri_quadrilaterals"
using per_sac__rah assms existential_playfair__rah_1
postulate_of_existence_of_a_right_saccheri_quadrilateral_def by blast
lemma existential_triangle__rah:
assumes "postulate_of_existence_of_a_triangle_whose_angles_sum_to_two_rights"
shows "postulate_of_right_saccheri_quadrilaterals"
using t22_14__rah assms
existential_playfair__rah_1
postulate_of_existence_of_a_triangle_whose_angles_sum_to_two_rights_def
by blast
lemma inverse_projection_postulate__proclus_bis:
assumes "inverse_projection_postulate"
shows "alternative_proclus_postulate"
proof -
{
fix A B C D P Q
assume 1: "P Perp2 A B C D ∧ ¬ Col C D P ∧ Coplanar A B C D ∧
Col A B P ∧ ¬ Col A B Q ∧ Coplanar C D P Q"
hence "P Perp2 A B C D"
by auto
have "¬ Col C D P"
using 1 by auto
have "Coplanar A B C D"
using 1 by auto
have "Col A B P"
using 1 by auto
have "¬ Col A B Q"
using 1 by auto
have "Coplanar C D P Q"
using 1 by auto
have "C D ParStrict A B"
proof -
have "Coplanar C D A B"
by (simp add: ‹Coplanar A B C D› coplanar_perm_16)
moreover
have "P Perp2 C D A B"
using "1" perp2_sym by blast
ultimately
show ?thesis
using ‹Col A B P› ‹¬ Col C D P› col_cop_perp2__pars_bis by blast
qed
obtain P1 P2 where 2: "Col P P1 P2 ∧ P1 P2 Perp A B ∧ P1 P2 Perp C D"
using Perp2_def ‹P Perp2 A B C D› by blast
have "Col P P1 P2"
using 2 by blast
have "P1 P2 Perp A B"
using 2 by blast
have "P1 P2 Perp C D"
using 2 by blast
then obtain C0 where "C0 PerpAt P1 P2 C D"
using perp_inter_perp_in_n by blast
hence "Col C0 P1 P2 ∧ Col C0 C D"
using Col_cases perp_in_col by blast
hence "Col C0 P1 P2"
by blast
have "Col C0 C D"
using ‹Col C0 P1 P2 ∧ Col C0 C D› by auto
obtain P' where "P' PerpAt P1 P2 A B"
using ‹P1 P2 Perp A B› perp_inter_perp_in_n by blast
have "Col P A B"
using Col_perm ‹Col A B P› by blast
hence "P = P'"
using ‹Col P P1 P2› ‹P' PerpAt P1 P2 A B› l8_14_2_1b by blast
have "P ≠ C0"
proof -
{
assume "P = C0"
hence "Col P C D"
by (simp add: ‹Col C0 C D›)
hence "False"
using ‹¬ Col C D P› col_permutation_1 by blast
}
thus ?thesis
by auto
qed
have "A B Perp P C0"
proof -
have "Col P1 P2 P"
by (simp add: ‹Col P P1 P2› col_permutation_1)
moreover
have "Col P1 P2 C0"
by (simp add: ‹Col C0 P1 P2› col_permutation_1)
ultimately
show ?thesis
using ‹P ≠ C0› ‹P1 P2 Perp A B› perp_col0 by blast
qed
have "C D Perp P C0"
proof -
have "Col P1 P2 P"
by (simp add: ‹Col P P1 P2› col_permutation_1)
moreover
have "Col P1 P2 C0"
by (simp add: ‹Col C0 P1 P2› col_permutation_1)
ultimately
show ?thesis
using ‹P ≠ C0› ‹P1 P2 Perp C D› perp_col0 by blast
qed
have "P ≠ Q"
using ‹Col A B P› ‹¬ Col A B Q› by auto
have "∃ Y. (Col P Q Y ∧ Col C D Y)"
proof (cases "Col P Q C0")
case True
thus ?thesis
using ‹Col C0 C D› col_permutation_1 by blast
next
case False
have "¬ Col C0 A B"
using ‹C D ParStrict A B› ‹Col C0 C D› par_not_col by blast
have "∃ Q0. Col Q P Q0 ∧ A B OS C0 Q0"
proof -
have "Q ≠ P"
using ‹P ≠ Q› by auto
moreover
have "Col Q P P"
by (simp add: col_trivial_2)
moreover
have "¬ Col A B C0"
using NCol_perm ‹¬ Col C0 A B› by blast
moreover
have "Coplanar A B Q C0"
proof -
have "Coplanar C D P A"
by (metis ‹Col A B P› ‹Coplanar A B C D› ‹¬ Col C0 A B›
col_cop__cop coplanar_perm_1 coplanar_perm_16
not_col_distincts)
moreover have "Coplanar C D P B"
using ‹Col P A B› ‹Coplanar A B C D› calculation
col_cop__cop coplanar_perm_16 by blast
moreover have "Coplanar C D P C0"
using Col_cases ‹Col C0 C D› ncop__ncols by blast
ultimately show ?thesis
using ‹¬ Col C D P› ‹Coplanar C D P Q›
coplanar_pseudo_trans by blast
qed
ultimately
show ?thesis
using ‹¬ Col A B Q› ‹Col A B P› cop_not_par_same_side by blast
qed
then obtain Q0 where "Col Q P Q0 ∧ A B OS C0 Q0"
by auto
hence "Col Q P Q0"
by auto
have "A B OS C0 Q0"
by (simp add: ‹Col Q P Q0 ∧ A B OS C0 Q0›)
have "¬ Col A B Q0"
using ‹Col Q P Q0 ∧ A B OS C0 Q0› one_side_not_col124 by blast
{
assume "P = Q0"
hence "Col A B P"
using ‹Col A B P› by auto
hence "False"
by (simp add: ‹P = Q0› ‹¬ Col A B Q0›)
}
hence "P ≠ Q0"
by auto
have "¬ Col P C0 Q0"
by (metis False ‹Col Q P Q0› ‹P ≠ Q0› col_transitivity_1
not_col_permutation_2)
have "∃ C1. Col C D C1 ∧ C1 ≠ C0"
by (metis col_trivial_3 diff_col_ex)
then obtain C1 where "Col C D C1 ∧ C1 ≠ C0"
by auto
hence "Col C D C1"
by auto
have "C1 ≠ C0"
by (simp add: ‹Col C D C1 ∧ C1 ≠ C0›)
have "∃ A0. Col A B A0 ∧ P C0 OS Q0 A0"
proof (cases "Col P C0 A")
case True
have "¬ Col P C0 B"
using True ‹P ≠ C0› ‹¬ Col C0 A B› col_transitivity_2 by blast
have "∃ Q. Col B A Q ∧ P C0 OS Q0 Q"
proof -
have "B ≠ A"
using ‹¬ Col C0 A B› col_trivial_2 by auto
moreover
have "Col P C0 P"
by (simp add: col_trivial_3)
moreover
have "Col B A P"
using Col_cases ‹Col A B P› by blast
moreover
have "¬ Col P C0 B"
by (simp add: ‹¬ Col P C0 B›)
moreover
have "¬ Col P C0 Q0"
by (simp add: ‹¬ Col P C0 Q0›)
moreover
have "Coplanar P C0 B Q0"
by (metis True ‹Col P A B› ‹Col Q P Q0 ∧ A B OS C0 Q0›
calculation(2) calculation(4) colx
coplanar_perm_2 os__coplanar)
ultimately
show ?thesis
using cop_not_par_same_side by blast
qed
thus ?thesis
using not_col_permutation_4 by blast
next
case False
have "Coplanar P C0 A Q0"
by (metis False ‹Col A B P› ‹Col Q P Q0 ∧ A B OS C0 Q0›
col2_os__os col_trivial_3 coplanar_perm_2 os__coplanar)
thus ?thesis
by (metis False ‹Col A B P› ‹¬ Col C0 A B› ‹¬ Col P C0 Q0›
col_trivial_2 col_trivial_3 cop_not_par_same_side)
qed
then obtain A0 where "Col A B A0 ∧ P C0 OS Q0 A0"
by auto
hence "Col A B A0"
by auto
have "P C0 OS Q0 A0"
by (simp add: ‹Col A B A0 ∧ P C0 OS Q0 A0›)
have "¬ Col P C0 A0"
using ‹P C0 OS Q0 A0› one_side_not_col124 by blast
have "∃ Y. P Out Q0 Y ∧ Col C0 C1 Y"
proof -
have "Acute C0 P Q0"
proof -
have "A B Perp C0 P"
by (simp add: ‹A B Perp P C0› perp_right_comm)
hence "Per C0 P A0"
using ‹Col A B P› ‹Col A B A0› l8_16_1 by blast
moreover
have "C0 P Q0 LtA C0 P A0"
proof -
have "P A0 OS C0 Q0"
by (metis ‹Col A B A0 ∧ P C0 OS Q0 A0› ‹Col A B P›
‹Col Q P Q0 ∧ A B OS C0 Q0› ‹¬ Col P C0 A0›
col2_os__os col_trivial_3)
hence "Q0 InAngle C0 P A0"
by (simp add: ‹P C0 OS Q0 A0› one_side_symmetry os2__inangle)
hence "C0 P Q0 LeA C0 P A0"
using inangle__lea by force
moreover
{
assume "C0 P Q0 CongA C0 P A0"
have "C0 P OS Q0 A0"
by (meson ‹P C0 OS Q0 A0› invert_one_side)
hence "P Out Q0 A0"
using conga_os__out
using ‹C0 P Q0 CongA C0 P A0› by blast
hence "Col A B Q0"
using ‹P A0 OS C0 Q0› os_distincts out_out_one_side by blast
hence "False"
using ‹¬ Col A B Q0› by auto
}
hence "¬ C0 P Q0 CongA C0 P A0"
by auto
ultimately
show ?thesis
using LtA_def by blast
qed
ultimately
show ?thesis
using Acute_def by blast
qed
moreover
have "P Out C0 C0"
using ‹P ≠ C0› out_trivial by auto
moreover
have "C0 ≠ C1"
using ‹C1 ≠ C0› by blast
moreover
have "Col C D C0"
by (simp add: ‹Col C0 C D› col_permutation_1)
hence "Per P C0 C1"
using l8_16_1 ‹C D Perp P C0› ‹Col C D C1› by blast
moreover
have "Coplanar C0 P Q0 C1"
proof -
have "Coplanar C D P C0"
using ‹Col C D C0› ncop__ncols by blast
moreover have "Coplanar C D P P"
using ncop_distincts by auto
moreover have "Coplanar C D P Q0"
by (metis ‹Col Q P Q0› ‹Coplanar C D P Q›
‹P ≠ Q› calculation(2) col_cop2__cop)
moreover have "Coplanar C D P C1"
using ‹Col C D C1› ncop__ncols by blast
ultimately show ?thesis
using ‹¬ Col C D P› coplanar_pseudo_trans by blast
qed
ultimately
show ?thesis
using assms inverse_projection_postulate_def by blast
qed
then obtain Y where "P Out Q0 Y" and "Col C0 C1 Y"
by blast
have "Col P Q Y"
by (meson ‹Col Q P Q0› ‹P Out Q0 Y› ‹P ≠ Q0›
col_permutation_1 l6_16_1 out_col)
have "Col C D Y"
by (metis ‹Col C D C1 ∧ C1 ≠ C0› ‹Col C0 C D›
‹Col C0 C1 Y› colx not_col_permutation_2)
thus ?thesis
using ‹Col P Q Y› by blast
qed
}
thus ?thesis
using alternative_proclus_postulate_def by fastforce
qed
lemma strong_parallel_postulate_implies_inter_dec:
shows "decidability_of_intersection"
proof -
{
fix P Q S U
have "(∃ I. Col I S Q ∧ Col I P U) ∨ ¬ (∃ I. Col I S Q ∧ Col I P U)"
by blast
}
thus ?thesis
using decidability_of_intersection_def by blast
qed
lemma impossible_case_1:
assumes "Bet A B x" and
"Bet C y A" and
"B C ParStrict x y"
shows "False"
proof -
have "Bet x B A"
using Bet_cases assms(1) by blast
then obtain I where "Bet B I C ∧ Bet y I x"
using assms(2) inner_pasch by presburger
thus ?thesis
by (meson assms(3) bet_col col_permutation_1 col_permutation_4 par_not_col)
qed
lemma impossible_case_2:
assumes "A ≠ D" and
"B ≠ D" and
"¬ Col A B C" and
"Col A B x" and
"Bet A D T" and
"Bet B D C" and
"Bet y A C" and
"Bet x T y"
shows "False"
proof -
{
assume "A = y"
hence "Col A B C"
by (metis NCol_perm assms(2) assms(4) assms(5) assms(6)
assms(8) bet_col between_identity col_trivial_2 colx)
hence False
using assms(3) by auto
}
hence "A ≠ y"
by blast
have "A B TS y T"
proof -
have "A B TS C y"
by (simp add: ‹A ≠ y› assms(7) assms(3) bet__ts between_symmetry)
moreover
have "A B OS C T"
using bet_out calculation invert_one_side l9_8_1
one_side_not_col124 one_side_symmetry out_one_side
out_out_one_side by (metis assms(1) assms(2) assms(5) assms(6))
ultimately
show ?thesis
using l9_2 l9_8_2 by blast
qed
hence "A B OS T x"
using Bet_cases assms(8) bet_ts__os by blast
thus ?thesis
using assms(4) col124__nos by auto
qed
lemma impossible_case_3:
assumes
"Bet A D T" and
"¬ Col B C T" and
"Bet B D C" and
"Bet B x A" and
"Bet x T y" and
"B C ParStrict x y"
shows "False"
proof -
have "B C OS x y"
using assms(6) l12_6 by blast
hence "B C TS x T"
by (metis (full_types) Col_cases ‹B C OS x y›
assms(1) assms(2) assms(3) assms(4) bet_col bet_out
between_trivial l9_18 l9_8_2 one_side_not_col124
one_side_symmetry out_out_one_side)
hence "B C TS x y"
by (meson assms(5) bet_ts__ts)
thus ?thesis
using ‹B C OS x y› l9_9 by blast
qed
lemma impossible_case_4_1:
assumes "A ≠ D" and
"C ≠ D" and
"¬ Col A B C" and
"Col A C y" and
"Bet A D T" and
"Bet B D C" and
"A Out B x" and
"Bet T y x"
shows "False"
proof -
have "A C OS B D"
by (metis assms(2) assms(3) assms(6) bet_col
between_equality_2 col_permutation_4 col_trivial_2
cop_nos__ts l6_21 l9_18 ncop__ncols not_col_permutation_5)
hence "A C OS T x "
by (metis assms(1) assms(5) assms(7) bet_out
col_trivial_3 one_side_symmetry os_out_os)
hence "A C OS T y"
using assms(8) l9_17 by blast
thus ?thesis
using assms(4) one_side_not_col124 by auto
qed
lemma impossible_case_4_2:
assumes "¬ Col A B C" and
"Col A C y" and
"Bet A D T" and
"¬ Col B C T" and
"Bet B D C" and
"Bet B A x" and
"Bet T y x" and
"B C ParStrict x y"
shows "False"
proof -
have "B C TS A T"
by (metis Col_cases TS_def assms(1) assms(3) assms(4)
assms(5) bet_out_1 not_col_distincts out_col)
have "B C OS A x"
by (metis assms(1) assms(6) bet_out not_col_distincts
one_side_reflexivity out_out_one_side)
hence "B C TS x T"
using ‹B C TS A T› l9_8_2 by blast
hence "T ≠ x"
using ts_distincts by blast
have "B C ParStrict x T"
by (metis ‹B C TS x T› assms(7) assms(8) bet_col
between_symmetry par_strict_col_par_strict ts_distincts)
thus ?thesis
by (meson ‹B C TS x T› l12_6 l9_9)
qed
lemma impossible_case_4:
assumes "A ≠ D" and
"C ≠ D" and
"D ≠ T" and
"¬ Col A B C" and
"Col A C y" and
"Bet A D T" and
"¬ Col B C T" and
"Bet B D C" and
"Col A B x" and
"Bet T y x" and
"B C ParStrict x y"
shows "False"
proof -
have "Bet A B x ∨ A Out B x ∨ B Out x A"
using assms(9) l6_6 or_bet_out by blast
moreover
have "¬ Bet A B x"
by (metis assms(1) assms(10) assms(2) assms(4) assms(5)
assms(6) assms(8) bet_out impossible_case_4_1 not_col_distincts)
moreover
have "¬ A Out B x "
using assms(1) assms(10) assms(2) assms(4) assms(5)
assms(6) assms(8) impossible_case_4_1 by blast
moreover
have "¬ B Out x A"
using calculation(3) impossible_case_4_2
by (meson assms(9) assms(10) assms(11) assms(4)
assms(5) assms(6) assms(7) assms(8)
col_permutation_4 or_bet_out)
ultimately
show ?thesis by blast
qed
lemma impossible_two_sides_not_col:
assumes "A ≠ D" and
"C ≠ D" and
"¬ Col A B C" and
"Bet A D T" and
"Bet B D C" and
"Bet B Y T"
shows "¬ Col A C Y"
proof -
have "A C OS B D"
by (metis Col_perm assms(2) assms(3) assms(5)
bet_col between_equality_2 invert_one_side l6_4_1
out_one_side out_to_bet)
have "A C OS D T"
by (metis ‹A C OS B D› assms(1) assms(4) bet_out
col124__nos out_one_side)
hence "A C OS B T"
using ‹A C OS B D› one_side_transitivity by blast
hence "A C OS B Y"
using assms(6) l9_17 by blast
thus ?thesis
using one_side_not_col124 by auto
qed
lemma triangle_circumscription_implies_tarski_s_euclid_aux1:
assumes "triangle_circumscription_principle" and
"B ≠ D" and
"C ≠ D" and
"D ≠ T" and
"T ≠ X" and
"¬ Col A B C" and
"Col A B M1" and
"Bet A D T" and
"¬ Col B C T" and
"Bet B D C" and
"Col T Y Z" and
"Bet Y T X" and
"Bet Y M1 Z1" and
"Cong Y T T X" and
"Cong Y M1 M1 Z1" and
"B C Perp T Z" and
"A B Perp Y Z1"
shows "∃x. Col A B x ∧ B C ParStrict x T ∧ Cong X x Y x"
proof -
have "A ≠ D"
using Bet_cases Col_def assms(10) assms(6) by blast
have "B ≠ C"
using assms(6) col_trivial_2 by blast
have "A ≠ B"
using assms(6) col_trivial_1 by auto
have "A ≠ C"
using assms(6) col_trivial_3 by blast
have "X ≠ Y"
using assms(12) assms(5) between_identity by blast
have "Y ≠ T"
using assms(14) assms(5) cong_reverse_identity by blast
have "Y ≠ Z1"
using assms(17) perp_not_eq_2 by auto
have "T ≠ Z"
using assms(16) perp_not_eq_2 by blast
have "Coplanar B C T A"
by (metis assms(10) assms(8) bet__coplanar bet_cop__tsp
coplanar_perm_1 coplanar_perm_5 tsp_distincts)
have "Coplanar B C T B"
using ncop_distincts by blast
have "Coplanar B C T C"
using ncop_distincts by blast
have "Coplanar B C T T"
using ncop_distincts by auto
have "Coplanar B C T Z"
by (simp add: assms(16) perp__coplanar)
have "Coplanar B C T Y"
by (meson ‹Coplanar B C T Z› ‹T ≠ Z› assms(11)
col_cop__cop not_col_permutation_5)
have "Coplanar B C T X"
using ‹Coplanar B C T T› ‹Coplanar B C T Y› ‹Y ≠ T›
assms(12) bet_col col_cop2__cop by blast
{
assume "Col X Y Z1"
hence "Col T Z Z1"
by (metis Col_perm ‹Y ≠ T› assms(11) assms(12) bet_col
between_identity col_transitivity_1)
have "Coplanar B C Y Z1"
by (metis Col_cases ‹Col T Z Z1› ‹Coplanar B C T Y›
‹T ≠ Z› ‹Y ≠ T› assms(11) col_cop__cop col_trivial_3
colx coplanar_perm_1)
have "B A Par B C"
proof -
have "Coplanar Y Z1 A C"
proof -
have "Coplanar B C T Z1"
using ‹Col T Z Z1› ‹Coplanar B C T Z› ‹T ≠ Z› col_cop__cop by blast
moreover have "Coplanar B C T C"
using ‹Coplanar B C T C› by auto
ultimately show ?thesis
using assms(9) ‹Coplanar B C T A›
‹Coplanar B C T Y› coplanar_pseudo_trans by presburger
qed
moreover
have "B C Perp Y Z1"
proof -
have "T Z Perp B C"
using Perp_perm assms(16) by blast
moreover
have "Col T Z Y"
using Col_cases assms(11) by blast
ultimately
show ?thesis
using ‹Y ≠ Z1› ‹Col T Z Z1› perp_col0 by blast
qed
ultimately
show ?thesis
by (metis ‹A ≠ B› ‹B ≠ C› assms(17) cop_perp2__col
not_par_not_col perp_comm perp_right_comm)
qed
hence "False"
using assms(6) par_id_1 by auto
}
hence "¬ Col X Y Z1"
by blast
obtain x where "Cong X x Y x ∧ Cong X x Z1 x ∧ Coplanar X Y Z1 x"
using triangle_circumscription_principle_def
‹¬ Col X Y Z1› assms(1) by blast
have "Cong X x Y x"
by (simp add: ‹Cong X x Y x ∧ Cong X x Z1 x ∧ Coplanar X Y Z1 x›)
have "Cong X x Z1 x"
by (simp add: ‹Cong X x Y x ∧ Cong X x Z1 x ∧ Coplanar X Y Z1 x›)
have "Coplanar X Y Z1 x"
by (simp add: ‹Cong X x Y x ∧ Cong X x Z1 x ∧ Coplanar X Y Z1 x›)
have "Y ≠ M1"
using ‹Y ≠ Z1› assms(15) cong_reverse_identity by blast
have "Coplanar B C T Z1"
by (meson ‹A ≠ B› ‹Coplanar B C T A› ‹Coplanar B C T B›
‹Coplanar B C T Y› ‹Y ≠ M1› assms(13) assms(7)
bet_col col_cop2__cop)
have "Coplanar B C T x"
by (meson ‹Coplanar B C T X› ‹Coplanar B C T Y›
‹Coplanar B C T Z1› ‹Coplanar X Y Z1 x› ‹¬ Col X Y Z1›
l9_30 ncop_distincts)
have "Col A B x"
proof -
have "Coplanar A x Y Z1"
using assms(9) ‹Coplanar B C T A› ‹Coplanar B C T Y›
‹Coplanar B C T Z1› ‹Coplanar B C T x›
coplanar_pseudo_trans by blast
moreover
have "Coplanar B x Y Z1"
using assms(9)
by (meson ‹Coplanar B C T B› ‹Coplanar B C T Y›
‹Coplanar B C T Z1› ‹Coplanar B C T x› coplanar_pseudo_trans)
moreover
have "Cong x Y x Z1"
proof -
have "Cong x Y X x"
using ‹Cong X x Y x› not_cong_3421 by blast
moreover
have "Cong X x x Z1"
using ‹Cong X x Z1 x› not_cong_1243 by blast
ultimately
show ?thesis
by (meson cong_transitivity)
qed
moreover
have "A B PerpBisect Y Z1"
proof -
have "M1 Midpoint Y Z1"
by (simp add: Midpoint_def assms(13) assms(15))
hence "(∃ X. X Midpoint Y Z1 ∧ Col A B X) ∧ (A B Perp Y Z1 ∨ Y = Z1)"
using assms(7) assms(17) by blast
hence "Y Z1 ReflectL A B"
using ReflectL_def l10_4_spec by presburger
thus ?thesis
using ‹Y ≠ Z1› Perp_bisect_def by auto
qed
ultimately
show ?thesis
using cong_cop2_perp_bisect_col by blast
qed
have "B C ParStrict x T"
proof -
have "B C Par x T"
proof -
have "Coplanar X Y B x"
by (meson ‹Coplanar B C T B› ‹Coplanar B C T X›
‹Coplanar B C T Y› ‹Coplanar B C T x› assms(9)
coplanar_pseudo_trans)
moreover
have "Coplanar X Y B T"
by (meson ‹Coplanar B C T B› ‹Coplanar B C T T›
‹Coplanar B C T X› ‹Coplanar B C T Y› assms(9)
coplanar_pseudo_trans)
moreover
have "Coplanar X Y C x"
by (meson ‹Coplanar B C T C› ‹Coplanar B C T X›
‹Coplanar B C T Y› ‹Coplanar B C T x› assms(9)
coplanar_pseudo_trans)
moreover
have "Coplanar X Y C T"
by (meson ‹Coplanar B C T C› ‹Coplanar B C T T›
‹Coplanar B C T X› ‹Coplanar B C T Y› assms(9)
coplanar_pseudo_trans)
moreover
have "B C Perp X Y"
proof -
have "T Z Perp B C"
using Perp_cases assms(16) by blast
moreover
have "Col T Z X"
by (meson ‹Y ≠ T› assms(11) assms(12) bet_col
bet_col1 col3 not_col_permutation_4)
moreover
have "Col T Z Y"
by (simp add: assms(11) col_permutation_5)
ultimately
show ?thesis
using ‹X ≠ Y› perp_col0 by blast
qed
moreover
have "x T PerpBisect X Y"
proof -
have "x ≠ T"
using ‹A ≠ D› ‹Col A B x› assms(10) assms(2)
assms(6) assms(8) between_trivial2
impossible_case_2 by blast
moreover
have "Coplanar x T X Y"
by (meson assms(12) bet_col ncop__ncol ncoplanar_perm_21)
moreover
have "Cong X T Y T"
by (meson assms(14) not_cong_3421)
ultimately
show ?thesis
using ‹Cong X x Y x› ‹X ≠ Y› cong_cop_perp_bisect by presburger
qed
hence "x T Perp X Y"
by (simp add: perp_bisect_perp)
ultimately
show ?thesis
using l12_9 by blast
qed
moreover
have "Col x T T"
by (simp add: col_trivial_2)
moreover
have "¬ Col B C T"
by (simp add: assms(9))
ultimately
show ?thesis
using par_not_col_strict by blast
qed
thus ?thesis
using ‹Col A B x› ‹Cong X x Y x› by blast
qed
lemma triangle_circumscription_implies_tarski_s_euclid_aux:
assumes "triangle_circumscription_principle" and
"B ≠ D" and
"C ≠ D" and
"D ≠ T" and
"T ≠ X" and
"¬ Col A B C" and
"Col A B M1" and
"Col A C M2" and
"Bet A D T" and
"¬ Col B C T" and
"Bet B D C" and
"Col T Y Z" and
"Bet Y T X" and
"Bet Y M1 Z1" and
"Bet Y M2 Z2" and
"Cong Y T T X" and
"Cong Y M1 M1 Z1" and
"Cong Y M2 M2 Z2" and
"B C Perp T Z" and
"A B Perp Y Z1" and
"A C Perp Y Z2"
shows "∃ x y. Bet A B x ∧ Bet A C y ∧ Bet x T y"
proof -
have "∃x. Col A B x ∧ B C ParStrict x T ∧ Cong X x Y x"
using triangle_circumscription_implies_tarski_s_euclid_aux1
assms(1) assms(2) assms(3) assms(4) assms(5)
assms(6) assms(7) assms(9) assms(10)
assms(11) assms(12) assms(13) assms(14)
assms(16) assms(17) assms(19) assms(20)
by blast
then obtain x where "Col A B x ∧ B C ParStrict x T ∧ Cong X x Y x"
by auto
hence "Col A B x"
by auto
have "B C ParStrict x T"
by (simp add: ‹Col A B x ∧ B C ParStrict x T ∧ Cong X x Y x›)
have "Cong X x Y x"
by (simp add: ‹Col A B x ∧ B C ParStrict x T ∧ Cong X x Y x›)
have "∃ y. Col A C y ∧ C B ParStrict y T ∧ Cong X y Y y"
proof -
have "¬ Col A C B"
using assms(6) col_permutation_5 by blast
moreover
have "Col A C M2"
by (simp add: assms(8))
moreover
have "Bet A D T"
by (simp add: assms(9))
moreover
have "¬ Col C B T"
using NCol_cases assms(10) by blast
moreover
have "Bet C D B"
using Bet_cases assms(11) by blast
moreover
have "C B Perp T Z"
by (simp add: assms(19) perp_left_comm)
ultimately
show ?thesis
using triangle_circumscription_implies_tarski_s_euclid_aux1
assms(1) assms(2) assms(3) assms(4) assms(5)
assms(8) assms(9) assms(12) assms(13) assms(15)
assms(16) assms(18) assms(21) by blast
qed
then obtain y where "Col A C y ∧ C B ParStrict y T ∧ Cong X y Y y"
by auto
hence "Col A C y"
by auto
have "C B ParStrict y T"
by (simp add: ‹Col A C y ∧ C B ParStrict y T ∧ Cong X y Y y›)
have "Cong X y Y y"
by (simp add: ‹Col A C y ∧ C B ParStrict y T ∧ Cong X y Y y›)
have "Col x T y"
proof (cases "x = T")
case True
thus ?thesis
by (simp add: col_trivial_1)
next
case False
thus ?thesis
proof (cases "y = T")
case True
thus ?thesis
using col_trivial_2 by auto
next
case False
thus ?thesis
proof -
have "X ≠ Y"
using assms(13) assms(5) between_identity by blast
have "Y ≠ T"
using assms(16) assms(5) cong_reverse_identity by blast
have "T ≠ Z"
using assms(19) perp_not_eq_2 by auto
have "Coplanar X Y x y"
proof -
have "Coplanar B C T Y"
proof -
have "Coplanar B C T Z"
using assms(19) perp__coplanar by auto
moreover
have "Col T Z Y"
by (simp add: assms(12) col_permutation_5)
ultimately
show ?thesis
using ‹T ≠ Z› col_cop__cop by blast
qed
moreover
have "Coplanar B C T X"
by (meson ‹Coplanar B C T Y› ‹Y ≠ T› assms(13)
bet_col bet_col1 col2_cop__cop ncoplanar_perm_7)
moreover
have "Coplanar B C T x"
by (meson ‹B C ParStrict x T› par_strict_right_comm
pars__coplanar)
moreover
have "Coplanar B C T y"
by (simp add: ‹C B ParStrict y T› par_strict_comm
pars__coplanar)
ultimately
show ?thesis
by (meson assms(10) coplanar_pseudo_trans)
qed
moreover
have "T x PerpBisect X Y"
proof -
have "T ≠ x"
using ‹B C ParStrict x T› par_strict_distinct by blast
moreover
have "Coplanar T x X Y"
by (meson assms(13) assms(16) midpoint__coplanar
midpoint_def ncoplanar_perm_5)
moreover
have "Cong X T Y T"
using Cong_perm assms(16) by blast
ultimately
show ?thesis
using ‹X ≠ Y› ‹Cong X x Y x› cong_cop_perp_bisect by auto
qed
hence "T x Perp X Y"
using perp_bisect_perp by auto
moreover
have "T y PerpBisect X Y"
proof -
have "T ≠ y"
using False by auto
moreover
have "Coplanar T y X Y"
by (meson assms(13) bet__coplanar between_symmetry
ncoplanar_perm_13)
moreover
have "Cong X T Y T"
using assms(16) cong_4312 by blast
ultimately
show ?thesis
by (simp add: ‹Cong X y Y y› ‹X ≠ Y› cong_cop_perp_bisect)
qed
hence "T y Perp X Y"
by (simp add: perp_bisect_perp)
ultimately
show ?thesis
using col_permutation_4 cop_perp2__col by blast
qed
qed
qed
have "B C ParStrict x y"
proof -
{
assume "x = y"
hence "A ≠ C"
using assms(6) col_trivial_3 by force
hence "A = x"
using NCol_perm ‹Col A B x› ‹Col A C y› ‹x = y› assms(6)
col_trivial_3 colx by blast
hence "∃ X0. Col X0 B C ∧ Col X0 x T"
using Bet_cases Col_def assms(11) assms(9) by blast
hence False
using ‹B C ParStrict x T› par_not_col by blast
}
moreover have "B C ParStrict x T"
using ‹B C ParStrict x T› by blast
moreover have "Col x T y"
by (simp add: ‹Col x T y›)
ultimately show ?thesis
using par_strict_col_par_strict by blast
qed
have "A ≠ D"
using Col_cases assms(11) assms(6) bet_col by blast
{
assume "Bet x T y"
{
assume "Bet A B x"
hence "∃ x y. Bet A B x ∧ Bet A C y ∧ Bet x T y"
using Col_def ‹A ≠ D› ‹B C ParStrict x y› ‹Bet x T y›
‹Col A B x› ‹Col A C y› assms(11) assms(2) assms(6) assms(9)
impossible_case_1 impossible_case_2 by blast
}
moreover
{
assume "Bet B x A"
hence "∃ x y. Bet A B x ∧ Bet A C y ∧ Bet x T y"
using ‹B C ParStrict x y› ‹Bet x T y› assms(10)
assms(11) assms(9) impossible_case_3 by blast
}
moreover
{
assume "Bet x A B"
hence "∃ x y. Bet A B x ∧ Bet A C y ∧ Bet x T y"
by (meson ‹A ≠ D› ‹Bet x T y› ‹Col A C y› assms(11)
assms(3) assms(6) assms(9) between_symmetry
col_permutation_5 impossible_case_2)
}
ultimately
have "∃ x y. Bet A B x ∧ Bet A C y ∧ Bet x T y"
using Col_def ‹Col A B x› by blast
}
moreover
{
assume "Bet T y x"
{
assume "Bet A B x"
hence "∃ x y. Bet A B x ∧ Bet A C y ∧ Bet x T y"
using ‹A ≠ D› ‹B C ParStrict x y› ‹Bet T y x›
‹Col A B x› ‹Col A C y› assms(10) assms(11) assms(3)
assms(4) assms(6) assms(9) impossible_case_4 by blast
}
moreover
{
assume "Bet B x A"
hence "∃ x y. Bet A B x ∧ Bet A C y ∧ Bet x T y"
using ‹A ≠ D› ‹B C ParStrict x y› ‹Bet T y x› ‹Col A B x›
‹Col A C y› assms(10) assms(11) assms(3) assms(4) assms(6)
assms(9) impossible_case_4 by blast
}
moreover
{
assume "Bet x A B"
hence "∃ x y. Bet A B x ∧ Bet A C y ∧ Bet x T y"
using ‹A ≠ D› ‹B C ParStrict x y› ‹Bet T y x›
‹Col A B x› ‹Col A C y› assms(10) assms(11) assms(3) assms(4)
assms(6) assms(9) impossible_case_4 by blast
}
ultimately
have "∃ x y. Bet A B x ∧ Bet A C y ∧ Bet x T y"
using Col_def ‹Col A B x› by blast
}
moreover
{
assume "Bet y x T"
{
assume "Bet A B x"
hence "∃ x y. Bet A B x ∧ Bet A C y ∧ Bet x T y"
by (meson ‹A ≠ D› ‹B C ParStrict x y› ‹Bet y x T›
‹Col A B x› ‹Col A C y› assms(10) assms(11) assms(2)
assms(4) assms(6) assms(9) between_symmetry
col_permutation_5 impossible_case_4
not_col_permutation_3 par_strict_comm)
}
moreover
{
assume "Bet B x A"
hence "∃ x y. Bet A B x ∧ Bet A C y ∧ Bet x T y"
using ‹B C ParStrict x T› assms(10) assms(11)
assms(9) between_trivial impossible_case_3 by blast
}
moreover
{
assume "Bet x A B"
hence "∃ x y. Bet A B x ∧ Bet A C y ∧ Bet x T y"
by (meson Par_strict_cases ‹A ≠ D› ‹B C ParStrict x y›
‹Bet y x T› ‹Col A B x› ‹Col A C y› assms(10) assms(11)
assms(2) assms(4) assms(6) assms(9) between_symmetry
col_permutation_5 impossible_case_4 not_col_permutation_2)
}
ultimately
have "∃ x y. Bet A B x ∧ Bet A C y ∧ Bet x T y"
using Col_def ‹Col A B x› by blast
}
ultimately
show ?thesis
using Col_def ‹Col x T y› by blast
qed
lemma triangle_circumscription_implies_tarski_s_euclid:
assumes "triangle_circumscription_principle"
shows "tarski_s_parallel_postulate"
proof -
{
fix A B C D T
assume "Bet A D T ∧ Bet B D C ∧ A ≠ D"
have "∃ X Y. Bet A B X ∧ Bet A C Y ∧ Bet X T Y"
proof -
{
fix A' B' C' D' T'
assume H1: "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' ∧ ¬ Col B' C' T'"
have "A' ≠ B'"
using H1 by blast
have "A' ≠ C'"
using H1 by blast
have "A' ≠ D'"
using H1 by blast
have "B' ≠ C'"
using H1 by blast
have "B' ≠ D'"
using H1 by blast
have "C' ≠ D'"
using H1 by blast
have "D' ≠ T'"
using H1 by blast
have "¬ Col A' B' C'"
using H1 by blast
have "Bet A' D' T'"
using H1 by blast
have "Bet B' D' C'"
using H1 by blast
have "¬ Col B' C' T'"
using H1 by blast
obtain Y' where "Col B' C' Y' ∧ B' C' Perp T' Y'"
using ‹¬ Col B' C' T'› l8_18_existence by presburger
{
fix B'' C''
assume H2: "A' ≠ B'' ∧ A' ≠ C'' ∧ B'' ≠ C'' ∧
B'' ≠ D' ∧ C'' ≠ D' ∧ ¬ Col A' B'' C'' ∧
Bet B'' D' C'' ∧ ¬ Col B'' C'' T' ∧
Col B'' C'' Y' ∧ B'' C'' Perp T' Y'"
{
fix B''' C'''
assume A1: "A' ≠ C''' ∧ B''' ≠ C''' ∧ B''' ≠ D' ∧
C''' ≠ D' ∧ ¬ Col A' B''' C''' ∧
Bet B''' D' C''' ∧ ¬ Col B''' C''' T' ∧
Col B''' C''' Y' ∧ B''' C''' Perp T' Y' ∧
B''' ≠ Y'"
have "∃ x y. (Bet A' B''' x ∧ Bet A' C''' y ∧ Bet x T' y)"
proof -
{
assume "C''' = Y'"
have "C''' ≠ T'"
using A1 col_trivial_2 by blast
obtain Y1 where "Y1 Midpoint C''' T'"
using midpoint_existence by fastforce
have "¬ Col A' B''' C'''"
using A1 by blast
{
have "A' ≠ C''' ∧ B''' ≠ C''' ∧ B''' ≠ D' ∧
C''' ≠ D' ∧ ¬ Col A' B''' C''' ∧
Bet B''' D' C''' ∧ ¬ Col B''' C''' T' ∧
Col B''' C''' Y' ∧ B''' C''' Perp T' Y' ∧
B''' ≠ Y'" using A1 by blast
{
assume "Y1 = A'"
have "C''' ≠ D'" using A1 by blast
have "Bet B''' D' C'''" using A1 by blast
have "Col A' C''' T'"
using A1
using ‹Y1 = A'› ‹Y1 Midpoint C''' T'› midpoint_col by blast
hence "Col A' B''' C'''"
using ‹A' ≠ D'› ‹Bet A' D' T'› ‹Bet B''' D' C'''›
‹C''' ≠ D'› between_trivial
impossible_two_sides_not_col by blast
hence False
using ‹¬ Col A' B''' C'''› by blast
}
hence "Y1 ≠ A'"
by blast
have "C''' ≠ Y1"
using ‹C''' ≠ T'› ‹Y1 Midpoint C''' T'›
midpoint_distinct_1 by blast
have "B''' ≠ Y1"
by (metis A1 midpoint_col ‹Y1 Midpoint C''' T'›)
have "Bet C''' Y1 T'"
by (simp add: ‹Y1 Midpoint C''' T'› midpoint_bet)
have "Cong C''' Y1 Y1 T'"
by (simp add: ‹Y1 Midpoint C''' T'› midpoint_cong)
have "¬ Col A' B''' Y1"
using impossible_two_sides_not_col A1
by (meson ‹A' ≠ D'› ‹Bet A' D' T'›
‹Bet C''' Y1 T'› between_symmetry
not_col_permutation_5)
obtain X where "T' Midpoint Y1 X"
using symmetric_point_construction by auto
hence "X ≠ Y1"
by (metis ‹C''' ≠ Y1› ‹Y1 Midpoint C''' T'› l7_9_bis l8_20_2)
hence "T' ≠ X"
using ‹T' Midpoint Y1 X› is_midpoint_id_2 by blast
have "Bet Y1 T' X"
by (simp add: ‹T' Midpoint Y1 X› midpoint_bet)
have "Cong Y1 T' T' X"
by (simp add: ‹T' Midpoint Y1 X› midpoint_cong)
obtain Z1 where "Z1 Y1 Reflect A' B'''"
using l10_2_existence by blast
hence "Z1 Y1 ReflectL A' B'''"
using ‹¬ Col A' B''' Y1› is_image_is_image_spec
not_col_distincts by blast
then obtain M1 where HH1: "Bet Y1 M1 Z1 ∧ Cong Y1 M1 M1 Z1 ∧
Col A' B''' M1 ∧
(A' B''' Perp Y1 Z1 ∨ Y1 = Z1)"
using ReflectL_def midpoint_bet midpoint_cong by blast
obtain Z2 where "Z2 Y1 Reflect A' C'''"
using l10_2_existence by blast
hence "Z2 Y1 ReflectL A' C'''"
using ‹¬ Col A' B''' C'''› is_image_is_image_spec
not_col_distincts by blast
then obtain M2 where HH2: "Bet Y1 M2 Z2 ∧ Cong Y1 M2 M2 Z2 ∧
Col A' C''' M2 ∧
(A' C''' Perp Y1 Z2 ∨ Y1 = Z2)"
using ReflectL_def midpoint_bet midpoint_cong by blast
have "Bet Y1 M2 Z2"
using HH2 by blast
have "Cong Y1 M2 M2 Z2"
using HH2 by blast
have "Col A' C''' M2"
using HH2 by blast
have "A' C''' Perp Y1 Z2 ∨ Y1 = Z2"
using HH2 by blast
{
assume "Y1 = Z2"
hence "Y1 = M2"
using HH2 between_identity by blast
hence "Col A' C''' Y1"
using HH2 by blast
have "Col A' B''' C'''"
proof -
have "Bet A' D' T'"
using ‹Bet A' D' T'› by auto
moreover have "Bet C''' Y1 T'"
using ‹Bet C''' Y1 T'› by blast
moreover have "C''' ≠ Y1"
using ‹C''' ≠ Y1› by auto
moreover have "Col A' C''' Y1"
using ‹Col A' C''' Y1› by blast
moreover
{
assume "¬ Col B''' C''' Y1"
have "A' ≠ C'''"
using A1 by blast
have "B''' ≠ C'''"
using A1 by blast
have "C''' ≠ D'"
using A1 by blast
have "Bet B''' D' C'''"
using A1 by blast
have "¬ Col B''' C''' T'"
using A1 by blast
have "B''' ≠ Y'"
using A1 by blast
hence "A' = D'"
by (metis (no_types, lifting) NCol_perm
calculation(3) col_transitivity_1
‹A' ≠ C'''› ‹B''' ≠ C'''› ‹C''' ≠ D'›
‹Bet B''' D' C'''› ‹¬ Col B''' C''' T'›
bet_col between_identity calculation(1)
calculation(2) not_col_distincts
calculation(4))
hence False
using ‹A' ≠ D'› by blast
}
hence "Col B''' C''' Y1"
by blast
ultimately show ?thesis using l6_16_1
using col_permutation_2 by blast
qed
hence "False"
using A1 by blast
hence "∃ x y. (Bet A' B''' x ∧ Bet A' C''' y ∧ Bet x T' y)"
by auto
}
moreover
{
assume "A' C''' Perp Y1 Z2"
hence "∃ x y. (Bet A' B''' x ∧ Bet A' C''' y ∧ Bet x T' y)"
proof -
have "B''' ≠ D'"
using A1 by blast
moreover
have "C''' ≠ D'"
using A1 by blast
moreover
have "D' ≠ T'"
using ‹D' ≠ T'› by auto
moreover
have "T' ≠ X"
by (simp add: ‹T' ≠ X›)
moreover
have "¬ Col A' B''' C'''"
using A1 by blast
moreover
have "Col A' B''' M1"
using HH1 by blast
moreover
have "Col A' C''' M2"
using HH2 by blast
moreover
have "Bet A' D' T'"
by (simp add: ‹Bet A' D' T'›)
moreover
have "¬ Col B''' C''' T'"
using A1 by blast
moreover
have "Bet B''' D' C'''"
using A1 by blast
moreover
have "Col T' Y1 C'''"
by (simp add: ‹Bet C''' Y1 T'› bet_col between_symmetry)
moreover
have "Bet Y1 T' X"
by (simp add: ‹Bet Y1 T' X›)
moreover
have "Bet Y1 M1 Z1"
using HH1 by blast
moreover
have "Bet Y1 M2 Z2"
using HH2 by blast
moreover
have "Cong Y1 T' T' X"
by (simp add: ‹Cong Y1 T' T' X›)
moreover
have "Cong Y1 M1 M1 Z1"
using HH1 by blast
moreover
have "Cong Y1 M2 M2 Z2"
using HH2 by blast
moreover
have "B''' C''' Perp T' C'''"
using A1 ‹C''' = Y'› by blast
moreover
have "A' B''' Perp Y1 Z1"
using HH1 ‹¬ Col A' B''' Y1› bet_neq12__neq by blast
moreover
have "A' C''' Perp Y1 Z2"
by (simp add: ‹A' C''' Perp Y1 Z2›)
ultimately
show ?thesis
using assms(1)
triangle_circumscription_implies_tarski_s_euclid_aux
by blast
qed
}
ultimately
have "∃ x y. (Bet A' B''' x ∧ Bet A' C''' y ∧ Bet x T' y)"
using HH2 by blast
}
}
moreover
{
assume "C''' ≠ Y'"
obtain X where "T' Midpoint Y' X"
using symmetric_point_construction by blast
have "T' ≠ Y'"
using A1 by blast
hence "X ≠ Y'"
using ‹T' Midpoint Y' X› l7_3 by blast
have "T' ≠ X"
using ‹T' Midpoint Y' X› ‹T' ≠ Y'› is_midpoint_id_2 by blast
have "Bet Y' T' X"
by (simp add: ‹T' Midpoint Y' X› midpoint_bet)
have "Cong Y' T' T' X"
by (simp add: ‹T' Midpoint Y' X› midpoint_cong)
obtain Z1 where "Z1 Y' Reflect A' B'''"
using l10_2_existence by blast
have "¬ (A' = B''' ∧ A' Midpoint Y' Z1)"
using A1 not_col_distincts by blast
hence "Z1 Y' ReflectL A' B'''"
using Reflect_def ‹Z1 Y' Reflect A' B'''› by force
then obtain M1 where HH3: "Bet Y' M1 Z1 ∧ Cong Y' M1 M1 Z1 ∧
Col A' B''' M1 ∧
(A' B''' Perp Y' Z1 ∨ Y' = Z1)"
using ReflectL_def midpoint_bet midpoint_cong by blast
obtain Z2 where "Z2 Y' Reflect A' C'''"
using l10_2_existence by blast
have "¬ (A' = C''' ∧ A' Midpoint Y' Z2)"
using A1 not_col_distincts by blast
hence "Z2 Y' ReflectL A' C'''"
using Reflect_def ‹Z2 Y' Reflect A' C'''› by force
then obtain M2 where HH4: "Bet Y' M2 Z2 ∧ Cong Y' M2 M2 Z2 ∧
Col A' C''' M2 ∧
(A' C''' Perp Y' Z2 ∨ Y' = Z2)"
using ReflectL_def midpoint_bet midpoint_cong by blast
have "¬ Col A' B''' Y'"
proof -
{
assume "Col A' B''' Y'"
have "False"
proof -
have "¬ Col A' B''' C'''"
using A1 by blast
moreover
have "C''' ≠ B'''"
using A1 by blast
moreover
have "Col A' B''' B'''"
by (simp add: col_trivial_2)
moreover
have "Col A' B''' Y'"
using ‹Col A' B''' Y'› by blast
moreover
have "Col C''' B''' B'''"
by (simp add: col_trivial_2)
moreover
have "Col C''' B''' Y'"
using A1 Col_cases by blast
ultimately
show ?thesis
using A1 l6_21 by blast
qed
}
thus ?thesis
by blast qed
have "¬ Col A' C''' Y'"
proof -
{
assume "Col A' C''' Y'"
have "False"
proof -
have "¬ Col A' C''' B'''"
using A1 Col_cases by blast
moreover
have "B''' ≠ C'''"
using A1 by blast
moreover
have "Col A' C''' C'''"
by (simp add: col_trivial_2)
moreover
have "Col A' C''' Y'"
using ‹Col A' C''' Y'› by blast
moreover
have "Col B''' C''' C'''"
by (simp add: col_trivial_2)
moreover
have "Col B''' C''' Y'"
using A1 by blast
ultimately
show ?thesis
using A1 l6_21 by (meson ‹C''' ≠ Y'›)
qed
}
thus ?thesis
by blast
qed
have "∃ x y. (Bet A' B''' x ∧ Bet A' C''' y ∧ Bet x T' y)"
proof-
{
assume "A' B''' Perp Y' Z1 ∧ A' C''' Perp Y' Z2"
have "∃ x y. (Bet A' B''' x ∧ Bet A' C''' y ∧ Bet x T' y)"
proof -
have "B''' ≠ D'"
using A1 by blast
moreover
have "C''' ≠ D'"
using A1 by blast
moreover
have "D' ≠ T'"
by (simp add: ‹D' ≠ T'›)
moreover
have "T' ≠ X"
by (simp add: ‹T' ≠ X›)
moreover
have "¬ Col A' B''' C'''"
using A1 by blast
moreover
have "Col A' B''' M1"
using HH3 by blast
moreover
have "Col A' C''' M2"
using HH4 by blast
moreover
have "Bet A' D' T'"
using ‹Bet A' D' T'› by blast
moreover
have "¬ Col B''' C''' T'"
using A1 by blast
moreover
have "Bet B''' D' C'''"
using A1 by blast
moreover
have "Col T' Y' Y'"
using col_trivial_2 by presburger
moreover
have "Bet Y' T' X"
using ‹Bet Y' T' X› by blast
moreover
have "Bet Y' M1 Z1"
using HH3 by blast
moreover
have "Bet Y' M2 Z2"
using HH4 by blast
moreover
have "Cong Y' T' T' X"
using ‹Cong Y' T' T' X› by blast
moreover
have "Cong Y' M1 M1 Z1"
using HH3 by blast
moreover
have "Cong Y' M2 M2 Z2"
using HH4 by blast
moreover
have "B''' C''' Perp T' Y'"
using A1 by blast
moreover
have "A' B''' Perp Y' Z1"
using ‹A' B''' Perp Y' Z1 ∧ A' C''' Perp Y' Z2› by blast
moreover
have "A' C''' Perp Y' Z2"
using ‹A' B''' Perp Y' Z1 ∧ A' C''' Perp Y' Z2› by blast
ultimately
show ?thesis
using assms(1)
triangle_circumscription_implies_tarski_s_euclid_aux
by blast
qed
}
moreover
{
assume "Y' = Z1"
hence "∃ x y. (Bet A' B''' x ∧ Bet A' C''' y ∧ Bet x T' y)"
using HH3 ‹¬ Col A' B''' Y'› bet_neq12__neq by blast
}
moreover
{
assume "Y' = Z2"
hence "∃ x y. (Bet A' B''' x ∧ Bet A' C''' y ∧ Bet x T' y)"
using ‹Z2 Y' Reflect A' C'''› ‹¬ Col A' C''' Y'›
col_permutation_1 l10_8 by blast
}
ultimately
show ?thesis
using HH3 HH4 by blast
qed
}
ultimately
show ?thesis
by blast
qed
}
hence Haux: "∀ B''' C'''. (A' ≠ C''' ∧ B''' ≠ C''' ∧
B''' ≠ D' ∧ C''' ≠ D' ∧
¬ Col A' B''' C''' ∧
Bet B''' D' C''' ∧
¬ Col B''' C''' T' ∧
Col B''' C''' Y' ∧
B''' C''' Perp T' Y' ∧ B''' ≠ Y')
⟶
(∃ x y. (Bet A' B''' x ∧ Bet A' C''' y ∧ Bet x T' y))"
by auto
moreover
{
fix B''' C'''
assume A2: "A' ≠ C''' ∧ B''' ≠ C''' ∧ B''' ≠ D' ∧
C''' ≠ D' ∧ ¬ Col A' B''' C''' ∧
Bet B''' D' C''' ∧ ¬ Col B''' C''' T' ∧
Col B''' C''' Y' ∧ B''' C''' Perp T' Y' ∧
B''' = Y'"
have "∃ x y. (Bet A' B''' x ∧ Bet A' C''' y ∧ Bet x T' y)"
proof -
{
assume "C''' = Y'"
hence "∃ x y. (Bet A' B''' x ∧ Bet A' C''' y ∧ Bet x T' y)"
using A2 by fastforce
}
moreover
{
assume "C''' ≠ Y'"
have "∃ x y. (Bet A' B''' x ∧ Bet A' C''' y ∧ Bet x T' y)"
proof -
have "A' ≠ C'''"
using A2 by blast
moreover
have "A' ≠ B'''"
using A2 not_col_distincts by blast
moreover
have "C''' ≠ B'''"
using A2 by blast
moreover
have "C''' ≠ D'"
using A2 by blast
moreover
have "B''' ≠ D'"
using A2 by blast
moreover
have "¬ Col A' C''' B'''"
using A2 Col_cases by blast
moreover
have "Bet C''' D' B'''"
using A2 between_symmetry by blast
moreover
have "¬ Col C''' B''' T'"
using A2 Col_cases by blast
moreover
have "Col C''' B''' Y'"
using A2 Col_cases by blast
moreover
have "C''' B''' Perp T' Y'"
using A2 by (metis col_trivial_2 perp_col2)
moreover
have "C''' ≠ Y'"
using A2 by blast
ultimately
have "(∃ x y. (Bet A' C''' x ∧ Bet A' B''' y ∧ Bet x T' y))"
using Haux by blast
thus ?thesis
using Bet_cases by blast
qed
}
ultimately
show ?thesis
by auto
qed
}
ultimately
have "∃ x y. (Bet A' B'' x ∧ Bet A' C'' y ∧ Bet x T' y)"
using H2 by blast
}
hence "∃ x y. (Bet A' B' x ∧ Bet A' C' y ∧ Bet x T' y)"
using H1 ‹Col B' C' Y' ∧ B' C' Perp T' Y'› by presburger
}
hence "∀ A B C D T. Bet A D T ∧ Bet B D C ∧ A ≠ D ⟶
(∃ x y. (Bet A B x ∧ Bet A C y ∧ Bet x T y))"
using tarski_s_euclid_remove_degenerated_cases by blast
thus ?thesis
using ‹Bet A D T ∧ Bet B D C ∧ A ≠ D› by blast
qed
}
thus ?thesis
using tarski_s_parallel_postulate_def by blast
qed
lemma thales_converse_postulate__thales_existence:
assumes "thales_converse_postulate"
shows "existential_thales_postulate"
proof -
obtain A B C where "¬ (Bet A B C ∨ Bet B C A ∨ Bet C A B)"
using lower_dim by blast
hence "¬ Col C A B"
using Col_def by auto
have "Col C A C"
by (simp add: col_trivial_3)
then obtain B' where "C A Perp B' C ∧ C A OS B B'"
using l10_15 ‹¬ Col C A B› by blast
have "C A Perp B' C"
by (simp add: ‹C A Perp B' C ∧ C A OS B B'›)
have "C A OS B B'"
by (simp add: ‹C A Perp B' C ∧ C A OS B B'›)
have "¬ Col C A B'"
by (simp add: ‹C A Perp B' C ∧ C A OS B B'› perp_not_col)
hence "¬ Col A B' C"
using Col_cases by blast
moreover
have "Per A C B'"
by (simp add: ‹C A Perp B' C› perp_per_1)
moreover
obtain M where "M Midpoint A B'"
using midpoint_existence by blast
moreover
have "Cong M A M C"
using assms thales_converse_postulate_def calculation(2) calculation(3) by blast
ultimately
show ?thesis
using existential_thales_postulate_def by blast
qed
lemma thales_converse_postulate__weak_triangle_circumscription_principle:
assumes "thales_converse_postulate"
shows "weak_triangle_circumscription_principle"
proof -
{
fix A B C A1 A2 B1 B2
assume 1: "¬ Col A B C" and
2: "Per A C B" and
3: "A1 A2 PerpBisect B C" and
4: "B1 B2 PerpBisect A C" and
5: "Coplanar A B C A1" and
6: "Coplanar A B C A2" and
7: "Coplanar A B C B1" and
8: "Coplanar A B C B2"
obtain M where "M Midpoint A B"
using midpoint_existence by blast
hence "Cong M A M C"
using thales_converse_postulate_def "2" assms by blast
have "Bet A M B"
by (simp add: ‹M Midpoint A B› midpoint_bet)
have "A ≠ B"
using "1" col_trivial_1 by auto
have "Col A1 A2 M"
proof -
have "Coplanar A1 M B C"
proof -
have "Coplanar A1 C A B"
using "5" ncoplanar_perm_17 by blast
moreover
have "Col A B M"
using ‹Bet A M B› bet_col not_col_permutation_5 by blast
moreover
have "Col A B B"
using col_trivial_2 by blast
ultimately
show ?thesis
by (metis ‹A ≠ B› col_cop__cop col_permutation_4
coplanar_perm_1 coplanar_perm_5)
qed
moreover
have "Coplanar A2 M B C"
proof -
have "Coplanar A2 C A B"
using "6" ncoplanar_perm_17 by blast
moreover
have "Col A B M"
using ‹Bet A M B› bet_col not_col_permutation_5 by blast
moreover
have "Col A B B"
using col_trivial_2 by blast
ultimately
show ?thesis
by (metis ‹A ≠ B› col_cop__cop col_permutation_4
coplanar_perm_1 coplanar_perm_5)
qed
moreover
have "Cong M B M C"
by (meson ‹Cong M A M C› ‹M Midpoint A B›
cong_inner_transitivity cong_left_commutativity midpoint_cong)
ultimately
show ?thesis
using "3" cong_cop2_perp_bisect_col by blast
qed
moreover
have "Col B1 B2 M"
proof -
have "Coplanar B1 M A C"
proof -
have "Coplanar B1 C A B"
using "7" ncoplanar_perm_17 by blast
moreover
have "Col A B M"
using ‹Bet A M B› bet_col not_col_permutation_5 by blast
moreover
have "Col A B A"
by (simp add: col_trivial_3)
ultimately
show ?thesis
by (metis ‹A ≠ B› col_cop__cop coplanar_perm_5)
qed
moreover
have "Coplanar B2 M A C"
proof -
have "Coplanar B2 C A B"
using "8" ncoplanar_perm_17 by blast
moreover
have "Col A B M"
using ‹Bet A M B› bet_col not_col_permutation_5 by blast
moreover
have "Col A B A"
by (simp add: col_trivial_3)
ultimately
show ?thesis
by (metis ‹A ≠ B› col_cop__cop coplanar_perm_5)
qed
ultimately
show ?thesis
using ‹Cong M A M C› "4" cong_cop2_perp_bisect_col by blast
qed
ultimately
have "∃ I. Col A1 A2 I ∧ Col B1 B2 I"
by blast
}
thus ?thesis
using weak_triangle_circumscription_principle_def by blast
qed
lemma thales_existence__rah:
assumes "existential_thales_postulate"
shows "postulate_of_right_saccheri_quadrilaterals"
proof -
{
fix A B C D
assume "Saccheri A B C D"
hence "Per A B C"
using t22_17__rah assms existential_thales_postulate_def
existential_playfair__rah_1
postulate_of_right_saccheri_quadrilaterals_def by fastforce
}
thus ?thesis
using postulate_of_right_saccheri_quadrilaterals_def by blast
qed
lemma thales_postulate__thales_converse_postulate:
assumes "thales_postulate"
shows "thales_converse_postulate"
proof -
{
fix A B C M
assume "M Midpoint A B" and "Per A C B"
hence "Bet A M B"
by (simp add: midpoint_bet)
have "Cong M A M C"
proof (cases "Col A B C")
case True
thus ?thesis
using ‹M Midpoint A B› ‹Per A C B› cong_left_commutativity
cong_reflexivity l8_9 midpoint_cong not_col_permutation_5 by blast
next
case False
hence "¬ Col A B C"
by simp
have "A ≠ B"
using False col_trivial_1 by auto
have "C ≠ B"
using False col_trivial_2 by blast
have "A ≠ M"
using False ‹M Midpoint A B› is_midpoint_id not_col_distincts by blast
have "A ≠ C"
using False col_trivial_3 by blast
have "M ≠ C"
using Col_def False ‹M Midpoint A B› l7_2 midpoint_bet by blast
then obtain C' where "M Out C C'" and "Cong M C' M A"
using segment_construction_3 ‹A ≠ M› by metis
hence "Cong M A M C'"
by (meson cong_symmetry)
show ?thesis
proof (cases "C = C'")
case True
thus ?thesis
using ‹Cong M A M C'› by auto
next
case False
hence "C ≠ C'" by simp
{
assume "¬ Cong M A M C"
have "M ≠ C'"
using ‹A ≠ M› ‹Cong M C' M A› cong_reverse_identity by blast
{
assume "Col A B C'"
hence "¬ Per A C B"
by (metis Col_cases midpoint_col
‹M Midpoint A B› ‹M Out C C'› ‹M ≠ C'›
‹¬ Col A B C› colx out_col)
hence False
by (simp add: ‹Per A C B›)
}
hence "¬ Col A B C'"
by auto
{
assume "Col A C C'"
hence "Col A C B"
by (meson False ‹A ≠ M› ‹Bet A M B› ‹M Out C C'›
bet_col l6_16_1 not_col_permutation_3
not_col_permutation_5 out_col)
hence False
using ‹¬ Col A B C› not_col_permutation_5 by blast
}
hence "¬ Col A C C'"
by auto
{
assume "Col B C C'"
hence "¬ Per A C B"
by (metis Col_cases False midpoint_col
‹M Midpoint A B› ‹M Out C C'› ‹¬ Col A B C›
col_trivial_2 l6_21 midpoint_distinct_2
out_col)
hence False
by (simp add: ‹Per A C B›)
}
hence "¬ Col B C C'"
by auto
have "B ≠ C'"
using ‹¬ Col A B C'› col_trivial_2 by auto
have "A ≠ C'"
using ‹¬ Col A B C'› col_trivial_3 by blast
have "Per A C' B"
using ‹Cong M A M C'› ‹M Midpoint A B›
assms thales_postulate_def by blast
hence "A C B CongA A C' B"
using ‹Per A C B› ‹A ≠ C'› ‹A ≠ C›
‹B ≠ C'› ‹C ≠ B› l11_16 by force
have "Col A B M"
using Col_perm ‹Bet A M B› bet_col by blast
hence "A B OS C C'"
using ‹¬ Col A B C› ‹M Out C C'› l9_19_R2 by blast
{
assume "Bet M C C'"
have "A C' B LtA A C B"
proof -
have "C' A OS B C"
proof -
have "C' A OS B M"
by (metis NCol_cases out_one_side
‹A ≠ B› ‹A ≠ M› ‹Bet A M B› ‹¬ Col A B C'›
bet2__out invert_one_side l5_1)
moreover
have "C' A OS M C"
by (metis False bet_out_1 out_one_side
‹Bet M C C'› ‹¬ Col A C C'›
not_col_permutation_2 one_side_symmetry)
ultimately
show ?thesis
using one_side_transitivity by blast
qed
moreover
have "A B OS C' C"
by (simp add: ‹A B OS C C'› one_side_symmetry)
moreover
have "C' B OS A C"
proof -
have "C' B OS A M"
by (meson out_one_side ‹A ≠ B› ‹M Midpoint A B›
‹¬ Col A B C'› invert_one_side midpoint_out_1
not_col_permutation_1)
moreover
have "C' B OS M C"
by (meson False ‹Bet M C C'› ‹¬ Col B C C'›
bet_out_1 l6_6 not_col_permutation_2
out_one_side)
ultimately
show ?thesis
using one_side_transitivity by blast
qed
ultimately
show ?thesis
by (simp add: os3__lta)
qed
hence False
using ‹A C B CongA A C' B›
by (meson conga_sym lta_not_conga)
}
moreover
{
assume "Bet M C' C"
have "A C B LtA A C' B"
proof -
have "C A OS B C'"
proof -
have "C A OS B M"
by (metis ‹A ≠ M› ‹Bet A M B› ‹¬ Col A B C›
bet2__out col_trivial_3 invert_one_side l5_1
not_col_permutation_5 out_one_side_1)
moreover
have "C A OS M C'"
by (metis ‹Bet M C C' ⟹ False› ‹M Out C C'›
calculation col_trivial_3 l9_19_R2
one_side_not_col124 or_bet_out out_col)
ultimately
show ?thesis
using one_side_transitivity by blast
qed
moreover
have "C B OS A C'"
proof -
have "C B OS A M"
by (meson out_one_side ‹A ≠ B› ‹M Midpoint A B›
‹¬ Col A B C› invert_one_side midpoint_out_1
not_col_permutation_1)
moreover
have "C B OS M C'"
by (meson ‹Bet M C C' ⟹ False› ‹M Out C C'›
calculation col_trivial_3 l6_4_2 l9_19_R2
one_side_not_col124 out_col)
ultimately
show ?thesis
using one_side_transitivity by blast
qed
ultimately
show ?thesis
by (simp add: ‹A B OS C C'› os3__lta)
qed
hence False
using ‹A C B CongA A C' B›
by (meson lta_not_conga)
}
ultimately
have "False"
using Out_def ‹M Out C C'› by presburger
}
thus ?thesis
by auto
qed
qed
}
thus ?thesis
using thales_converse_postulate_def by blast
qed
lemma triangle__existential_triangle:
assumes "triangle_postulate"
shows "postulate_of_existence_of_a_triangle_whose_angles_sum_to_two_rights"
proof -
obtain A B C where "¬ (Bet A B C ∨ Bet B C A ∨ Bet C A B)"
using lower_dim_ex by blast
hence "¬ Col A B C"
by (simp add: Col_def)
moreover
have "A ≠ B"
using calculation col_trivial_1 by blast
have "B ≠ C"
using calculation col_trivial_2 by blast
have "A ≠ C"
using calculation col_trivial_3 by blast
obtain D E F where "A B C TriSumA D E F"
using ex_trisuma ‹A ≠ B› ‹B ≠ C›‹A ≠ C› by blast
have "Bet D E F"
using triangle_postulate_def assms ‹A B C TriSumA D E F› by blast
hence "∃ A B C D E F. (¬ Col A B C ∧ A B C TriSumA D E F ∧ Bet D E F)"
using ‹A B C TriSumA D E F› ‹¬ Col A B C› by blast
thus ?thesis
using postulate_of_existence_of_a_triangle_whose_angles_sum_to_two_rights_def
by presburger
qed
lemma legendre_aux_tr:
assumes "greenberg_s_axiom" and
"triangle_postulate"
shows " (∀ A B C P Q. ¬(
Q A Perp P Q ∧ P B Perp P Q ∧ Q A ParStrict P B ∧
Q A ParStrict P C ∧ P B OS Q C ∧ P Q OS C A ∧ P Q OS C B))"
proof -
{
fix A B C P Q
assume "Q A Perp P Q" and
"P B Perp P Q" and
"Q A ParStrict P B" and
"Q A ParStrict P C" and
"P B OS Q C" and
"P Q OS C A" and
"P Q OS C B"
obtain B' where "P Midpoint B B'"
using symmetric_point_construction by blast
have "C InAngle Q P B"
by (meson ‹P B OS Q C› ‹P Q OS C B› col123__nos l11_24
l9_2 l9_9_bis os_ts__inangle two_sides_cases)
have "¬ Col P B C"
using ‹P B OS Q C› col124__nos by blast
have "¬ Col P Q C"
by (meson ‹P Q OS C A› col123__nos)
have "¬ Col P Q A"
using ‹P Q OS C A› col124__nos by blast
have "B P C LtA B P Q"
proof -
have "¬ Col C P Q"
by (simp add: ‹¬ Col P Q C› not_col_permutation_2)
moreover
have "C InAngle B P Q"
by (simp add: ‹C InAngle Q P B› l11_24)
ultimately
show ?thesis
by (simp add: inangle__lta)
qed
have "Per B P Q"
by (simp add: ‹P B Perp P Q› perp_per_2)
hence "Acute B P C"
using ‹B P C LtA B P Q› Acute_def by blast
have "P ≠ Q"
using ‹¬ Col P Q C› col_trivial_1 by auto
have "A ≠ Q"
using ‹¬ Col P Q A› col_trivial_2 by fastforce
have "P ≠ A"
using ‹¬ Col P Q A› col_trivial_3 by auto
have "P ≠ C"
using ‹¬ Col P Q C› col_trivial_3 by blast
have "P ≠ B"
using ‹¬ Col P B C› col_trivial_1 by auto
have "B ≠ B'"
using ‹P Midpoint B B'› ‹P ≠ B› l8_20_2 by blast
hence "P ≠ B'"
using ‹P Midpoint B B'› midpoint_not_midpoint by blast
have "∃ R. (P R Q LtA B P C ∧ Q Out R A)"
proof -
have "¬ Col B P C"
by (simp add: ‹¬ Col P B C› not_col_permutation_4)
moreover
have "Q ≠ A"
using ‹A ≠ Q› by auto
moreover
have "Per P Q A"
by (meson ‹Q A Perp P Q› l8_2 perp_per_1)
ultimately
show ?thesis
using ‹Acute B P C› greenberg_s_axiom_def assms by blast
qed
then obtain R where "P R Q LtA B P C" and "Q Out R A"
by blast
have "R ≠ Q"
using ‹Q Out R A› l6_3_1 by auto
have "R ≠ P"
using ‹P R Q LtA B P C› lta_distincts by blast
have "P Q OS R A"
by (meson Out_cases ‹Q Out R A› ‹¬ Col P Q A› col_trivial_2
one_side_symmetry out_one_side_1)
have "¬ Col Q P R ∨ ¬ Col Q P A"
using ‹¬ Col P Q A› col_permutation_4 by blast
hence "P C OS Q R"
by (meson ‹Q Out R A› ‹Q A ParStrict P C› col_permutation_5
out_col par_strict_one_side par_strict_symmetry)
obtain D E F where "B' P R P R Q SumA D E F"
using ex_suma ‹P ≠ B'› ‹R ≠ P› ‹R ≠ Q› by presburger
have "R Q P Q P R SumA B' P R"
proof -
have "B' P Q Q P R SumA B' P R"
proof -
have "Q P R CongA Q P R"
using ‹P ≠ Q› ‹R ≠ P› conga_refl by auto
moreover
have "P Q TS R B'"
proof -
have "P Q TS B B'"
proof -
have "¬ Col P Q B"
using ‹P Q OS C B› col124__nos by blast
moreover
have "Bet B P B'"
using ‹P Midpoint B B'› midpoint_bet by blast
ultimately
show ?thesis
by (simp add: ‹P ≠ B'› bet__ts)
qed
moreover
have "P Q OS B R"
by (meson ‹P Q OS C A› ‹P Q OS C B› ‹P Q OS R A›
one_side_symmetry one_side_transitivity)
ultimately
show ?thesis
using l9_8_2 by blast
qed
hence "¬ P Q OS B' R"
by (meson l9_2 l9_9_bis)
moreover
have "Coplanar B' P Q R"
by (meson ‹P Q TS R B'› coplanar_perm_18 ts__coplanar)
moreover
have "B' P R CongA B' P R"
using ‹P ≠ B'› ‹R ≠ P› conga_refl by auto
ultimately
show ?thesis
using SumA_def by blast
qed
moreover
have "B' P Q CongA R Q P"
proof -
have "Per B' P Q"
by (meson ‹P Midpoint B B'› ‹Per B P Q› l8_2 l8_4)
moreover
have "Per P Q R"
proof -
have "Per P Q A"
using ‹Q A Perp P Q› l8_2 perp_per_1 by blast
moreover
have "Col Q A R"
by (metis Col_def Out_def ‹Q Out R A› col_permutation_3)
ultimately
show ?thesis
by (metis ‹A ≠ Q› per_col)
qed
hence "Per R Q P"
by (meson l8_2)
ultimately
show ?thesis
using ‹P ≠ B'› ‹P ≠ Q› ‹R ≠ Q› l11_16 by blast
qed
moreover
have "Q P R CongA Q P R"
using ‹P ≠ Q› ‹R ≠ P› conga_refl by force
moreover
have "B' P R CongA B' P R"
using ‹P ≠ B'› ‹R ≠ P› conga_refl by auto
ultimately
show ?thesis
by (meson conga3_suma__suma)
qed
hence "R Q P TriSumA D E F"
using TriSumA_def ‹B' P R P R Q SumA D E F› by blast
obtain I J K where "B' P R C P B SumA I J K"
using ex_suma ‹P ≠ B'› ‹R ≠ P› ‹P ≠ C› ‹P ≠ B› by presburger
have "¬ Col R P B'"
proof -
have "Bet B P B'"
using ‹P Midpoint B B'› midpoint_bet by blast
hence "Col P B B'"
using bet_col not_col_permutation_4 by blast
hence "Q A ParStrict P B'"
using ‹Q A ParStrict P B› ‹P ≠ B'› par_strict_col_par_strict by blast
moreover
have "Col R Q A"
by (metis Col_def Out_def ‹Q Out R A› col_permutation_3)
ultimately
show ?thesis
using par_not_col by blast
qed
have "B' P R R P B SumA B' P B"
by (metis Bet_cases ‹P Midpoint B B'› ‹P ≠ B'› ‹P ≠ B›
‹R ≠ P› bet__suma midpoint_bet)
have "SAMS B' P R R P B"
by (meson Mid_cases ‹B' P R R P B SumA B' P B›
‹P Midpoint B B'› bet_suma__sams midpoint_bet)
have "C P B LeA R P B"
proof -
have "P C TS Q B"
by (simp add: ‹P B OS Q C› ‹P Q OS C B› l9_31 one_side_symmetry)
hence "P C TS B R"
using ‹P C OS Q R› l9_2 l9_8_2 by blast
moreover
have "P B OS R Q"
by (metis Out_def Par_strict_cases ‹Q A ParStrict P B›
‹Q Out R A› bet_col l9_17 one_side_symmetry
par_strict_one_side pars__os3412)
hence "P B OS R C"
using ‹P B OS Q C› one_side_transitivity by blast
ultimately
show ?thesis
by (simp add: inangle__lea lea_comm os_ts__inangle)
qed
have "D E F LtA B' P B"
proof -
have "D E F LtA I J K"
proof -
have "B' P R LeA B' P R"
using ‹P ≠ B'› ‹R ≠ P› lea_refl by auto
moreover
have "P R Q LtA C P B"
by (simp add: ‹P R Q LtA B P C› lta_right_comm)
moreover
have "SAMS B' P R C P B"
by (meson ‹C P B LeA R P B› ‹SAMS B' P R R P B›
calculation(1) sams_lea2__sams)
ultimately
show ?thesis
by (meson ‹B' P R P R Q SumA D E F›
‹B' P R C P B SumA I J K› sams_lea_lta456_suma2__lta)
qed
moreover
have "I J K LeA B' P B"
using ‹B' P R C P B SumA I J K›
‹B' P R R P B SumA B' P B› ‹C P B LeA R P B›
‹SAMS B' P R R P B› sams_lea456_suma2__lea by blast
ultimately
show ?thesis
using lea456789_lta__lta by blast
qed
have "Bet D E F"
using ‹R Q P TriSumA D E F› triangle_postulate_def assms(2) by blast
hence "D E F CongA B' P B"
by (metis ‹D E F LtA B' P B› ‹P Midpoint B B'›
conga_line conga_right_comm lta_distincts
midpoint_bet)
hence False
using ‹D E F LtA B' P B› lta_not_conga by blast
}
thus ?thesis by blast
qed
lemma legendre_aux1_tr:
assumes "greenberg_s_axiom" and
"triangle_postulate"
shows "∀ A1 A2 B1 B2 C1 C2 P.
(P Perp2 A1 A2 B1 B2 ∧ ¬ Col A1 A2 P ∧
Col P B1 B2 ∧ Coplanar A1 A2 B1 B2 ∧
A1 A2 Par C1 C2 ∧ Col P C1 C2 ∧
¬ B1 B2 TS A1 C1)
⟶
Col C1 B1 B2"
proof -
{
fix A1 A2 B1 B2 C1 C2 P
assume "P Perp2 A1 A2 B1 B2" and
"¬ Col A1 A2 P" and
"Col P B1 B2" and
"Coplanar A1 A2 B1 B2" and
"A1 A2 Par C1 C2" and
"Col P C1 C2" and
"¬ B1 B2 TS A1 C1"
have "Col B1 B2 P"
using Col_cases ‹Col P B1 B2› by blast
hence "A1 A2 ParStrict B1 B2"
using ‹P Perp2 A1 A2 B1 B2› ‹Coplanar A1 A2 B1 B2›
‹¬ Col A1 A2 P› ‹Coplanar A1 A2 B1 B2› ‹P Perp2 A1 A2 B1 B2›
col_cop_perp2__pars_bis by blast
have "A1 A2 ParStrict C1 C2"
using Col_cases ‹A1 A2 Par C1 C2› ‹Col P C1 C2›
‹¬ Col A1 A2 P› par_not_col_strict by blast
{
assume "¬ Col C1 B1 B2"
have "P ≠ C1"
using ‹Col P B1 B2› ‹¬ Col C1 B1 B2› by auto
obtain P1 P2 where "Col P P1 P2" and
"P1 P2 Perp A1 A2" and
"P1 P2 Perp B1 B2"
using ‹P Perp2 A1 A2 B1 B2› Perp2_def by blast
obtain Q where "Col Q P1 P2" and "Col Q A1 A2"
using ‹P1 P2 Perp A1 A2› col_permutation_2
perp_inter_perp_in_n by blast
have "P ≠ Q"
using NCol_perm ‹Col Q A1 A2› ‹¬ Col A1 A2 P› by blast
have "A1 A2 Perp P Q"
by (meson ‹Col P P1 P2› ‹Col Q P1 P2› ‹P ≠ Q›
‹P1 P2 Perp A1 A2› col_permutation_1 perp_col0)
have "B1 B2 Perp P Q"
by (meson ‹Col P P1 P2› ‹Col Q P1 P2› ‹P ≠ Q›
‹P1 P2 Perp B1 B2› col_permutation_3 perp_col0
perp_left_comm)
have "P ≠ Q"
using ‹P ≠ Q› by auto
have "C1 ≠ B1"
using ‹¬ Col C1 B1 B2› col_trivial_1 by blast
have "B1 ≠ B2"
using ‹¬ Col C1 B1 B2› not_col_distincts by blast
have "C1 ≠ B2"
using ‹¬ Col C1 B1 B2› not_col_distincts by blast
have "A1 ≠ A2"
using ‹¬ Col A1 A2 P› col_trivial_1 by auto
have "P ≠ A2"
using ‹¬ Col A1 A2 P› col_trivial_2 by blast
have "P ≠ A1"
using ‹¬ Col A1 A2 P› col_trivial_3 by blast
have "A1 ≠ B1"
using ‹A1 A2 ParStrict B1 B2› not_par_strict_id by blast
have "A1 ≠ B2"
using ‹A1 A2 ParStrict B1 B2› col_trivial_2
par_strict_not_col_3 by blast
have "A2 ≠ B1"
using ‹A1 A2 ParStrict B1 B2› not_col_distincts
par_strict_not_col_2 by blast
have "A2 ≠ B2"
using ‹A1 A2 ParStrict B1 B2› not_col_distincts
par_strict_not_col_4 by blast
have "A1 ≠ C1"
using ‹A1 A2 ParStrict C1 C2› not_par_strict_id by blast
have "A1 ≠ C2"
using ‹A1 A2 ParStrict C1 C2› col_trivial_3
par_strict_not_col_4 by blast
have "A2 ≠ C1"
by (metis ‹A1 A2 ParStrict C1 C2› ‹Col P C1 C2›
col3 col_trivial_2 par_strict_not_col_2)
have "A2 ≠ C2"
using ‹A1 A2 ParStrict C1 C2› col_trivial_2
par_strict_not_col_4 by blast
have "C2 ≠ C1"
using ‹A1 A2 Par C1 C2› par_neq2 by blast
have "B1 B2 OS Q C1"
proof -
have "B1 B2 OS Q A1"
proof (cases "A1 = Q")
case True
thus ?thesis
using ‹A1 A2 ParStrict B1 B2› not_col_distincts
par_strict_one_side par_strict_symmetry by blast
next
case False
have "B1 B2 ParStrict A1 A2"
using ‹A1 A2 ParStrict B1 B2› par_strict_symmetry by blast
moreover
have "Col A1 A2 Q"
using ‹Col Q A1 A2› not_col_permutation_2 by blast
ultimately
show ?thesis
using one_side_symmetry par_strict_one_side by blast
qed
moreover
have "B1 B2 OS A1 C1"
proof -
have "Coplanar B1 B2 A1 C1"
proof -
have "¬ Col A1 A2 P"
by (simp add: ‹¬ Col A1 A2 P›)
moreover
have "Coplanar A1 A2 P B1"
by (meson ‹B1 ≠ B2› ‹Col B1 B2 P›
‹Coplanar A1 A2 B1 B2› col2_cop__cop col_trivial_3)
moreover
have "Coplanar A1 A2 P B2"
using ‹B1 ≠ B2› ‹Col B1 B2 P› ‹Coplanar A1 A2 B1 B2›
col2_cop__cop col_trivial_2 by blast
moreover
have "Coplanar A1 A2 P A1"
using ncop_distincts by blast
moreover
have "Coplanar A1 A2 P C1"
using ‹A1 A2 Par C1 C2› ‹C2 ≠ C1› ‹Col P C1 C2›
col_cop__cop coplanar_perm_1 not_col_permutation_2
par__coplanar by blast
ultimately
show ?thesis
by (meson coplanar_pseudo_trans)
qed
moreover
have "¬ Col A1 B1 B2"
using ‹A1 A2 ParStrict B1 B2› not_col_permutation_2
par_strict_not_col_3 by blast
ultimately
show ?thesis
using ‹¬ Col C1 B1 B2› ‹¬ B1 B2 TS A1 C1› cop_nts__os by blast
qed
ultimately
show ?thesis
using one_side_transitivity by blast
qed
have "¬ Col Q C1 P"
by (metis Col_cases ‹A1 A2 ParStrict C1 C2›
‹Col P C1 C2› ‹Col Q A1 A2› ‹P ≠ C1›
col_transitivity_2 par_not_col)
have "¬ Col B1 B2 Q"
using ‹B1 B2 OS Q C1› col123__nos by blast
have "∃ B3. Col B1 B2 B3 ∧ P Q OS C1 B3"
proof (cases "Col P Q B1")
case True
hence "P = B1"
by (meson ‹Col P B1 B2› ‹¬ Col B1 B2 Q›
col_transitivity_2 not_col_permutation_5)
have "∃ B3. Col B2 P B3 ∧ P Q OS C1 B3"
proof -
have "B2 ≠ P"
using ‹B1 ≠ B2› ‹P = B1› by blast
moreover
have "Col P Q P"
using True ‹P = B1› by auto
moreover
have "Col B2 P P"
using not_col_distincts by auto
moreover
have "¬ Col P Q B2"
using Col_cases ‹P = B1› ‹¬ Col B1 B2 Q› by blast
moreover
have "¬ Col P Q C1"
using Col_cases ‹¬ Col Q C1 P› by blast
moreover
have "Coplanar P Q B2 C1"
using ‹B1 B2 OS Q C1› ‹P = B1› coplanar_perm_2
os__coplanar by blast
ultimately
show ?thesis
using cop_not_par_same_side by blast
qed
then obtain B3 where "Col B2 P B3" and "P Q OS C1 B3"
by blast
thus ?thesis
using ‹P = B1› not_col_permutation_4 by blast
next
case False
have "Col P Q P"
by (meson not_col_distincts)
moreover
have "Coplanar P Q B1 C1"
proof -
have "¬ Col B2 Q B1"
using Col_cases ‹¬ Col B1 B2 Q› by blast
moreover
have "Coplanar B2 Q B1 P"
using NCol_perm ‹Col P B1 B2› ncop__ncols by blast
moreover
have "Coplanar B2 Q B1 C1"
using ‹B1 B2 OS Q C1› ncoplanar_perm_12
os__coplanar by blast
ultimately
show ?thesis
by (meson coplanar_trans_1 ncoplanar_perm_8)
qed
ultimately
show ?thesis
using ‹B1 ≠ B2› ‹Col B1 B2 P› False
‹¬ Col Q C1 P› cop_not_par_same_side
Col_cases by blast
qed
then obtain B3 where "Col B1 B2 B3" and "P Q OS C1 B3"
by blast
have "¬ Col P Q B3"
using ‹P Q OS C1 B3› one_side_not_col124 by auto
have "Coplanar A1 A2 C1 P"
using Col_cases ‹A1 A2 Par C1 C2› ‹C2 ≠ C1›
‹Col P C1 C2› col_cop__cop par__coplanar by blast
have "∃ A3. Col A1 A2 A3 ∧ P Q OS C1 A3"
proof (cases "Col P Q A1")
case True
have "Q = A1"
by (meson True ‹Col Q A1 A2› ‹¬ Col A1 A2 P›
col_permutation_1 col_trivial_2 colx)
have "∃ A3. Col A2 Q A3 ∧ P Q OS C1 A3"
proof -
have "A2 ≠ Q"
using ‹A1 ≠ A2› ‹Q = A1› by auto
moreover
have "Col P Q Q"
by (simp add: col_trivial_2)
moreover
have "Col A2 Q Q"
by (simp add: col_trivial_2)
moreover
have "¬ Col P Q A2"
using Col_cases ‹Q = A1› ‹¬ Col A1 A2 P› by blast
moreover
have "¬ Col P Q C1"
using Col_cases ‹¬ Col Q C1 P› by blast
moreover
have "Coplanar P Q A2 C1"
using ‹Coplanar A1 A2 C1 P› ‹Q = A1› ncoplanar_perm_9 by blast
ultimately
show ?thesis
using cop_not_par_same_side by blast
qed
then obtain A3 where "Col A2 Q A3" and "P Q OS C1 A3"
by blast
thus ?thesis
using ‹Q = A1› not_col_permutation_4 by blast
next
case False
have "Col P Q Q"
by (simp add: col_trivial_2)
moreover
have "Col A1 A2 Q"
using NCol_cases ‹Col Q A1 A2› by blast
moreover
have "¬ Col P Q C1"
using Col_cases ‹¬ Col Q C1 P› by blast
moreover
have "Coplanar P Q A1 C1"
using ‹A1 ≠ A2› ‹Coplanar A1 A2 C1 P›
calculation(2) col_cop__cop coplanar_perm_16
ncoplanar_perm_19 by blast
ultimately
show ?thesis
using False ‹A1 ≠ A2› cop_not_par_same_side by blast
qed
then obtain A3 where "Col A1 A2 A3" and "P Q OS C1 A3"
by blast
have "Q ≠ B3"
using ‹Col B1 B2 B3› ‹¬ Col B1 B2 Q› by blast
have "P ≠ B3"
using ‹¬ Col P Q B3› col_trivial_3 by auto
have "B2 ≠ Q"
using ‹¬ Col B1 B2 Q› col_trivial_2 by auto
have "Q ≠ B1"
using ‹¬ Col B1 B2 Q› col_trivial_3 by blast
have "Q ≠ C1"
using ‹¬ Col Q C1 P› not_col_distincts by blast
have "P ≠ A3"
using ‹Col A1 A2 A3› ‹¬ Col A1 A2 P› by auto
have "Q ≠ A3"
using ‹P Q OS C1 A3› os_distincts by blast
have False
proof -
have H1: "Q A3 Perp P Q ∧ P B3 Perp P Q ∧ Q A3 ParStrict P B3 ∧
Q A3 ParStrict P C1 ∧ P B3 OS Q C1 ∧
P Q OS C1 A3 ∧ P Q OS C1 B3"
proof -
have "Col A1 A2 Q"
using Col_cases ‹Col Q A1 A2› by blast
hence "Q A3 Perp P Q"
using ‹A1 A2 Perp P Q› ‹Q ≠ A3› ‹Col A1 A2 A3› perp_col2 by blast
moreover
have "Col B1 B2 P"
by (simp add: ‹Col B1 B2 P›)
hence "P B3 Perp P Q"
using perp_col2 ‹B1 B2 Perp P Q› ‹Col B1 B2 B3› ‹P ≠ B3› by blast
moreover
have "Q A3 ParStrict P B3"
using ‹Q ≠ A3› ‹P ≠ B3› ‹A1 A2 ParStrict B1 B2›
‹Col A1 A2 Q› ‹Col A1 A2 A3› ‹Col B1 B2 P›
‹Col B1 B2 B3› par_strict_col4__par_strict by blast
moreover
have "Q A3 ParStrict P C1"
proof -
have "Col C1 C2 P"
using Col_cases ‹Col P C1 C2› by auto
moreover
have "Col C1 C2 C1"
using not_col_distincts by blast
ultimately
show ?thesis
using ‹Q ≠ A3› ‹P ≠ C1› ‹A1 A2 ParStrict C1 C2›
‹Col A1 A2 Q› ‹Col A1 A2 A3›
par_strict_col4__par_strict by blast
qed
moreover
have "P B3 OS Q C1"
using ‹P ≠ B3› ‹Col B1 B2 P› ‹Col B1 B2 B3›
‹B1 B2 OS Q C1› col2_os__os by blast
ultimately
show ?thesis by (simp add: ‹P Q OS C1 A3› ‹P Q OS C1 B3›)
qed
thus ?thesis
using legendre_aux_tr assms(1) assms(2) by blast
qed
}
hence "Col C1 B1 B2"
by auto
}
thus ?thesis by blast
qed
lemma legendre_aux2_tr:
assumes "greenberg_s_axiom" and
"triangle_postulate"
shows "∀ A1 A2 B1 B2 C1 C2 P.
(P Perp2 A1 A2 B1 B2 ∧ ¬ Col A1 A2 P ∧
Col P B1 B2 ∧ Coplanar A1 A2 B1 B2 ∧
A1 A2 Par C1 C2 ∧ Col P C1 C2)
⟶
Col C1 B1 B2"
proof -
{
fix A1 A2 B1 B2 C1 C2 P
assume 1: "P Perp2 A1 A2 B1 B2" and
2: "¬ Col A1 A2 P" and
3: "Col P B1 B2" and
4: "Coplanar A1 A2 B1 B2" and
5: "A1 A2 Par C1 C2" and
6: "Col P C1 C2"
have "A1 A2 ParStrict B1 B2"
using Col_cases ‹Col P B1 B2› ‹Coplanar A1 A2 B1 B2›
‹P Perp2 A1 A2 B1 B2› ‹¬ Col A1 A2 P›
col_cop_perp2__pars_bis by blast
{
assume "B1 B2 TS A1 C1"
hence "¬ Col C1 B1 B2"
using TS_def by blast
have "C1 ≠ P"
using "3" ‹¬ Col C1 B1 B2› by auto
obtain C3 where "P Midpoint C1 C3"
using symmetric_point_construction by blast
hence "C1 ≠ C3"
by (metis ‹C1 ≠ P› midpoint_distinct_2)
have "¬ Col C3 B1 B2"
by (metis "3" ‹P Midpoint C1 C3› ‹¬ Col C1 B1 B2›
col_trivial_2 l6_21 midpoint_col midpoint_distinct_2
not_col_permutation_3 not_col_permutation_4)
moreover
have "Col C3 B1 B2"
proof -
have "P Perp2 A1 A2 B1 B2"
by (simp add: "1")
moreover
have "¬ Col A1 A2 P"
by (simp add: "2")
moreover
have "Col P B1 B2"
by (simp add: "3")
moreover
have "Coplanar A1 A2 B1 B2"
by (simp add: "4")
moreover
have "A1 A2 Par C1 P"
by (metis "5" "6" ‹C1 ≠ P› col_trivial_2
par_col2_par_bis par_right_comm)
hence "A1 A2 Par C1 C3"
using Col_def Midpoint_def ‹C1 ≠ C3›
‹P Midpoint C1 C3› par_col_par by blast
hence "A1 A2 Par C3 C1"
using Par_perm by blast
moreover
have "Col P C3 C1"
using ‹P Midpoint C1 C3›
by (meson Mid_cases midpoint_col)
moreover
have "Bet C3 P C1"
using ‹P Midpoint C1 C3›
by (metis midpoint_bet between_symmetry)
hence "B1 B2 TS C3 C1"
using 3 TS_def ‹¬ Col C1 B1 B2› ‹¬ Col C3 B1 B2› by blast
hence "B1 B2 OS A1 C3"
using ‹B1 B2 TS A1 C1› l9_8_1 by blast
hence "¬ B1 B2 TS A1 C3"
using l9_9_bis by auto
ultimately
show ?thesis
using legendre_aux1_tr greenberg_s_axiom_def
triangle_postulate_def assms(1) assms(2) by blast
qed
ultimately
have "False"
using ‹¬ Col C3 B1 B2›‹Col C3 B1 B2› by blast
}
hence "¬ B1 B2 TS A1 C1"
by blast
hence "Col C1 B1 B2"
using legendre_aux1_tr greenberg_s_axiom_def
assms(1) assms(2) 1 2 3 4 5 6 by blast
}
thus ?thesis
by blast
qed
lemma triangle__playfair_bis:
assumes "greenberg_s_axiom" and
"triangle_postulate"
shows "alternative_playfair_s_postulate"
proof -
{
fix A1 A2 B1 B2 C1 C2 P
assume 1: "P Perp2 A1 A2 B1 B2" and
2: "¬ Col A1 A2 P" and
3: "Col P B1 B2" and
4: "Coplanar A1 A2 B1 B2" and
5: "A1 A2 Par C1 C2" and
6: "Col P C1 C2"
have "Col C1 B1 B2"
using 1 2 3 4 5 6 legendre_aux2_tr
greenberg_s_axiom_def assms(1) assms(2)
by blast
moreover
have "Col C2 B1 B2"
proof -
have "A1 A2 Par C2 C1"
by (simp add: "5" par_right_comm)
moreover
have "Col P C2 C1"
by (simp add: "6" col_permutation_5)
ultimately
show ?thesis
using 1 2 3 4 legendre_aux2_tr greenberg_s_axiom_def
assms(1) assms(2) by blast
qed
ultimately
have "Col C1 B1 B2 ∧ Col C2 B1 B2"
by simp
}
thus ?thesis
using alternative_playfair_s_postulate_def by blast
qed
lemma rah__existential_saccheri:
assumes "postulate_of_right_saccheri_quadrilaterals"
shows "postulate_of_existence_of_a_right_saccheri_quadrilateral"
proof -
obtain A B C D where "Saccheri A B C D"
using ex_saccheri by blast
moreover
have "Per A B C"
using assms
calculation postulate_of_right_saccheri_quadrilaterals_def
by blast
ultimately
show ?thesis
using postulate_of_existence_of_a_right_saccheri_quadrilateral_def
by blast
qed
lemma rah__posidonius_aux:
assumes "postulate_of_right_saccheri_quadrilaterals"
shows "∀ A1 A2 A3 B1 B2 B3.
(Per A2 A1 B1 ∧ Per A1 A2 B2 ∧
Cong A1 B1 A2 B2 ∧ A1 A2 OS B1 B2 ∧
Col A1 A2 A3 ∧ Col B1 B2 B3 ∧
A1 A2 Perp A3 B3)
⟶
Cong A3 B3 A1 B1"
proof -
{
fix A1 A2 A3 B1 B2 B3
assume 1: "Per A2 A1 B1" and
2: "Per A1 A2 B2" and
3: "Cong A1 B1 A2 B2" and
4: "A1 A2 OS B1 B2" and
5: "Col A1 A2 A3" and
6: "Col B1 B2 B3" and
7: "A1 A2 Perp A3 B3"
have "A1 ≠ B1"
using ‹A1 A2 OS B1 B2› ‹Cong A1 B1 A2 B2›
col_trivial_2 cong_reverse_identity
one_side_not_col124 by blast
have "B2 ≠ B1"
using ‹A1 A2 Perp A3 B3› ‹Cong A1 B1 A2 B2›
‹Per A1 A2 B2› ‹Per A2 A1 B1› diff_per_diff
perp_not_eq_1 by blast
have "A2 ≠ B2"
using ‹A1 ≠ B1› ‹Cong A1 B1 A2 B2› cong_identity_inv by blast
have "A1 ≠ A2"
using ‹A1 A2 OS B1 B2› os_distincts by auto
have "A1 ≠ B2"
using ‹A2 ≠ B2› ‹Per A1 A2 B2› per_distinct_1 by blast
have "A2 ≠ B1"
using ‹A1 ≠ A2› ‹Per A2 A1 B1› per_distinct_1 by blast
have "Cong A3 B3 A1 B1"
proof (cases "A1 = A3")
case True
hence "A1 = A3"
by blast
have "B1 = B3"
proof -
have "¬ Col B1 B2 A1"
using 1 2 ‹A1 ≠ A2› ‹A1 ≠ B1› ‹A2 ≠ B2›
col_permutation_5 per_not_colp by blast
moreover
have "Col B1 B2 B1"
using not_col_distincts by blast
moreover
have "Col A1 B1 B1"
using not_col_distincts by blast
moreover
have "Col A1 B1 B3"
proof -
{
assume "¬ Col A1 B1 B3"
have "Per A2 A1 B3"
using perp_per_2 "7" ‹A1 = A3› by blast
hence "¬ Col A1 A2 B3"
by (meson "5" "7" l8_16_1)
have "Per A1 A2 B3"
proof -
have f2: "Per B2 A2 A1"
by (simp add: "2" l8_2)
have f3: "Per B1 A1 A2"
by (simp add: "1" l8_2)
have "Col B3 B1 B2"
by (simp add: "6" col_permutation_2)
then show ?thesis
by (metis col_per2__per l8_2 l8_7 not_col_distincts
‹Per A2 A1 B3› ‹¬ Col A1 B1 B3›
‹Per B2 A2 A1› ‹Per B1 A1 A2›)
qed
hence "A1 = A2"
using ‹Per A2 A1 B3› l8_2 l8_7 by blast
hence False
by (simp add: ‹A1 ≠ A2›)
}
thus ?thesis
by blast
qed
ultimately
show ?thesis
using 6 ‹A1 ≠ B1› l6_21 by blast
qed
thus ?thesis
using True cong_reflexivity by auto
next
case False
have "A3 ≠ B3"
using "7" perp_not_eq_2 by auto
then obtain B'3 where "A3 Out B3 B'3" and "Cong A3 B'3 A1 B1"
using segment_construction_3 ‹A1 ≠ B1› by blast
hence "A3 ≠ B'3"
using out_distinct by blast
have "B3 = B'3"
proof -
have "Saccheri A1 B1 B2 A2"
by (meson "1" "2" "3" "4" Per_cases Saccheri_def not_cong_1243)
hence "A1 A2 ParStrict B1 B2"
using sac__pars1423 by auto
hence "B1 B2 ParStrict A1 A2"
by (simp add: par_strict_symmetry)
hence "B1 B2 ParStrict A1 A3"
using 5 False par_strict_col_par_strict by blast
have "¬ Col B1 B2 A3"
using ‹B1 B2 ParStrict A1 A3› par_strict_not_col_4 by auto
moreover
have "A3 ≠ B3"
using ‹A3 ≠ B3› by auto
moreover
have "Col B1 B2 B3"
using "6" by auto
moreover
have "Col B2 B'3 B1"
proof -
have "Coplanar A1 B2 B'3 B1"
proof -
have "¬ Col A3 B1 B2"
using NCol_cases calculation(1) by blast
moreover
have "Coplanar A3 B1 B2 A1"
using ‹B1 B2 ParStrict A1 A3› ncoplanar_perm_9
pars__coplanar by blast
moreover
have "Coplanar A3 B1 B2 B'3"
using "6" Coplanar_def Out_cases ‹A3 Out B3 B'3›
out_col by blast
ultimately
show ?thesis
by (meson coplanar_trans_1 ncoplanar_perm_20)
qed
moreover
have "Per B2 B1 A1"
using ‹Saccheri A1 B1 B2 A2› Per_perm assms
postulate_of_right_saccheri_quadrilaterals_def by blast
moreover
have "Saccheri A1 B1 B'3 A3"
proof -
{
assume "B1 = B3"
have "A1 = A3"
proof -
have "¬ Col A1 A2 B1"
using "4" col123__nos by blast
moreover
have "Col A1 A2 A1"
by (simp add: col_trivial_3)
moreover
have "A1 A2 Perp B1 A1"
using "1" ‹A1 ≠ A2› ‹A1 ≠ B1› per_perp
perp_comm by presburger
moreover
have "A1 A2 Perp B1 A3"
by (simp add: "7" ‹B1 = B3› perp_right_comm)
ultimately
show ?thesis
using 5 l8_18_uniqueness by blast
qed
hence False
using False by auto
}
hence "B1 ≠ B3"
by blast
have "Per A1 A3 B'3"
by (metis "5" "7" ‹A3 Out B3 B'3› col_trivial_3
l8_16_1 l8_2 l8_3 out_col perp_right_comm)
moreover
have "Per B1 A1 A3"
using "1" "5" ‹A1 ≠ A2› l8_2 l8_3 by blast
moreover
have "Cong A1 B1 B'3 A3"
using Cong_cases ‹Cong A3 B'3 A1 B1› by blast
moreover
have "A1 A3 OS B1 B'3"
proof -
have "A1 A3 OS B1 B3"
by (meson "5" "6" False ‹B1 B2 ParStrict A1 A2›
‹B1 ≠ B3› col_trivial_3 par_strict_col4__par_strict
pars__os3412)
moreover
have "A1 A3 OS B3 B'3"
using ‹A3 Out B3 B'3› calculation col_trivial_2
one_side_not_col124 out_one_side_1 by blast
ultimately
show ?thesis
using one_side_transitivity by blast
qed
ultimately
show ?thesis
using Saccheri_def by blast
qed
hence "Per B'3 B1 A1"
using Per_perm assms
postulate_of_right_saccheri_quadrilaterals_def by blast
ultimately
show ?thesis
using ‹A1 ≠ B1› cop_per2__col by blast
qed
hence "Col B1 B2 B'3"
using Col_cases by blast
moreover
have "Col A3 B3 B3"
by (metis not_col_distincts)
moreover
have "Col A3 B3 B'3"
using ‹A3 Out B3 B'3› out_col by auto
ultimately
show ?thesis
using l6_21 by blast
qed
thus ?thesis
using ‹Cong A3 B'3 A1 B1› by auto
qed
}
thus ?thesis by blast
qed
lemma rah__posidonius:
assumes "postulate_of_right_saccheri_quadrilaterals"
shows "posidonius_postulate"
proof -
obtain A1 B1 B2 A2 where "Saccheri A1 B1 B2 A2"
using ex_saccheri by presburger
hence H1: "Per B1 A1 A2 ∧ Per A1 A2 B2 ∧
Cong A1 B1 B2 A2 ∧ A1 A2 OS B1 B2"
using Saccheri_def by blast
hence "Per B1 A1 A2" by blast
have "Per A1 A2 B2"
by (simp add: H1)
have "Cong A1 B1 B2 A2"
by (simp add: H1)
have "A1 A2 OS B1 B2"
by (simp add: H1)
have "¬ Col A1 A2 B1"
using ‹A1 A2 OS B1 B2› col123__nos by blast
moreover
have "B1 ≠ B2"
using ‹Saccheri A1 B1 B2 A2› sac_distincts by blast
moreover
have "Coplanar A1 A2 B1 B2"
using ‹Saccheri A1 B1 B2 A2› ncoplanar_perm_3
sac__coplanar by blast
moreover
{
fix A3 A4 B3 B4
assume "Col A1 A2 A3" and
"Col B1 B2 B3" and
"A1 A2 Perp A3 B3" and
"Col A1 A2 A4" and
"Col B1 B2 B4" and
"A1 A2 Perp A4 B4"
have "(Per A2 A1 B1 ∧ Per A1 A2 B2 ∧ Cong A1 B1 A2 B2 ∧
A1 A2 OS B1 B2 ∧ Col A1 A2 A3 ∧ Col B1 B2 B3 ∧
A1 A2 Perp A3 B3) ⟶ Cong A3 B3 A1 B1"
using rah__posidonius_aux assms by blast
hence "Cong A3 B3 A1 B1"
using Cong_cases ‹A1 A2 OS B1 B2› ‹A1 A2 Perp A3 B3›
‹Col A1 A2 A3› ‹Col B1 B2 B3› ‹Cong A1 B1 B2 A2›
‹Per A1 A2 B2› ‹Per B1 A1 A2› l8_2 by blast
hence "Cong A1 B1 A3 B3"
using not_cong_3412 by blast
moreover
have "(Per A2 A1 B1 ∧ Per A1 A2 B2 ∧ Cong A1 B1 A2 B2 ∧
A1 A2 OS B1 B2 ∧ Col A1 A2 A4 ∧ Col B1 B2 B4 ∧
A1 A2 Perp A4 B4) ⟶ Cong A4 B4 A1 B1"
using rah__posidonius_aux assms by blast
hence "Cong A4 B4 A1 B1"
using Cong_cases ‹A1 A2 OS B1 B2› ‹A1 A2 Perp A4 B4›
‹Col A1 A2 A4› ‹Col B1 B2 B4› ‹Cong A1 B1 B2 A2›
‹Per A1 A2 B2› ‹Per B1 A1 A2› l8_2 by blast
hence"Cong A1 B1 A4 B4"
by (simp add: cong_symmetry)
ultimately
have "Cong A3 B3 A4 B4"
using cong_inner_transitivity by blast
}
ultimately
show ?thesis
using posidonius_postulate_def by blast
qed
lemma rah__rectangle_principle:
assumes "postulate_of_right_saccheri_quadrilaterals"
shows "postulate_of_right_lambert_quadrilaterals"
proof -
{
fix A B C D
assume "Lambert A B C D"
hence "Per B C D"
using lam_per__rah assms existential_playfair__rah_1 by blast
}
thus ?thesis
by (simp add: postulate_of_right_lambert_quadrilaterals_def)
qed
lemma rah__similar:
assumes "postulate_of_right_saccheri_quadrilaterals"
shows "postulate_of_existence_of_similar_triangles"
proof -
obtain A B0 C where "¬ (Bet A B0 C ∨ Bet B0 C A ∨ Bet C A B0)"
using lower_dim_ex by blast
hence "¬ Col A B0 C"
by (simp add: Col_def)
then obtain B where "C A Perp B C" and "C A OS B0 B"
using l10_15 by (metis Col_cases col_trivial_3)
hence "¬ Col C A B"
using col124__nos by blast
have "Per A C B"
by (simp add: ‹C A Perp B C› perp_per_1)
obtain B' where "B Midpoint A B'"
using symmetric_point_construction by blast
have "C ≠ A"
using ‹¬ Col A B0 C› col_trivial_3 by blast
have "B ≠ A"
using ‹¬ Col C A B› col_trivial_2 by blast
have "C ≠ B"
using ‹¬ Col C A B› col_trivial_3 by auto
have "B0 ≠ A"
using ‹¬ Col A B0 C› col_trivial_1 by force
have "B' ≠ A"
using ‹B Midpoint A B'› ‹B ≠ A› l7_3 by blast
have "B ≠ B'"
by (metis ‹B Midpoint A B'› ‹B' ≠ A› midpoint_not_midpoint)
have "¬ Col A C B'"
using ‹B Midpoint A B'› ‹B' ≠ A› ‹¬ Col C A B›
col2__eq midpoint_col not_col_permutation_4 by blast
hence "¬ Col B B' C"
by (metis ‹B Midpoint A B'› ‹B ≠ B'› col2__eq
col_permutation_1 midpoint_col)
obtain C' where "Col A C C'" and "A C Perp B' C'"
using ‹¬ Col A C B'› l8_18_existence by blast
have"¬ Col A B C"
using ‹¬ Col C A B› col_permutation_2 by blast
moreover
have "¬ Cong A B A B'"
by (metis midpoint_bet ‹B Midpoint A B'›
‹B ≠ B'› between_cong)
moreover
have "B C ParStrict B' C'"
proof -
have "B C Par B' C'"
proof -
have "Bet A B B'"
by (simp add: ‹B Midpoint A B'› midpoint_bet)
hence "Coplanar A C B B'"
using bet_col ncop__ncols by blast
moreover
have "Coplanar A C B C'"
by (meson ‹Col A C C'› ncop__ncols)
moreover
have "Coplanar A C C B'"
using ncop_distincts by blast
moreover
have "Coplanar A C C C'"
using ncop_distincts by blast
moreover
have "B C Perp A C"
using Perp_perm ‹C A Perp B C› by blast
moreover
have "B' C' Perp A C"
using Perp_perm ‹A C Perp B' C'› by blast
ultimately
show ?thesis
using l12_9 by blast
qed
moreover
have "Col B' C' B'"
using not_col_distincts by blast
moreover
have "¬ Col B C B'"
using ‹¬ Col B B' C› not_col_permutation_5 by blast
ultimately
show ?thesis
using par_not_col_strict by auto
qed
have "¬ Col B C C'"
by (meson ‹B C ParStrict B' C'› not_col_permutation_1
par_strict_not_col_2 par_strict_symmetry)
hence "C ≠ C'"
using col_trivial_2 by auto
have "B' ≠ C'"
using ‹B C ParStrict B' C'› col_trivial_1 col_trivial_3
one_side_not_col124 par_strict_one_side by blast
have "Bet A C C'"
proof -
have "Col C A C'"
by (simp add: ‹Col A C C'› col_permutation_4)
moreover
have "C B TS C' A"
proof -
have "C B TS B' A"
proof -
have "¬ Col B' C B"
using ‹¬ Col B B' C› col_permutation_2 by blast
moreover
have "¬ Col A C B"
using ‹¬ Col A B C› col_permutation_5 by blast
moreover
have "Col B C B"
using not_col_distincts by blast
moreover
have "Bet B' B A"
using ‹B Midpoint A B'› between_symmetry
midpoint_bet by blast
ultimately
show ?thesis
using TS_def by blast
qed
moreover
have "C B OS B' C'"
using Par_strict_perm ‹B C ParStrict B' C'›
pars__os3412 by blast
ultimately
show ?thesis
using l9_8_2 by blast
qed
hence "C B TS A C'"
by (simp add: l9_2)
ultimately
show ?thesis
using col_two_sides_bet by blast
qed
have "A ≠ C'"
using ‹Bet A C C'› ‹C ≠ C'› between_equality_2
between_trivial2 by blast
have "C' B' Perp A C'"
proof -
have "A ≠ C'"
using ‹A ≠ C'› by auto
moreover
have "C' B' Perp A C"
using Perp_perm ‹A C Perp B' C'› by blast
ultimately
show ?thesis
using ‹Col A C C'› perp_col1 by blast
qed
hence "Per B' C' A"
using perp_per_1 by blast
have "A B C CongA A B' C'"
proof -
have "SAMS C A B A B C"
using ‹B ≠ A› ‹C ≠ A› ‹C ≠ B› sams123231 by auto
moreover
have "SAMS C A B A B' C'"
proof -
have "C' A B' CongA C A B"
by (metis midpoint_bet out2__conga
‹B Midpoint A B'› ‹B ≠ A› ‹Bet A C C'›
‹C ≠ A› bet_out)
moreover
have "A B' C' CongA A B' C'"
using ‹B' ≠ A› ‹B' ≠ C'› lea_asym lea_refl by auto
moreover
have "SAMS C' A B' A B' C'"
using ‹A ≠ C'› ‹B' ≠ A› ‹B' ≠ C'› sams123231 by force
ultimately
show ?thesis
using conga2_sams__sams by blast
qed
moreover
have "C A B A B C SumA B C A"
proof -
have "Per B C A"
using Per_perm ‹Per A C B› by blast
moreover
have "hypothesis_of_right_saccheri_quadrilaterals"
using assms existential_playfair__rah_1 by blast
ultimately
show ?thesis
using ‹C ≠ A› ‹C ≠ B› t22_12__rah_2 by presburger
qed
moreover
have "C A B A B' C' SumA B C A"
proof -
have "hypothesis_of_right_saccheri_quadrilaterals"
using assms existential_playfair__rah_1 by auto
hence "C' A B' A B' C' SumA B' C' A"
using ‹A ≠ C'› ‹B' ≠ C'› ‹Per B' C' A›
t22_12__rah_2 by presburger
moreover
have "C' A B' CongA C A B"
by (metis midpoint_bet out2__conga
‹B Midpoint A B'› ‹B ≠ A› ‹Bet A C C'›
‹C ≠ A› bet_out)
moreover
have "A B' C' CongA A B' C'"
using ‹B' ≠ A› ‹B' ≠ C'› conga_refl by auto
moreover
have "B' C' A CongA B C A"
by (metis ‹A C Perp B' C'› ‹A ≠ C'›
‹C A Perp B C› ‹C ≠ A› ‹C ≠ B› ‹C ≠ C'›
‹Col A C C'› col2__eq conga_right_comm l11_16
l8_16_1 perp_per_1)
ultimately
show ?thesis
by (meson conga3_suma__suma)
qed
ultimately
show ?thesis
using sams2_suma2__conga456 by blast
qed
moreover
have "B C A CongA B' C' A"
by (metis ‹A C Perp B' C'› ‹A ≠ C'›
‹C A Perp B C› ‹C ≠ A› ‹C ≠ B› ‹C ≠ C'›
‹Col A C C'› conga_left_comm l11_16 l6_16_1
l8_16_1 perp_per_1)
moreover
have "C A B CongA C' A B'"
proof -
have "A Out C' C"
by (simp add: ‹Bet A C C'› ‹C ≠ A› bet_out l6_6)
moreover
have "A Out B' B"
by (simp add: ‹B Midpoint A B'› ‹B' ≠ A› l7_2 midpoint_out_1)
ultimately
show ?thesis
by (simp add: out2__conga)
qed
ultimately
show ?thesis
using postulate_of_existence_of_similar_triangles_def by blast
qed
lemma rah__thales_postulate:
assumes "postulate_of_right_saccheri_quadrilaterals"
shows "thales_postulate"
proof -
{
fix A B C M
assume "M Midpoint A B" and "Cong M A M C"
have "Per A C B"
proof (cases "Col A B C")
case True
show ?thesis
proof (cases "A = B")
case True
thus ?thesis
using ‹Cong M A M C› ‹M Midpoint A B›
cong_reverse_identity l8_20_2 l8_5 by blast
next
case False
hence "A ≠ B"
by auto
moreover
have "Col A M B"
using ‹M Midpoint A B› midpoint_col
not_col_permutation_4 by blast
hence "Col A M C"
by (meson True calculation col_trivial_3 colx)
ultimately
show ?thesis
by (metis ‹Cong M A M C› ‹M Midpoint A B›
cong_col_mid cong_left_commutativity l8_2 l8_5
symmetric_point_uniqueness)
qed
next
case False
thus ?thesis
using t22_17__rah ‹Cong M A M C› ‹M Midpoint A B›
assms existential_playfair__rah_1 by blast
qed
}
thus ?thesis
using thales_postulate_def by blast
qed
lemma rah__triangle:
assumes "postulate_of_right_saccheri_quadrilaterals"
shows "triangle_postulate"
proof -
{
fix A B C D E F
assume "A B C TriSumA D E F"
hence "Bet D E F"
using assms existential_playfair__rah_1 t22_14__bet by blast
}
thus ?thesis
using triangle_postulate_def by blast
qed
lemma rectangle_principle__rectangle_existence:
assumes "postulate_of_right_lambert_quadrilaterals"
shows "postulate_of_existence_of_a_right_lambert_quadrilateral"
proof -
obtain A B C D where "Saccheri A B C D"
using ex_saccheri by blast
moreover
obtain M where "M Midpoint B C"
using midpoint_existence by blast
moreover
obtain N where "N Midpoint A D"
using midpoint_existence by blast
ultimately
have "Lambert N M B A"
by (meson mid2_sac__lam6521)
moreover
have "Per M B A"
using postulate_of_right_lambert_quadrilaterals_def
assms ‹Lambert N M B A› by blast
ultimately
show ?thesis
using postulate_of_existence_of_a_right_lambert_quadrilateral_def
by blast
qed
lemma similar__rah_aux:
assumes "¬ Col A B C" and
"A B C CongA D E F" and
"B C A CongA E F D" and
"C A B CongA F D E" and
"B C A LeA A B C" and
"D E Lt A B"
shows "postulate_of_right_saccheri_quadrilaterals"
proof -
have "A ≠ B"
using assms(1) col_trivial_1 by auto
have "C ≠ B"
using assms(1) col_trivial_2 by blast
have "A ≠ C"
using assms(1) col_trivial_3 by blast
have "F ≠ E"
using assms(2) conga_distinct by presburger
have "D ≠ E"
using assms(4) conga_diff56 by blast
then obtain G where "A Out B G" and "Cong A G D E"
using segment_construction_3 ‹A ≠ B› by blast
have "D ≠ F"
using assms(4) conga_distinct by blast
then obtain H where "A Out C H" and "Cong A H D F"
using segment_construction_3 ‹A ≠ C› by blast
have "A G Lt A B"
by (meson ‹Cong A G D E› assms(6) cong2_lt__lt
cong_reflexivity cong_symmetry)
have "Bet A G B"
proof -
have "A Out G B"
by (simp add: ‹A Out B G› l6_6)
moreover
have "A G Le A B"
by (simp add: ‹A G Lt A B› lt__le)
ultimately
show ?thesis
by (meson l6_13_1)
qed
have "B ≠ G"
using ‹A G Lt A B› not_and_lt by blast
have "C A B CongA H A G"
by (meson Out_cases ‹A Out B G› ‹A Out C H› out2__conga)
have "D F E CongA A H G ∧ D E F CongA A G H"
proof -
have "F D E CongA H A G"
by (meson ‹C A B CongA H A G› assms(4)
not_conga not_conga_sym)
moreover
have "Cong D F A H"
by (meson ‹Cong A H D F› not_cong_3412)
moreover
have "Cong D E A G"
by (simp add: ‹Cong A G D E› cong_symmetry)
ultimately
show ?thesis
using ‹F ≠ E› l11_49 by blast
qed
have "D E F CongA A G H"
using ‹D F E CongA A H G ∧ D E F CongA A G H› by auto
hence "A B C CongA A G H"
using assms(2) conga_trans by blast
have "E F D CongA G H A"
by (simp add: ‹D F E CongA A H G ∧ D E F CongA A G H›
conga_comm)
hence "B C A CongA G H A"
using assms(3) conga_trans by blast
have "¬ Col A G H"
by (meson Out_cases ‹A Out B G› ‹A Out C H› assms(1)
col_out2_col not_col_permutation_2)
have "¬ Col B G H"
using ‹B ≠ G› ‹Bet A G B› ‹¬ Col A G H› bet_col
col2__eq col_permutation_3 by blast
have "G H ParStrict B C"
proof -
have "B C Par G H"
proof -
have "A B OS C H"
by (simp add: ‹A Out C H› assms(1) out_one_side)
moreover
have "C B A CongA H G A"
by (simp add: ‹A B C CongA A G H› conga_comm)
ultimately
show ?thesis
using ‹A Out B G› l12_22_b by auto
qed
hence "G H Par B C"
using par_symmetry by blast
moreover
have "Col B C B"
by (simp add: col_trivial_3)
moreover
have "¬ Col G H B"
by (simp add: ‹¬ Col B G H› not_col_permutation_1)
ultimately
show ?thesis
using par_not_col_strict by blast
qed
have "¬ Col G H C"
by (meson ‹G H ParStrict B C› l12_6 one_side_not_col124)
have "¬ Col B C G"
by (meson ‹A Out B G› ‹B ≠ G› assms(1) col_trivial_2
colx not_col_permutation_5 out_col)
have "¬ Col H B C"
by (metis ‹A Out C H› ‹¬ Col G H C› assms(1)
col_trivial_3 colx not_col_permutation_2 out_col)
have "H ≠ C"
using ‹¬ Col H B C› col_trivial_3 by auto
have "G ≠ C"
using ‹¬ Col B C G› col_trivial_2 by auto
have "H ≠ G"
using ‹¬ Col A G H› col_trivial_2 by blast
have "A ≠ G"
using ‹¬ Col A G H› col_trivial_1 by auto
have "H ≠ A"
using ‹¬ Col A G H› col_trivial_3 by blast
have "C Out H A"
proof -
have "Col C H A"
using ‹A Out C H› col_permutation_1 out_col by blast
moreover
have "B C OS H A"
proof -
have "B C OS H G"
using ‹G H ParStrict B C› one_side_symmetry
pars__os3412 by blast
moreover
have "B C OS G A"
using ‹B ≠ G› ‹Bet A G B› ‹¬ Col B C G›
bet_out_1 out_one_side by presburger
ultimately
show ?thesis
using one_side_transitivity by blast
qed
hence "C B OS H A"
by (simp add: invert_one_side)
ultimately
show ?thesis
using col_one_side_out by force
qed
hence "Bet A H C"
by (meson ‹A Out C H› between_symmetry out2__bet)
have "SAMS B G H H C B"
proof -
have "Bet B G A"
using Bet_cases ‹Bet A G B› by blast
moreover
have "H C B LeA H G A"
proof -
have "B C A LeA A B C"
by (simp add: assms(5))
moreover
have "B C A CongA H C B"
by (metis CongA_def ‹B C A CongA G H A›
‹Bet A H C› ‹H ≠ C› bet2__out bet_out_1
conga_left_comm out2__conga)
moreover
have "A B C CongA H G A"
using ‹A B C CongA A G H› conga_right_comm by blast
ultimately
show ?thesis
using l11_30 by blast
qed
ultimately
show ?thesis
using ‹A ≠ G› ‹B ≠ G› sams_chara by blast
qed
have "A G H CongA G B C"
by (metis out2__conga ‹A B C CongA A G H›
‹B ≠ G› ‹Bet A G B› ‹C ≠ B›
bet_out_1 conga_sym_equiv
conga_trans out_trivial)
have "G H A CongA B C H"
by (metis Out_def ‹B C A CongA G H A› ‹C Out H A›
‹C ≠ B› not_bet_distincts not_conga
not_conga_sym out2__conga)
have "SAMS B G H C B G"
proof -
have "B G H CongA B G H"
using ‹B ≠ G› ‹H ≠ G› conga_refl by blast
moreover
have "H G A CongA C B G"
by (simp add: ‹A G H CongA G B C› conga_comm)
moreover
have "SAMS B G H H G A"
by (metis ‹A ≠ G› ‹B ≠ G› ‹Bet A G B› ‹H ≠ G›
bet__sams between_symmetry)
ultimately
show ?thesis
by (meson conga2_sams__sams)
qed
have "SAMS C H G B C H"
proof -
have "C H G CongA C H G"
using ‹H ≠ C› ‹H ≠ G› conga_refl by auto
moreover
have "SAMS C H G G H A"
using ‹Bet A H C› ‹H ≠ A› ‹H ≠ C› ‹H ≠ G›
bet__sams between_symmetry by presburger
ultimately
show ?thesis
by (meson ‹G H A CongA B C H› conga2_sams__sams)
qed
obtain I J K where "B C G C G B SumA I J K"
using ex_suma ‹B ≠ G› ‹C ≠ B› ‹G ≠ C› by presburger
have "C ≠ H"
using ‹H ≠ C› by auto
then obtain L M N where "H C G C G H SumA L M N"
using ex_suma ‹H ≠ G› ‹G ≠ C› by presburger
have "L ≠ M"
using ‹H C G C G H SumA L M N› suma_distincts by presburger
have "N ≠ M"
using ‹H C G C G H SumA L M N› suma_distincts by blast
have "I ≠ J"
using ‹B C G C G B SumA I J K› suma_distincts by blast
have "J ≠ K"
using ‹B C G C G B SumA I J K› suma_distincts by blast
have "I ≠ K"
by (metis Par_strict_cases par_strict_not_col_4
‹B C G C G B SumA I J K› ‹G H ParStrict B C›
col_trivial_3 ncol_suma__ncol)
have "B ≠ C"
using ‹C ≠ B› by auto
have "G ≠ B"
using ‹B ≠ G› by auto
then obtain O0 P Q where "I J K G B C SumA O0 P Q"
using ex_suma ‹I ≠ J› ‹J ≠ K› ‹B ≠ C› by blast
have "G ≠ H"
using ‹H ≠ G› by auto
have "M ≠ N"
using ‹N ≠ M› by auto
then obtain R S T where "L M N G H C SumA R S T"
using ex_suma ‹L ≠ M› ‹M ≠ N› ‹G ≠ H› ‹H ≠ C› by blast
obtain U V W where "I J K L M N SumA U V W"
using ex_suma ‹I ≠ J› ‹J ≠ K› ‹L ≠ M› ‹M ≠ N› by blast
have "R ≠ S"
using ‹L M N G H C SumA R S T› suma_distincts by blast
have "S ≠ T"
using ‹L M N G H C SumA R S T› suma_distincts by blast
have "O0 ≠ P"
using ‹I J K G B C SumA O0 P Q› suma_distincts by blast
have "Q ≠ P"
using ‹I J K G B C SumA O0 P Q› suma_distincts by blast
have "SAMS I J K L M N ∧ H G B B C H SumA U V W"
proof -
have "G C TS B H"
by (metis Col_cases ‹Bet A G B› ‹C Out H A›
‹G H ParStrict B C› ‹¬ Col G H C› bet_out l12_6
l9_19_R2 l9_9 out_col par_one_or_two_sides
two_sides_cases)
have "SAMS H G B B C G"
proof -
have "SAMS H G B B C H"
by (simp add: ‹SAMS B G H H C B› sams_comm)
moreover
have "H G B LeA H G B"
using ‹G ≠ B› ‹H ≠ G› lea_refl by force
moreover
have "G InAngle B C H"
by (meson Par_strict_cases ‹G C TS B H›
‹G H ParStrict B C› invert_two_sides
l12_6 os_ts__inangle)
hence "B C G LeA B C H"
by (simp add: inangle__lea)
ultimately
show ?thesis
by (meson sams_lea2__sams)
qed
have "C ≠ G"
using ‹G ≠ C› by auto
then obtain X Y Z where "B C G H G B SumA X Y Z"
using ex_suma ‹B ≠ C› ‹H ≠ G› ‹G ≠ B› by blast
have "B G C C G H SumA H G B"
by (meson ‹G C TS B H› suma_right_comm ts__suma_1)
have "B G OS C H"
by (meson Col_perm ‹A Out B G› ‹A Out C H›
‹¬ Col B C G› one_side_reflexivity one_side_symmetry
os_out_os out_col)
hence "SAMS B G C C G H"
by (simp add: ‹G C TS B H› os_ts__sams)
have "SAMS I J K C G H"
proof -
have "SAMS B C G C G B"
using ‹C ≠ B› ‹G ≠ B› ‹G ≠ C› sams123231 by auto
moreover
have "SAMS C G B C G H"
by (simp add: ‹SAMS B G C C G H› sams_left_comm)
moreover
have "C G B C G H SumA H G B"
using ‹B G C C G H SumA H G B› suma_left_comm by blast
moreover
have "SAMS B C G H G B"
by (simp add: ‹SAMS H G B B C G› sams_sym)
ultimately
show ?thesis
using ‹B C G C G B SumA I J K› sams_assoc by blast
qed
have "I J K C G H SumA X Y Z"
proof -
have "SAMS B C G C G B"
using ‹C ≠ B› ‹G ≠ B› ‹G ≠ C› sams123231 by auto
moreover
have "SAMS C G B C G H"
by (simp add: ‹SAMS B G C C G H› sams_left_comm)
moreover
have "C G B C G H SumA H G B"
using ‹B G C C G H SumA H G B› suma_left_comm by blast
ultimately
show ?thesis
using ‹B C G C G B SumA I J K› ‹B C G H G B SumA X Y Z›
suma_assoc by blast
qed
have "SAMS B C G H C G"
by (meson pars__os3412 ‹G C TS B H› ‹G H ParStrict B C›
invert_two_sides os_ts__sams sams_right_comm)
have "B C G H C G SumA H C B"
by (meson ‹G C TS B H› suma_middle_comm
suma_right_comm ts__suma)
have "SAMS I J K L M N"
proof -
have "SAMS X Y Z H C G"
proof -
have "H G B B C G SumA X Y Z"
by (simp add: ‹B C G H G B SumA X Y Z› suma_sym)
moreover
have "SAMS H G B H C B"
by (simp add: ‹SAMS B G H H C B› sams_left_comm)
ultimately
show ?thesis
by (meson ‹SAMS H G B B C G› ‹SAMS B C G H C G›
‹B C G H C G SumA H C B› sams_assoc)
qed
have "SAMS C G H H C G"
by (simp add: ‹G ≠ C› ‹H ≠ C› ‹H ≠ G› sams123231 sams_comm)
moreover
have "C G H H C G SumA L M N"
by (meson ‹H C G C G H SumA L M N› suma_sym)
ultimately
show ?thesis
using ‹SAMS I J K C G H› ‹I J K C G H SumA X Y Z›
‹SAMS X Y Z H C G› sams_assoc_1 by blast
qed
moreover
have "H G B B C H SumA U V W"
proof -
have "X Y Z H C G SumA U V W"
proof -
have "SAMS C G H H C G"
by (simp add: ‹G ≠ C› ‹H ≠ C› ‹H ≠ G›
sams123231 sams_comm)
moreover
have "C G H H C G SumA L M N"
by (simp add: ‹H C G C G H SumA L M N› suma_sym)
ultimately
show ?thesis
using ‹SAMS I J K C G H› ‹I J K C G H SumA X Y Z›
‹I J K L M N SumA U V W› suma_assoc by blast
qed
moreover
have "H G B B C G SumA X Y Z"
by (simp add: ‹B C G H G B SumA X Y Z› suma_sym)
moreover
have "B C G H C G SumA B C H"
by (simp add: ‹B C G H C G SumA H C B› suma_right_comm)
ultimately
show ?thesis
using ‹SAMS H G B B C G› ‹SAMS B C G H C G›
suma_assoc by blast
qed
ultimately
show ?thesis by blast
qed
hence "SAMS I J K L M N"
by simp
have "H G B B C H SumA U V W"
using ‹SAMS I J K L M N ∧ H G B B C H SumA U V W› by simp
{
fix A' B' C' D'
assume "Saccheri A' B' C' D'"
{
assume "hypothesis_of_acute_saccheri_quadrilaterals"
have "U V W LtA U V W"
proof -
have "¬ Col C G B"
using Col_cases ‹¬ Col B C G› by blast
hence "SAMS I J K G B C ∧ ¬ Bet O0 P Q"
using ‹B C G C G B SumA I J K› ‹I J K G B C SumA O0 P Q›
t22_14__sams_nbet
‹hypothesis_of_acute_saccheri_quadrilaterals› by blast
have "I J K LtA H G B"
proof -
have "G B C LeA G B C"
by (simp add: ‹C ≠ B› ‹G ≠ B› lea_refl)
moreover
have "O0 P Q LtA A G B"
proof -
have "O0 P Q LeA A G B"
using ‹A ≠ G› ‹Bet A G B› ‹G ≠ B› ‹O0 ≠ P›
‹Q ≠ P› l11_31_2 by force
moreover
{
assume "O0 P Q CongA A G B"
hence "Bet O0 P Q"
using ‹Bet A G B› bet_lea__bet conga__lea456123 by blast
hence False
using ‹SAMS I J K G B C ∧ ¬ Bet O0 P Q› by blast
}
hence "¬ O0 P Q CongA A G B"
by auto
ultimately
show ?thesis
by (simp add: LtA_def)
qed
moreover
have "SAMS I J K G B C"
by (simp add: ‹SAMS I J K G B C ∧ ¬ Bet O0 P Q›)
moreover
have "I J K G B C SumA O0 P Q"
by (simp add: ‹I J K G B C SumA O0 P Q›)
moreover
have "H G B G B C SumA A G B"
proof -
have "B G H H G A SumA A G B"
by (metis ‹A Out B G› ‹Bet A G B› ‹G ≠ B›
‹H ≠ G› bet__suma between_symmetry l6_3_1
suma_right_comm)
moreover
have "B G H CongA H G B"
using ‹G ≠ B› ‹H ≠ G› conga_pseudo_refl by auto
moreover
have "H G A CongA G B C"
by (simp add: ‹A G H CongA G B C› conga_left_comm)
moreover
have "A G B CongA A G B"
using ‹A ≠ G› ‹G ≠ B› conga_refl by auto
ultimately
show ?thesis
by (meson conga3_suma__suma)
qed
ultimately
show ?thesis
by (meson sams_lea_lta789_suma2__lta123)
qed
moreover
have "¬ Col C G H"
by (meson Col_perm ‹¬ Col G H C›)
hence "SAMS L M N G H C ∧ ¬ Bet R S T"
using ‹H C G C G H SumA L M N› ‹L M N G H C SumA R S T›
t22_14__sams_nbet ‹hypothesis_of_acute_saccheri_quadrilaterals›
by blast
have "L M N LtA B C H"
proof -
have "G H C LeA G H C"
using ‹H ≠ C› ‹H ≠ G› lea_refl by auto
moreover
have "R S T LtA A H C"
proof -
have "R S T LeA A H C"
using ‹Bet A H C› ‹H ≠ A› ‹H ≠ C› ‹R ≠ S›
‹S ≠ T› l11_31_2 by auto
moreover
{
assume "R S T CongA A H C"
have "Bet R S T"
proof -
have "Bet A H C"
by (simp add: ‹Bet A H C›)
moreover
have "A H C CongA R S T"
using ‹R S T CongA A H C› conga_sym_equiv by blast
moreover
have "B C H G H C SumA A H C"
proof -
have "A H G G H C SumA A H C"
using ‹H ≠ A› ‹H ≠ C› ‹H ≠ G›
bet__suma calculation(1) by force
moreover
have "A H G CongA B C H"
by (simp add: ‹G H A CongA B C H› conga_left_comm)
moreover
have "G H C CongA G H C"
using ‹H ≠ C› ‹H ≠ G› conga_refl by auto
moreover
have "A H C CongA A H C"
using ‹H ≠ A› ‹H ≠ C› conga_refl by auto
ultimately
show ?thesis
by (meson conga3_suma__suma)
qed
ultimately
show ?thesis
using bet_conga__bet by blast
qed
hence False
using ‹SAMS L M N G H C ∧ ¬ Bet R S T› by auto
}
hence "¬ R S T CongA A H C"
by auto
ultimately
show ?thesis
using LtA_def by blast
qed
moreover
have "SAMS L M N G H C"
by (simp add: ‹SAMS L M N G H C ∧ ¬ Bet R S T›)
moreover
have "L M N G H C SumA R S T"
using ‹L M N G H C SumA R S T› by auto
moreover
have "B C H G H C SumA A H C"
proof -
have "A H G G H C SumA A H C"
using ‹H ≠ A› ‹H ≠ C› ‹H ≠ G›
bet__suma calculation(1) ‹Bet A H C› by auto
moreover
have "A H G CongA B C H"
by (simp add: ‹G H A CongA B C H› conga_left_comm)
moreover
have "G H C CongA G H C"
using ‹H ≠ C› ‹H ≠ G› conga_refl by auto
moreover
have "A H C CongA A H C"
using ‹H ≠ A› ‹H ≠ C› conga_refl by auto
ultimately
show ?thesis
by (meson conga3_suma__suma)
qed
ultimately
show ?thesis
by (meson sams_lea_lta789_suma2__lta123)
qed
moreover
have "SAMS H G B B C H"
by (simp add: ‹SAMS B G H H C B› sams_comm)
ultimately
show ?thesis
by (meson ‹I J K L M N SumA U V W›
‹H G B B C H SumA U V W› lta__lea
sams_lea_lta456_suma2__lta)
qed
hence False
by (simp add: nlta)
hence "Per A' B' C'"
by simp
}
moreover
{
assume "hypothesis_of_right_saccheri_quadrilaterals"
hence "Per A' B' C'"
using ‹Saccheri A' B' C' D'›
hypothesis_of_right_saccheri_quadrilaterals_def
by blast
}
moreover
{
assume "hypothesis_of_obtuse_saccheri_quadrilaterals"
have "U V W LtA U V W"
proof -
have "H G B LtA I J K"
proof -
{
assume "I J K LeA H G B"
have False
proof -
have "¬ Col C G B"
using ‹¬ Col B C G› col_permutation_2 by blast
moreover
have "B C G C G B SumA I J K"
by (simp add: ‹B C G C G B SumA I J K›)
moreover
have "SAMS I J K G B C"
proof -
have "SAMS H G B G B C"
by (simp add: ‹SAMS B G H C B G› sams_comm)
moreover
have "G B C LeA G B C"
using ‹C ≠ B› ‹G ≠ B› lea_refl by blast
ultimately
show ?thesis
using ‹I J K LeA H G B› sams_lea2__sams by blast
qed
ultimately show ?thesis
using t22_14__nsams
‹HypothesisObtuseSaccheriQuadrilaterals›
by blast
qed
}
hence "¬ I J K LeA H G B"
by auto
thus ?thesis
using ‹G ≠ B› ‹H ≠ G› ‹I ≠ J› ‹J ≠ K› nlea__lta by blast
qed
moreover
{
assume "L M N LeA B C H"
have False
proof -
have "¬ Col C G H"
using ‹¬ Col G H C› col_permutation_1 by blast
moreover
have "H C G C G H SumA L M N"
by (simp add: ‹H C G C G H SumA L M N›)
moreover
have "SAMS L M N G H C"
proof -
have "SAMS B C H G H C"
by (meson ‹SAMS C H G B C H› sams_right_comm sams_sym)
moreover
have "G H C LeA G H C"
using ‹H ≠ C› ‹H ≠ G› lea_refl by auto
ultimately
show ?thesis
using ‹L M N LeA B C H› sams_lea2__sams by blast
qed
ultimately
show ?thesis
using ‹HypothesisObtuseSaccheriQuadrilaterals›
t22_14__nsams by blast
qed
}
hence "¬ L M N LeA B C H"
by auto
hence "B C H LtA L M N"
using ‹C ≠ B› ‹H ≠ C› ‹L ≠ M› ‹N ≠ M› nlta__lea by blast
ultimately
show ?thesis
by (meson ‹SAMS I J K L M N› ‹H G B B C H SumA U V W›
‹I J K L M N SumA U V W› lta__lea
sams_lea_lta456_suma2__lta)
qed
hence "Per A' B' C'"
by (simp add: nlta)
}
ultimately
have "Per A' B' C'"
using saccheri_s_three_hypotheses by blast
}
thus ?thesis
using postulate_of_right_saccheri_quadrilaterals_def by blast
qed
lemma similar__rah:
assumes "postulate_of_existence_of_similar_triangles"
shows "postulate_of_right_saccheri_quadrilaterals"
proof -
obtain A B C D E F where
"¬ Col A B C" and
"¬ Cong A B D E" and
"A B C CongA D E F" and
"B C A CongA E F D" and
"C A B CongA F D E"
using assms postulate_of_existence_of_similar_triangles_def by blast
have "A ≠ B"
using ‹¬ Col A B C› col_trivial_1 by blast
have "C ≠ B"
using ‹¬ Col A B C› col_trivial_2 by force
have "A ≠ C"
using ‹¬ Col A B C› col_trivial_3 by blast
have "D ≠ F"
using ‹B C A CongA E F D› conga_diff56 by blast
have "E ≠ F"
using ‹A B C CongA D E F› conga_diff56 by blast
have "D ≠ E"
using ‹C A B CongA F D E› conga_distinct by blast
{
assume "B C A LeA A B C"
{
assume "D E Le A B"
hence "D E Lt A B"
using ‹¬ Cong A B D E› le_anti_symmetry nle__lt by blast
hence "postulate_of_right_saccheri_quadrilaterals"
using ‹¬ Col A B C› ‹A B C CongA D E F›
‹B C A CongA E F D› ‹C A B CongA F D E› ‹B C A LeA A B C›
similar__rah_aux by blast
}
moreover
{
assume "A B Le D E"
hence "A B Lt D E"
by (simp add: Lt_def ‹¬ Cong A B D E›)
moreover
have "¬ Col D E F"
using ‹¬ Col A B C› ‹A B C CongA D E F› ncol_conga_ncol by blast
moreover
have "E F D LeA D E F"
using ‹B C A LeA A B C› ‹B C A CongA E F D›
‹A B C CongA D E F› l11_30 by blast
moreover
have "D E F CongA A B C"
using ‹A B C CongA D E F› conga_sym by blast
moreover
have "E F D CongA B C A"
by (simp add: ‹B C A CongA E F D› conga_sym)
moreover
have "F D E CongA C A B"
by (simp add: ‹C A B CongA F D E› conga_sym)
ultimately
have "postulate_of_right_saccheri_quadrilaterals"
using similar__rah_aux by blast
}
ultimately
have "postulate_of_right_saccheri_quadrilaterals"
using local.le_cases by blast
}
moreover
{
assume "A B C LeA B C A"
{
assume "D F Le A C"
{
assume "Cong D F A C"
have False
proof -
have "¬ Col A C B"
using Col_cases ‹¬ Col A B C› by blast
moreover
have "A C B CongA D F E"
using ‹B C A CongA E F D› conga_comm by blast
moreover
have "Cong A C D F"
using Cong_cases ‹Cong D F A C› by blast
ultimately
show ?thesis
using ‹C A B CongA F D E› ‹¬ Cong A B D E›
l11_50_1 by blast
qed
}
hence "D F Lt A C"
using Lt_def ‹D F Le A C› by blast
moreover
have "¬ Col A C B"
using Col_cases ‹¬ Col A B C› by blast
moreover
have "A C B CongA D F E"
by (simp add: ‹B C A CongA E F D› conga_comm)
moreover
have "C B A CongA F E D"
by (simp add: ‹A B C CongA D E F› conga_comm)
moreover
have "B A C CongA E D F"
by (meson ‹C A B CongA F D E› conga_comm)
moreover
have "C B A LeA A C B"
by (simp add: ‹A B C LeA B C A› lea_comm)
ultimately
have "postulate_of_right_saccheri_quadrilaterals"
using similar__rah_aux by blast
}
moreover
{
assume "A C Le D F"
have "¬ Col D F E"
proof -
have "¬ Col A C B"
using Col_cases ‹¬ Col A B C› by blast
moreover
have "A C B CongA D F E"
using ‹B C A CongA E F D› conga_comm by blast
ultimately
show ?thesis
using ncol_conga_ncol by blast
qed
moreover
have "D F E CongA A C B"
by (meson ‹B C A CongA E F D› conga_comm conga_sym)
moreover
have "F E D CongA C B A"
by (meson ‹A B C CongA D E F› conga_comm conga_sym)
moreover
have "E D F CongA B A C"
by (meson ‹C A B CongA F D E› conga_comm conga_sym)
moreover
have "F E D LeA D F E"
proof -
have "A B C LeA B C A"
by (simp add: ‹A B C LeA B C A›)
moreover
have "A B C CongA F E D"
by (simp add: ‹A B C CongA D E F› conga_right_comm)
moreover
have "B C A CongA D F E"
by (simp add: ‹B C A CongA E F D› conga_right_comm)
ultimately
show ?thesis
using l11_30 by blast
qed
moreover
{
assume "Cong A C D F"
have "¬ Col A C B"
using Col_cases ‹¬ Col A B C› by auto
moreover
have "A C B CongA D F E"
by (simp add: ‹B C A CongA E F D› conga_comm)
ultimately
have False
using ‹Cong A C D F› ‹¬ Cong A B D E›
‹C A B CongA F D E› l11_50_1 by blast
}
hence "A C Lt D F"
using Lt_def ‹A C Le D F› by blast
ultimately
have "postulate_of_right_saccheri_quadrilaterals"
using similar__rah_aux by blast
}
ultimately
have "postulate_of_right_saccheri_quadrilaterals"
using local.le_cases by blast
}
ultimately
show ?thesis
by (metis ‹A ≠ B› ‹A ≠ C› ‹C ≠ B› lea_total)
qed
lemma impossible_case_5:
shows "∀ P Q R S U I.
¬ (BetS Q U R ∧ ¬ Col P Q S ∧
¬ Col P R U ∧ P R Par Q S ∧
Bet S Q I ∧ Bet U I P)"
proof -
{
fix P Q R S U I
assume 1: "BetS Q U R" and
2: "¬ Col P Q S" and
3: "¬ Col P R U" and
4: "P R Par Q S" and
5: "Bet S Q I" and
6: "Bet U I P"
have "Bet Q U R"
by (simp add: "1" BetSEq)
have "Q ≠ U"
using "1" BetSEq by blast
have "Q ≠ R"
using "1" BetSEq by blast
have "R ≠ U"
using "1" BetSEq by blast
have "Q S Par P R"
by (simp add: "4" par_symmetry)
have "Q S ParStrict P R"
using "2" "4" Par_def par_strict_symmetry by blast
have "Q S OS R U"
by (metis "4" ‹Bet Q U R› ‹Q S ParStrict P R›
‹Q ≠ U› bet2__out col_trivial_2 invert_one_side
l5_1 l9_19_R2 not_strict_par par_right_comm
par_strict_not_col_3)
have False
proof -
have "Q S TS P U"
by (metis "2" "5" "6" NCol_perm ‹Q S OS R U›
bet_col between_symmetry col124__nos l9_18)
moreover
have "Q S OS P U"
by (metis ‹Bet Q U R› ‹Q S ParStrict P R›
‹Q ≠ R› ‹Q ≠ U› bet2__out l12_6 l5_1
out_out_one_side)
ultimately
show ?thesis
using l9_9_bis by blast
qed
}
thus ?thesis by blast
qed
lemma impossible_case_6:
shows "∀ P Q R S U I.
¬ (BetS Q U R ∧ ¬ Col P Q S ∧
P S Par Q R ∧ Bet S Q I ∧ Bet I P U)"
proof -
{
fix P Q R S U I
assume 1: "BetS Q U R" and
2: "¬ Col P Q S" and
3: "P S Par Q R" and
4: "Bet S Q I" and
5: "Bet I P U"
have "Bet Q U R"
by (simp add: "1" BetSEq)
have "Q ≠ U"
using "1" BetSEq by blast
have "Q ≠ R"
using "1" BetSEq by blast
have "R ≠ U"
using "1" BetSEq by blast
have "Bet U P I"
using "5" Bet_cases by blast
then obtain J where "Bet Q J U" and "Bet P J S"
using "4" inner_pasch by blast
have "P S ParStrict Q U"
proof -
have "P S ParStrict Q R"
using "2" "3" Col_cases col_trivial_3 par_not_col_strict by blast
moreover
have "Col Q R U"
by (simp add: ‹Bet Q U R› bet_col col_permutation_5)
ultimately
show ?thesis
by (meson ‹Q ≠ U› par_strict_col_par_strict)
qed
hence False
using "4" "5" impossible_case_1 par_strict_right_comm by blast
}
thus ?thesis
by blast
qed
lemma impossible_case_7:
shows "∀ P Q R S U I.
¬ (BetS Q U R ∧ ¬ Col P Q S ∧
¬ Col P R U ∧ P R Par Q S ∧
P S Par Q R ∧ Col P U I ∧ Bet Q I S)"
proof -
{
fix P Q R S U I
assume 1:"BetS Q U R" and
2: "¬ Col P Q S" and
3: "¬ Col P R U" and
4: "P R Par Q S" and
5: "P S Par Q R" and
6: "Col P U I" and
7: "Bet Q I S"
have "Bet Q U R"
by (simp add: "1" BetSEq)
have "Q ≠ U"
using "1" BetSEq by blast
have "Q ≠ R"
using "1" BetSEq by blast
have "R ≠ U"
using "1" BetSEq by blast
have "Bet R U Q"
using Bet_cases ‹Bet Q U R› by auto
have "P U OS Q S"
proof -
have "P U TS Q R"
by (metis "3" ‹Bet Q U R› ‹Q ≠ U› bet_col
col_permutation_2 col_transitivity_1
col_trivial_2 l9_18_R2)
moreover
have "P U TS S R"
proof -
have "P S OS R Q"
proof -
have "P S Par R Q"
by (simp add: "5" par_right_comm)
moreover
have "Col R Q Q"
by (simp add: col_trivial_2)
moreover
have "¬ Col P S Q"
by (simp add: "2" not_col_permutation_5)
ultimately
show ?thesis
using par_not_col_strict par_strict_symmetry
pars__os3412 by blast
qed
hence "P S OS U R"
using ‹Bet R U Q› l9_17 one_side_symmetry by blast
moreover
have "P R OS U S"
proof -
have "P R OS U Q"
by (metis "3" ‹Bet R U Q› bet_out col_trivial_2 l9_19_R2)
moreover
have "P R OS Q S"
by (meson "2" "4" col_trivial_3
not_col_permutation_1 par_not_col_strict
par_symmetry pars__os3412)
ultimately
show ?thesis
using one_side_transitivity by blast
qed
ultimately
show ?thesis
by (simp add: l9_31)
qed
ultimately
show ?thesis
using l9_8_1 by blast
qed
hence "P U OS Q I"
using "7" l9_17 by blast
hence False
using "6" one_side_not_col124 by auto
}
thus ?thesis by blast
qed
lemma impossible_case_8:
shows "∀ P Q R S U I.
¬ (BetS Q U R ∧ ¬ Col P Q S ∧
P R Par Q S ∧ P S Par Q R ∧
Col P U I ∧ Bet I S Q)"
proof -
{
fix P Q R S U I
assume 1: "BetS Q U R" and
2: "¬ Col P Q S" and
3: "P R Par Q S" and
4: "P S Par Q R" and
5: "Col P U I" and
6: "Bet I S Q"
have "Bet Q U R"
by (simp add: "1" BetSEq)
have "Q ≠ U"
using "1" BetSEq by blast
have "Q ≠ R"
using "1" BetSEq by blast
have "R ≠ U"
using "1" BetSEq by blast
have "P S ParStrict Q U"
proof -
have "P S ParStrict Q R"
using "2" "4" Col_cases col_trivial_3
par_not_col_strict by blast
moreover
have "Col Q R U"
using Col_perm ‹Bet Q U R› bet_col by blast
ultimately
show ?thesis
by (meson ‹Q ≠ U› par_strict_col_par_strict)
qed
have "Bet Q S I"
using "6" Bet_cases by auto
{
assume "Bet P U I"
hence False
by (meson Par_strict_cases ‹Bet Q S I›
‹P S ParStrict Q U› between_symmetry impossible_case_1)
}
moreover
{
assume "Bet U I P"
then obtain J where "Bet U J Q" and "Bet P S J"
using ‹Bet Q S I› outer_pasch by blast
hence False
by (metis ‹Bet Q U R› ‹P S ParStrict Q U›
bet_col bet_col1 between_symmetry l12_6 l5_3
l9_19 not_bet_and_out)
}
moreover
{
assume "Bet I P U"
then obtain J where "Bet Q J I ∧ Bet R P J"
using ‹Bet Q U R› outer_pasch by blast
have "P R ParStrict Q I"
using "2" "3" Par_def ‹Bet Q S I› bet_col
bet_neq32__neq col2__eq
par_strict_col2_par_strict by blast
hence False
by (meson "3" ‹Bet Q J I ∧ Bet R P J›
‹Bet Q S I› bet_col bet_col1 inter_uniqueness_not_par
par_left_comm par_strict_comm par_strict_not_col_4)
}
ultimately
have False
using "5" Col_def by blast
}
thus ?thesis
by blast
qed
lemma strong_parallel_postulate_implies_tarski_s_euclid_aux:
assumes "strong_parallel_postulate" and
"A ≠ B" and
"A ≠ D" and
"A ≠ T" and
"B ≠ D" and
"B ≠ T" and
"D ≠ T" and
"¬ Col A B T" and
"Bet A D T"
shows "∃ B' B'' MB X.
(Bet A B X ∧ T X ParStrict B D ∧
BetS B MB T ∧ BetS B' MB B'' ∧
Cong B MB T MB ∧ Cong B' MB B'' MB ∧
Col B B' D ∧ Bet B'' T X ∧
B ≠ B' ∧ B'' ≠ T)"
proof -
obtain B' where "B Midpoint D B'"
using symmetric_point_construction by blast
have "D ≠ B'"
using ‹B Midpoint D B'› assms(5) l7_3 by blast
have "B ≠ B'"
using ‹B Midpoint D B'› ‹D ≠ B'› midpoint_not_midpoint by blast
moreover
have "Bet D B B'"
by (simp add: ‹B Midpoint D B'› midpoint_bet)
have "Cong D B B B'"
using ‹B Midpoint D B'› midpoint_cong by auto
have "Bet T D A"
using Bet_cases assms(9) by blast
have "Bet B' B D"
using Bet_cases ‹Bet D B B'› by blast
obtain MB where "MB Midpoint B T"
using midpoint_existence by blast
hence "BetS B MB T"
by (metis BetS_def assms(6) midpoint_bet midpoint_distinct_1)
moreover
have "Cong B MB T MB"
using Midpoint_def ‹MB Midpoint B T› not_cong_1243 by blast
moreover
have "MB ≠ B"
using ‹MB Midpoint B T› assms(6) is_midpoint_id by blast
have "MB ≠ T"
using BetSEq calculation(2) by blast
obtain B'' where "MB Midpoint B' B''"
using symmetric_point_construction by blast
have "MB ≠ B'"
using ‹Bet D B B'› ‹MB Midpoint B T› assms(8) assms(9)
bet_col between_exchange2 calculation(1) midpoint_bet
outer_transitivity_between by blast
hence "BetS B' MB B''"
by (metis BetS_def ‹MB Midpoint B' B''› midpoint_bet
midpoint_not_midpoint)
hence "B' ≠ B''"
using BetSEq by blast
have "MB ≠ B''"
using BetSEq ‹BetS B' MB B''› by blast
have "Cong B' MB B'' MB"
using Midpoint_def ‹MB Midpoint B' B''›
cong_right_commutativity by blast
moreover
have "¬ Col B T B'"
by (metis Inter_def ‹Bet D B B'› assms(7)
assms(8) assms(9) bet_col calculation(1)
col_trivial_3 inter_trivial
l6_21 not_col_permutation_5)
obtain B''' where "Bet T B''' B'" and "Bet A B B'''"
using ‹Bet B' B D› ‹Bet T D A› outer_pasch by blast
have "B' ≠ B'''"
by (metis ‹Bet A B B'''› ‹Bet B' B D› ‹¬ Col B T B'›
assms(3) assms(9) bet_col bet_out_1
col_permutation_1 colx out_col)
have "B''' ≠ T"
using ‹Bet A B B'''› assms(8) bet_col by blast
hence "BetS T B''' B'"
using BetS_def ‹B' ≠ B'''› ‹Bet T B''' B'› by presburger
have "¬ Col B B' B'''"
by (meson Col_perm ‹B' ≠ B'''› ‹Bet T B''' B'›
‹¬ Col B T B'› bet_col col2__eq)
have "Coplanar B T B' B'''"
by (meson ‹Bet T B''' B'› bet_col col__coplanar ncoplanar_perm_11)
hence "∃ X. (Col B'' T X ∧ Col B B''' X)"
using assms(1) calculation(2) ‹BetS B' MB B''›
‹¬ Col B B' B'''› ‹Cong B MB T MB› ‹Cong B' MB B'' MB›
strong_parallel_postulate_def by blast
then obtain X where "Col B'' T X" and "Col B B''' X"
by blast
have "B B' Par T B''"
using l12_17 calculation(1) ‹MB Midpoint B T›
‹MB Midpoint B' B''› by blast
have "B ≠ B''"
using ‹B B' Par T B''› ‹¬ Col B T B'› par_id_3
par_right_comm by blast
hence "B B'' Par T B'"
using l12_17
by (meson ‹MB Midpoint B T› ‹MB Midpoint B' B''› mid_par_cong2)
{
assume "Bet B'' T X"
{
assume "Bet B B''' X"
hence "BetS B'' T X"
by (metis BetS_def ‹B B' Par T B''› ‹Bet A B B'''›
‹Bet B' B D› ‹Bet B'' T X› ‹¬ Col B B' B'''› assms(8)
bet_col bet_col1 not_col_permutation_4
outer_transitivity_between par_distincts)
have "BetS B B''' X"
by (metis BetS_def ‹B B' Par T B''› ‹Bet B B''' X›
‹Bet T B''' B'› ‹BetS B'' T X› ‹¬ Col B B' B'''›
‹¬ Col B T B'› bet_col col_permutation_5 not_col_distincts
not_strict_par outer_transitivity_between par_right_comm)
have "B'' ≠ T"
using BetSEq ‹BetS B'' T X› by blast
have "T ≠ X"
using BetSEq ‹BetS B'' T X› by blast
have ?thesis
proof -
have "Bet A B X"
using BetSEq ‹Bet A B B'''› ‹BetS B B''' X›
outer_transitivity_between by blast
moreover
have "T X ParStrict B D"
proof -
have "T X ParStrict B B'"
proof -
have "B B' ParStrict T B''"
by (metis Par_def ‹B B' Par T B''› ‹¬ Col B T B'›
not_col_distincts par_col2_par_bis par_id_3)
moreover
have "Col T B'' X"
using Col_cases ‹Col B'' T X› by blast
ultimately
show ?thesis
by (meson ‹T ≠ X› par_strict_col_par_strict
par_strict_symmetry)
qed
moreover
have "Col B B' D"
by (simp add: Col_def ‹Bet D B B'›)
ultimately
show ?thesis
using assms(5) par_strict_col_par_strict by blast
qed
moreover
have "Col B B' D"
by (simp add: Col_def ‹Bet D B B'›)
ultimately
show ?thesis
using ‹Bet B'' T X› ‹Cong B' MB B'' MB› ‹B ≠ B'›
‹B'' ≠ T› ‹BetS B MB T› ‹BetS B' MB B''›
‹Cong B MB T MB› by blast
qed
}
moreover
{
assume "Bet B''' X B"
have "¬ Col B T B''"
by (meson ‹B B' Par T B''› ‹¬ Col B T B'› assms(6)
col_trivial_2 par_col2_par_bis par_id_3)
hence False
using impossible_case_5 ‹BetS T B''' B'› ‹¬ Col B B' B'''›
‹B B' Par T B''› ‹Bet B'' T X› ‹Bet B''' X B› by blast
hence ?thesis
by blast
}
moreover
{
assume "Bet X B B'''"
have "¬ Col B T B''"
using ‹B B' Par T B''› ‹¬ Col B T B'› assms(6)
col_trivial_2 par_col2_par_bis par_id_3 by blast
hence ?thesis
using impossible_case_6 ‹BetS T B''' B'› ‹B B'' Par T B'›
‹Bet B'' T X› ‹Bet X B B'''› by blast
}
ultimately
have ?thesis
using Bet_perm ‹Col B B''' X› third_point by blast
}
moreover
{
assume "Bet T X B''"
have "¬ Col B T B''"
by (meson ‹B B' Par T B''› ‹¬ Col B T B'› assms(6)
col_trivial_2 par_col2_par_bis par_id_3)
hence ?thesis
using impossible_case_7 ‹BetS T B''' B'› ‹¬ Col B B' B'''›
‹B B' Par T B''› ‹B B'' Par T B'› ‹Col B B''' X›
‹Bet T X B''› by blast
}
moreover
{
assume "Bet X B'' T"
have "¬ Col B T B''"
by (meson ‹B B' Par T B''› ‹¬ Col B T B'› assms(6)
col_trivial_2 par_col2_par_bis par_id_3)
hence ?thesis
using impossible_case_8 ‹BetS T B''' B'› ‹B B' Par T B''›
‹B B'' Par T B'› ‹Bet X B'' T› ‹Col B B''' X› by blast
}
ultimately
show ?thesis
using Bet_perm ‹Col B'' T X› third_point by blast
qed
lemma strong_parallel_postulate_implies_tarski_s_euclid :
assumes "strong_parallel_postulate"
shows "tarski_s_parallel_postulate"
proof -
{
fix A' B' C' D' T'
assume 1: "Bet A' D' T'" and
2: "Bet B' D' C'" and
3: "A' ≠ D'"
{
fix A B C D T
assume H1: "A ≠ B" and
H2: "A ≠ C" and
H3: "A ≠ D" and
H4: "A ≠ T" and
H5: "B ≠ C" and
H6: "B ≠ D" and
H7: "B ≠ T" and
H8: "C ≠ D" and
H9: "C ≠ T" and
H10: "D ≠ T" and
H11: "¬ Col A B C" and
H12: "Bet A D T" and
H13: "Bet B D C" and
H14: "¬ Col B C T"
have "¬ Col A B T"
by (meson H11 H12 H13 H3 H6 between_trivial2
impossible_case_2)
moreover
have "¬ Col A C T"
using H11 H12 H13 H3 H8 between_trivial
impossible_two_sides_not_col by blast
ultimately
have "∃ B' B'' MB X.
(Bet A B X ∧ T X ParStrict B D ∧
BetS B MB T ∧ BetS B' MB B'' ∧
Cong B MB T MB ∧ Cong B' MB B'' MB ∧
Col B B' D ∧ Bet B'' T X ∧
B ≠ B' ∧ B'' ≠ T)"
using assms strong_parallel_postulate_implies_tarski_s_euclid_aux
H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 by blast
then obtain B' B'' MB X where "Bet A B X" and
"T X ParStrict B D" and
"BetS B MB T" and
"BetS B' MB B''" and
"Cong B MB T MB" and
"Cong B' MB B'' MB" and
"Col B B' D" and
"Bet B'' T X" and
"B ≠ B'" and
"B'' ≠ T"
by auto
have "¬ Col A B T"
by (meson H11 H12 H13 H3 H6 between_trivial2 impossible_case_2)
moreover
have "¬ Col A C T"
using H11 H12 H13 H3 H8 between_trivial
impossible_two_sides_not_col by blast
ultimately
have "∃ B' B'' MB X.
(Bet A C X ∧ T X ParStrict C D ∧
BetS C MB T ∧ BetS B' MB B'' ∧
Cong C MB T MB ∧ Cong B' MB B'' MB ∧
Col C B' D ∧ Bet B'' T X ∧
C ≠ B' ∧ B'' ≠ T)"
using assms strong_parallel_postulate_implies_tarski_s_euclid_aux
H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 by blast
then obtain B9' B9'' MB9 Y where "Bet A C Y" and
"T Y ParStrict C D" and
"BetS C MB9 T" and
"BetS B9' MB9 B9''" and
"Cong C MB9 T MB9" and
"Cong B9' MB9 B9'' MB9" and
"Col C B9' D" and
"Bet B9'' T Y" and
"C ≠ B9'" and
"B9'' ≠ T"
by auto
have "Bet X T Y"
proof (cases "Col X T Y")
case True
have "¬ Col A B C"
by (simp add: H11)
{
assume "Col A X Y"
hence False
by (metis H1 H11 ‹Bet A B X› ‹Bet A C Y›
bet_col bet_neq12__neq
col_trivial_3
not_par_inter_uniqueness par_id)
}
hence "¬ Col A X Y"
by blast
have "Bet Y C A"
using ‹Bet A C Y› between_symmetry by blast
then obtain U where "Bet Y U B" and "Bet A D U"
using H13 outer_pasch by blast
have "Bet X B A"
by (meson Bet_perm ‹Bet A B X›)
then obtain V where "Bet X V Y" and "Bet A U V"
using ‹Bet Y U B› outer_pasch by blast
have "T = V"
proof -
have "¬ Col X Y A"
using Col_cases ‹¬ Col A X Y› by blast
moreover
have "A ≠ D"
by (simp add: H3)
moreover
have "Col X Y T"
using True not_col_permutation_5 by blast
moreover
have "Col X Y V"
using ‹Bet X V Y› bet_col col_permutation_5 by blast
moreover
have "Col A D T"
by (simp add: Col_def H12)
moreover
have "Col A D V"
by (meson ‹Bet A D U› ‹Bet A U V› bet_col
between_exchange4)
ultimately
show ?thesis
using l6_21 by blast
qed
thus ?thesis
by (simp add: ‹Bet X V Y›)
next
case False
hence "¬ Col X T Y"
by simp
have "¬ Col T B'' Y"
by (meson False ‹B'' ≠ T› ‹Bet B'' T X› bet_col
col_transitivity_2 not_col_permutation_4)
have "T Y ParStrict C B"
by (metis H13 H5 ‹T Y ParStrict C D› bet_col
between_symmetry col_trivial_3 par_strict_col2_par_strict)
have "T X ParStrict B C"
by (meson H13 H5 ‹T X ParStrict B D› bet_col
par_strict_col_par_strict)
have "X ≠ T"
using False col_trivial_1 by auto
have "Y ≠ T"
using False col_trivial_2 by blast
have "X ≠ Y"
using False col_trivial_3 by force
have "Coplanar T B B'' Y"
proof -
have "Coplanar B Y T X"
proof -
have "¬ Col C B T"
using Col_cases H14 by blast
moreover
have "Coplanar C B T X"
using ‹T X ParStrict B C› ncoplanar_perm_17
pars__coplanar by blast
moreover
have "Coplanar C B T Y"
using ‹T Y ParStrict C B› coplanar_perm_16
pars__coplanar by blast
ultimately
show ?thesis
by (meson coplanar_trans_1 ncoplanar_perm_3)
qed
moreover
have "Col T X B''"
by (simp add: Col_def ‹Bet B'' T X›)
ultimately
show ?thesis
using ‹X ≠ T› col_cop__cop coplanar_perm_13 by blast
qed
have "∃ I. Col B' B I ∧ Col T Y I"
proof -
have "BetS T MB B"
by (metis BetS_def ‹BetS B MB T› between_symmetry)
moreover
have "BetS B'' MB B'"
by (metis BetS_def Bet_cases ‹BetS B' MB B''›)
moreover
have "Cong T MB B MB"
by (meson ‹Cong B MB T MB› not_cong_3412)
moreover
have "Cong B'' MB B' MB"
by (simp add: ‹Cong B' MB B'' MB› cong_symmetry)
ultimately
show ?thesis
using assms ‹¬ Col T B'' Y› ‹Coplanar T B B'' Y›
strong_parallel_postulate_def by blast
qed
then obtain I where "Col B' B I" and "Col T Y I"
by auto
thus ?thesis
by (metis H13 H6 ‹B ≠ B'› ‹Col B B' D›
‹T Y ParStrict C D› bet_col col3 col_trivial_2
not_col_permutation_4 not_strict_par
par_strict_not_col_4 par_strict_par)
qed
hence "∃ x y. (Bet A B x ∧ Bet A C y ∧ Bet x T y)"
using ‹Bet A B X› ‹Bet A C Y› by auto
}
hence "∃ X Y. Bet A' B' X ∧ Bet A' C' Y ∧ Bet X T' Y"
using 1 2 3 tarski_s_euclid_remove_degenerated_cases by blast
}
thus ?thesis
using tarski_s_parallel_postulate_def by blast
qed
lemma midpoint_converse_postulate_implies_playfair:
assumes "midpoint_converse_postulate"
shows "playfair_s_postulate"
proof -
{
fix A1 A2 B1 B2 C1 C2 P
assume "A1 A2 Par B1 B2" and
"Col P B1 B2" and
"A1 A2 Par C1 C2" and
"Col P C1 C2"
{
assume "A1 A2 ParStrict B1 B2"
{
assume "A1 A2 ParStrict C1 C2"
hence "P ≠ A1"
using Col_cases ‹Col P C1 C2› par_strict_not_col_3 by blast
obtain X where "P Midpoint A1 X"
using symmetric_point_construction by blast
{
fix B1' B2'
assume "Col P B1' B2'" and
"A1 A2 ParStrict B1' B2'" and
"P ≠ B1'"
moreover
{
fix B1'' B2''
assume "Col P B1'' B2''" and
"A1 A2 ParStrict B1'' B2''" and
"P ≠ B1''"
have "A1 ≠ X"
using ‹P Midpoint A1 X› ‹P ≠ A1› l7_3 by blast
have "P ≠ X"
using ‹A1 ≠ X› ‹P Midpoint A1 X› midpoint_distinct_1 by blast
have "A1 ≠ A2"
using ‹A1 A2 ParStrict B1' B2'› par_strict_neq1 by blast
have "A1 ≠ B1''"
using ‹A1 A2 ParStrict B1'' B2''›
not_par_strict_id by fastforce
have "A1 ≠ B2''"
using ‹A1 A2 ParStrict B1'' B2''› ‹Col P B1'' B2''›
‹P ≠ B1''› col_transitivity_2 par_strict_not_col_3 by blast
have "A2 ≠ B1''"
using ‹A1 A2 ParStrict B1'' B2''› not_par_strict_id
par_strict_left_comm by blast
have "A2 ≠ B2''"
using Par_strict_cases ‹A1 A2 ParStrict B1'' B2''›
not_par_strict_id by blast
have "B2'' ≠ B1''"
using ‹A1 A2 ParStrict B1'' B2''› col_trivial_1
par_strict_not_col_3 by blast
have "∃ B3. Col B1'' P B3 ∧ (BetS X B3 A2 ∨ BetS A1 B3 A2)"
proof -
have "Coplanar X A1 A2 B1''"
proof -
have "Coplanar A2 B1'' A1 P"
using NCol_perm ‹A1 A2 ParStrict B1'' B2''›
‹B2'' ≠ B1''› ‹Col P B1'' B2''› col_cop__cop
ncoplanar_perm_12 pars__coplanar by blast
moreover
have "Col A1 P X"
using Midpoint_def ‹P Midpoint A1 X›
bet_col by blast
ultimately
show ?thesis
using ‹P ≠ A1› col_cop__cop
ncoplanar_perm_17 by blast
qed
moreover
have "¬ Col A2 P B1''"
by (metis Par_strict_cases ‹A1 A2 ParStrict B1'' B2''›
‹Col P B1'' B2''› ‹P ≠ B1''› col3 col_trivial_2
not_col_permutation_2 par_strict_not_col_3)
moreover
{
assume "Col X A1 B1''"
have "Bet A1 P X"
using ‹P Midpoint A1 X› midpoint_bet by blast
hence "Col A1 P X"
using Col_def by blast
hence "Col A1 P B1''"
using ‹Col X A1 B1''›
by (metis ‹A1 ≠ X› col_permutation_2
col_trivial_2 l6_21)
moreover
have "¬ Col A1 P B1''"
by (metis ‹A1 A2 ParStrict B1'' B2''›
‹Col P B1'' B2''› ‹P ≠ B1''› col3 col_trivial_2
col_trivial_3 par_strict_not_col_3)
ultimately
have "False"
by simp
}
hence "¬ Col X A1 B1''"
by blast
moreover
have "BetS X P A1"
using BetS_def Midpoint_def ‹P Midpoint A1 X›
‹P ≠ A1› ‹P ≠ X› between_symmetry by presburger
ultimately
show ?thesis
using hilbert_s_version_of_pasch by blast
qed
then obtain B3 where "Col B1'' P B3" and "BetS X B3 A2 ∨ BetS A1 B3 A2"
by blast
have "Col B1'' B2'' B3"
by (meson ‹Col B1'' P B3› ‹Col P B1'' B2''›
‹P ≠ B1''› col_transitivity_2 not_col_permutation_4)
moreover
{
assume "BetS A1 B3 A2"
have "Col B3 A1 A2"
using BetSEq Col_def ‹BetS A1 B3 A2›
col_permutation_3 by blast
moreover
have "Col B3 B1'' B2''"
using Col_perm ‹Col B1'' B2'' B3› by blast
ultimately
have "False"
using ‹A1 A2 ParStrict B1'' B2''› par_not_col by blast
}
hence "BetS A2 B3 X"
by (metis BetS_def ‹BetS X B3 A2 ∨ BetS A1 B3 A2›
between_symmetry)
moreover
have "A1 A2 ParStrict P B3"
proof -
have "Col B1'' B2'' P"
by (simp add: ‹Col P B1'' B2''› col_permutation_1)
moreover
{
assume "P = B3"
have "Bet A2 B3 X"
using BetSEq ‹BetS A2 B3 X› by blast
hence "Col X P A2"
using BetSEq ‹BetS A1 B3 A2 ⟹ False›
‹BetS X B3 A2 ∨ BetS A1 B3 A2› ‹P = B3› bet_col by blast
have "A2 ≠ B3"
using BetSEq ‹BetS A2 B3 X› by auto
have "B3 ≠ X"
using BetSEq ‹BetS A2 B3 X› by auto
hence "Col P A1 A2"
proof -
have "Col X P A2"
by (simp add: ‹Col X P A2›)
moreover
have "Bet A1 P X"
by (simp add: ‹P Midpoint A1 X› midpoint_bet)
hence "Col X P A1"
using Bet_cases Col_def by blast
ultimately
show ?thesis
using ‹A1 A2 ParStrict B1'' B2''›
by (metis ‹P ≠ X› col_transitivity_2)
qed
hence "False"
using ‹Col P B1'' B2''› ‹A1 A2 ParStrict B1'' B2''›
par_not_col by blast
}
hence "P ≠ B3"
by blast
ultimately
show ?thesis
using ‹Col B1'' B2'' B3› ‹A1 A2 ParStrict B1'' B2''›
par_strict_col2_par_strict by blast
qed
ultimately
have "∃ B3. Col B1'' B2'' B3 ∧ BetS A2 B3 X ∧ A1 A2 ParStrict P B3"
by blast
}
ultimately
have "∃ B3. Col B1' B2' B3 ∧ BetS A2 B3 X ∧ A1 A2 ParStrict P B3"
using ‹A1 A2 ParStrict B1' B2'› ‹Col P B1' B2'› by blast
}
moreover
{
fix B1' B2'
assume "Col P B1' B2'" and
"A1 A2 ParStrict B1' B2'" and
"P = B1'"
have "P ≠ B2'"
using ‹P = B1'› ‹A1 A2 ParStrict B1' B2'›
par_strict_distinct by presburger
moreover
have "Col P B2' B1'"
using ‹P = B1'› col_trivial_3 by blast
moreover
have "A1 A2 ParStrict B2' B1'"
by (simp add: ‹A1 A2 ParStrict B1' B2'›
par_strict_right_comm)
ultimately
have "∃ B3. Col B1' B2' B3 ∧ BetS A2 B3 X ∧ A1 A2 ParStrict P B3"
using Col_perm
‹⋀B2' B1'. ⟦Col P B1' B2'; A1 A2 ParStrict B1' B2'; P ≠ B1'⟧
⟹ ∃B3. Col B1' B2' B3 ∧ BetS A2 B3 X ∧ A1 A2 ParStrict P B3›
by blast
}
ultimately
have H1: "∀ B1' B2'. (Col P B1' B2' ∧ A1 A2 ParStrict B1' B2')
⟶
(∃ B3. Col B1' B2' B3 ∧ BetS A2 B3 X ∧ A1 A2 ParStrict P B3)"
by blast
then obtain B3 where "Col B1 B2 B3" and "BetS A2 B3 X" and
"A1 A2 ParStrict P B3"
using ‹A1 A2 ParStrict B1 B2› ‹Col P B1 B2› by blast
obtain C3 where "Col C1 C2 C3" and "BetS A2 C3 X" and
"A1 A2 ParStrict P C3"
using ‹A1 A2 ParStrict C1 C2› ‹Col P C1 C2› H1 by blast
have "Col A2 X B3"
by (meson BetSEq Bet_cases Col_def ‹BetS A2 B3 X›)
have "Col A2 X C3"
by (meson BetSEq Bet_cases Col_def ‹BetS A2 C3 X›)
have "¬ Col A1 A2 X"
by (metis BetSEq ‹A1 A2 ParStrict P C3›
‹BetS A2 B3 X› ‹Col A2 X C3› col124__nos col3
col_trivial_3 l12_6 not_col_permutation_2)
have "B3 = C3"
proof -
have "B3 Midpoint A2 X"
proof -
have "¬ Col A2 A1 X"
by (meson Col_cases ‹¬ Col A1 A2 X›)
moreover
have "A2 A1 Par B3 P"
by (simp add: ‹A1 A2 ParStrict P B3›
par_strict_comm par_strict_par)
ultimately
show ?thesis
using assms ‹P Midpoint A1 X› ‹Col A2 X B3›
midpoint_converse_postulate_def by blast
qed
moreover
have "C3 Midpoint A2 X"
proof -
have "¬ Col A2 A1 X"
by (meson Col_cases ‹¬ Col A1 A2 X›)
moreover
have "A2 A1 Par C3 P"
by (simp add: ‹A1 A2 ParStrict P C3›
par_strict_comm par_strict_par)
ultimately
show ?thesis
using assms ‹P Midpoint A1 X› ‹Col A2 X C3›
midpoint_converse_postulate_def by blast
qed
ultimately
show ?thesis
by (meson Mid_cases l7_17_bis)
qed
have "Col C1 B1 B2"
proof -
have "Col B1 B2 C3"
using ‹B3 = C3› ‹Col B1 B2 B3› by auto
moreover
have "Col C1 C2 C3"
using ‹Col C1 C2 C3› by auto
moreover
have "Col P C1 C2"
by (simp add: ‹Col P C1 C2›)
moreover
have "Col P B1 B2"
by (simp add: ‹Col P B1 B2›)
ultimately
show ?thesis
by (metis ‹A1 A2 ParStrict C1 C2› ‹A1 A2 ParStrict P C3›
l6_21 not_col_permutation_2 par_strict_neq2)
qed
moreover
have "Col C2 B1 B2"
proof -
have "Col B1 B2 C3"
using ‹B3 = C3› ‹Col B1 B2 B3› by auto
moreover
have "Col C1 C2 C3"
using ‹Col C1 C2 C3› by auto
moreover
have "Col P C1 C2"
by (simp add: ‹Col P C1 C2›)
moreover
have "Col P B1 B2"
by (simp add: ‹Col P B1 B2›)
ultimately
show ?thesis
by (metis ‹A1 A2 ParStrict P C3› ‹Col C1 B1 B2›
l6_21 not_col_permutation_2 not_col_permutation_3
par_strict_neq2)
qed
ultimately
have "Col C1 B1 B2 ∧ Col C2 B1 B2"
by simp
}
moreover
have "(A1 ≠ A2 ∧ B1 ≠ B2 ∧ Col A1 B1 B2 ∧ Col A2 B1 B2)
⟶
Col C1 B1 B2 ∧ Col C2 B1 B2"
using NCol_perm ‹A1 A2 ParStrict B1 B2›
par_strict_not_col_3 by blast
{
assume "A1 ≠ A2" and
"B1 ≠ B2" and
"Col A1 B1 B2" and
"Col A2 B1 B2"
hence "Col C1 B1 B2 ∧ Col C2 B1 B2"
using NCol_perm ‹A1 A2 ParStrict B1 B2›
par_strict_not_col_3 by blast
}
ultimately
have "Col C1 B1 B2 ∧ Col C2 B1 B2"
by (meson ‹A1 A2 Par C1 C2› ‹A1 A2 ParStrict B1 B2›
‹Col P B1 B2› ‹Col P C1 C2› col_permutation_1
par_not_col par_not_col_strict)
}
moreover
{
assume "A1 ≠ A2" and "B1 ≠ B2" and
"Col A1 B1 B2" and "Col A2 B1 B2"
hence "¬ A1 A2 ParStrict B1 B2"
using par_strict_not_col_2 by blast
have "Col B1 B2 C1 ∧ Col B1 B2 C2"
proof -
have "B1 B2 Par C1 C2"
using NCol_perm ‹A1 A2 Par C1 C2› ‹B1 ≠ B2›
‹Col A1 B1 B2› ‹Col A2 B1 B2›
par_col2_par_bis par_symmetry by blast
moreover have "Col B1 B2 A1"
using ‹Col A1 B1 B2›
not_col_permutation_2 by blast
moreover have "Col C1 C2 A1"
using Par_cases ‹Col P B1 B2›
‹Col P C1 C2› calculation(1) calculation(2)
col_not_col_not_par col_permutation_1 by blast
ultimately show ?thesis
using inter_uniqueness_not_par not_strict_par2 by blast
qed
hence "Col C1 B1 B2 ∧ Col C2 B1 B2"
using col_permutation_2 by blast
}
ultimately
have "Col C1 B1 B2 ∧ Col C2 B1 B2"
using Par_def ‹A1 A2 Par B1 B2› by presburger
}
thus ?thesis
using playfair_s_postulate_def by blast
qed
lemma playfair_implies_par_trans:
assumes "playfair_s_postulate"
shows "postulate_of_transitivity_of_parallelism"
proof -
{
fix A1 A2 B1 B2 C1 C2
assume "A1 A2 Par B1 B2" and
"B1 B2 Par C1 C2"
have "B1 ≠ B2"
using ‹A1 A2 Par B1 B2› par_distincts by blast
have "A1 ≠ A2"
using ‹A1 A2 Par B1 B2› par_distincts by auto
have "C1 ≠ C2"
using ‹B1 B2 Par C1 C2› par_distincts by blast
have "A1 A2 Par C1 C2"
proof (cases "Coplanar A1 A2 C1 B1")
case True
show ?thesis
proof (cases "Col A1 A2 C1")
case True
hence "Col A1 A2 C2"
proof -
have "B1 B2 Par A1 A2"
by (simp add: ‹A1 A2 Par B1 B2› par_symmetry)
moreover have "Col C1 A1 A2"
using True not_col_permutation_1 by blast
moreover have "Col C1 C1 C2"
by (simp add: col_trivial_1)
ultimately show ?thesis
using playfair_s_postulate_def ‹B1 B2 Par C1 C2›
assms col_permutation_1 by blast
qed
have "B1 B2 Par C1 C2"
by (simp add: ‹B1 B2 Par C1 C2›)
moreover
have "Col C1 C1 C2"
by (simp add: col_trivial_1)
moreover
have "Col A2 C1 C2"
using Par_cases True ‹A1 A2 Par B1 B2› assms
calculation(1) calculation(2) not_col_permutation_3
playfair_s_postulate_def by blast
moreover
have "B1 B2 Par A1 A2"
using Par_cases ‹A1 A2 Par B1 B2› by blast
moreover
have "Col A1 A2 C1"
using True by simp
hence "Col A1 C1 C2"
using calculation(3)
by (metis ‹Col A1 A2 C2› col_transitivity_1)
ultimately
show ?thesis
using Par_def ‹A1 ≠ A2› ‹C1 ≠ C2› by blast
next
case False
hence "¬ Col A1 A2 C1"
by simp
have "A1 A2 ParStrict C1 C2"
proof -
have "Coplanar A1 A2 C1 C2"
proof -
have "C1 C2 Par B1 B2"
by (simp add: ‹B1 B2 Par C1 C2› par_symmetry)
moreover
{
assume "A1 A2 Par B1 B2" and "C1 C2 ParStrict B1 B2"
hence "Coplanar C1 C2 B1 B2"
using ParStrict_def by blast
have "Coplanar A1 A2 C1 C2"
proof -
{
assume "A1 A2 ParStrict B1 B2"
hence "Coplanar A1 A2 B1 B2"
using pars__coplanar by auto
moreover
have "Coplanar C1 C2 B1 B2"
by (simp add: ‹Coplanar C1 C2 B1 B2›)
moreover
have "Coplanar A1 A2 C1 B1"
by (simp add: True)
ultimately
have "Coplanar A1 A2 C1 B2"
proof -
have "¬ Col A2 B1 B2"
using ‹A1 A2 ParStrict B1 B2› par_strict_not_col_2 by auto
moreover have "Coplanar A2 B1 B2 A1"
using ‹Coplanar A1 A2 B1 B2› ncoplanar_perm_18 by blast
moreover have "Coplanar A2 B1 B2 A2"
using ncop_distincts by blast
moreover have "Coplanar A2 B1 B2 C1"
by (meson True ‹A1 A2 ParStrict B1 B2›
calculation(2) coplanar_perm_1 l9_30
ncop_distincts par_strict_not_col_3
par_strict_symmetry)
moreover have "Coplanar A2 B1 B2 B2"
using ncop_distincts by blast
ultimately show ?thesis
using coplanar_pseudo_trans by blast
qed
have "Coplanar A1 A2 C1 C1"
using ncop_distincts by blast
have "Coplanar B1 B2 C1 A1"
by (meson False True ‹Coplanar A1 A2 C1 B2›
coplanar_pseudo_trans ncop_distincts)
moreover
have "Coplanar B1 B2 C1 A2"
by (meson False True ‹Coplanar A1 A2 C1 B2›
coplanar_trans_1 ncoplanar_perm_22)
moreover
have "Coplanar B1 B2 C1 C1"
using ncop_distincts by blast
moreover
have "Coplanar B1 B2 C1 C2"
by (simp add: ‹Coplanar C1 C2 B1 B2›
coplanar_perm_16)
ultimately
have "Coplanar A1 A2 C1 C2"
by (meson NCol_perm ‹C1 C2 ParStrict B1 B2›
coplanar_pseudo_trans not_col_distincts
par_not_col)
}
moreover
{
assume "A1 ≠ A2 ∧ B1 ≠ B2 ∧ Col A1 B1 B2 ∧ Col A2 B1 B2"
hence "Coplanar A1 A2 C1 C2"
by (meson ‹C1 C2 Par B1 B2› col2_cop__cop
col_permutation_1 ncoplanar_perm_16 par__coplanar)
}
ultimately
show ?thesis
by (metis Par_cases ‹A1 A2 Par B1 B2› ‹A1 ≠ A2›
‹B1 ≠ B2› col_permutation_2 not_col_distincts
par_not_col_strict par_strict_symmetry)
qed
}
moreover
{
assume "A1 A2 Par B1 B2" and "C1 ≠ C2" and
"B1 ≠ B2" and "Col C1 B1 B2" and "Col A2 B1 B2"
hence "Coplanar A1 A2 C1 C2"
by (meson col_permutation_1 col_trivial_3
ncop__ncols par_not_col par_not_col_strict)
}
ultimately
show ?thesis
by (metis ‹A1 A2 Par B1 B2› ‹B1 ≠ B2›
all_one_side_par_strict col2_cop__cop not_strict_par1
not_strict_par2 par__coplanar par_not_col_strict
par_symmetry)
qed
moreover
{
assume "∃ X. Col X A1 A2 ∧ Col X C1 C2"
then obtain X where "Col X A1 A2" and "Col X C1 C2"
by blast
have "B1 B2 Par A1 A2"
using ‹A1 A2 Par B1 B2› par_symmetry by blast
hence False
using ‹B1 B2 Par C1 C2› ‹Col X A1 A2›
‹Col X C1 C2› False assms col_permutation_1
playfair_s_postulate_def by blast
}
ultimately
show ?thesis
using ParStrict_def by blast
qed
thus ?thesis
by (simp add: Par_def)
qed
next
case False
hence "A1 A2 ParStrict B1 B2"
using ‹A1 A2 Par B1 B2› col_trivial_3
ncop__ncols par_not_col_strict by blast
have "B1 B2 ParStrict C1 C2"
proof -
have "Col C1 C2 C1"
by (simp add: col_trivial_3)
moreover
have "¬ Col B1 B2 C1"
by (meson False ‹A1 A2 Par B1 B2› ‹B1 ≠ B2›
col_cop__cop ncoplanar_perm_1 par__coplanar)
ultimately
show ?thesis
using ‹B1 B2 Par C1 C2› par_not_col_strict by blast
qed
have "∃ C'. Coplanar A1 A2 C1 C' ∧ Coplanar B1 B2 C1 C' ∧ C1 ≠ C'"
proof -
have "Coplanar A1 A2 C1 C1"
using ncop_distincts by blast
moreover
have "A1 A2 C1 OSP B1 B2"
by (meson False ‹A1 A2 ParStrict B1 B2›
col_trivial_2 cop2_os__osp
ncop_distincts par_strict_one_side)
ultimately
show ?thesis
by (simp add: cop_osp__ex_cop2)
qed
then obtain C' where "Coplanar A1 A2 C1 C'" and "Coplanar B1 B2 C1 C'"
and "C1 ≠ C'"
by auto
{
fix X
assume "Coplanar A1 A2 B1 X" and
"Col X C1 C'"
have "Col X A1 A2"
proof -
have "¬ Coplanar A1 A2 C1 B1"
by (simp add: False)
moreover
have "¬ Col A1 A2 B1"
using calculation ncop__ncols by auto
moreover
have "Coplanar A1 A2 B1 B1"
using ncop_distincts by blast
moreover
have "Coplanar A1 A2 C1 X"
using ‹C1 ≠ C'› ‹Col X C1 C'› ‹Coplanar A1 A2 C1 C'›
col_cop__cop col_permutation_1 by blast
moreover
have "Coplanar A1 A2 C1 A1"
using ncop_distincts by blast
moreover
have "Coplanar A1 A2 C1 A2"
using ncop_distincts by blast
moreover
have "Coplanar A1 A2 B1 X"
by (simp add: ‹Coplanar A1 A2 B1 X›)
moreover
have "Coplanar A1 A2 B1 A1"
using ncop_distincts by blast
moreover
have "Coplanar A1 A2 B1 A2"
using ncop_distincts by blast
ultimately
show ?thesis
using l9_30 by blast
qed
moreover
have "Col X B1 B2"
proof -
have "¬ Coplanar A1 A2 B1 C1"
using False ncoplanar_perm_1 by blast
moreover
have "¬ Col B1 B2 C1"
using ‹B1 B2 ParStrict C1 C2› col123__nos l12_6 by blast
moreover
have "Coplanar B1 B2 C1 C1"
using ncop_distincts by blast
moreover
have "Coplanar A1 A2 B1 X"
by (simp add: ‹Coplanar A1 A2 B1 X›)
moreover
have "Coplanar A1 A2 B1 B1"
using ncop_distincts by blast
moreover
have "Coplanar A1 A2 B1 B2"
using ParStrict_def ‹A1 A2 ParStrict B1 B2› by blast
moreover
have "Coplanar B1 B2 C1 X"
by (meson ‹C1 ≠ C'› ‹Col X C1 C'›
‹Coplanar B1 B2 C1 C'› col_cop__cop
not_col_permutation_1)
moreover
have "Coplanar B1 B2 C1 B1"
using ncop_distincts by blast
moreover
have "Coplanar B1 B2 C1 B2"
using ncop_distincts by blast
ultimately
show ?thesis
using l9_30 by blast
qed
ultimately
have False
using ‹A1 A2 ParStrict B1 B2› par_not_col by blast
}
have "A1 A2 ParStrict C1 C2"
proof -
{
assume "∃ X. Col X A1 A2 ∧ Col X C1 C'"
then obtain X where "Col X A1 A2" and "Col X C1 C'"
by auto
have "Coplanar A1 A2 B1 X"
using ‹Col X A1 A2› col_permutation_1 ncop__ncols by blast
hence False
using ‹Col X C1 C'›
‹⋀X. ⟦Coplanar A1 A2 B1 X; Col X C1 C'⟧ ⟹ False›
by blast
}
hence "A1 A2 ParStrict C1 C'"
using ParStrict_def ‹Coplanar A1 A2 C1 C'› by blast
moreover
have "B1 B2 ParStrict C1 C'"
proof -
have "B1 B2 Par C1 C'"
using ‹A1 A2 Par B1 B2› ‹B1 ≠ B2› ‹Coplanar B1 B2 C1 C'›
assms calculation col_cop__cop col_permutation_1
coplanar_perm_1 par__coplanar par_strict_par
playfair_s_postulate_def
by (meson False cop_npars__inter_exists)
thus ?thesis
using Par_def
‹⋀X. ⟦Coplanar A1 A2 B1 X; Col X C1 C'⟧ ⟹ False›
ncop_distincts by blast
qed
hence "Col C1 C' C2"
using ‹B1 B2 Par C1 C2› assms col_permutation_1
col_trivial_1 par_strict_par
playfair_s_postulate_def by blast
ultimately
show ?thesis
using ‹C1 ≠ C2› par_strict_col_par_strict by blast
qed
thus ?thesis
by (simp add: Par_def)
qed
}
thus ?thesis
using postulate_of_transitivity_of_parallelism_def by blast
qed
lemma par_trans_implies_playfair:
assumes "postulate_of_transitivity_of_parallelism"
shows "playfair_s_postulate"
proof -
{
fix A1 A2 B1 B2 C1 C2 P
assume "A1 A2 Par B1 B2" and
"Col P B1 B2" and
"A1 A2 Par C1 C2" and
"Col P C1 C2"
have "C1 C2 Par B1 B2"
using ‹A1 A2 Par B1 B2› ‹A1 A2 Par C1 C2› assms
par_symmetry postulate_of_transitivity_of_parallelism_def by blast
hence "Col C1 B1 B2 ∧ Col C2 B1 B2"
using Par_def ‹Col P B1 B2› ‹Col P C1 C2›
par_not_col by blast
}
thus ?thesis
using playfair_s_postulate_def by blast
qed
lemma par_perp_perp_implies_par_perp_2_par:
assumes "perpendicular_transversal_postulate"
shows "postulate_of_parallelism_of_perpendicular_transversals"
proof -
{
fix A1 A2 B1 B2 C1 C2 D1 D2
assume "A1 A2 Par B1 B2" and "A1 A2 Perp C1 C2" and "B1 B2 Perp D1 D2" and
"Coplanar A1 A2 C1 D1" and "Coplanar A1 A2 C1 D2" and
"Coplanar A1 A2 C2 D1" and "Coplanar A1 A2 C2 D2"
have "C1 C2 Perp A1 A2"
using Perp_perm ‹A1 A2 Perp C1 C2› by blast
moreover
have "D1 D2 Perp A1 A2"
proof -
have "B1 B2 Par A1 A2"
using Par_cases ‹A1 A2 Par B1 B2› by blast
moreover
have "B1 B2 Perp D1 D2"
by (simp add: ‹B1 B2 Perp D1 D2›)
moreover
have "Coplanar A1 A2 D1 D2"
proof -
{
assume "¬ Col A1 A2 C1"
hence "Coplanar A1 A2 D1 D2"
by (meson ‹Coplanar A1 A2 C1 D1› ‹Coplanar A1 A2 C1 D2›
coplanar_pseudo_trans ncop_distincts)
}
moreover
{
assume "¬ Col A1 A2 C2"
hence "Coplanar A1 A2 D1 D2"
by (meson ‹Coplanar A1 A2 C2 D1› ‹Coplanar A1 A2 C2 D2›
coplanar_perm_12 coplanar_trans_1 not_col_permutation_2)
}
ultimately
show ?thesis
using perp_not_col2 ‹A1 A2 Perp C1 C2› by blast
qed
ultimately
show ?thesis
using Perp_perm assms perpendicular_transversal_postulate_def by blast
qed
ultimately
have "C1 C2 Par D1 D2"
using l12_9 ‹Coplanar A1 A2 C1 D1› ‹Coplanar A1 A2 C1 D2›
‹Coplanar A1 A2 C2 D1› ‹Coplanar A1 A2 C2 D2›
by blast
}
thus ?thesis
using postulate_of_parallelism_of_perpendicular_transversals_def by blast
qed
lemma par_perp_2_par_implies_par_perp_perp:
assumes "postulate_of_parallelism_of_perpendicular_transversals"
shows "perpendicular_transversal_postulate"
proof -
{
fix A B C D P Q
assume "A B Par C D" and
"A B Perp P Q" and
"Coplanar C D P Q"
{
assume "A B ParStrict C D"
obtain X where "X PerpAt A B P Q"
using Perp_def ‹A B Perp P Q› by blast
have "C D Perp P Q"
proof (cases "Col C D X")
case True
have "Col X A B"
using ‹X PerpAt A B P Q› Col_cases perp_in_col by blast
moreover
have "Col X C D"
using Col_cases True by blast
ultimately
have "∃ X0. Col X0 A B ∧ Col X0 C D"
by blast
hence False
using ‹A B ParStrict C D› par_not_col by blast
thus ?thesis
by blast
next
case False
then obtain Y where "Col C D Y" and "C D Perp X Y"
using False l8_18_existence by blast
have "A ≠ B"
using ‹A B Par C D› par_distinct by auto
have "P ≠ Q"
using ‹A B Perp P Q› perp_not_eq_2 by auto
have "P Q Par X Y"
proof -
have "Coplanar C D X A"
proof -
have "Coplanar C D A B"
using Par_cases ‹A B Par C D› par__coplanar by blast
moreover
have "Col X A B"
using ‹X PerpAt A B P Q› Col_cases perp_in_col by blast
hence "Col A B X"
using Col_cases by blast
moreover
have "Col A B A"
by (simp add: col_trivial_3)
ultimately
show ?thesis
using ‹A ≠ B› col2_cop__cop by blast
qed
have "Coplanar C D X B"
proof -
have "Coplanar C D A B"
using Par_perm ‹A B Par C D› par__coplanar by blast
moreover
have "Col X A B"
using ‹X PerpAt A B P Q› Col_cases perp_in_col by blast
hence "Col A B X"
using Col_cases by blast
moreover
have "Col A B B"
by (simp add: col_trivial_2)
ultimately
show ?thesis
using ‹A ≠ B› col2_cop__cop by blast
qed
have "Coplanar C D X P"
by (meson ‹Coplanar C D P Q› ‹P ≠ Q›
‹X PerpAt A B P Q› col_cop__cop ncoplanar_perm_6
ncoplanar_perm_7 perp_in_col)
have "Coplanar C D X Q"
proof -
have "Coplanar C D P Q"
by (simp add: ‹Coplanar C D P Q›)
moreover
have "Col P Q X"
using ‹X PerpAt A B P Q› perp_in_col by blast
moreover
have "Col P Q Q"
using col_trivial_2 by auto
ultimately
show ?thesis
using ‹P ≠ Q› col2_cop__cop by blast
qed
have "Coplanar C D X Y"
by (simp add: ‹C D Perp X Y› perp__coplanar)
have "Coplanar A B P X"
using ‹X PerpAt A B P Q› col__coplanar
coplanar_perm_1 perp_in_col by blast
moreover
have "Coplanar A B P Y"
by (meson False ‹Coplanar C D X A› ‹Coplanar C D X B›
‹Coplanar C D X P› ‹Coplanar C D X Y›
coplanar_pseudo_trans)
moreover
have "Coplanar A B Q X"
by (meson ‹X PerpAt A B P Q› ncop__ncol
ncoplanar_perm_1 perp_in_col)
moreover
have "Coplanar A B Q Y"
by (meson ‹Coplanar C D X A› ‹Coplanar C D X B›
‹Coplanar C D X Q› ‹Coplanar C D X Y› False
coplanar_pseudo_trans)
ultimately
show ?thesis
using ‹C D Perp X Y› ‹A B Perp P Q› ‹A B Par C D›
postulate_of_parallelism_of_perpendicular_transversals_def
assms by blast
qed
{
assume "P ≠ Q ∧ X ≠ Y ∧ Col P X Y ∧ Col Q X Y"
hence "C D Perp P Q"
by (meson ‹C D Perp X Y› not_col_permutation_2 perp_col2_bis)
}
moreover
{
assume "P Q ParStrict X Y"
have "Col X P Q"
using ‹X PerpAt A B P Q› Col_cases perp_in_col by blast
moreover
have "Col X X Y"
by (simp add: col_trivial_1)
ultimately
have False
using ‹P Q ParStrict X Y› par_not_col by blast
hence "C D Perp P Q"
by blast
}
ultimately
show ?thesis
using ‹P Q Par X Y› Par_def by blast
qed
}
hence "C D Perp P Q"
by (metis Par_perm Par_strict_perm par_neq2
par_not_col_strict perp_col2 perp_inter_perp_in
‹A B Par C D› ‹A B Perp P Q› not_strict_par2)
}
thus ?thesis
using perpendicular_transversal_postulate_def by blast
qed
lemma par_perp_perp_implies_playfair:
assumes "perpendicular_transversal_postulate"
shows "playfair_s_postulate"
proof -
{
fix A1 A2 B1 B2 C1 C2 P
assume "A1 A2 Par B1 B2" and
"Col P B1 B2" and
"A1 A2 Par C1 C2" and
"Col P C1 C2"
{
assume H1: "∀ C1 C2. P ≠ C1 ∧ A1 A2 Par C1 C2 ∧ Col P C1 C2
⟶
(Col C1 B1 B2 ∧ Col C2 B1 B2)"
fix C1 C2
assume "A1 A2 Par C1 C2" and "Col P C1 C2"
have "Col C1 B1 B2 ∧ Col C2 B1 B2"
proof (cases "P = C1")
case True
hence "P = C1"
by simp
show ?thesis
proof (cases "P = C2")
case True
thus ?thesis
using ‹Col P B1 B2› ‹P = C1› by auto
next
case False
hence "P ≠ C2"
by simp
show ?thesis
by (metis ‹A1 A2 Par C1 C2› ‹Col P B1 B2›
‹Col P C1 C2› H1 not_col_permutation_5
par_right_comm)
qed
next
case False
hence "P ≠ C1"
by simp
thus ?thesis
using ‹A1 A2 Par C1 C2› ‹Col P C1 C2› H1 by blast
qed
}
{
fix C1 C2
assume "P ≠ C1" and
"A1 A2 Par C1 C2" and
"Col P C1 C2"
have "Col C1 B1 B2 ∧ Col C2 B1 B2"
proof (cases "Col A1 A2 P")
case True
have "Col C1 B1 B2"
using ‹A1 A2 Par B1 B2› ‹A1 A2 Par C1 C2›
‹Col P B1 B2› ‹Col P C1 C2› col3 not_strict_par1
not_strict_par2 par_neq1
by (meson True not_col_permutation_2)
moreover
have "Col C2 B1 B2"
using ‹A1 A2 Par B1 B2› ‹A1 A2 Par C1 C2›
‹Col P B1 B2› ‹Col P C1 C2›
col3 not_strict_par1 not_strict_par2 par_neq1
by (metis ‹P ≠ C1› calculation
col_permutation_1 col_trivial_2)
ultimately show ?thesis
by blast
next
case False
hence "¬ Col A1 A2 P"
by simp
then obtain I where "Col A1 A2 I" and "A1 A2 Perp P I"
using l8_18_existence by blast
have "Coplanar B1 B2 P I"
using ‹Col P B1 B2› col_permutation_1 ncop__ncol by blast
have "Coplanar C1 C2 P I"
by (meson ‹Col P C1 C2› col_permutation_1 ncop__ncol)
moreover
have "A1 A2 Par B1 B2"
using ‹A1 A2 Par B1 B2› by auto
ultimately
have "B1 B2 Perp P I"
using perpendicular_transversal_postulate_def assms
‹A1 A2 Perp P I› ‹Coplanar B1 B2 P I› by blast
have "C1 C2 Perp P I"
using perpendicular_transversal_postulate_def assms
‹A1 A2 Perp P I› ‹Coplanar C1 C2 P I› ‹A1 A2 Par C1 C2› by blast
have "Coplanar A1 A2 P B1"
using ‹A1 A2 Par B1 B2› ‹Col P B1 B2› col2_cop__cop
col_permutation_1 col_trivial_3 par__coplanar
par_neq2 by blast
have "Coplanar A1 A2 P B2"
using ‹A1 A2 Par B1 B2› ‹Col P B1 B2› col2_cop__cop
col_permutation_1 col_trivial_3 par__coplanar
par_neq2 by blast
have "Coplanar A1 A2 P C1"
using ‹A1 A2 Par C1 C2› ‹Col P C1 C2› col_trivial_2
ncop_distincts par__coplanar
par_col2_par_bis by blast
have "Coplanar A1 A2 P I"
by (simp add: ‹A1 A2 Perp P I› perp__coplanar)
have "P C1 Perp P I"
proof -
have "C1 ≠ P"
using ‹P ≠ C1› by blast
moreover
have "C1 C2 Perp P I"
by (simp add: ‹C1 C2 Perp P I›)
moreover
have "Col C1 C2 P"
using Col_cases ‹Col P C1 C2› by blast
ultimately
show ?thesis
by (meson perp_col perp_left_comm)
qed
have "Col P C1 B1"
proof (cases "P = B1")
case True
thus ?thesis
by (simp add: col_trivial_3)
next
case False
show ?thesis
proof -
have "Coplanar P I C1 B1"
proof -
have "Coplanar A1 A2 P P"
using ncop_distincts by blast
thus ?thesis
by (meson ‹¬ Col A1 A2 P› ‹Coplanar A1 A2 P B1›
‹Coplanar A1 A2 P C1› ‹Coplanar A1 A2 P I›
coplanar_pseudo_trans)
qed
moreover
have "P B1 Perp P I"
by (metis False Perp_perm ‹B1 B2 Perp P I› ‹Col P B1 B2›
col_permutation_1 perp_col)
ultimately
show ?thesis
using ‹P C1 Perp P I› cop_perp2__col by blast
qed
qed
moreover
have "Col P C1 B2"
proof (cases "P = B2")
case True
thus ?thesis
by (simp add: col_trivial_3)
next
case False
show ?thesis
proof -
have "Coplanar P I C1 B2"
proof -
have "Coplanar A1 A2 P P"
using ncop_distincts by blast
thus ?thesis
by (meson ‹¬ Col A1 A2 P› ‹Coplanar A1 A2 P B2›
‹Coplanar A1 A2 P C1› ‹Coplanar A1 A2 P I›
coplanar_pseudo_trans)
qed
moreover
have "P B2 Perp P I"
by (metis False Perp_perm ‹B1 B2 Perp P I›
‹Col P B1 B2› col_permutation_1 perp_col)
ultimately
show ?thesis
using ‹P C1 Perp P I› cop_perp2__col by blast
qed
qed
ultimately
show ?thesis
by (metis ‹Col P C1 C2› ‹P ≠ C1› col_transitivity_2)
qed
}
hence "Col C1 B1 B2 ∧ Col C2 B1 B2"
using ‹A1 A2 Par C1 C2› ‹Col P C1 C2›
‹⋀C2a C1a. ⟦∀C1 C2. P ≠ C1 ∧ A1 A2 Par C1 C2 ∧ Col P C1 C2
⟶ Col C1 B1 B2 ∧ Col C2 B1 B2; A1 A2 Par C1a C2a; Col P C1a C2a⟧
⟹ Col C1a B1 B2 ∧ Col C2a B1 B2›
by blast
}
thus ?thesis
using playfair_s_postulate_def by blast
qed
lemma playfair__universal_posidonius_postulate:
assumes "playfair_s_postulate"
shows "universal_posidonius_postulate"
proof -
{
fix A1 A2 A3 A4 B1 B2 B3 B4
assume "A1 A2 Par B1 B2" and
"Col A1 A2 A3" and "Col B1 B2 B3" and
"A1 A2 Perp A3 B3" and
"Col A1 A2 A4" and "Col B1 B2 B4" and "A1 A2 Perp A4 B4"
{
assume "A1 A2 ParStrict B1 B2"
hence "¬ Col A1 A2 B1"
by (meson par_strict_not_col_1)
then obtain A1' where "Col A1 A2 A1'" and "A1 A2 Perp B1 A1'"
using l8_18_existence by blast
{
fix A3 B3
assume "Col A1 A2 A3" and
"Col B1 B2 B3" and
"A1 A2 Perp A3 B3"
have "B3 ≠ A3"
using ‹A1 A2 Perp A3 B3› ‹Col A1 A2 A3› perp_not_col2 by blast
then obtain B3' where "Bet A3 B3 B3' ∨ Bet A3 B3' B3" and "Cong A3 B3' A1' B1"
using segment_construction_2 by blast
{
assume "A1' = A3"
have "Col A1' B1 B3"
proof -
have "Coplanar A1 A2 B1 B3"
using ‹A1 A2 Par B1 B2› ‹Col B1 B2 B3› col2_cop__cop
col_trivial_3 par__coplanar par_neq2 by blast
moreover
have "A1' B1 Perp A1 A2"
using Perp_perm ‹A1 A2 Perp B1 A1'› by blast
moreover
have "A1' B3 Perp A1 A2"
using Perp_perm ‹A1' = A3› ‹A1 A2 Perp A3 B3› by blast
ultimately
show ?thesis
using cop_perp2__col by blast
qed
have "B1 = B3"
proof -
have "¬ Col B1 B2 A1'"
proof (cases "A1 = A1'")
case True
thus ?thesis
using ‹A1 A2 Par B1 B2› ‹Col A1 A2 A1'›
‹¬ Col A1 A2 B1› not_strict_par1 by blast
next
case False
thus ?thesis
using ‹A1' = A3› ‹A1 A2 Par B1 B2› ‹Col A1 A2 A3› ‹¬ Col A1 A2 B1›
not_strict_par by blast
qed
moreover
have "Col B1 B2 B1"
by (simp add: col_trivial_3)
moreover
have "Col A1' B1 B1"
using col_trivial_2 by auto
ultimately
show ?thesis
by (meson ‹Col B1 B2 B3› ‹Col A1' B1 B3›
col_permutation_4 l6_16_1)
qed
hence "Cong A3 B3 A1' B1"
using cong_reflexivity by (simp add: ‹A1' = A3›)
}
moreover
{
assume "A1' ≠ A3"
have "Saccheri A1' B1 B3' A3"
proof -
have "A1' B1 Perp A3 A1'"
using ‹A1'≠ A3› Perp_cases ‹A1 A2 Perp B1 A1'›
‹Col A1 A2 A1'› ‹Col A1 A2 A3› perp_col2_bis by blast
hence "Per B1 A1' A3"
using perp_per_1 by blast
moreover
have "A3 A1' Perp B3' A3"
proof -
have "A1 A2 Perp A3 B3"
by (simp add: ‹A1 A2 Perp A3 B3›)
hence "A3 B3 Perp A3 A1'"
using perp_col0 ‹A1'≠ A3› ‹Col A1 A2 A3›
‹Col A1 A2 A1'› by presburger
moreover
have "Col A3 B3 B3'"
using Col_def ‹Bet A3 B3 B3' ∨ Bet A3 B3' B3›
col_permutation_4 by blast
moreover
have "Col A3 B3 A3"
by (simp add: col_trivial_3)
ultimately
show ?thesis
by (metis ‹A1' B1 Perp A3 A1'› ‹Cong A3 B3' A1' B1›
cong_diff_3 perp_col0 perp_not_eq_1)
qed
hence "Per A1' A3 B3'"
using perp_per_1 by blast
moreover
have "Cong A1' B1 B3' A3"
using ‹Cong A3 B3' A1' B1› not_cong_4312 by blast
moreover
have "A1' A3 OS B1 B3'"
proof -
have "A1' A3 OS B1 B3"
proof (cases "B1 = B3")
case True
thus ?thesis
by (metis Col_cases ‹¬ Col A1 A2 B1› ‹A1' ≠ A3›
‹Col A1 A2 A1'› ‹Col A1 A2 A3› colx
one_side_reflexivity)
next
case False
have "Col A1 A2 A1'"
using ‹Col A1 A2 A1'› by auto
moreover
have "Col A1 A2 A3"
by (simp add: ‹Col A1 A2 A3›)
moreover
have "A1 A2 OS B1 B3"
by (meson ‹A1 A2 ParStrict B1 B2› ‹Col B1 B2 B3›
par_strict_one_side)
ultimately
show ?thesis
using col2_os__os ‹A1' ≠ A3› by blast
qed
moreover
have "A1' A3 OS B3 B3'"
by (metis ‹Bet A3 B3 B3' ∨ Bet A3 B3' B3›
‹Cong A1' B1 B3' A3› bet_out calculation col124__nos
cong_identity invert_one_side l6_6 os_distincts
out_one_side)
ultimately
show ?thesis
using one_side_transitivity by blast
qed
ultimately
show ?thesis
using Saccheri_def by blast
qed
hence "A1' A3 ParStrict B1 B3'"
using sac__pars1423 by blast
have "Col B3' B1 B2"
proof -
have "A1 A2 Par B1 B2"
using ‹A1 A2 Par B1 B2› by auto
moreover
have "Col B1 B1 B2"
by (simp add: col_trivial_1)
moreover
have "A1 A2 Par B1 B3'"
proof -
have "A1 ≠ A2"
using ‹¬ Col A1 A2 B1› col_trivial_1 by blast
moreover
have "B1 B3' Par A1' A3"
using Par_strict_perm ‹A1' A3 ParStrict B1 B3'›
par_strict_par by blast
moreover
have "Col A1' A3 A1"
by (meson ‹Col A1 A2 A1'› ‹Col A1 A2 A3›
calculation(1) col_transitivity_1
not_col_permutation_3)
moreover
have "Col A1' A3 A2"
by (meson ‹Col A1 A2 A1'› ‹Col A1 A2 A3›
calculation(1) col_transitivity_2
not_col_permutation_2)
ultimately
show ?thesis
by (meson par_col2_par par_symmetry)
qed
moreover
have "Col B1 B1 B3'"
by (simp add: col_trivial_1)
ultimately
show ?thesis
using assms playfair_s_postulate_def by blast
qed
have "B3 = B3'"
proof -
have "¬ Col B1 B3' A3"
by (metis ‹A1 A2 Par B1 B2› ‹A1' A3 ParStrict B1 B3'›
‹Col A1 A2 A3› ‹Col B3' B1 B2› ‹¬ Col A1 A2 B1›
col_transitivity_2 not_col_permutation_4
not_strict_par par_strict_neq2)
moreover
have "A3 ≠ B3"
using ‹B3 ≠ A3› by auto
moreover
have "Col B1 B3' B3"
by (metis ‹A1 A2 ParStrict B1 B2› ‹Col B1 B2 B3›
‹Col B3' B1 B2› colx not_col_distincts
par_strict_neq2)
moreover
have "Col B1 B3' B3'"
by (simp add: col_trivial_2)
moreover
have "Col A3 B3 B3"
by (simp add: col_trivial_2)
moreover
have "Col A3 B3 B3'"
using ‹Bet A3 B3 B3' ∨ Bet A3 B3' B3›
bet_col1 between_trivial by blast
ultimately
show ?thesis
using l6_21 by blast
qed
hence "Cong A3 B3 A1' B1"
using ‹Cong A3 B3' A1' B1› by auto
}
ultimately
have "Cong A3 B3 A1' B1"
by blast
}
moreover
have "Cong A3 B3 A1' B1"
using calculation(1)
by (simp add: ‹A1 A2 Perp A3 B3› ‹Col A1 A2 A3›
‹Col B1 B2 B3›)
moreover
have "Cong A1' B1 A4 B4"
using calculation(1) Cong_perm ‹A1 A2 Perp A4 B4›
‹Col A1 A2 A4› ‹Col B1 B2 B4› by blast
ultimately
have "Cong A3 B3 A4 B4"
using cong_transitivity by blast
}
moreover
{
assume "A1 ≠ A2" and "B1 ≠ B2" and "Col A1 B1 B2" and "Col A2 B1 B2"
hence "Cong A3 B3 A4 B4"
using ‹A1 A2 Par B1 B2› ‹A1 A2 Perp A3 B3›
‹Col A1 A2 A3› ‹Col B1 B2 B3› calculation
par_not_col_strict perp_not_col2 by blast
}
ultimately
have "Cong A3 B3 A4 B4"
using Par_def ‹A1 A2 Par B1 B2› by presburger
}
thus ?thesis
using universal_posidonius_postulate_def by blast
qed
lemma weak_inverse_projection_postulate__bachmann_s_lotschnittaxiom_aux:
assumes "weak_inverse_projection_postulate"
shows "∀ A1 A2 B1 B2 C1 C2 Q P R M.
(A1 A2 Perp B1 B2 ∧ A1 A2 Perp C1 C2 ∧
Col A1 A2 Q ∧ Col B1 B2 Q ∧
Col A1 A2 P ∧ Col C1 C2 P ∧
Col B1 B2 R ∧ Coplanar Q P R C1 ∧
Coplanar Q P R C2 ∧ ¬ Col Q P R ∧
M InAngle P Q R ∧ M Q P CongA M Q R)
⟶
(B1 B2 ParStrict C1 C2 ∧
(∃ S. Q Out M S ∧ Col C1 C2 S))"
proof -
{
fix A1 A2 B1 B2 C1 C2 Q P R M
assume "A1 A2 Perp B1 B2" and
"A1 A2 Perp C1 C2" and
"Col A1 A2 Q" and
"Col B1 B2 Q" and
"Col A1 A2 P" and
"Col C1 C2 P" and
"Col B1 B2 R" and
"Coplanar Q P R C1" and
"Coplanar Q P R C2" and
"¬ Col Q P R" and
"M InAngle P Q R" and
"M Q P CongA M Q R"
have "Q ≠ P"
using ‹¬ Col Q P R› col_trivial_1 by auto
have "Q ≠ R"
using ‹¬ Col Q P R› col_trivial_3 by auto
have "A1 ≠ A2"
using ‹A1 A2 Perp C1 C2› perp_distinct by auto
have "C1 ≠ C2"
using ‹A1 A2 Perp C1 C2› perp_distinct by auto
have "B1 ≠ B2"
using ‹A1 A2 Perp B1 B2› perp_distinct by auto
have "Q ≠ M"
using ‹M InAngle P Q R› inangle_distincts by blast
have "¬ Col A1 A2 R"
using ‹A1 A2 Perp B1 B2› ‹Col A1 A2 P› ‹Col A1 A2 Q›
‹¬ Col Q P R› col3 perp_not_eq_1 by blast
have "¬ Col B1 B2 P"
using ‹B1 ≠ B2› ‹Col B1 B2 Q› ‹Col B1 B2 R›
‹¬ Col Q P R› col3 by blast
have "B1 B2 ParStrict C1 C2"
proof -
have "B1 B2 Par C1 C2"
proof -
have "Col A1 P Q ∧ Col A2 P Q ∧ Col B1 R Q ∧ Col B2 R Q"
by (meson ‹A1 ≠ A2› ‹B1 ≠ B2› ‹Col A1 A2 P›
‹Col A1 A2 Q› ‹Col B1 B2 Q› ‹Col B1 B2 R›
col_transitivity_1 col_transitivity_2)
have "Coplanar Q P R A1"
by (meson ‹Col A1 P Q ∧ Col A2 P Q ∧ Col B1 R Q ∧ Col B2 R Q›
ncop__ncols not_col_permutation_3)
have "Coplanar Q P R A2"
using ‹Col A1 P Q ∧ Col A2 P Q ∧ Col B1 R Q ∧ Col B2 R Q›
ncop__ncols not_col_permutation_3 by blast
have "Coplanar Q P R B1"
using ‹Col A1 P Q ∧ Col A2 P Q ∧ Col B1 R Q ∧ Col B2 R Q›
ncop__ncols not_col_permutation_3 by blast
have "Coplanar Q P R B2"
using NCol_perm ‹Col A1 P Q ∧ Col A2 P Q ∧ Col B1 R Q ∧ Col B2 R Q›
ncop__ncols by blast
have "Coplanar A1 A2 B1 C1"
by (meson ‹Coplanar Q P R A1› ‹Coplanar Q P R A2›
‹Coplanar Q P R B1› ‹Coplanar Q P R C1› ‹¬ Col Q P R›
coplanar_pseudo_trans)
moreover
have "Coplanar A1 A2 B1 C2"
by (meson ‹Coplanar Q P R A1› ‹Coplanar Q P R A2›
‹Coplanar Q P R B1› ‹Coplanar Q P R C2› ‹¬ Col Q P R›
coplanar_pseudo_trans)
moreover
have "Coplanar A1 A2 B2 C1"
by (meson ‹Coplanar Q P R A1› ‹Coplanar Q P R A2›
‹Coplanar Q P R B2› ‹Coplanar Q P R C1› ‹¬ Col Q P R›
coplanar_pseudo_trans)
moreover
have "Coplanar A1 A2 B2 C2"
by (meson ‹Coplanar Q P R A1› ‹Coplanar Q P R A2›
‹Coplanar Q P R B2› ‹Coplanar Q P R C2› ‹¬ Col Q P R›
coplanar_pseudo_trans)
moreover
have "B1 B2 Perp A1 A2"
using Perp_perm ‹A1 A2 Perp B1 B2› by blast
moreover
have "C1 C2 Perp A1 A2"
using Perp_perm ‹A1 A2 Perp C1 C2› by blast
ultimately
show ?thesis
by (meson l12_9)
qed
moreover
have "Col C1 C2 P"
by (simp add: ‹Col C1 C2 P›)
moreover
have "¬ Col B1 B2 P"
using ‹¬ Col B1 B2 P› by auto
ultimately
show ?thesis
using par_not_col_strict by blast
qed
moreover
have "¬ Col Q C1 C2"
using ‹Col B1 B2 Q› calculation
not_col_permutation_1 par_not_col by blast
have "Per P Q R"
proof -
have "B1 B2 Perp A1 A2"
using Perp_perm ‹A1 A2 Perp B1 B2› by blast
hence "A1 A2 Perp Q R"
using ‹Q ≠ R› ‹Col B1 B2 R› ‹Col B1 B2 Q› perp_col0 by blast
moreover
have "Col A1 A2 Q"
using ‹Col A1 A2 Q› by auto
moreover
have" Col A1 A2 P"
by (simp add: ‹Col A1 A2 P›)
ultimately
show ?thesis
by (meson ‹Q ≠ P› perp_col2 perp_per_2)
qed
have "P Q M P Q M SumA P Q R"
proof -
have "P Q M M Q R SumA P Q R"
by (simp add: ‹M InAngle P Q R› inangle__suma)
moreover
have "P Q M CongA P Q M"
using ‹Q ≠ M› ‹Q ≠ P› conga_refl by auto
moreover
have "M Q R CongA P Q M"
by (meson ‹M Q P CongA M Q R› conga_right_comm conga_sym)
moreover
have "P Q R CongA P Q R"
using ‹Q ≠ P› ‹Q ≠ R› conga_refl by auto
ultimately
show ?thesis
by (meson conga3_suma__suma)
qed
have "Acute P Q M"
proof -
have "¬ Bet P Q R"
using Col_cases ‹¬ Col Q P R› bet_col by blast
moreover
have "SAMS P Q M P Q M"
by (meson ‹M InAngle P Q R› ‹M Q P CongA M Q R›
conga2_sams__sams conga_left_comm conga_sym
conga_trans inangle__sams)
moreover
have "P Q M P Q M SumA P Q R"
by (simp add: ‹P Q M P Q M SumA P Q R›)
ultimately
show ?thesis
using nbet_sams_suma__acute by blast
qed
have "∃ C3. Col C1 C2 C3 ∧ P Q OS R C3"
proof -
obtain C0 where "C1 ≠ C0" and "C2 ≠ C0" and
"P ≠ C0" and "Col C1 C2 C0"
using ‹Col C1 C2 P› diff_col_ex3 by blast
have "∃ C3. Col C0 P C3 ∧ P Q OS R C3"
proof -
have "C0 ≠ P"
using ‹P ≠ C0› by auto
moreover
have "Col P Q P"
using col_trivial_3 by blast
moreover
have "Col C0 P P"
by (simp add: col_trivial_2)
moreover
{
assume "Col P Q C0"
hence "Col C1 C2 Q"
by (metis (full_types) ‹Col C1 C2 C0› ‹Col C1 C2 P›
calculation(1) col_permutation_4 col_trivial_2 l6_21)
hence "False"
using ‹¬ Col Q C1 C2› not_col_permutation_1 by blast
}
moreover
have "¬ Col P Q R"
using Col_cases ‹¬ Col Q P R› by blast
moreover
have "Coplanar P Q R C0"
proof -
have "Coplanar P Q R C1"
using ‹Coplanar Q P R C1› ncoplanar_perm_6 by blast
moreover
have "Coplanar P Q R C2"
by (simp add: ‹Coplanar Q P R C2› coplanar_perm_6)
ultimately
show ?thesis
using ‹C1 ≠ C2› ‹Col C1 C2 C0› col_cop2__cop by blast
qed
hence "Coplanar P Q C0 R"
by (simp add: coplanar_perm_1)
ultimately
show ?thesis
using cop_not_par_same_side by blast
qed
then obtain C3 where "Col C0 P C3" and "P Q OS R C3"
by blast
thus ?thesis
by (metis ‹Col C1 C2 C0› ‹Col C1 C2 P› ‹P ≠ C0› colx)
qed
then obtain C3 where "Col C1 C2 C3" and "P Q OS R C3"
by blast
have "∃ S. Q Out M S ∧ Col P C3 S"
proof -
have "Q Out P P"
using ‹Q ≠ P› out_trivial by auto
moreover
have "P ≠ C3"
by (metis os_distincts ‹P Q OS R C3›)
moreover
have "Per Q P C3"
proof -
have "A1 A2 Perp C1 C2"
by (simp add: ‹A1 A2 Perp C1 C2›)
then obtain P' where "P' PerpAt A1 A2 C1 C2"
using perp_inter_perp_in_n by blast
hence "Col P' A1 A2 ∧ Col P' C1 C2 ∧
(∀ U V.(Col U A1 A2 ∧ Col V C1 C2)⟶Per U P' V)"
using PerpAt_def by blast
hence "∀ U V.(Col U A1 A2 ∧ Col V C1 C2)⟶Per U P' V"
by blast
hence "P = P'"
by (metis Col_cases ‹Col A1 A2 P› ‹Col C1 C2 P›
‹P' PerpAt A1 A2 C1 C2› l8_14_2_1b)
moreover
have "Col Q A1 A2"
using NCol_cases ‹Col A1 A2 Q› by blast
moreover
have "Col C3 C1 C2"
by (simp add: ‹Col C1 C2 C3› col_permutation_2)
ultimately
show ?thesis
using ‹∀U V. Col U A1 A2 ∧ Col V C1 C2 ⟶ Per U P' V› by blast
qed
moreover
have "Coplanar P Q M C3"
proof -
have "Coplanar P Q R P"
using ncop_distincts by blast
moreover
have "Coplanar P Q R Q"
using ncop_distincts by blast
moreover
have "Coplanar P Q R M"
by (meson ‹M InAngle P Q R› inangle__coplanar
ncoplanar_perm_18)
moreover
have "Coplanar P Q R C3"
using ‹P Q OS R C3› os__coplanar by auto
ultimately
show ?thesis
using Col_perm ‹¬ Col Q P R› coplanar_pseudo_trans by blast
qed
ultimately
show ?thesis
using ‹Acute P Q M› ‹Per P Q R› ‹P Q M P Q M SumA P Q R›
assms weak_inverse_projection_postulate_def by blast
qed
then obtain S where "Q Out M S" and "Col P C3 S"
by blast
hence "∃ S. Q Out M S ∧ Col C1 C2 S"
by (metis ‹Col C1 C2 C3› ‹P Q OS R C3› ‹Col C1 C2 P›
colx not_col_distincts one_side_not_col124)
ultimately
have "B1 B2 ParStrict C1 C2 ∧ (∃ S. Q Out M S ∧ Col C1 C2 S)"
by blast
}
thus ?thesis
by blast
qed
lemma weak_inverse_projection_postulate__bachmann_s_lotschnittaxiom:
assumes "weak_inverse_projection_postulate"
shows "bachmann_s_lotschnittaxiom"
proof -
{
fix A1 A2 B1 B2 C1 C2 D1 D2 Q P R
assume "Q ≠ P" and
"Q ≠ R" and
"A1 A2 Perp B1 B2" and
"A1 A2 Perp C1 C2" and
"B1 B2 Perp D1 D2" and
"Col A1 A2 Q" and
"Col B1 B2 Q" and
"Col A1 A2 P" and
"Col C1 C2 P" and
"Col B1 B2 R" and
"Col D1 D2 R" and
"Coplanar Q P R C1" and
"Coplanar Q P R C2" and
"Coplanar Q P R D1" and
"Coplanar Q P R D2"
have "Q P Perp R Q"
using ‹Q ≠ P› ‹Q ≠ R› ‹Col A1 A2 Q› ‹Col A1 A2 P›
‹Col B1 B2 R› ‹Col B1 B2 Q›‹A1 A2 Perp B1 B2›
perp_col4 by auto
hence "¬ Col P Q R"
by (meson NCol_cases perp_not_col)
have "P ≠ Q"
using ‹Q ≠ P› by auto
have "R ≠ Q"
using ‹Q ≠ R› by blast
obtain M where "(M InAngle P Q R)" and "(M Q P CongA M Q R)"
using angle_bisector ‹P ≠ Q› ‹R ≠ Q› by blast
have "B1 ≠ B2"
using ‹B1 B2 Perp D1 D2› col_trivial_1 perp_not_col2 by blast
have "M ≠ Q"
using ‹M InAngle P Q R› inangle_distincts by presburger
have "P Q M P Q M SumA P Q R"
proof -
have "P Q M M Q R SumA P Q R"
by (simp add: ‹M InAngle P Q R› inangle__suma)
moreover
have "P Q M CongA P Q M"
using ‹M ≠ Q› ‹Q ≠ P› conga_refl by auto
moreover
have "M Q R CongA P Q M"
by (meson ‹M Q P CongA M Q R› conga_right_comm conga_sym)
moreover
have "P Q R CongA P Q R"
using ‹Q ≠ P› ‹R ≠ Q› conga_refl by auto
ultimately
show ?thesis
by (meson conga3_suma__suma)
qed
have "Acute P Q M"
proof -
have "¬ Bet P Q R"
using ‹¬ Col P Q R› bet_col by force
moreover
have "SAMS P Q M P Q M"
by (meson ‹M InAngle P Q R› ‹M Q P CongA M Q R›
conga2_sams__sams conga_right_comm conga_trans
inangle__sams not_conga_sym)
ultimately
show ?thesis
by (meson ‹P Q M P Q M SumA P Q R› nbet_sams_suma__acute)
qed
have "B1 B2 ParStrict C1 C2 ∧ (∃ S. Q Out M S ∧ Col C1 C2 S)"
proof -
have "A1 A2 Perp B1 B2"
using ‹A1 A2 Perp B1 B2› by auto
moreover
have "A1 A2 Perp C1 C2"
by (simp add: ‹A1 A2 Perp C1 C2›)
moreover
have "Col A1 A2 Q"
by (simp add: ‹Col A1 A2 Q›)
moreover
have "Col B1 B2 Q"
by (simp add: ‹Col B1 B2 Q›)
moreover
have "Col A1 A2 P"
by (simp add: ‹Col A1 A2 P›)
moreover
have "Col C1 C2 P"
by (simp add: ‹Col C1 C2 P›)
moreover
have "Col B1 B2 R"
using ‹Col B1 B2 R› by auto
moreover
have "Coplanar Q P R C1"
by (simp add: ‹Coplanar Q P R C1›)
moreover
have "Coplanar Q P R C2"
using ‹Coplanar Q P R C2› by auto
moreover
have "¬ Col Q P R"
using Col_cases ‹¬ Col P Q R› by blast
moreover
have "M InAngle P Q R"
by (simp add: ‹M InAngle P Q R›)
moreover
have "M Q P CongA M Q R"
using ‹M Q P CongA M Q R› by blast
ultimately
show ?thesis
using assms
weak_inverse_projection_postulate__bachmann_s_lotschnittaxiom_aux
by blast
qed
then obtain S where "Q Out M S" and "Col C1 C2 S"
by blast
have "B1 B2 ParStrict C1 C2"
using ‹B1 B2 ParStrict C1 C2 ∧ (∃ S. Q Out M S ∧ Col C1 C2 S)› by blast
have "A1 A2 ParStrict D1 D2 ∧ (∃ T. Q Out M T ∧ Col D1 D2 T)"
proof -
have "B1 B2 Perp A1 A2"
using Perp_perm ‹A1 A2 Perp B1 B2› by blast
moreover
have "B1 B2 Perp D1 D2"
by (simp add: ‹B1 B2 Perp D1 D2›)
moreover
have "Col B1 B2 Q"
by (simp add: ‹Col B1 B2 Q›)
moreover
have "Col A1 A2 Q"
using ‹Col A1 A2 Q› by blast
moreover
have "Col B1 B2 R"
by (simp add: ‹Col B1 B2 R›)
moreover
have "Col D1 D2 R"
by (simp add: ‹Col D1 D2 R›)
moreover
have "Col A1 A2 P"
using ‹Col A1 A2 P› by auto
moreover
have "Coplanar Q R P D1"
by (simp add: ‹Coplanar Q P R D1› coplanar_perm_2)
moreover
have "Coplanar Q R P D2"
using ‹Coplanar Q P R D2› coplanar_perm_2 by blast
moreover
have "¬ Col Q R P"
using Col_cases ‹¬ Col P Q R› by blast
moreover
have "M InAngle R Q P"
by (simp add: ‹M InAngle P Q R› l11_24)
moreover
have "M Q R CongA M Q P"
by (simp add: ‹M Q P CongA M Q R› conga_sym_equiv)
ultimately
show ?thesis
using assms
weak_inverse_projection_postulate__bachmann_s_lotschnittaxiom_aux
by blast
qed
then obtain T where "Q Out M T" and "Col D1 D2 T"
by blast
have "A1 A2 ParStrict D1 D2"
using ‹A1 A2 ParStrict D1 D2 ∧ (∃ T. Q Out M T ∧ Col D1 D2 T)› by blast
have "∃ I. Col C1 C2 I ∧ Col D1 D2 I"
proof (cases "Col C1 C2 T")
case True
thus ?thesis
using ‹Col D1 D2 T› by auto
next
case False
hence "¬ Col C1 C2 T"
by blast
show ?thesis
proof (cases "Col D1 D2 S")
case True
thus ?thesis
using ‹Col C1 C2 S› by auto
next
case False
hence "¬ Col D1 D2 S"
by auto
have "Q Out S T"
using Out_cases ‹Q Out M S› ‹Q Out M T› l6_7 by blast
have "S ≠ Q"
using ‹Q Out M S› l6_3_1 by blast
have "T ≠ Q"
using ‹Q Out M T› l6_3_1 by blast
{
assume "Bet Q S T"
have "C1 C2 TS R T"
proof -
have "C1 C2 TS Q T"
by (metis TS_def ‹Bet Q S T› ‹Col C1 C2 S›
‹S ≠ Q› ‹¬ Col C1 C2 T› bet_col colx
not_col_permutation_2)
moreover
have "C1 C2 ParStrict Q R"
by (metis Par_strict_cases ‹B1 B2 ParStrict C1 C2›
‹Col B1 B2 Q› ‹Col B1 B2 R› ‹R ≠ Q›
par_strict_col2_par_strict)
hence "C1 C2 OS Q R"
using l12_6 by blast
ultimately
show ?thesis
using l9_8_2 by blast
qed
then obtain I where "Col I C1 C2" and "Bet R I T"
using TS_def by blast
have "T ≠ R"
using ‹C1 C2 TS R T› ts_distincts by blast
hence "∃ I. Col C1 C2 I ∧ Col D1 D2 I"
by (meson ‹Bet R I T› ‹Col D1 D2 R› ‹Col D1 D2 T›
‹Col I C1 C2› bet_col colx not_col_permutation_2)
}
moreover
{
assume "Bet Q T S"
have "D1 D2 TS P S"
proof -
have "D1 D2 TS Q S"
by (metis Col_cases False ‹Bet Q T S› ‹Col D1 D2 T›
‹T ≠ Q› bet_col colx l9_18)
moreover
have "D1 D2 ParStrict A1 A2"
by (meson ‹A1 A2 ParStrict D1 D2› par_strict_symmetry)
hence "D1 D2 ParStrict Q P"
using ‹Q ≠ P› ‹Col A1 A2 Q› ‹Col A1 A2 P›
par_strict_col2_par_strict by blast
hence "D1 D2 OS Q P"
by (simp add: l12_6)
ultimately
show ?thesis
using l9_8_2 by blast
qed
then obtain I where "Col I D1 D2" and "Bet P I S"
using TS_def by blast
hence "Col D1 D2 I"
using Col_cases by blast
have "P ≠ S"
using ‹D1 D2 TS P S› not_two_sides_id by blast
hence "∃ I. Col C1 C2 I ∧ Col D1 D2 I"
by (metis (full_types) ‹Col C1 C2 P› ‹Col C1 C2 S›
‹⋀thesis. (⋀I. ⟦Col I D1 D2; Bet P I S⟧ ⟹ thesis) ⟹ thesis›
bet_col col_trivial_2 l6_21 not_col_permutation_2)
}
ultimately
show ?thesis
using Out_def ‹Q Out S T› by force
qed
qed
}
thus ?thesis
using bachmann_s_lotschnittaxiom_aux_R2 by blast
qed
lemma weak_triangle_circumscription_principle__bachmann_s_lotschnittaxiom:
assumes "weak_triangle_circumscription_principle"
shows "bachmann_s_lotschnittaxiom"
proof -
{
fix A1 A2 B1 B2 C1 C2 D1 D2 IAB IAC IBD
assume "IAB ≠ IAC" and "IAB ≠ IBD" and
"A1 A2 Perp B1 B2" and
"A1 A2 Perp C1 C2" and
"B1 B2 Perp D1 D2" and
"Col A1 A2 IAB" and
"Col B1 B2 IAB" and
"Col A1 A2 IAC" and
"Col C1 C2 IAC" and
"Col B1 B2 IBD" and
"Col D1 D2 IBD" and
"Coplanar IAB IAC IBD C1" and
"Coplanar IAB IAC IBD C2" and
"Coplanar IAB IAC IBD D1" and
"Coplanar IAB IAC IBD D2"
obtain E where "IAC Midpoint IAB E"
using symmetric_point_construction by blast
hence "Bet IAB IAC E"
using midpoint_bet by auto
hence "Col IAB IAC E"
using Col_def by blast
obtain F where "IBD Midpoint IAB F"
using symmetric_point_construction by blast
hence "Bet IAB IBD F"
using midpoint_bet by auto
hence "Col IAB IBD F"
using Col_def by blast
have "IAB ≠ F"
using ‹Bet IAB IBD F› ‹IAB ≠ IBD› between_identity by blast
have "IAB ≠ E"
using ‹IAB ≠ IAC› ‹IAC Midpoint IAB E› l8_20_2 by blast
have "E IAB Perp IAB F"
proof -
have "B1 B2 Perp E IAB"
proof -
have "A1 A2 Perp B1 B2"
using ‹A1 A2 Perp B1 B2› by blast
moreover
have "E ≠ IAB"
using ‹IAB ≠ E› by blast
moreover
have "Col A1 A2 E"
using ‹Col A1 A2 IAB› ‹Col A1 A2 IAC› ‹Col IAB IAC E›
‹IAB ≠ IAC› colx by blast
moreover
have "Col A1 A2 IAB"
by (simp add: ‹Col A1 A2 IAB›)
ultimately
show ?thesis
using perp_col0 by blast
qed
moreover
have "IAB ≠ F"
using ‹IAB ≠ F› by auto
moreover
have "Col B1 B2 IAB"
by (simp add: ‹Col B1 B2 IAB›)
moreover
have "Col B1 B2 F"
using ‹Col B1 B2 IBD› ‹Col IAB IBD F› ‹IAB ≠ IBD›
calculation(3) colx by blast
ultimately
show ?thesis
using perp_col0 by blast
qed
have "Per IAC IAB IBD"
proof -
have "IAB ≠ F"
by (simp add: ‹IAB ≠ F›)
moreover
have "Per IAC IAB F"
proof -
have "IAB ≠ E"
using ‹IAB ≠ E› by blast
moreover
have "Per F IAB E"
using Perp_perm ‹E IAB Perp IAB F› perp_per_2 by blast
moreover
have "Col IAB E IAC"
using ‹Col IAB IAC E› not_col_permutation_5 by blast
ultimately
show ?thesis
using l8_2 per_col by blast
qed
moreover
have "Col IAB F IBD"
using ‹Col IAB IBD F› not_col_permutation_5 by blast
ultimately
show ?thesis
using per_col by blast
qed
hence "¬ Col IAC IAB IBD"
using ‹IAB ≠ IAC› ‹IAB ≠ IBD› l8_9 by blast
have "∃ I. Col C1 C2 I ∧ Col D1 D2 I"
proof -
have "¬ Col E F IAB"
by (metis ‹Col IAB IAC E› ‹Col IAB IBD F› ‹IAB ≠ E›
‹IAB ≠ F› ‹¬ Col IAC IAB IBD› col_permutation_1
col_transitivity_2)
moreover
have "E IAB Perp F IAB"
by (simp add: ‹E IAB Perp IAB F› perp_right_comm)
hence "Per E IAB F"
using Perp_cases perp_per_2 by blast
moreover
have "F IAB ReflectL D1 D2"
proof -
have "IBD Midpoint IAB F"
by (simp add: ‹IBD Midpoint IAB F›)
moreover
have "Col D1 D2 IBD"
by (simp add: ‹Col D1 D2 IBD›)
moreover
have "D1 D2 Perp IAB F"
proof -
have "B1 B2 Perp D1 D2"
using ‹B1 B2 Perp D1 D2› by blast
moreover
have "IAB ≠ F"
using ‹IAB ≠ F› by auto
moreover
have "Col B1 B2 IAB"
by (simp add: ‹Col B1 B2 IAB›)
moreover
have "Col B1 B2 F"
using ‹Col B1 B2 IBD› ‹Col IAB IBD F› ‹IAB ≠ IBD›
calculation(3) colx by blast
ultimately
show ?thesis
using perp_col0 by blast
qed
hence "(D1 D2 Perp IAB F) ∨ (IAB = F)"
by blast
ultimately
show ?thesis
using ReflectL_def by blast
qed
hence "D1 D2 PerpBisect F IAB"
using Perp_bisect_def ‹IAB ≠ F› by blast
moreover
have "E IAB ReflectL C1 C2"
proof -
have "IAC Midpoint IAB E"
by (simp add: ‹IAC Midpoint IAB E›)
moreover
have "Col C1 C2 IAC"
by (simp add: ‹Col C1 C2 IAC›)
moreover
have "C1 C2 Perp IAB E"
proof -
have "A1 A2 Perp C1 C2"
by (simp add: ‹A1 A2 Perp C1 C2›)
moreover
have "IAB ≠ E"
using ‹IAB ≠ E› by auto
moreover
have "Col A1 A2 IAB"
by (simp add: ‹Col A1 A2 IAB›)
moreover
have "Col A1 A2 E"
using ‹Col A1 A2 IAC› ‹Col IAB IAC E› ‹IAB ≠ IAC›
calculation(3) colx by blast
ultimately
show ?thesis
using perp_col0 by blast
qed
hence "(C1 C2 Perp IAB E) ∨ (IAB = E)"
by blast
ultimately
show ?thesis
using ReflectL_def by blast
qed
hence "C1 C2 PerpBisect E IAB"
using Perp_bisect_def ‹IAB ≠ E› by blast
moreover
have "Coplanar E F IAB D1"
proof -
have "Coplanar IAB IAC IBD E"
using ‹Col IAB IAC E› ncop__ncols by blast
moreover
have "Coplanar IAB IAC IBD F"
using ‹Col IAB IBD F› ncop__ncols by blast
moreover
have "Coplanar IAB IAC IBD IAB"
using ‹Coplanar IAB IAC IBD D1› ncop_distincts by blast
ultimately
show ?thesis
by (meson ‹Coplanar IAB IAC IBD D1› ‹¬ Col IAC IAB IBD›
col_permutation_4 coplanar_pseudo_trans)
qed
moreover
have "Coplanar E F IAB D2"
proof -
have "Coplanar IAB IAC IBD E"
using ‹Col IAB IAC E› ncop__ncols by blast
moreover
have "Coplanar IAB IAC IBD F"
using ‹Col IAB IBD F› ncop__ncols by blast
moreover
have "Coplanar IAB IAC IBD IAB"
using ncop_distincts by blast
moreover
have "Coplanar IAB IAC IBD D2"
using ‹Coplanar IAB IAC IBD D2› by blast
ultimately
show ?thesis
using NCol_perm ‹¬ Col IAC IAB IBD› coplanar_pseudo_trans by blast
qed
moreover
have "Coplanar E F IAB C1"
proof -
have "Coplanar IAB IAC IBD E"
using ‹Col IAB IAC E› ncop__ncols by blast
moreover
have "Coplanar IAB IAC IBD F"
using ‹Col IAB IBD F› ncop__ncols by blast
moreover
have "Coplanar IAB IAC IBD IAB"
using ncop_distincts by blast
ultimately
show ?thesis
using Col_perm ‹Coplanar IAB IAC IBD C1›
‹¬ Col IAC IAB IBD› coplanar_pseudo_trans by blast
qed
moreover
have "Coplanar E F IAB C2"
proof -
have "Coplanar IAB IAC IBD E"
using ‹Col IAB IAC E› ncop__ncols by blast
moreover
have "Coplanar IAB IAC IBD F"
using ‹Col IAB IBD F› ncop__ncols by blast
moreover
have "Coplanar IAB IAC IBD IAB"
using ncop_distincts by blast
moreover
have "Coplanar IAB IAC IBD C2"
using ‹Coplanar IAB IAC IBD C2› by auto
ultimately
show ?thesis
using NCol_cases ‹¬ Col IAC IAB IBD›
coplanar_pseudo_trans by blast
qed
ultimately
show ?thesis
using assms weak_triangle_circumscription_principle_def by blast
qed
}
thus ?thesis
using bachmann_s_lotschnittaxiom_aux_R2 by blast
qed
lemma universal_posidonius_postulate__perpendicular_transversal_postulate_aux_lem:
fixes A1 A2 B1 B2 C1 C2 D1 D2 IAB IAC IBD
assumes
"IAB ≠ IAC" and
"IAB ≠ IBD" and
"A1 A2 Perp B1 B2" and
"A1 A2 Perp C1 C2" and
"B1 B2 Perp D1 D2" and
"Col A1 A2 IAB" and
"Col B1 B2 IAB" and
"Col A1 A2 IAC" and
"Col C1 C2 IAC" and
"Col B1 B2 IBD" and
"Col D1 D2 IBD" and
"Coplanar IAB IAC IBD C1" and
"Coplanar IAB IAC IBD C2" and
"Coplanar IAB IAC IBD D1" and
"Coplanar IAB IAC IBD D2" and
"postulate_of_right_saccheri_quadrilaterals"
shows "∃ I. Col C1 C2 I ∧ Col D1 D2 I"
proof -
have "thales_postulate"
using assms(16) rah__thales_postulate by blast
hence "thales_converse_postulate"
using thales_postulate__thales_converse_postulate by blast
hence "weak_triangle_circumscription_principle"
using thales_converse_postulate__weak_triangle_circumscription_principle
by blast
hence "bachmann_s_lotschnittaxiom"
using weak_triangle_circumscription_principle__bachmann_s_lotschnittaxiom
by blast
thus ?thesis
using assms(1) assms(2) assms(3) assms(4) assms(5)
assms(6) assms(7) assms(8) assms(9)
assms(10) assms(11) assms(12)
assms(13) assms(14) assms(15)
bachmann_s_lotschnittaxiom_aux_R1 by blast
qed
lemma universal_posidonius_postulate__perpendicular_transversal_postulate_aux:
assumes "universal_posidonius_postulate"
shows "∀ E F G H R P.
E G Perp R P ∧ Coplanar F H P R ∧ Col E G R ∧ Saccheri E F H G ⟶
F H Perp P R"
proof -
{
fix E F G H R P
assume "E G Perp R P" and "Coplanar F H P R" and
"Col E G R" and "Saccheri E F H G"
have "Per F E G"
using ‹Saccheri E F H G› perp_per_2 sac__perp1214 by blast
have "E G Perp E F"
using Perp_cases ‹Saccheri E F H G› sac__perp1214 by blast
have "E G ParStrict F H"
by (simp add: ‹Saccheri E F H G› sac__pars1423)
hence "E ≠ G"
using par_strict_distinct by presburger
have "E ≠ F"
using ‹E G Perp E F› perp_distinct by blast
have "P ≠ R"
using ‹E G Perp R P› perp_distinct by blast
have "E ≠ H"
using ‹Saccheri E F H G› sac_distincts by blast
have "F ≠ H"
using ‹E G ParStrict F H› par_strict_distinct by auto
have "postulate_of_right_saccheri_quadrilaterals"
proof -
obtain M1 where "M1 Midpoint E G"
using midpoint_existence by presburger
hence "Bet E M1 G"
by (simp add: midpoint_bet)
obtain M2 where "M2 Midpoint F H"
using midpoint_existence by presburger
hence "Bet F M2 H"
by (simp add: midpoint_bet)
have "Lambert M1 M2 F E"
using mid2_sac__lam6521 ‹M1 Midpoint E G› ‹M2 Midpoint F H›
‹Saccheri E F H G› by blast
have "M1 ≠ M2"
using ‹Lambert M1 M2 F E› Lambert_def by blast
have "F ≠ M2"
using ‹Lambert M1 M2 F E› Lambert_def by blast
have "F ≠ E"
using ‹Lambert M1 M2 F E› Lambert_def by blast
have "M1 ≠ E"
using ‹Lambert M1 M2 F E› Lambert_def by blast
have "Per M2 M1 E"
using ‹Lambert M1 M2 F E› Lambert_def by blast
have "Per M1 E F"
using ‹Lambert M1 M2 F E› Lambert_def by blast
have "Per M1 M2 F"
using ‹Lambert M1 M2 F E› Lambert_def by blast
have "Coplanar M1 M2 F E"
using ‹Lambert M1 M2 F E› Lambert_def by blast
have "Saccheri M1 M2 F E"
proof -
have "Cong F E M1 M2"
proof -
have "E G Par F H"
using ‹Saccheri E F H G› sac__par1423 by blast
moreover
have "Col E G E"
by (simp add: col_trivial_3)
moreover
have "Col F H F"
by (simp add: col_trivial_3)
moreover
have "E G Perp E F"
by (simp add: ‹E G Perp E F›)
moreover
have "Col E G M1"
using ‹Bet E M1 G› bet_col not_col_permutation_5 by blast
moreover
have "Col F H M2"
using ‹Bet F M2 H› bet_col col_permutation_5 by blast
moreover
have "E G Perp M1 M2"
proof -
have "E M1 Perp M1 M2"
by (metis l8_2 ‹M1 ≠ E› ‹M1 ≠ M2› ‹Per M2 M1 E› per_perp)
moreover
have "Col E M1 E"
by (simp add: col_trivial_3)
moreover
have "Col E M1 G"
by (simp add: Col_def ‹Bet E M1 G›)
ultimately
show ?thesis
using ‹E ≠ G› perp_col2 by blast
qed
ultimately
show ?thesis
using assms universal_posidonius_postulate_def
cong_left_commutativity by blast
qed
hence "Cong M1 M2 F E"
using cong_symmetry by blast
moreover
have "M1 E ParStrict M2 F"
proof -
have "M1 ≠ E"
by (simp add: ‹M1 ≠ E›)
moreover have "M2 ≠ F"
using ‹F ≠ M2› by blast
moreover have "Col E G M1"
using ‹Bet E M1 G› bet_col not_col_permutation_5 by blast
moreover
have "Col E G E"
by (simp add: col_trivial_3)
moreover
have "Col F H M2"
using ‹Bet F M2 H› bet_col col_permutation_5 by blast
moreover
have "Col F H F"
by (simp add: col_trivial_3)
moreover have "E G ParStrict F H"
by (simp add: ‹E G ParStrict F H›)
ultimately
show ?thesis
using par_strict_col4__par_strict by blast
qed
hence "M1 E OS M2 F"
using l12_6 by auto
ultimately
show ?thesis
using ‹Per M2 M1 E› ‹Per M1 E F›
by (simp add: Saccheri_def)
qed
thus ?thesis
using ‹Per M1 M2 F› per_sac__rah
existential_playfair__rah_1 by blast
qed
have "F H Perp P R"
proof (cases "E = R")
case True
hence "E P Perp F H"
proof -
have "Col F P E"
proof -
have "Coplanar G F P E"
proof -
have "Coplanar H R F G"
using True ‹E G ParStrict F H› ncoplanar_perm_11
pars__coplanar by blast
moreover have "Coplanar H R F F"
using ncop_distincts by blast
moreover have "Coplanar H R F P"
using ‹Coplanar F H P R› ncoplanar_perm_13 by blast
moreover have "Coplanar H R F E"
using True ncop_distincts by blast
ultimately show ?thesis
using ParStrict_def True ‹E G ParStrict F H›
col_trivial_1 coplanar_pseudo_trans
not_col_permutation_2 by blast
qed
moreover
have "Per P E G"
using True ‹E G Perp R P› l8_2 perp_per_2 by blast
ultimately
show ?thesis
using ‹E ≠ G› ‹Per F E G› cop_per2__col by blast
qed
hence "Col E F P"
by (simp add: col_permutation_2)
moreover
have "Per E F H"
using ‹Saccheri E F H G›
‹postulate_of_right_saccheri_quadrilaterals›
postulate_of_right_saccheri_quadrilaterals_def by blast
hence "E F Perp F H"
by (simp add: ‹E ≠ F› ‹F ≠ H› per_perp)
ultimately
show ?thesis
using True ‹P ≠ R› col_trivial_3 perp_col2 by metis
qed
thus ?thesis
using Perp_perm True by blast
next
case False
have "¬ Col F H R"
by (meson ‹Col E G R› ‹E G ParStrict F H›
not_col_permutation_1 par_not_col)
have "∃ I. Col P R I ∧ Col F H I"
proof -
have "E ≠ F"
by (simp add: ‹E ≠ F›)
moreover
have "E G Perp E F"
by (simp add: ‹E G Perp E F›)
moreover
have "E G Perp P R"
using Perp_cases ‹E G Perp R P› by blast
moreover
have "Per E F H"
using ‹Saccheri E F H G›
‹postulate_of_right_saccheri_quadrilaterals›
postulate_of_right_saccheri_quadrilaterals_def by blast
hence "E F Perp F H"
by (simp add: ‹E ≠ F› ‹F ≠ H› per_perp)
moreover
have "Col E G E"
by (simp add: col_trivial_3)
moreover
have "Col E F E"
by (simp add: col_trivial_3)
moreover
have "Col E G R"
by (simp add: ‹Col E G R›)
moreover
have "Col P R R"
by (simp add: col_trivial_2)
moreover
have "Col E F F"
using col_trivial_2 by auto
moreover
have "Col F H F"
by (simp add: col_trivial_3)
moreover
have "Coplanar E R F P"
proof -
have "Coplanar F H R P"
using ‹Coplanar F H P R› coplanar_perm_1 by blast
moreover
have "Coplanar F H R E"
by (metis False ‹Col E G E› ‹Col E G R›
‹E G ParStrict F H› par_strict_col2_par_strict
par_strict_symmetry pars__coplanar)
moreover
have "Coplanar F H R F"
using ncop_distincts by blast
moreover
have "Coplanar F H R R"
using ncop_distincts by blast
ultimately
show ?thesis
by (meson ‹¬ Col F H R› coplanar_pseudo_trans)
qed
moreover
have "Coplanar E R F R"
using ncop_distincts by blast
moreover
have "Coplanar E R F F"
using ncop_distincts by blast
moreover
have "Coplanar F H E R"
by (meson False ‹Col E G R› ‹E G ParStrict F H›
col_trivial_3 par_strict_col2_par_strict
par_strict_symmetry pars__coplanar)
hence "Coplanar E R F H"
by (simp add: coplanar_perm_16)
ultimately
show ?thesis
using False ‹postulate_of_right_saccheri_quadrilaterals›
universal_posidonius_postulate__perpendicular_transversal_postulate_aux_lem
by blast
qed
then obtain S where "Col P R S" and "Col F H S"
by blast
have "S ≠ R"
using ‹Col F H S› ‹¬ Col F H R› by auto
have "Saccheri E F S R"
proof -
have "Per F E R"
proof -
have "E ≠ G"
by (simp add: ‹E ≠ G›)
moreover
have "Per F E G"
using ‹Saccheri E F H G› perp_per_2 sac__perp1214 by blast
ultimately
show ?thesis
using ‹Col E G R› per_col by blast
qed
moreover
have "R E Perp S R"
proof -
have "Col E G E"
by (simp add: col_trivial_3)
moreover
have "Col R P S"
using Col_cases ‹Col P R S› by blast
moreover
have "Col R P R"
by (simp add: col_trivial_3)
ultimately
show ?thesis
using False ‹S ≠ R› ‹E G Perp R P›
‹Col E G R› perp_col4 by auto
qed
hence "Per E R S"
using perp_per_1 by force
moreover
have "Cong E F R S"
proof -
have "E G Par F H"
using ‹E G ParStrict F H› par_strict_par by auto
moreover
have "Col E G E"
by (simp add: col_trivial_3)
moreover
have "Col F H F"
by (simp add: col_trivial_3)
moreover
have "E G Perp R S"
proof -
have "R P Perp E G"
using Perp_perm ‹E G Perp R P› by blast
moreover
have "Col R P S"
using ‹Col P R S› not_col_permutation_4 by blast
ultimately
show ?thesis
using ‹E G Perp R P› ‹S ≠ R› perp_col1 by auto
qed
ultimately
show ?thesis
using ‹E G Perp E F› ‹Col E G R› ‹Col F H S›
assms universal_posidonius_postulate_def by blast
qed
hence "Cong E F S R"
using not_cong_1243 by blast
moreover
have "E R OS F S"
proof -
{
assume "F = S"
hence "¬ Col E G F"
by (meson ‹Col F H S› ‹E G ParStrict F H›
not_col_permutation_1 par_not_col)
have "Col E P R"
proof -
have "F E Perp E G"
using Perp_cases ‹E G Perp E F› by blast
moreover
have "P R Perp E G"
using Perp_perm ‹E G Perp R P› by blast
moreover
have "Col F P R"
by (simp add: ‹Col P R S› ‹F = S› col_permutation_2)
moreover
have "Coplanar E G E P"
using ncop_distincts by blast
moreover
have "Coplanar E G E R"
using ncop_distincts by blast
ultimately
show ?thesis
using col_cop2_perp2__col by blast
qed
hence False
by (metis False ‹Col E G R› ‹E G Perp R P›
col_trivial_3 l6_21 not_col_permutation_2
perp_not_col2)
}
moreover
have "E R ParStrict F H"
by (meson False ‹Col E G R› ‹E G ParStrict F H›
‹F ≠ H› col_trivial_2 col_trivial_3
par_strict_col4__par_strict)
ultimately
show ?thesis
using ‹Col F H S› par_strict_one_side by blast
qed
ultimately
show ?thesis
using Saccheri_def by blast
qed
have "F ≠ S"
using ‹Saccheri E F S R› sac_distincts by blast
have "F S Perp P R"
proof -
have "R ≠ P"
using ‹P ≠ R› by auto
moreover
have "Saccheri R S F E"
by (simp add: ‹Saccheri E F S R› sac_perm)
hence "Per R S F"
using ‹postulate_of_right_saccheri_quadrilaterals›
postulate_of_right_saccheri_quadrilaterals_def by blast
hence "R S Perp S F"
using ‹F ≠ S› ‹S ≠ R› per_perp by auto
moreover
have "Col R S P"
using ‹Col P R S› not_col_permutation_2 by blast
ultimately
show ?thesis
using Perp_perm perp_col by blast
qed
moreover
have "Col F S H"
using Col_cases ‹Col F H S› by blast
ultimately
show ?thesis
using ‹F ≠ H› perp_col by blast
qed
}
thus ?thesis
by blast
qed
lemma universal_posidonius_postulate__perpendicular_transversal_postulate:
assumes "universal_posidonius_postulate"
shows "perpendicular_transversal_postulate"
proof -
{
fix A B C D P Q
assume "A B Par C D" and
"A B Perp P Q" and
"Coplanar C D P Q"
{
fix P Q
assume "A B Perp P Q" and
"Coplanar C D P Q" and
"¬ Col A B P"
have "A B Par C D"
using ‹A B Par C D› by auto
hence "A B ParStrict C D ∨ (A ≠ B ∧ C ≠ D ∧ Col A C D ∧ Col B C D)"
by (simp add: Par_def)
moreover
{
assume "A B ParStrict C D"
obtain R where "Col A B R" and "Col P Q R"
using ‹A B Perp P Q› perp_inter_exists by blast
have "¬ Col A B C"
using ‹A B ParStrict C D› l12_6 one_side_not_col123 by blast
then obtain E where "Col A B E" and "A B Perp C E"
using l8_18_existence by blast
have "¬ Col A B D"
using ‹A B ParStrict C D› par_strict_not_col_4 by auto
then obtain G where "Col A B G" and "A B Perp D G"
using l8_18_existence by blast
{
assume "E = G"
hence "Col C D E"
proof -
have "E C Perp A B"
using Perp_perm ‹A B Perp C E› by blast
moreover
have "D E Perp A B"
using Perp_cases ‹A B Perp D G› ‹E = G› by blast
moreover
have "Col E D E"
by (simp add: col_trivial_3)
moreover
have "Coplanar A B C D"
by (simp add: ‹A B ParStrict C D› pars__coplanar)
moreover
have "Coplanar A B C E"
using ‹Col A B E› ncop__ncols by blast
ultimately
show ?thesis
using col_cop2_perp2__col by blast
qed
hence "Col E A B ∧ Col E C D"
using Col_cases ‹Col A B E› by blast
hence False
using ‹A B Par C D› ‹Col A B G› ‹Col C D E› ‹E = G›
‹¬ Col A B C› not_strict_par by blast
}
have "Saccheri E C D G"
proof -
have "A B Perp E C"
by (simp add: ‹A B Perp C E› perp_right_comm)
hence "Per C E G"
using ‹Col A B E› ‹Col A B G› ‹A B Perp C E›
l8_16_1 by blast
moreover
have "Per E G D"
using ‹A B Perp D G› ‹Col A B G› ‹Col A B E›
Per_perm l8_16_1 by blast
moreover
have "Cong E C D G"
proof -
have "Col C D C"
by (simp add: col_trivial_3)
moreover
have "Col C D D"
by (simp add: col_trivial_2)
moreover
have "A B Perp G D"
by (simp add:‹A B Perp D G› perp_right_comm)
ultimately
show ?thesis
using assms ‹A B Par C D› ‹Col A B E› ‹A B Perp E C›
‹Col A B G› not_cong_1243
universal_posidonius_postulate_def by blast
qed
moreover
have "C D ParStrict A B"
using ‹A B ParStrict C D› par_strict_symmetry by blast
hence "C D ParStrict E G"
using ‹Col A B E› ‹Col A B G› ‹E = G ⟹ False›
par_strict_col2_par_strict by blast
hence "E G OS C D"
by (simp add: pars__os3412)
ultimately
show ?thesis
using Saccheri_def by blast
qed
have "P ≠ Q"
using ‹A B Perp P Q› perp_distinct by auto
have "P ≠ R"
using ‹Col A B R› ‹¬ Col A B P› by auto
have "A ≠ B"
using ‹¬ Col A B C› col_trivial_1 by auto
have "C D Perp P R"
proof -
have "A B Perp R P"
by (meson ‹A B Perp P Q› ‹Col P Q R› ‹P ≠ R›
perp_col1 perp_right_comm)
hence "E G Perp R P"
using ‹Col A B E› ‹Col A B G› ‹E = G ⟹ False›
perp_col2 by blast
moreover
have "Coplanar C D P R"
using ‹Coplanar C D P Q› ‹Col P Q R› ‹P ≠ Q›
col_cop__cop by blast
moreover
have "Col E G R"
using ‹Col A B R› ‹Col A B E› ‹Col A B G›
‹A ≠ B› col3 by blast
ultimately
show ?thesis
using assms
universal_posidonius_postulate__perpendicular_transversal_postulate_aux
‹Saccheri E C D G› by blast
qed
hence "P R Perp C D"
using Perp_perm by blast
hence "C D Perp P Q"
using NCol_perm Perp_cases ‹Col P Q R› ‹P ≠ Q›
perp_col1 by blast
}
moreover
have "(A ≠ B ∧ C ≠ D ∧ Col A C D ∧ Col B C D) ⟶ C D Perp P Q"
by (meson ‹A B Par C D› ‹A B Perp P Q› not_col_distincts
not_col_permutation_2 not_strict_par perp_col2)
ultimately
have "C D Perp P Q"
by blast
}
moreover
have "¬ Col A B P ⟶ C D Perp P Q"
by (simp add: ‹A B Perp P Q› ‹Coplanar C D P Q› calculation)
moreover
have "¬ Col A B Q ⟶ C D Perp P Q"
using ‹A B Perp P Q› ‹Coplanar C D P Q› calculation(1)
ncoplanar_perm_1 perp_right_comm by blast
ultimately
have "C D Perp P Q"
using ‹A B Perp P Q› ‹Coplanar C D P Q› perp_not_col2 by blast
}
thus ?thesis
using perpendicular_transversal_postulate_def by blast
qed
lemma playfair__alternate_interior:
assumes "playfair_s_postulate"
shows "alternate_interior_angles_postulate"
proof -
{
fix A B C D
assume "A C TS B D" and
"A B Par C D"
have "¬ Col A B C"
using TS_def ‹A C TS B D› not_col_permutation_4 by blast
hence "¬ Col B A C ∧ ¬ Col A C B"
using Col_cases by blast
then obtain D' where "B A C CongA A C D'" and "A C TS D' B"
using ex_conga_ts by blast
have "B A C CongA D' C A"
by (simp add: ‹B A C CongA A C D'› conga_right_comm)
moreover
have "D' C A CongA D C A"
proof -
have "C Out D D'"
proof -
have "Col C C D ∧ Col D' C D"
proof -
have "A B Par C D"
using ‹A B Par C D› by auto
moreover
have "Col C C D"
by (simp add: col_trivial_1)
moreover
have "A B Par C D'"
proof -
have "A C TS B D'"
by (meson ‹A C TS D' B› l9_2)
moreover
have "B A C CongA D' C A"
by (simp add: ‹B A C CongA D' C A›)
ultimately
show ?thesis
using l12_21_b by blast
qed
moreover
have "Col C C D'"
using col_trivial_1 by blast
ultimately
show ?thesis
using assms playfair_s_postulate_def by blast
qed
hence "Col C D D'"
using not_col_permutation_1 by blast
moreover
have "A C OS D D'"
using ‹A C TS B D› ‹A C TS D' B› l9_2 l9_8_1 by blast
hence "C A OS D D'"
by (simp add: invert_one_side)
ultimately
show ?thesis
using col_one_side_out by blast
qed
moreover
have "C Out A A"
using ‹¬ Col B A C ∧ ¬ Col A C B›
not_col_distincts out_trivial by blast
ultimately
show ?thesis
by (simp add: out2__conga)
qed
ultimately
have "B A C CongA D C A"
by (meson conga_trans)
}
thus ?thesis
using alternate_interior_angles_postulate_def by presburger
qed
lemma playfair_bis__playfair:
assumes "alternative_playfair_s_postulate"
shows "playfair_s_postulate"
proof -
{
fix A1 A2 B1 B2 C1 C2 P
assume "A1 A2 Par B1 B2" and
"Col P B1 B2" and
"A1 A2 Par C1 C2" and
"Col P C1 C2"
have "Col C1 B1 B2 ∧ Col C2 B1 B2"
proof (cases "Col A1 A2 P")
case True
{
assume H1: "(A1 ≠ A2 ∧ B1 ≠ B2 ∧ Col A1 B1 B2 ∧ Col A2 B1 B2 ) ⟶
(Col C1 B1 B2 ∧ Col C2 B1 B2)"
have ?thesis
by (metis Par_def True ‹A1 A2 Par B1 B2› H1
‹Col P B1 B2› col_permutation_2 par_not_col)
}
moreover
have "A1 A2 ParStrict C1 C2 ⟶ ?thesis"
by (metis True ‹A1 A2 Par C1 C2› ‹Col P C1 C2›
inter_uniqueness_not_par not_col_permutation_2
par_strict_not_col_1)
ultimately
show ?thesis using ‹A1 A2 Par C1 C2›
by (metis True ‹Col P C1 C2› col_permutation_2 colx not_strict_par)
next
case False
have "A1 ≠ A2"
using False not_col_distincts by presburger
then obtain X where "P X Perp A1 A2"
using perp_exists by blast
{
assume H2: "∀ A1 A2. (A1 A2 Par B1 B2 ∧
A1 A2 Par C1 C2 ∧ ¬ Col A1 A2 P ∧
P X Perp A1 A2 ∧ ¬ Col P X A1)
⟶
(Col C1 B1 B2 ∧ Col C2 B1 B2)"
fix A1 A2
assume "A1 A2 Par B1 B2" and
"A1 A2 Par C1 C2" and
"¬ Col A1 A2 P" and
"P X Perp A1 A2"
{
assume "Col P X A1"
have "Col C1 B1 B2 ∧ Col C2 B1 B2"
using ‹A1 A2 Par B1 B2› ‹A1 A2 Par C1 C2›
‹¬ Col A1 A2 P› ‹P X Perp A1 A2›
by (metis Col_perm Perp_cases H2
l8_16_1 par_left_comm)
}
moreover
{
assume "Col P X A2"
have "Col C1 B1 B2 ∧ Col C2 B1 B2"
using ‹A1 A2 Par B1 B2› ‹A1 A2 Par C1 C2›
‹Col P X A1 ⟹ Col C1 B1 B2 ∧ Col C2 B1 B2›
‹P X Perp A1 A2› H2 ‹¬ Col A1 A2 P› by blast
}
ultimately
have "Col C1 B1 B2 ∧ Col C2 B1 B2"
using ‹A1 A2 Par B1 B2› ‹A1 A2 Par C1 C2› ‹P X Perp A1 A2›
H2 ‹¬ Col A1 A2 P› by blast
}
{
fix A1' A2'
assume "A1' A2' Par B1 B2" and
"A1' A2' Par C1 C2" and
"¬ Col A1' A2' P" and
"P X Perp A1' A2'" and
"¬ Col P X A1'"
have "Coplanar P X A1' A2'"
by (simp add: ‹P X Perp A1' A2'› perp__coplanar)
have "P ≠ X"
using ‹¬ Col P X A1'› col_trivial_1 by force
then obtain D where "P X Perp D P" and "Coplanar P X A1' D"
using ex_perp_cop by blast
hence "D ≠ P"
using perp_not_eq_2 by blast
have "P Perp2 A1' A2' D P"
proof -
have "Col P X P"
by (simp add: col_trivial_3)
moreover
have "X P Perp A1' A2'"
using Perp_cases ‹P X Perp A1' A2'› by blast
moreover
have "X P Perp P D"
using Perp_cases ‹P X Perp D P› by blast
ultimately
show ?thesis
using Perp2_def perp_right_comm by blast
qed
have "Col B1 P D ∧ Col B2 P D"
proof -
have "Col P P D"
using col_trivial_1 by auto
moreover
have "Coplanar A1' A2' P D"
by (meson ‹Coplanar P X A1' A2'› ‹Coplanar P X A1' D›
‹¬ Col P X A1'› coplanar_perm_16 l9_30 ncop_distincts)
ultimately
show ?thesis
using ‹P Perp2 A1' A2' D P› ‹¬ Col A1' A2' P›
‹A1' A2' Par B1 B2› ‹Col P B1 B2›
alternative_playfair_s_postulate_def assms
coplanar_perm_1 not_col_permutation_5 by blast
qed
moreover
have "Col C1 P D ∧ Col C2 P D"
proof -
have "Col P P D"
using col_trivial_1 by auto
moreover
have "Coplanar A1' A2' P D"
by (meson ‹Coplanar P X A1' A2'› ‹Coplanar P X A1' D›
‹¬ Col P X A1'› coplanar_perm_16 l9_30 ncop_distincts)
ultimately
show ?thesis
using ‹P Perp2 A1' A2' D P› ‹¬ Col A1' A2' P›
‹A1' A2' Par C1 C2› ‹Col P C1 C2›
alternative_playfair_s_postulate_def assms
coplanar_perm_1 not_col_permutation_5 by blast
qed
ultimately
have "Col P D C1 ∧ Col P D C2 ∧ Col P D B1 ∧ Col P D B2"
using Col_cases by blast
hence "Col C1 B1 B2 ∧ Col C2 B1 B2"
by (metis ‹D ≠ P› col3)
}
thus ?thesis
using False ‹A1 A2 Par B1 B2› ‹A1 A2 Par C1 C2›
‹P X Perp A1 A2›
‹⋀A2a A1a. ⟦∀A1 A2. A1 A2 Par B1 B2 ∧ A1 A2 Par C1 C2 ∧
¬ Col A1 A2 P ∧ P X Perp A1 A2 ∧ ¬ Col P X A1
⟶ Col C1 B1 B2 ∧ Col C2 B1 B2; A1a A2a Par B1 B2;
A1a A2a Par C1 C2; ¬ Col A1a A2a P; P X Perp A1a A2a⟧
⟹ Col C1 B1 B2 ∧ Col C2 B1 B2› by blast
qed
}
thus ?thesis
using playfair_s_postulate_def by blast
qed
lemma playfair_s_postulate_implies_midpoint_converse_postulate:
assumes "playfair_s_postulate"
shows "midpoint_converse_postulate"
proof -
{
fix A B C P Q
assume "¬ Col A B C" and
"P Midpoint B C" and
"A B Par Q P" and
"Col A C Q"
obtain X where "X Midpoint A C"
using midpoint_existence by blast
hence "Bet A X C"
by (simp add: midpoint_bet)
have "Cong A X X C"
using ‹X Midpoint A C› midpoint_cong by blast
have "A B ParStrict X P"
using triangle_mid_par ‹P Midpoint B C› ‹X Midpoint A C›
‹¬ Col A B C› by blast
have "X = Q"
proof -
have "Col A C X"
by (meson ‹Bet A X C› bet_col1 between_trivial)
moreover
have "Col P Q X"
using ‹A B Par Q P› ‹A B ParStrict X P› assms
col_trivial_3 not_col_permutation_3 par_strict_par
playfair_s_postulate_def by blast
moreover
have "Col P Q Q"
by (simp add: col_trivial_2)
ultimately
show ?thesis
using l6_21
by (metis ‹A B Par Q P› ‹Col A C Q› ‹¬ Col A B C›
not_col_distincts par_col2_par_bis par_id)
qed
hence "Q Midpoint A C"
using ‹X Midpoint A C› by auto
}
thus ?thesis
using midpoint_converse_postulate_def by blast
qed
lemma inter_dec_plus_par_perp_perp_imply_triangle_circumscription:
assumes
"perpendicular_transversal_postulate"
shows "triangle_circumscription_principle"
proof -
{
fix A B C
assume "¬ Col A B C"
hence "A ≠ B"
using col_trivial_1 by blast
then obtain C1 C2 where "C1 C2 PerpBisect A B" and
"Coplanar A B C C1" and "Coplanar A B C C2"
using perp_bisect_existence_cop by blast
have "A ≠ C"
using ‹¬ Col A B C› col_trivial_3 by blast
then obtain B1 B2 where "B1 B2 PerpBisect A C" and
"Coplanar A C B B1" and "Coplanar A C B B2"
using perp_bisect_existence_cop by blast
{
assume "∃ I. Col I B1 B2 ∧ Col I C1 C2"
then obtain CC where "Col CC B1 B2" and "Col CC C1 C2"
by auto
have "Cong A CC B CC"
proof (cases "CC = C1")
case True
thus ?thesis
using ‹C1 C2 PerpBisect A B› perp_bisect_cong2 by blast
next
case False
hence "CC ≠ C1"
by auto
have "C1 C2 PerpBisectBis A B"
using ‹C1 C2 PerpBisect A B› perp_bisect_equiv_defA by blast
then obtain I where "I PerpAt C1 C2 A B" and "I Midpoint A B"
using Perp_bisect_bis_def by blast
have "I PerpAt C1 CC A B"
by (metis False perp_in_sym ‹Col CC C1 C2›
‹I PerpAt C1 C2 A B› not_col_permutation_2
perp_in_col_perp_in)
hence "C1 CC PerpBisectBis A B"
using Perp_bisect_bis_def ‹I Midpoint A B› by blast
hence "C1 CC PerpBisect A B"
by (simp add: perp_bisect_equiv_defB)
hence "CC C1 PerpBisect A B"
by (simp add: perp_bisect_sym_1)
thus ?thesis
by (simp add: perp_bisect_cong_1)
qed
moreover
have "Cong A CC C CC"
proof (cases "CC = B1")
case True
thus ?thesis
using ‹B1 B2 PerpBisect A C› perp_bisect_cong_1 by auto
next
case False
hence "CC ≠ B1"
by auto
have "B1 B2 PerpBisectBis A C"
using ‹B1 B2 PerpBisect A C› perp_bisect_equiv_defA by blast
then obtain I where "I PerpAt B1 B2 A C" and "I Midpoint A C"
using Perp_bisect_bis_def by blast
have "I PerpAt B1 CC A C"
by (metis False perp_in_sym ‹Col CC B1 B2›
‹I PerpAt B1 B2 A C› not_col_permutation_2
perp_in_col_perp_in)
hence "B1 CC PerpBisectBis A C"
using Perp_bisect_bis_def ‹I Midpoint A C› by blast
hence "B1 CC PerpBisect A C"
by (simp add: perp_bisect_equiv_defB)
hence "CC B1 PerpBisect A C"
by (simp add: perp_bisect_sym_1)
thus ?thesis
by (simp add: perp_bisect_cong_1)
qed
moreover
have "C1 C2 Perp A B ∨ B = A"
using ‹C1 C2 PerpBisect A B› perp_bisect_perp by blast
have "Coplanar A B C CC"
proof (cases "A = B")
case True
thus ?thesis
using ‹A ≠ B› by auto
next
case False
hence "C1 C2 Perp A B"
using ‹C1 C2 Perp A B ∨ B = A› by auto
hence "Coplanar C1 C2 A B"
using perp__coplanar by simp
have "C1 ≠ C2"
using ‹C1 C2 PerpBisect A B› col_trivial_1
perp_bisect_perp perp_not_col2 by blast
moreover
have "Coplanar A B C C1"
using ‹Coplanar A B C C1› by auto
moreover
have "Coplanar A B C C2"
by (simp add: ‹Coplanar A B C C2›)
ultimately
show ?thesis
by (meson Col_cases ‹Col CC C1 C2› col_cop2__cop)
qed
ultimately
have "∃ CC. Cong A CC B CC ∧ Cong A CC C CC ∧ Coplanar A B C CC"
by auto
}
moreover
{
assume "¬ (∃ I. Col I B1 B2 ∧ Col I C1 C2)"
have "Coplanar B1 B2 C1 C2"
proof -
have "Coplanar A B C B1"
using ‹Coplanar A C B B1› ncoplanar_perm_2 by blast
moreover
have "Coplanar A B C B2"
using ‹Coplanar A C B B2› coplanar_perm_2 by blast
moreover
have "Coplanar A B C C1"
using ‹Coplanar A B C C1› by auto
moreover
have "Coplanar A B C C2"
by (simp add: ‹Coplanar A B C C2›)
ultimately
show ?thesis
by (meson ‹¬ Col A B C› coplanar_pseudo_trans)
qed
hence "B1 B2 ParStrict C1 C2"
using ‹∄I. Col I B1 B2 ∧ Col I C1 C2›
by (simp add: ParStrict_def)
hence "B1 B2 Par C1 C2"
by (simp add: Par_def)
have "C1 C2 Perp A B"
using ‹C1 C2 PerpBisect A B› perp_bisect_perp by auto
have "B1 B2 Perp A C"
using ‹B1 B2 PerpBisect A C› perp_bisect_perp by auto
hence "Coplanar C1 C2 A C ⟶ C1 C2 Perp A C"
using ‹B1 B2 Par C1 C2› assms
perpendicular_transversal_postulate_def by simp
have "A B Par A C"
proof -
have "Coplanar C1 C2 A A"
using ncop_distincts by blast
moreover
have "Coplanar C1 C2 A C"
by (meson ‹Coplanar A B C C1› ‹Coplanar A B C C2›
‹¬ Col A B C› coplanar_pseudo_trans
ncop_distincts)
moreover
have "Coplanar C1 C2 A B"
using ‹C1 C2 PerpBisect A B› perp__coplanar
perp_bisect_perp by blast
hence "Coplanar C1 C2 B A"
by (simp add: coplanar_perm_1)
moreover
have "Coplanar C1 C2 B C"
by (meson ‹Coplanar A B C C1› ‹Coplanar A B C C2›
‹¬ Col A B C› coplanar_pseudo_trans ncop_distincts)
moreover
have "A B Perp C1 C2"
using Perp_cases ‹C1 C2 Perp A B› by blast
moreover
have "A C Perp C1 C2"
using Perp_perm ‹Coplanar C1 C2 A C ⟶ C1 C2 Perp A C›
calculation(2) by blast
ultimately
show ?thesis
by (simp add: l12_9)
qed
hence "Col A B C"
by (simp add: par_id)
hence False
using ‹¬ Col A B C› by blast
hence "∃ CC. Cong A CC B CC ∧ Cong A CC C CC ∧ Coplanar A B C CC"
by simp
}
ultimately
have "∃ CC. Cong A CC B CC ∧ Cong A CC C CC ∧ Coplanar A B C CC"
by auto
}
thus ?thesis
using triangle_circumscription_principle_def by blast
qed
lemma original_euclid__original_spp:
assumes "euclid_s_parallel_postulate"
shows "alternative_strong_parallel_postulate"
proof -
{
fix A B C D P Q R
assume "B C OS A D" and
"A B C B C D SumA P Q R" and
"¬ Bet P Q R"
obtain A' where "B Midpoint A A'"
using symmetric_point_construction by blast
hence "Bet A B A'"
by (simp add: midpoint_bet)
hence "Col A B A'"
by (simp add: bet_col)
obtain D' where "C Midpoint D D'"
using symmetric_point_construction by blast
hence "Bet D C D'"
by (simp add: midpoint_bet)
hence "Col D C D'"
by (simp add: bet_col)
have "A ≠ B"
using ‹B C OS A D› os_distincts by blast
have "C ≠ B"
using ‹A B C B C D SumA P Q R› suma_distincts by blast
have "C ≠ D"
using ‹B C OS A D› os_distincts by blast
have "D ≠ D'"
using ‹Bet D C D'› ‹C ≠ D› bet_neq12__neq by blast
hence "C ≠ D'"
using ‹C Midpoint D D'› midpoint_distinct_1 by blast
have "A' ≠ B"
using ‹A ≠ B› ‹B Midpoint A A'› midpoint_not_midpoint by blast
{
assume "B C D LeA C B A'"
have "SAMS A B C B C D"
using Midpoint_def ‹A ≠ B› ‹A' ≠ B› ‹B C D LeA C B A'›
‹B Midpoint A A'› sams_chara by blast
then obtain Y where "B Out A Y ∧ C Out D Y"
using ‹B C OS A D› ‹A B C B C D SumA P Q R› ‹¬ Bet P Q R›
assms euclid_s_parallel_postulate_def by blast
hence "∃ Y. Col B A Y ∧ Col C D Y"
using out_col by blast
}
moreover
{
assume "C B A' LeA B C D"
have "SAMS D' C B C B A'"
proof -
have "Bet D' C D"
by (simp add: ‹C Midpoint D D'› l7_2 midpoint_bet)
moreover
have "C B A' LeA B C D"
by (simp add: ‹C B A' LeA B C D›)
ultimately
show ?thesis
by (metis ‹C ≠ D'› ‹C ≠ D› sams_chara)
qed
have "B ≠ C"
using ‹C ≠ B› by auto
have "D' ≠ C"
using ‹C ≠ D'› by auto
obtain P' Q' R' where "A' B C B C D' SumA P' Q' R'"
using ex_suma ‹A' ≠ B› ‹B ≠ C› ‹C ≠ D'› by blast
have "B C OS A' D'"
proof -
have "¬ Col B C A"
using ‹B C OS A D› col123__nos by blast
have "¬ Col B C D"
using ‹B C OS A D› col124__nos by blast
have "B C TS A A'"
using ‹A' ≠ B› ‹Bet A B A'› ‹¬ Col B C A› bet__ts by force
hence "B C TS A' D"
using ‹B C OS A D› l9_2 l9_8_2 by blast
moreover
have "B C TS D D'"
using ‹Bet D C D'› ‹D' ≠ C› ‹¬ Col B C D› bet__ts
invert_two_sides not_col_permutation_4 by presburger
ultimately
show ?thesis
by (meson l9_2 l9_8_1)
qed
moreover
{
assume "Bet P' Q' R'"
hence "A' B C SuppA B C D'"
using bet_suma__suppa ‹A' B C B C D' SumA P' Q' R'› by auto
have "A B C SuppA B C D"
proof -
have "B C D' CongA A B C"
proof -
have "A' B C SuppA B C D'"
by (simp add: ‹A' B C SuppA B C D'›)
moreover
have "A' B C SuppA A B C"
by (metis between_symmetry ‹A ≠ B› ‹A' ≠ B›
‹Bet A B A'› ‹C ≠ B› bet__suppa suppa_right_comm)
ultimately
show ?thesis
by (simp add: suppa2__conga456)
qed
moreover
have "A' B C CongA B C D"
proof -
have "A' B C SuppA B C D'"
using ‹A' B C SuppA B C D'› by auto
moreover
have "B C D SuppA B C D'"
using ‹Bet D C D'› ‹C ≠ B› ‹C ≠ D› ‹D' ≠ C›
bet__suppa suppa_left_comm by presburger
ultimately
show ?thesis
by (simp add: suppa2__conga123)
qed
moreover
have "B C D' SuppA A' B C"
by (simp add: ‹A' B C SuppA B C D'› suppa_sym)
ultimately
show ?thesis
by (meson conga2_suppa__suppa)
qed
hence "Bet P Q R"
using ‹A B C B C D SumA P Q R› suma_suppa__bet by auto
hence False
using ‹¬ Bet P Q R› by auto
}
ultimately
have "∃ Y. B Out A' Y ∧ C Out D' Y"
using ‹A' B C B C D' SumA P' Q' R'› assms
euclid_s_parallel_postulate_def ‹SAMS D' C B C B A'›
sams_comm sams_sym by blast
then obtain Y where "B Out A' Y" and "C Out D' Y"
by auto
have "Col B A' Y"
using ‹B Out A' Y› out_col by auto
hence "Col B A Y"
by (meson ‹A' ≠ B› ‹Col A B A'› col_permutation_4
col_trivial_2 colx)
moreover
have "Col C D' Y"
using ‹C Out D' Y› out_col by auto
hence "Col C D Y"
by (meson ‹Col D C D'› ‹D' ≠ C› col_trivial_2
colx not_col_permutation_4)
ultimately
have "∃ Y. Col B A Y ∧ Col C D Y"
by auto
}
ultimately
have "∃ Y. Col B A Y ∧ Col C D Y"
using lea_total by (metis ‹A' ≠ B› ‹C ≠ B› ‹C ≠ D›)
}
thus ?thesis
using alternative_strong_parallel_postulate_def by blast
qed
lemma original_spp__inverse_projection_postulate:
assumes "alternative_strong_parallel_postulate"
shows "inverse_projection_postulate"
proof -
{
fix A B C P Q
assume "Acute A B C" and
"B Out A P" and
"P ≠ Q" and
"Per B P Q" and
"Coplanar A B C Q"
have "B ≠ A"
using ‹Acute A B C› acute_distincts by blast
have "B ≠ P"
using ‹B Out A P› l6_3_1 by blast
have "B ≠ C"
using ‹Acute A B C› acute_distincts by blast
have "Col B A P"
using ‹B Out A P› out_col by blast
have "∃ Y. B Out C Y ∧ Col P Q Y"
proof (cases "Col A B C")
case True
{
assume "Bet C B A"
obtain x y z where "Per x y z" and "A B C LtA x y z"
using ‹Acute A B C› ‹Bet C B A› acute_not_bet
between_symmetry by blast
have "¬ (A B C LtA x y z ∧ x y z LtA A B C)"
by (simp add: not_and_lta)
have "A B C LtA x y z"
using ‹A B C LtA x y z› by auto
moreover
have "x y z LtA A B C"
using ‹Acute A B C› ‹Bet C B A› acute_not_bet
between_symmetry by blast
ultimately
have False
using ‹¬ (A B C LtA x y z ∧ x y z LtA A B C)› by blast
}
hence "¬ Bet C B A"
by auto
hence "B Out C A"
by (simp add: True col_permutation_3 l6_4_2)
hence "B Out C P"
using l6_7 ‹B Out A P› by blast
moreover
have "Col P Q P"
by (simp add: col_trivial_3)
ultimately
show ?thesis
by auto
next
case False
have "¬ Col B P Q"
using ‹B ≠ P› ‹P ≠ Q› ‹Per B P Q› l8_9 by blast
have "∃ Q0. Col Q P Q0 ∧ A B OS C Q0"
proof -
have "Q ≠ P"
using ‹P ≠ Q› by auto
moreover
have "Col A B P"
using Col_cases ‹Col B A P› by blast
moreover
have "Col Q P P"
using col_trivial_2 by blast
moreover
have "¬Col A B Q"
by (metis Out_def ‹B Out A P› ‹¬ Col B P Q›
calculation(2) col_transitivity_2)
moreover
have "¬ Col A B C"
by (simp add: False)
moreover
have "Coplanar A B Q C"
using ‹Coplanar A B C Q› coplanar_perm_1 by blast
ultimately
show ?thesis
by (simp add: cop_not_par_same_side)
qed
then obtain Q0 where "Col Q P Q0" and "A B OS C Q0"
by auto
have "¬ Col A B Q0"
using ‹A B OS C Q0› one_side_not_col124 by blast
have "P ≠ Q0"
using NCol_cases ‹Col B A P› ‹¬ Col A B Q0› by blast
then obtain D E F where "C B P B P Q0 SumA D E F"
using ex_suma ‹B ≠ C› ‹B ≠ P› by presburger
have "∃ Y. Col B C Y ∧ Col P Q0 Y"
proof -
have "B P OS C Q0"
using ‹A B OS C Q0› ‹B ≠ P› ‹Col B A P›
col_one_side invert_one_side by blast
moreover
have "C B P B P Q0 SumA D E F"
by (simp add: ‹C B P B P Q0 SumA D E F›)
moreover
{
assume "Bet D E F"
have "Per B P Q0"
using ‹Col Q P Q0› ‹P ≠ Q› ‹Per B P Q›
not_col_permutation_4 per_col by blast
hence "Per C B P"
using ‹Bet D E F› ‹C B P B P Q0 SumA D E F›
bet_per_suma__per123 by blast
hence "A B C LtA C B P"
using ‹Acute A B C› acute_per__lta ‹B ≠ C›‹B ≠ P› by simp
hence "A B C LeA C B P ∧ ¬ A B C CongA C B P"
by (simp add: lta__lea lta_not_conga)
moreover
have "A B C CongA P B C"
proof -
have "B Out P A"
using ‹B Out A P› l6_6 by blast
moreover
have "B Out C C"
using ‹B ≠ C› out_trivial by fastforce
ultimately
show ?thesis
by (simp add: out2__conga)
qed
hence"A B C CongA C B P"
by (simp add: conga_right_comm)
ultimately
have False
by blast
}
ultimately
show ?thesis
using alternative_strong_parallel_postulate_def assms by blast
qed
then obtain Y where "Col B C Y ∧ Col P Q0 Y"
by auto
have "Col A B B"
by (simp add: col_trivial_2)
hence "∃ B0. A B Perp B0 B ∧ A B OS C B0"
by (simp add: False l10_15)
then obtain B0 where "A B Perp B0 B" and "A B OS C B0"
by auto
have "¬ Col A B B0"
using ‹A B OS C B0› col124__nos by blast
have "¬ Col B C P"
by (meson False ‹B ≠ P› ‹Col B A P› col2__eq col_permutation_4)
have "B0 ≠ B"
using ‹Col A B B› ‹¬ Col A B B0› by auto
have "P ≠ Y"
using ‹Col B C Y ∧ Col P Q0 Y› ‹¬ Col B C P› by blast
have "B B0 OS C Y"
proof -
have "B B0 OS C P"
proof -
have "B0 B OS C A"
proof -
have "¬ Col B0 B A"
using ‹¬ Col A B B0› not_col_permutation_3 by blast
moreover
{
assume "Col B B0 C"
hence "A B C LtA A B C"
by (metis Perp_cases ‹A B Perp B0 B› ‹
Acute A B C› ‹B ≠ C› acute_per__lta
col_trivial_3 l8_16_1)
hence "False"
using not_and_lta by blast
}
moreover
have "A B C LeA A B B0"
using ‹A B Perp B0 B› ‹Acute A B C› ‹B ≠ A›
‹B0 ≠ B› acute_per__lta lta__lea perp_comm
perp_per_2 by presburger
hence "C InAngle A B B0"
by (simp add: ‹A B OS C B0› lea_in_angle
one_side_symmetry)
hence "C InAngle B0 B A"
using l11_24 by blast
ultimately
show ?thesis
using in_angle_one_side by blast
qed
hence "B B0 OS C A"
using invert_one_side by blast
moreover
have "B B0 OS A P"
using ‹B Out A P› calculation col124__nos
col_trivial_3 l9_19_R2 by blast
ultimately
show ?thesis
using one_side_transitivity by blast
qed
moreover
have "B B0 Par P Y"
proof -
have "Coplanar A B B P"
using ncop_distincts by blast
moreover
have "Coplanar A B B Y"
using ncop_distincts by blast
moreover
have "Coplanar A B B0 P"
by (meson ‹Col B A P› col_permutation_4 ncop__ncols)
moreover
have "Coplanar A B B0 Y"
proof -
have "¬ Col C A B"
using Col_cases False by blast
moreover
have "Coplanar C A B B0"
proof -
have "Coplanar A B B0 C"
by (meson ‹A B OS C B0› cop2_os__osp
ncop_distincts osp_distincts)
moreover
have "Coplanar A B B0 A"
using ncop_distincts by auto
moreover
have "Coplanar A B B0 B"
using ncop_distincts by blast
moreover
have "Coplanar A B B0 B0"
using ncop_distincts by blast
ultimately
show ?thesis
using coplanar_perm_18 by blast
qed
moreover
have "Coplanar C A B Y"
using ‹Col B C Y ∧ Col P Q0 Y›
col_permutation_4 ncop__ncols by blast
ultimately
show ?thesis
using coplanar_trans_1 by blast
qed
moreover
have "B B0 Perp A B"
using Perp_cases ‹A B Perp B0 B› by blast
moreover
have "B P Perp P Y"
proof -
have "B P Perp P Q"
using ‹B ≠ P› ‹P ≠ Q› ‹Per B P Q› per_perp by blast
moreover
have "Col P Q Y"
by (meson ‹Col B C Y ∧ Col P Q0 Y› ‹Col Q P Q0›
‹P ≠ Q0› col_trivial_2 colx not_col_permutation_4)
ultimately
show ?thesis
using ‹P ≠ Y› perp_col1 by blast
qed
hence "P Y Perp B P"
using Perp_perm by blast
hence "P Y Perp B A"
using ‹B Out A P› ‹B ≠ A› col_permutation_5
out_col perp_col1 by blast
hence "P Y Perp A B"
by (simp add: perp_right_comm)
ultimately
show ?thesis
using l12_9 by blast
qed
hence "B B0 ParStrict P Y"
using calculation not_col_distincts
one_side_not_col124 par_not_col_strict by blast
hence "B B0 OS P Y"
using l12_6 by blast
ultimately
show ?thesis
using one_side_transitivity by blast
qed
hence "B Out C Y"
using ‹Col B C Y ∧ Col P Q0 Y›
col_one_side_out by blast
moreover
have "Col P Q Y"
by (meson ‹Col B C Y ∧ Col P Q0 Y› ‹Col Q P Q0›
‹P ≠ Q0› col_trivial_2 colx not_col_permutation_4)
ultimately
show ?thesis
by auto
qed
}
thus ?thesis
using inverse_projection_postulate_def by auto
qed
lemma proclus_bis__proclus:
assumes "alternative_proclus_postulate"
shows "proclus_postulate"
proof -
{
fix A B C D P Q
assume "A B Par C D" and
"Col A B P" and
"¬ Col A B Q" and
"Coplanar C D P Q"
have "∃ Y. Col P Q Y ∧ Col C D Y"
proof (cases "Col C D P")
case True
thus ?thesis
using col_trivial_3 by blast
next
case False
hence "¬ Col C D P"
by simp
have "C D Par A B"
by (simp add: ‹A B Par C D› par_symmetry)
hence "C D ParStrict A B"
using False ‹Col A B P› par_not_col_strict by blast
obtain C0 where "Col C D C0" and "C D Perp P C0"
using False l8_18_existence by blast
have "¬ Col C0 A B"
by (meson ‹C D ParStrict A B› ‹Col C D C0›
col_permutation_2 par_not_col)
have "∃ A0. Col A B A0 ∧ ¬ Col C0 P A0"
proof (cases "Col C0 P A")
case True
thus ?thesis
by (metis (full_types) ‹C D ParStrict A B›
‹Col A B P› ‹Col C D C0› col_permutation_5 col_trivial_2
not_col_permutation_1 par_not_col par_strict_col_par_strict)
next
case False
thus ?thesis
using col_trivial_3 by blast
qed
then obtain A0 where "Col A B A0" and "¬ Col C0 P A0"
by blast
have "Col C0 P P"
by (simp add: col_trivial_2)
then obtain A' where "C0 P Perp A' P" and "C0 P OS A0 A'"
using ‹¬ Col C0 P A0› l10_15 by blast
have "P ≠ A0"
using ‹Col C0 P P› ‹¬ Col C0 P A0› by blast
hence "Coplanar C D P A0"
by (meson ‹C D ParStrict A B› ‹Col A B A0›
‹Col A B P› par_strict_col2_par_strict
pars__coplanar)
show ?thesis
proof (cases "Col A0 P A'")
case True
show ?thesis
proof -
have "P Perp2 A0 P C D"
proof -
have "Col P C0 P"
by (simp add: col_trivial_3)
moreover
have "C0 P Perp A0 P"
by (metis NCol_perm Perp_perm True
‹C0 P Perp A' P› ‹P ≠ A0› perp_col)
moreover
have "C0 P Perp C D"
using Perp_perm ‹C D Perp P C0› by blast
ultimately
show ?thesis
using Perp2_def by blast
qed
moreover
have "¬Col C D P"
using False by auto
moreover
have "Coplanar A0 P C D"
by (simp add: ‹Coplanar C D P A0› coplanar_perm_22)
moreover
have "Col A0 P P"
by (simp add: col_trivial_2)
moreover
have "¬Col A0 P Q"
by (metis ‹Col A B A0› ‹Col A B P›
‹P ≠ A0› ‹¬ Col A B Q› colx)
ultimately
show ?thesis
using ‹Coplanar C D P Q› assms
alternative_proclus_postulate_def by simp
qed
next
case False
hence "¬ Col A0 P A'"
by simp
have "∃ Y. Col P A0 Y ∧ Col C D Y"
proof -
have "P Perp2 A' P C D"
proof -
have "Col P C0 P"
by (simp add: col_trivial_3)
moreover
have "C0 P Perp C D"
using Perp_cases ‹C D Perp P C0› by auto
ultimately
show ?thesis
using ‹C0 P Perp A' P› Perp2_def by blast
qed
moreover
have "¬Col C D P"
by (simp add: ‹¬ Col C D P›)
moreover
have "Coplanar C D P A0"
by (meson ‹C D ParStrict A B› ‹Col A B A0›
‹Col A B P› ‹P ≠ A0› par_strict_col2_par_strict
pars__coplanar)
have "C0 P OS A0 A'"
by (simp add: ‹C0 P OS A0 A'›)
hence "Coplanar C0 P A0 A'"
by (simp add: os__coplanar)
hence "Coplanar A' P C D"
proof -
have "Coplanar C0 P A0 A'"
by (simp add: ‹Coplanar C0 P A0 A'›)
moreover have "Coplanar C0 P A0 P"
using ncop_distincts by blast
moreover have "Coplanar C0 P A0 C"
by (metis ‹Col C D C0› ‹Coplanar C D P A0›
‹¬ Col C D P› col_cop__cop coplanar_perm_20
coplanar_perm_22 not_col_distincts)
moreover have "Coplanar C0 P A0 D"
by (metis ‹Col C D C0› ‹Coplanar C D P A0›
calculation(3) col_cop2__cop coplanar_perm_21
coplanar_perm_22 ncop_distincts)
ultimately show ?thesis
using ‹¬ Col C0 P A0› coplanar_pseudo_trans by blast
qed
moreover
have "Col A' P P"
by (simp add: col_trivial_2)
moreover
have "¬ Col A' P A0"
by (simp add: False not_col_permutation_3)
ultimately
show ?thesis
using ‹Coplanar C D P A0› assms
alternative_proclus_postulate_def by simp
qed
then obtain Y where "Col P A0 Y" and "Col C D Y"
by auto
have "C D ParStrict A B"
by (simp add: ‹C D ParStrict A B›)
moreover
have "Col Y C D"
using Col_cases ‹Col C D Y› by blast
moreover
have "Col Y A B"
by (meson ‹Col A B A0› ‹Col A B P› ‹Col P A0 Y›
‹P ≠ A0› colx not_col_permutation_1)
ultimately
have "False"
using par_not_col by simp
thus ?thesis
by simp
qed
qed
}
thus ?thesis
using proclus_postulate_def by blast
qed
lemma proclus_s_postulate_implies_strong_parallel_postulate:
assumes "proclus_postulate"
shows "strong_parallel_postulate"
proof -
{
fix P Q R S T U
assume "BetS P T Q" and
"BetS R T S" and
"¬ Col P R U" and
"Coplanar P Q R U" and
"Cong P T Q T" and
"Cong R T S T"
have "∃ I. Col S Q I ∧ Col P U I"
proof (cases "Col P Q R")
case True
have "Col S Q P"
by (metis (full_types) BetS_def Col_cases
True ‹BetS P T Q› ‹BetS R T S› bet_col colx)
moreover
have "Col P U P"
by (simp add: col_trivial_3)
ultimately
show ?thesis
by auto
next
case False
show ?thesis
proof -
have "P R Par Q S"
proof -
have "T Midpoint P Q"
by (simp add: BetSEq midpoint_def ‹BetS P T Q›
‹Cong P T Q T› cong_right_commutativity)
moreover
have "T Midpoint R S"
by (meson BetSEq midpoint_def ‹BetS R T S›
‹Cong R T S T› not_cong_1243)
ultimately
show ?thesis
using False not_col_distincts sym_par by blast
qed
moreover
have "Col P R P"
by (simp add: col_trivial_3)
moreover
have "Coplanar P Q R S"
using calculation(1) coplanar_perm_2 par__coplanar by blast
hence "Coplanar Q S P U"
by (meson False ‹Coplanar P Q R U› col_permutation_1
coplanar_trans_1 ncoplanar_perm_8)
ultimately
show ?thesis
using ‹¬ Col P R U› assms proclus_postulate_def
not_col_permutation_4 by blast
qed
qed
}
thus ?thesis
using strong_parallel_postulate_def by blast
qed
lemma rectangle_existence__rah:
assumes "postulate_of_existence_of_a_right_lambert_quadrilateral"
shows "postulate_of_right_saccheri_quadrilaterals"
proof -
{
fix A B C D
assume "Saccheri A B C D"
hence "Per A B C"
using assms lam_per__rah
hypothesis_of_right_saccheri_quadrilaterals_def
postulate_of_existence_of_a_right_lambert_quadrilateral_def
by blast
}
thus ?thesis
by (simp add: postulate_of_right_saccheri_quadrilaterals_def)
qed
lemma posidonius_postulate__rah:
assumes "posidonius_postulate"
shows "postulate_of_right_saccheri_quadrilaterals"
proof -
have "∃ A1 A2 B1 B2.
Per A2 A1 B1 ∧ Per A1 A2 B2 ∧
Cong A1 B1 A2 B2 ∧ A1 A2 OS B1 B2 ∧
(∀ A3 B3.
(Col A1 A2 A3 ∧ Col B1 B2 B3 ∧
A1 A2 Perp A3 B3)
⟶ Cong A3 B3 A1 B1)"
proof-
obtain A1' A2' B1 B2 where
"¬ Col A1' A2' B1" and "B1 ≠ B2" and
"Coplanar A1' A2' B1 B2" and
H1: "∀ A3 A4 B3 B4.
(Col A1' A2' A3 ∧ Col B1 B2 B3 ∧ A1' A2' Perp A3 B3 ∧
Col A1' A2' A4 ∧ Col B1 B2 B4 ∧ A1' A2' Perp A4 B4) ⟶
Cong A3 B3 A4 B4"
using assms posidonius_postulate_def by blast
obtain A1 where "Col A1' A2' A1" and "A1' A2' Perp B1 A1"
using ‹¬ Col A1' A2' B1› l8_18_existence by blast
have "A1' ≠ A2'"
using ‹¬ Col A1' A2' B1› col_trivial_1 by blast
have "A1 ≠ B1"
using ‹A1' A2' Perp B1 A1› perp_not_eq_2 by blast
have "A1' A2' ParStrict B1 B2"
proof -
{
assume "∃ I. Col I A1' A2' ∧ Col I B1 B2"
then obtain I where "Col I A1' A2'" and "Col I B1 B2"
by blast
have "B1 ≠ I"
using ‹Col I A1' A2'› ‹¬ Col A1' A2' B1›
not_col_permutation_2 by blast
obtain B3 where "B3 Midpoint B1 I"
using midpoint_existence by presburger
hence "B1 ≠ B3"
using ‹B1 ≠ I› l7_3_2 l7_9_bis by blast
have "Bet B1 B3 I"
by (metis midpoint_bet ‹B3 Midpoint B1 I›)
hence "Col B1 B3 I"
using bet_col by auto
{
assume "Col A1' A2' B3"
have "Col B1 B3 A1'"
by (metis ‹A1' ≠ A2'› ‹B3 Midpoint B1 I›
‹Col A1' A2' B3› ‹Col B1 B3 I› ‹Col I A1' A2'› col2__eq
col_permutation_4 midpoint_distinct_1 not_col_distincts)
moreover
have "Col B1 B3 A2'"
by (metis ‹A1' ≠ A2'› ‹B3 Midpoint B1 I›
‹Col A1' A2' B3› ‹Col B1 B3 I› ‹Col I A1' A2'› col2__eq
col_permutation_4 midpoint_distinct_1 not_col_distincts)
moreover
have "Col B1 B3 B1"
by (simp add: col_trivial_3)
ultimately
have "Col A1' A2' B1"
using ‹B1 ≠ B3› col3 by blast
hence False
using ‹¬ Col A1' A2' B1› by auto
}
then obtain A3 where "Col A1' A2' A3" and "A1' A2' Perp B3 A3"
using l8_18_existence by blast
have "Cong A1 B1 A3 B3"
proof -
have "Col A1' A2' A1"
by (simp add: ‹Col A1' A2' A1›)
moreover
have "Col B1 B2 B1"
using col_trivial_3 by blast
moreover
have "A1' A2' Perp A1 B1"
using Perp_cases ‹A1' A2' Perp B1 A1› by blast
moreover
have "Col A1' A2' A3"
by (simp add: ‹Col A1' A2' A3›)
moreover
have "Col B1 B2 B3"
by (metis ‹B1 ≠ I› ‹Col B1 B3 I› ‹Col I B1 B2›
col_permutation_3 col_permutation_5 col_transitivity_2)
moreover
have "A1' A2' Perp A3 B3"
using Perp_perm ‹A1' A2' Perp B3 A3› by blast
ultimately
show ?thesis
using H1 by blast
qed
have "Cong B1 I B3 I"
proof -
{
assume "A3 = I"
have "A3 B3 Perp A1' A2'"
using Perp_cases ‹A1' A2' Perp B3 A3› by blast
hence "A1' A2' Perp B1 A3"
by (metis between_symmetry ‹A3 = I› ‹B1 ≠ B3›
‹B1 ≠ I› ‹Bet B1 B3 I› bet_col bet_col1
col3 perp_col0)
hence "A1 = A3"
using ‹A1' A2' Perp B1 A1› ‹Col A1' A2' A1›
‹Col A1' A2' A3› l8_18_uniqueness
by blast
have "B3 ≠ B1"
using ‹B1 ≠ B3› by blast
hence False
using ‹A1 = A3› ‹A3 = I› ‹Bet B1 B3 I›
‹Cong A1 B1 A3 B3› between_cong between_symmetry
cong_inner_transitivity cong_reflexivity by blast
}
hence "A3 ≠ I"
by auto
have "B3 ≠ I"
using ‹B1 ≠ I› ‹B3 Midpoint B1 I›
midpoint_distinct_1 by blast
{
assume "A1 = I"
hence "A3 = A1"
proof -
have "¬ Col A1' A2' B3"
using ‹Col A1' A2' B3 ⟹ False› by auto
moreover
have "A1' A2' Perp B3 A1"
proof -
have "Col B1 A1 B3"
using ‹A1 = I› ‹Col B1 B3 I›
col_permutation_5 by blast
moreover
have "Col B1 A1 A1"
by (simp add: col_trivial_2)
ultimately
show ?thesis
using ‹A1' A2' Perp B1 A1› ‹Col A1' A2' A1›
‹¬ Col A1' A2' B3› perp_col2_bis by blast
qed
ultimately
show ?thesis
using ‹Col A1' A2' B3 ⟹ False›
‹Col A1' A2' A3› ‹A1' A2' Perp B3 A3› ‹Col A1' A2' A1›
l8_18_uniqueness by blast
qed
hence False
using ‹A1 = I› ‹A3 ≠ I› by auto
}
hence "A1 ≠ I"
by blast
{
assume "Col B1 A1 I"
hence "A3 = I"
by (metis ‹A1 = I ⟹ False› ‹Col A1' A2' A1›
‹Col I A1' A2'› ‹¬ Col A1' A2' B1›
l6_21 not_col_distincts)
hence False
using ‹A3 ≠ I› by blast
}
moreover
have "Bet I A3 A1"
proof -
have "A3 B3 TS I A1"
proof -
have "¬ Col A3 B3 B1"
by (meson ‹A3 = I ⟹ False› ‹B1 ≠ B3›
‹Col A1' A2' A3› ‹Col B1 B3 I› ‹Col I A1' A2'›
‹¬ Col A1' A2' B1› col_permutation_3
col_permutation_4 l6_21)
have "A3 B3 TS B1 I"
using Col_perm ‹B3 ≠ I› ‹Bet B1 B3 I›
‹¬ Col A3 B3 B1› bet__ts
invert_two_sides by blast
moreover
have "A3 B3 OS B1 A1"
proof -
have "A3 B3 Par B1 A1"
proof -
have "Coplanar A1' A2' A3 B1"
by (simp add: ‹Col A1' A2' A3› col__coplanar)
moreover
have "Coplanar A1' A2' A3 A1"
using ‹Col A1' A2' A3› ncop__ncols by blast
moreover
have "Coplanar A1' A2' B3 B1"
using Coplanar_def ‹Col B1 B3 I›
‹Col I A1' A2'› col_permutation_4
not_col_permutation_2 by blast
moreover
have "Coplanar A1' A2' B3 A1"
using ‹Col A1' A2' A1› ncop__ncols by blast
moreover
have "A3 B3 Perp A1' A2'"
using Perp_perm ‹A1' A2' Perp B3 A3› by blast
moreover
have "B1 A1 Perp A1' A2'"
using Perp_perm ‹A1' A2' Perp B1 A1› by blast
ultimately
show ?thesis
using l12_9 by blast
qed
moreover
have "Col B1 A1 B1"
by (simp add: col_trivial_3)
ultimately
show ?thesis
by (meson ‹¬ Col A3 B3 B1› col_trivial_2
par_not_col_strict par_strict_one_side)
qed
ultimately
show ?thesis
using l9_2 l9_8_2 by blast
qed
moreover
have "Col A1' A2' I"
using ‹Col I A1' A2'› not_col_permutation_2 by blast
hence "Col A3 I A1"
using ‹Col A1' A2' A3› ‹Col A1' A2' A1›
‹A1' ≠ A2'› col3 by blast
ultimately
show ?thesis
using col_two_sides_bet by blast
qed
hence "I Out A3 A1"
by (simp add: ‹A3 ≠ I› bet_out)
hence "A1 I B1 CongA A3 I B3"
by (simp add: ‹B3 ≠ I› ‹Bet B1 B3 I› bet_out_1 out2__conga)
moreover
have "B1 A1 I CongA B3 A3 I"
proof -
have "Per B1 A1 I"
proof -
have "A1' A2' Perp A1 B1"
using Perp_cases ‹A1' A2' Perp B1 A1› by blast
moreover
have "Col A1' A2' I"
using ‹Col I A1' A2'› not_col_permutation_2 by blast
ultimately
show ?thesis
using Perp_cases ‹Col A1' A2' A1› l8_16_1 by blast
qed
moreover
have "Col A1' A2' I"
using Col_perm ‹Col I A1' A2'› by blast
hence "Per B3 A3 I"
using ‹Col A1' A2' A3› ‹A1' A2' Perp B3 A3› l8_16_1 by blast
ultimately
show ?thesis
by (metis ‹A1 ≠ B1› ‹A1 ≠ I› ‹A3 ≠ I›
‹Cong A1 B1 A3 B3› cong_diff l11_16)
qed
moreover
have "Cong B1 A1 B3 A3"
using ‹Cong A1 B1 A3 B3› not_cong_2143 by blast
ultimately
show ?thesis
using l11_50_2 by blast
qed
have "B3 ≠ B1"
using ‹B1 ≠ B3› by auto
hence False
by (metis ‹Bet B1 B3 I› ‹Col B1 B3 I›
‹Cong B1 I B3 I› between_equality col_cong2_bet2
col_transitivity_1 not_cong_1243)
}
thus ?thesis
using ParStrict_def ‹Coplanar A1' A2' B1 B2› by blast
qed
hence "¬ Col A1' A2' B2"
using col124__nos l12_6 by blast
then obtain A2 where "Col A1' A2' A2" and "A1' A2' Perp B2 A2"
using l8_18_existence by blast
{
assume "A1 = A2"
have "A2' A1' ParStrict B2 B1"
using ‹A1' A2' ParStrict B1 B2› par_strict_comm by blast
hence "¬ Col A2 B2 B1"
using ‹Col A1' A2' A2› not_col_permutation_3 par_not_col by blast
moreover
have "Col A1 B1 B2"
using ‹A1 = A2› Perp_cases ‹A1' A2' Perp B1 A1›
‹A1' A2' Perp B2 A2› cop_perp2__col
‹Coplanar A1' A2' B1 B2› by blast
ultimately
have False
using ‹A1 = A2› ‹¬ Col A2 B2 B1› not_col_permutation_5 by blast
}
hence "A1 ≠ A2"
by blast
have "A1' A2' Perp A1 B1"
using Perp_cases ‹A1' A2' Perp B1 A1› by blast
have "A1' A2' Perp A2 B2"
by (simp add: ‹A1' A2' Perp B2 A2› perp_right_comm)
have "Per A2 A1 B1"
by (meson ‹Col A1' A2' A1› ‹Col A1' A2' A2›
‹A1' A2' Perp A1 B1› ‹A1 ≠ A2› perp_col2 perp_per_2)
moreover
have "Per A1 A2 B2"
by (metis ‹Col A1' A2' A1› ‹Col A1' A2' A2›
‹A1' A2' Perp A2 B2› ‹A1 ≠ A2›
perp_col2 perp_per_2)
moreover
have "Cong A1 B1 A2 B2"
proof -
have "Col B1 B2 B1"
by (simp add: col_trivial_3)
moreover
have "Col B1 B2 B2"
by (simp add: col_trivial_2)
ultimately
show ?thesis
using ‹Col A1' A2' A1› ‹Col A1' A2' A2›
‹A1' A2' Perp A1 B1› ‹A1' A2' Perp A2 B2› H1 by blast
qed
moreover
have "A1' A2' OS B1 B2"
using ‹A1' A2' ParStrict B1 B2› l12_6 by force
hence "A1 A2 OS B1 B2"
using ‹Col A1' A2' A1› ‹Col A1' A2' A2› ‹A1 ≠ A2› col2_os__os by blast
moreover
{
fix A3 B3
assume "Col A1 A2 A3" and
"Col B1 B2 B3" and
"A1 A2 Perp A3 B3"
have "Col A1' A2' A3"
using ‹A1 ≠ A2› ‹Col A1 A2 A3› ‹Col A1' A2' A1›
‹Col A1' A2' A2› colx by blast
moreover
have "A1' A2' Perp A3 B3"
proof -
have "Col A1 A2 A1'"
by (metis ‹A1' ≠ A2'› ‹Col A1' A2' A1›
‹Col A1' A2' A2› col_transitivity_2
not_col_permutation_2)
moreover
have "Col A1 A2 A2'"
by (meson ‹A1' ≠ A2'› ‹Col A1' A2' A1›
‹Col A1' A2' A2› col_permutation_1
col_transitivity_2)
ultimately
show ?thesis
using ‹A1 A2 Perp A3 B3› ‹A1' ≠ A2'› perp_col2 by blast
qed
moreover
have "Col B1 B2 B1"
by (simp add:col_trivial_3)
ultimately
have "Cong A3 B3 A1 B1"
using ‹Col B1 B2 B3› ‹Col A1' A2' A1›
‹A1' A2' Perp A1 B1› H1 by blast
}
ultimately
show ?thesis
by blast
qed
then obtain A D B C where "Per D A B" and
"Per A D C" and "Cong A B D C" and "A D OS B C" and
H2: "∀ A3 B3. (Col A D A3 ∧ Col B C B3 ∧ A D Perp A3 B3) ⟶ Cong A3 B3 A B"
by blast
have "Saccheri A B C D"
using Saccheri_def ‹A D OS B C› ‹Cong A B D C›
‹Per A D C› ‹Per D A B› l8_2 not_cong_1243 by blast
have "Per A B C"
proof -
obtain M where "M Midpoint B C"
using midpoint_existence by blast
hence "Bet B M C"
using midpoint_bet by auto
moreover
obtain N where "N Midpoint A D"
using midpoint_existence by blast
hence "Bet A N D"
by (simp add: midpoint_bet)
moreover
have "A D Perp M N"
using mid2_sac__perp_lower ‹M Midpoint B C›
‹N Midpoint A D› ‹Saccheri A B C D› by blast
have "A ≠ N"
using ‹A D Perp M N› ‹N Midpoint A D›
is_midpoint_id perp_distinct by blast
moreover
have "N ≠ D"
by (metis ‹N Midpoint A D› calculation(3) midpoint_distinct_2)
moreover
have "Per M N A"
proof -
have "M N Perp A D"
using Perp_cases ‹A D Perp M N› by blast
moreover
have "Col A D N"
using ‹Bet A N D› bet_col col_permutation_5 by blast
ultimately
show ?thesis
by (meson Perp_cases col_trivial_3 l8_16_1)
qed
moreover
have "Cong M N A B"
proof -
have "Col A D N"
using bet_col calculation(2) not_col_permutation_5 by blast
moreover
have "Col B C M"
by (meson ‹Bet B M C› bet_col not_col_permutation_5)
ultimately
show ?thesis
using Cong_perm ‹A D Perp M N›
H2 perp_right_comm by blast
qed
ultimately
show ?thesis
using ‹Saccheri A B C D› t22_7__per by blast
qed
thus ?thesis
using ‹Saccheri A B C D› existential_saccheri__rah
postulate_of_existence_of_a_right_saccheri_quadrilateral_def
by blast
qed
lemma playfair__existential_playfair:
assumes "playfair_s_postulate"
shows "existential_playfair_s_postulate"
proof -
obtain PA PB PC where "¬ Bet PA PB PC" and "¬ Bet PB PC PA" and "¬ Bet PC PA PB"
using lower_dim_ex by blast
hence "¬ Col PA PB PC"
using Col_def by presburger
moreover
{
fix B1 B2 C1 C2
assume "PA PB Par B1 B2" and "Col PC B1 B2" and
"PA PB Par C1 C2" and
"Col PC C1 C2"
have "Col C1 B1 B2 ∧ Col C2 B1 B2"
using assms ‹Col PC B1 B2› ‹Col PC C1 C2› ‹PA PB Par B1 B2›
‹PA PB Par C1 C2› playfair_s_postulate_def by blast
}
ultimately show ?thesis
using existential_playfair_s_postulate_def by blast
qed
subsection "Equivalences"
lemma proclus__aristotle:
assumes "proclus_postulate"
shows "aristotle_s_axiom"
proof -
{
fix P Q A B C
assume "¬ Col A B C" and
"Acute A B C"
have "(Col B A B ∧ ¬ Col B A C) ⟶ (∃ Q. B A Perp Q B ∧ B A OS C Q)"
using l10_15 by blast
then obtain D0 where "B A Perp D0 B" and "B A OS C D0"
using Col_cases ‹¬ Col A B C› col_trivial_3 by blast
obtain D where "Bet B D0 D" and "Cong D0 D P Q"
using segment_construction by blast
have "¬ Col B A D0"
using ‹B A OS C D0› one_side_not_col124 by auto
have "A ≠ B"
using ‹¬ Col B A D0› col_trivial_1 by blast
have "D0 ≠ B"
using ‹¬ Col B A D0› col_trivial_3 by auto
have "B ≠ D"
using ‹Bet B D0 D› ‹D0 ≠ B› between_identity by blast
have "¬ Col D B A"
by (metis ‹B ≠ D› ‹Bet B D0 D› ‹¬ Col B A D0›
bet_col col_transitivity_1 not_col_permutation_1)
have "(Col D B D ∧ ¬ Col D B A) ⟶ (∃ Q. D B Perp Q D ∧ D B OS A Q)"
using l10_15 by blast
then obtain Y0 where "D B Perp Y0 D" and "D B OS A Y0"
using ‹¬ Col D B A› col_trivial_3 by blast
have "B A Perp B D"
by (metis Perp_perm os_distincts ‹B A OS C D0›
‹B A Perp D0 B› ‹Bet B D0 D› bet_col1
bet_neq21__neq l5_1 perp_col1)
have "B A Par Y0 D"
proof -
have "Coplanar D B B Y0"
using ncop_distincts by auto
moreover
have "Coplanar D B B D"
using ncop_distincts by blast
moreover
have "Coplanar D B A Y0"
by (meson ‹D B OS A Y0› inangle__coplanar ncop__ncols
ncoplanar_perm_14 ncoplanar_perm_20 one_side_symmetry
os_ts__inangle two_sides_cases)
moreover
have "Coplanar D B A D"
using ncop_distincts by blast
moreover
have "B A Perp D B"
by (simp add: Perp_perm ‹B A Perp B D›)
moreover
have "Y0 D Perp D B"
using Perp_perm ‹D B Perp Y0 D› by blast
ultimately
show ?thesis
using l12_9 by blast
qed
have "∃ Y. Col B C Y ∧ Col Y0 D Y"
proof -
have "(B A Par Y0 D ∧ Col B A B ∧
¬ Col B A C ∧ Coplanar Y0 D B C)
⟶
(∃ Y. Col B C Y ∧ Col Y0 D Y)"
using assms proclus_postulate_def by blast
moreover
have "Coplanar Y0 D B C"
proof -
have "Coplanar A D B Y0"
using ‹B A Par Y0 D› ncoplanar_perm_13
par__coplanar by blast
moreover have "Coplanar A D B D"
using ncop_distincts by blast
moreover have "Coplanar A D B B"
using ncop_distincts by blast
moreover have "Coplanar A D B C"
proof -
have "Coplanar A B C D0"
using ‹B A OS C D0› coplanar_perm_6
os__coplanar by blast
thus ?thesis
using ‹Bet B D0 D› ‹D0 ≠ B› bet_col
col_cop__cop coplanar_perm_2 coplanar_perm_5 by blast
qed
ultimately show ?thesis
using ‹¬ Col D B A› col_permutation_1
coplanar_pseudo_trans by blast
qed
moreover
have "B A Par Y0 D"
using ‹B A Par Y0 D› by auto
moreover
have "Col B A B"
by (simp add: col_trivial_3)
moreover
have "¬ Col B A C"
using Col_cases ‹¬ Col A B C› by blast
ultimately
show ?thesis
using Col_cases ‹¬ Col A B C› col_trivial_3 by blast
qed
then obtain Y where "Col B C Y" and "Col Y0 D Y"
by blast
have "B A ParStrict Y0 D"
using Col_perm Par_def ‹B A Par Y0 D›
‹D B OS A Y0› col124__nos by blast
have "¬ Col Y B A"
by (meson ‹B A ParStrict Y0 D› ‹Col Y0 D Y›
col_permutation_2 par_not_col)
have "¬ Col A B Y ⟶ (∃ X. Col A B X ∧ A B Perp Y X)"
using l8_18_existence by blast
then obtain X where "Col A B X" and "A B Perp Y X"
using Col_cases ‹¬ Col Y B A› by blast
have "B A OS C D"
by (meson ‹B A OS C D0› ‹Bet B D0 D› ‹D0 ≠ B›
bet_out out_out_one_side)
have "A B C LtA A B D"
by (metis ‹A ≠ B› ‹Acute A B C› ‹B A Perp D0 B›
‹B ≠ D› ‹Bet B D0 D› ‹D0 ≠ B› acute_per__lta
bet_col per_col perp_per_1)
{
assume "Col B C D"
{
assume "Bet C B D"
hence "B A TS C D"
using Col_cases ‹B ≠ D› ‹¬ Col A B C› bet__ts by blast
hence False
using ‹B A OS C D› l9_9 by blast
}
moreover
{
assume "¬ Bet C B D"
hence "¬ A B C CongA A B D"
by (metis ‹A ≠ B› ‹Acute A B C› ‹B A Perp D0 B›
‹B ≠ D› ‹Bet B D0 D› ‹D0 ≠ B› acute_per__lta
bet_col lta_not_conga per_col perp_per_1)
moreover
have "A B C CongA A B D"
proof -
have "B Out A A"
by (simp add: ‹A ≠ B› out_trivial)
moreover
have "B Out D C"
using ‹B A OS C D› ‹Col B C D›
col_one_side_out l6_6 by blast
ultimately
show ?thesis
by (simp add: out2__conga)
qed
ultimately
have False
by blast
}
ultimately
have False
by blast
}
hence "¬ Col B C D"
by auto
have "Y ≠ B"
using ‹¬ Col Y B A› col_trivial_1 by blast
have "Y ≠ X"
using Col_cases ‹Col A B X› ‹¬ Col Y B A› by blast
have "Y0 ≠ D"
using ‹D B OS A Y0› col_trivial_3 one_side_not_col124 by blast
have "Y ≠ D"
using ‹Col B C Y› ‹¬ Col B C D› by auto
have "B A OS C D"
using ‹B A OS C D› by auto
have "B D ParStrict X Y"
proof -
have "B D Par X Y"
proof -
have "Coplanar B A B X"
using ncop_distincts by blast
moreover
have "Coplanar B A B Y"
using ncop_distincts by auto
moreover
have "Coplanar B A D X"
using NCol_perm ‹Col A B X› ncop__ncols by blast
moreover
have "Coplanar B A D Y"
using ‹B A ParStrict Y0 D› ‹Col Y0 D Y›
‹Y0 ≠ D› col2_cop__cop col_trivial_2
pars__coplanar by blast
moreover
have "B D Perp B A"
using Perp_perm ‹B A Perp B D› by blast
moreover
have "X Y Perp B A"
using Perp_perm ‹A B Perp Y X› by blast
ultimately
show ?thesis
using l12_9 by blast
qed
moreover
have "Col X Y Y"
by (simp add: col_trivial_2)
moreover
have "¬ Col B D Y"
by (meson ‹Col B C Y› ‹Y ≠ B› ‹¬ Col B C D›
col_transitivity_2 not_col_permutation_2)
ultimately
show ?thesis
using par_not_col_strict by blast
qed
have "C InAngle A B D"
proof -
have "A B C LeA A B D"
by (simp add: ‹A B C LtA A B D› lta__lea)
moreover
have "A B OS D C"
using ‹B A OS C D› invert_one_side
one_side_symmetry by blast
ultimately
show ?thesis
by (simp add: lea_in_angle)
qed
have "B A OS D Y"
using ‹B A ParStrict Y0 D› ‹Col Y0 D Y› ‹Y ≠ D›
col_trivial_2 l12_6 par_strict_col2_par_strict by presburger
hence "B A OS C Y"
using ‹B A OS C D› one_side_transitivity by blast
have "B Out A X"
proof -
have "Col B A X"
using Col_perm ‹Col A B X› by blast
moreover
have "B D OS X A"
proof -
have "B D OS X Y"
using ‹B D ParStrict X Y› l12_6 by auto
moreover
have "B D OS Y A"
by (meson ‹B A OS C D› ‹B A OS C Y›
‹C InAngle A B D› ‹Col B C Y› ‹¬ Col A B C›
‹¬ Col B C D› col_one_side_out col_permutation_5
in_angle_two_sides invert_two_sides
not_col_permutation_4 one_side_symmetry
os_ts1324__os out_out_one_side)
ultimately
show ?thesis
using one_side_transitivity by blast
qed
hence "B D OS A X"
using one_side_symmetry by blast
ultimately
show ?thesis
using col_one_side_out by blast
qed
moreover
have "B Out C Y"
proof -
have "D ≠ Y"
using ‹Y ≠ D› by auto
moreover
have "B A ParStrict D Y0"
using ‹B A ParStrict Y0 D› par_strict_right_comm by blast
moreover
have "Col D Y0 Y"
using Col_perm ‹Col Y0 D Y› by blast
ultimately
show ?thesis
using ‹B A OS C Y› ‹Col B C Y› col_one_side_out by blast
qed
moreover
have "¬ Col B D X"
by (metis ‹Col A B X› ‹¬ Col D B A›
calculation(1) col_trivial_2 colx
not_col_permutation_3 not_col_permutation_5 out_diff2)
hence "Per B X Y"
proof -
have "B ≠ X"
using ‹¬ Col B D X› col_trivial_3 by auto
moreover
have "B A Perp Y X"
using Perp_perm ‹A B Perp Y X› by blast
moreover
have "Col B A X"
by (simp add: ‹B Out A X› out_col)
ultimately
show ?thesis
using Per_perm col_trivial_3 l8_16_1 by blast
qed
moreover
have "X ≠ B"
using ‹¬ Col B D X› col_trivial_3 by auto
have "Cong B D X Y"
proof -
have "(¬ Col B Y D ∧ Y D B CongA B X Y ∧
B Y D CongA Y B X ∧ Cong B Y Y B)
⟶
(Cong B D Y X ∧ Cong Y D B X ∧ D B Y CongA X Y B)"
using l11_50_2 by blast
moreover
have "¬ Col B Y D"
by (metis ‹Col Y0 D Y› ‹D B OS A Y0› ‹Y ≠ D›
col124__nos col_transitivity_1
not_col_permutation_2)
moreover
have "Per Y D B"
proof -
have "D Y0 Perp D B"
using Perp_perm ‹D B Perp Y0 D› by blast
moreover
have "Col D Y0 Y"
using Col_perm ‹Col Y0 D Y› by blast
ultimately
show ?thesis
using ‹Y ≠ D› perp_col perp_per_2 by presburger
qed
hence "Y D B CongA B X Y"
using ‹Per B X Y› ‹B ≠ D› ‹X ≠ B› ‹Y ≠ D›
‹Y ≠ X› l11_16 by blast
moreover
have "D Y B CongA X B Y"
proof -
have "Y B TS X D"
proof -
have "Y B TS A D"
proof -
have "Col C B Y"
using Col_perm ‹Col B C Y› by blast
moreover
have "Col C B B"
using col_trivial_2 by auto
moreover
have "C B TS A D"
using Col_cases ‹B A OS C D›
‹C InAngle A B D› ‹Col B C D ⟹ False›
col123__nos in_angle_two_sides by blast
ultimately
show ?thesis
using ‹Y ≠ B› col_preserves_two_sides by blast
qed
moreover
have "¬ Col B Y A ∨ ¬ Col B Y X"
using Col_cases ‹¬ Col Y B A› by blast
hence "Y B OS A X"
by (meson ‹B Out A X› ‹Y B TS A D›
invert_one_side l9_8_1 out_out_one_side)
ultimately
show ?thesis
using l9_8_2 by blast
qed
hence "Y B TS D X"
using l9_2 by blast
moreover
have "D Y0 Par B A"
using Par_perm ‹B A Par Y0 D› by blast
hence "D Y Par B A"
by (metis ‹Col Y0 D Y› ‹Y ≠ D›
not_col_permutation_4 par_col_par par_symmetry)
hence "D Y Par B X"
by (metis ‹Col A B X› ‹X ≠ B›
col_permutation_4 par_col_par)
hence "Y D Par B X"
using Par_perm by blast
moreover
have "alternate_interior_angles_postulate"
by (simp add: assms
playfair__alternate_interior
proclus_s_postulate_implies_strong_parallel_postulate
strong_parallel_postulate_implies_tarski_s_euclid
tarski_s_euclid_implies_playfair_s_postulate)
ultimately
show ?thesis
using alternate_interior_angles_postulate_def by blast
qed
hence "B Y D CongA Y B X"
by (simp add: conga_comm)
moreover
have "Cong B Y Y B"
by (simp add: cong_pseudo_reflexivity)
ultimately
show ?thesis
using not_cong_1243 by blast
qed
have "P Q Lt X Y"
proof -
have "P Q Le B D"
by (meson ‹Bet B D0 D› ‹Cong D0 D P Q›
bet__le2313 cong__le3412 le_transitivity)
hence "P Q Le X Y"
using ‹Bet B D0 D› ‹Cong B D X Y› ‹Cong D0 D P Q›
bet__le2313 l5_6 by blast
moreover
have "¬ Cong P Q X Y"
by (metis ‹Bet B D0 D› ‹Cong B D X Y›
‹Cong D0 D P Q› ‹D0 ≠ B› bet_le_eq
cong__le cong_symmetry l5_6)
ultimately
show ?thesis
using Lt_def by blast
qed
ultimately
have "∃ X Y. B Out A X ∧ B Out C Y ∧ Per B X Y ∧ P Q Lt X Y"
by blast
}
thus ?thesis
using aristotle_s_axiom_def by blast
qed
lemma aristotle__obtuse_case_elimination:
assumes "aristotle_s_axiom"
shows "¬ hypothesis_of_obtuse_saccheri_quadrilaterals"
proof -
{
assume "hypothesis_of_obtuse_saccheri_quadrilaterals"
obtain Q' C' P Q where "Lambert Q' C' P Q"
using ex_lambert by blast
have "Obtuse C' P Q"
using ‹HypothesisObtuseSaccheriQuadrilaterals›
‹Lambert Q' C' P Q› lam_obtuse__oah by blast
have "Q' Q ParStrict C' P"
using lam__pars1423 ‹Lambert Q' C' P Q› by force
have "∃ A'. P Q Perp A' P ∧ P Q OS C' A'"
proof -
have "Col P Q P"
by (simp add: col_trivial_3)
moreover
have "¬ Col P Q C'"
by (meson Par_strict_cases ‹Q' Q ParStrict C' P›
not_col_distincts not_col_permutation_4 par_not_col)
ultimately
show ?thesis
using l10_15 by force
qed
then obtain A' where "P Q Perp A' P" and "P Q OS C' A'"
by blast
have "Q P A' LtA C' P Q"
proof -
have "Obtuse C' P Q"
by (simp add: ‹Obtuse C' P Q›)
moreover
have "Q ≠ P"
using calculation obtuse_distincts by blast
moreover
have "P ≠ A'"
using ‹P Q Perp A' P› perp_not_eq_2 by blast
moreover
have "Per Q P A'"
using ‹P Q Perp A' P› perp_per_1 by auto
ultimately
show ?thesis
by (simp add: obtuse_per__lta)
qed
have "Q P A' LeA C' P Q"
by (simp add: ‹Q P A' LtA C' P Q› lta__lea)
have "¬ Q P A' CongA C' P Q"
by (simp add: ‹Q P A' LtA C' P Q› lta_not_conga)
have "A' InAngle Q P C'"
proof -
have "Q P A' LeA Q P C'"
by (simp add: ‹Q P A' LeA C' P Q› lea_right_comm)
moreover
have "Q P OS C' A'"
by (simp add: ‹P Q OS C' A'› invert_one_side)
ultimately
show ?thesis
by (simp add: lea_in_angle)
qed
obtain C where "Bet C' P C" and "Cong P C C' P"
by (metis between_inner_transitivity
outer_transitivity_between
point_construction_different segment_construction_2)
obtain A where "Bet A' P A" and "Cong P A A' P"
by (metis between_inner_transitivity
outer_transitivity_between point_construction_different
segment_construction_2)
have "C InAngle A P Q"
proof -
{
assume "A = P"
hence "A' = A"
using ‹Cong P A A' P› cong_diff_3 by blast
hence "A' = P"
by (simp add: ‹A = P›)
hence False
using ‹P Q Perp A' P› perp_not_eq_2 by blast
}
hence "A ≠ P"
by auto
moreover
have "Bet A' P A"
by (simp add: ‹Bet A' P A›)
moreover
have "Q InAngle A' P C"
proof -
{
assume "C = P"
hence "C = C'"
using ‹Cong P C C' P› cong_diff_4 by blast
hence "C' = P"
using ‹C = P› by blast
hence False
using ‹Obtuse C' P Q› obtuse_distincts by blast
}
hence "C ≠ P"
by blast
moreover
have "A' InAngle C' P Q"
using ‹A' InAngle Q P C'› l11_24 by blast
ultimately
show ?thesis
by (meson ‹Bet C' P C› in_angle_reverse l11_24)
qed
ultimately
show ?thesis
using in_angle_reverse by blast
qed
{
assume "Col P C' A'"
have "P Out Q Q"
using ‹C InAngle A P Q› inangle_distincts out_trivial by blast
moreover
have "P Out C' A'"
using ‹Col P C' A'› ‹P Q OS C' A'› col_one_side_out by auto
ultimately
have False
using conga_right_comm by (meson ‹¬ Q P A' CongA C' P Q› out2__conga)
}
hence "¬ Col P C' A'"
by blast
have "¬ Col P C A"
by (metis ‹Bet A' P A› ‹Bet C' P C›
‹Col P C' A' ⟹ False› ‹Cong P A A' P› ‹Cong P C C' P›
bet_col bet_col1 col_permutation_4
col_permutation_5 colx cong_diff_4)
have "¬ Col P Q C"
by (metis (no_types, lifting) ‹Bet C' P C›
‹Cong P C C' P› ‹P Q OS C' A'› bet_col bet_cong_eq
col_permutation_1 col_transitivity_1
one_side_not_col123)
have "Per A P Q"
by (metis Perp_cases ‹Bet A' P A› ‹P Q Perp A' P›
bet_col bet_col1 l8_20_1_R1 perp_col2 perp_per_2)
have "A P OS C Q"
by (metis ‹Bet A' P A› ‹C InAngle A P Q›
‹P Q OS C' A'› ‹¬ Col P C A› bet_col col124__nos
col_permutation_5 colx in_angle_one_side
not_col_distincts)
have "∃ X Y. P Out A X ∧ P Out C Y ∧ Per P X Y ∧ P Q Lt X Y"
proof -
have "¬ Col A P C"
using ‹¬ Col P C A› not_col_permutation_2 by blast
moreover
have "A P C LtA A P Q"
proof -
have "A P C LeA A P Q"
by (simp add: ‹C InAngle A P Q› inangle__lea)
moreover
{
assume "A P C CongA A P Q"
have "A P OS C Q"
by (simp add: ‹A P OS C Q›)
hence "P Out C Q"
using conga_os__out ‹A P C CongA A P Q› by blast
hence "Col P Q C"
by (meson not_col_permutation_5 out_col)
hence False
using ‹¬ Col P Q C› by auto
}
hence "¬ A P C CongA A P Q"
by blast
ultimately
show ?thesis
by (simp add: LtA_def)
qed
hence "Acute A P C"
using ‹Per A P Q› Acute_def by blast
ultimately
show ?thesis
using aristotle_s_axiom_def assms by blast
qed
then obtain X Y where "P Out A X" and "P Out C Y"
and "Per P X Y" and "P Q Lt X Y"
by blast
have "¬ Col P Q Y"
by (metis Out_def ‹P Out C Y› ‹¬ Col P Q C›
colx not_col_distincts out_col)
then obtain Z where "Col P Q Z" and "P Q Perp Y Z"
using l8_18_existence by blast
have "X Y Lt P Q"
proof -
have "X Y Lt P Z"
proof -
{
assume "P = Z"
have "P ≠ Y"
using ‹¬ Col P Q Y› not_col_distincts by blast
moreover
have "Per Q P Y"
using ‹P = Z› ‹P Q Perp Y Z› perp_per_1 by auto
moreover
have "Col P Y C"
using ‹P Out C Y› l6_6 out_col by blast
ultimately
have "Per Q P C"
using per_col by blast
have "Col P C A"
proof -
have "Coplanar P Q C A"
by (meson ‹C InAngle A P Q›
inangle__coplanar ncoplanar_perm_16)
moreover
have "P C Perp P Q"
using ‹Per Q P C›
by (metis Perp_perm os_distincts out_distinct
‹P Out C Y› ‹P Q OS C' A'› per_perp)
moreover
have "P A Perp P Q"
by (metis Perp_cases bet_col1 l5_1
‹Bet A' P A› ‹Cong P A A' P› ‹P Q Perp A' P›
bet_cong_eq perp_col2 perp_distinct)
ultimately
show ?thesis
using cop_perp2__col by blast
qed
hence False
using ‹¬ Col P C A› by auto
}
hence "P ≠ Z"
by blast
have "Lambert P X Y Z"
proof -
have "P ≠ X"
using ‹P Out A X› out_diff2 by blast
moreover
have "X ≠ Y"
using ‹P Q Lt X Y› lt_diff by blast
moreover
have "Y ≠ Z"
using ‹Col P Q Z› ‹¬ Col P Q Y› by blast
moreover
have "P ≠ Z"
using ‹P ≠ Z› by blast
moreover
have "Per X P Z"
proof -
have "P ≠ Q"
using ‹¬ Col P Q Y› col_trivial_1 by force
moreover
have "Per X P Q"
by (metis out_distinct ‹P Out A X› ‹Per A P Q› l8_3 out_col)
ultimately
show ?thesis
using ‹Col P Q Z› per_col by blast
qed
moreover
have "Per P Z Y"
proof -
have "P ≠ Z"
using calculation(4) by blast
moreover
have "P Q Perp Y Z"
using ‹P Q Perp Y Z› by auto
ultimately
show ?thesis
by (meson ‹Col P Q Z› perp_col perp_comm perp_per_2)
qed
moreover
have "Y InAngle X P Q"
proof -
have "P Out X A"
using Out_cases ‹P Out A X› by blast
moreover
have "P Out Q Q"
using ‹A' InAngle Q P C'› inangle_distincts out_trivial by blast
moreover
have "P Out Y C"
by (simp add: ‹P Out C Y› l6_6)
ultimately
show ?thesis
using ‹C InAngle A P Q› l11_25 by blast
qed
hence "Coplanar P X Y Z"
using ‹Col P Q Z› ‹¬ Col P Q Y› col_cop__cop
inangle__coplanar ncoplanar_perm_14
not_col_distincts by blast
ultimately
show ?thesis
using Lambert_def ‹Per P X Y› by blast
qed
hence "Obtuse X Y Z"
using ‹HypothesisObtuseSaccheriQuadrilaterals›
lam_obtuse__oah_2 by blast
thus ?thesis
by (simp add: ‹Lambert P X Y Z› lam_obtuse__lt)
qed
moreover
have "P Z Lt P Q"
proof -
have "Q Out P Z"
proof -
have "Col Q P Z"
using Col_cases ‹Col P Q Z› by auto
moreover
have "Q Q' OS P Z"
proof -
have "Q Q' ParStrict P Y"
by (metis ‹Bet C' P C› ‹P Out C Y›
‹Q' Q ParStrict C' P› ‹¬ Col P Q C›
bet_col not_col_distincts out_col
out_diff2 par_strict_col2_par_strict
par_strict_left_comm)
hence "Q Q' OS P Y"
using l12_6 by blast
moreover
have "Q Q' OS Y Z"
proof -
have "Q Q' Par Y Z"
proof -
have "Coplanar P Q Q Y"
using ncop_distincts by blast
moreover
have "Coplanar P Q Q Z"
using ncop_distincts by blast
moreover
have "Coplanar P Q Q' Y"
by (meson ‹Q Q' OS P Y› cop2_os__osp
ncop_distincts one_side_symmetry osp_distincts)
moreover
have "Coplanar P Q Q' Z"
using ‹Col P Q Z› ncop__ncols by blast
moreover
have "Lambert Q' C' P Q"
by (simp add: ‹Lambert Q' C' P Q›)
hence "Per C' Q' Q ∧ Per Q' Q P ∧ Per Q' C' P"
using Lambert_def by blast
hence "Q Q' Perp P Q"
by (metis os_distincts ‹Lambert Q' C' P Q›
‹P Q OS C' A'› lam__os per_perp perp_comm)
moreover
have "Y Z Perp P Q"
by (meson Perp_perm ‹P Q Perp Y Z›)
ultimately
show ?thesis
using l12_9 by blast
qed
moreover
have "Col Y Z Y"
by (simp add: col_trivial_3)
moreover
have "¬ Col Q Q' Y"
proof -
have "P C' ParStrict Q Q'"
using Par_strict_perm ‹Q' Q ParStrict C' P› by blast
moreover
have "Col Y P C"
using ‹P Out C Y› not_col_permutation_1 out_col by blast
ultimately
show ?thesis
using ‹Q Q' OS P Y› one_side_not_col124 by blast
qed
ultimately
show ?thesis
by (meson l12_6 par_not_col_strict)
qed
ultimately
show ?thesis
using one_side_transitivity by blast
qed
ultimately
show ?thesis
using col_one_side_out by blast
qed
have "P Out Z Q"
proof -
have "Col P Z Q"
using NCol_perm ‹Col P Q Z› by blast
moreover
have "P A OS Z Q"
proof -
have "P A OS Z Y"
proof -
have "P A Par Z Y"
proof -
have "Coplanar P Q P Z"
using ncop_distincts by blast
moreover
have "Coplanar P Q P Y"
using ncop_distincts by blast
moreover
have "Coplanar P Q A Z"
using ‹Col P Q Z› ncop__ncols by blast
moreover
have "Coplanar P Q A Y"
proof -
have "Coplanar Q A P C"
by (meson ‹C InAngle A P Q› inangle__coplanar ncoplanar_perm_21)
moreover
have "P ≠ C"
using ‹¬ Col P C A› not_col_distincts by blast
ultimately
show ?thesis
by (meson ‹P Out C Y› col_cop__cop
ncoplanar_perm_8 out_col)
qed
moreover
have "P A Perp P Q"
by (metis Perp_cases ‹Bet A' P A›
‹Cong P A A' P› ‹P Q Perp A' P› bet_col
bet_col1 cong_diff_3 perp_col2)
moreover
have "Z Y Perp P Q"
using Perp_perm ‹P Q Perp Y Z› by blast
ultimately
show ?thesis
using l12_9 by blast
qed
moreover
have "Col Z Y Y"
using col_trivial_2 by auto
moreover
have "¬ Col P A Y"
by (metis Out_def ‹P Out C Y› ‹¬ Col P C A›
colx not_col_distincts
not_col_permutation_5 out_col)
ultimately
show ?thesis
using l12_6 par_not_col_strict by blast
qed
moreover
have "P A OS Y Q"
by (meson ‹A P OS C Q› ‹P Out C Y›
invert_one_side not_col_distincts os_out_os)
ultimately
show ?thesis
using one_side_transitivity by blast
qed
ultimately
show ?thesis
using col_one_side_out by blast
qed
hence "Bet P Z Q"
using ‹Q Out P Z› out2__bet by blast
thus ?thesis
by (metis ‹P Q Lt X Y› bet__lt1213 calculation lt_transitivity)
qed
ultimately
show ?thesis
by (meson lt_transitivity)
qed
hence False
using ‹P Q Lt X Y› not_and_lt by blast
}
thus ?thesis
by auto
qed
lemma aristotle__acute_or_right:
assumes "aristotle_s_axiom"
shows "hypothesis_of_acute_saccheri_quadrilaterals
∨
hypothesis_of_right_saccheri_quadrilaterals"
proof -
{
assume "hypothesis_of_obtuse_saccheri_quadrilaterals"
have "hypothesis_of_acute_saccheri_quadrilaterals ∨
hypothesis_of_right_saccheri_quadrilaterals"
using aristotle__obtuse_case_elimination assms
saccheri_s_three_hypotheses by blast
}
thus ?thesis
using saccheri_s_three_hypotheses
aristotle__obtuse_case_elimination assms by blast
qed
lemma Axiom1ProofIsabelleHOL:
shows "Axiom1"
using Axiom1_def by blast
theorem equivalent_postulates_without_decidability_of_intersection_of_lines:
shows "(Postulate07 ⟷ Postulate12) ∧
(Postulate12 ⟷ Postulate08) ∧
(Postulate08 ⟷ Postulate06) ∧
(Postulate06 ⟷ Postulate09) ∧
(Postulate09 ⟷ Postulate02) ∧
(Postulate02 ⟷ Postulate11) ∧
(Postulate11 ⟷ Postulate10) ∧
(Postulate10 ⟷ Postulate05)"
proof -
have "Postulate09 ⟷ Postulate10"
proof -
have "Postulate09 ⟶ Postulate10"
using Postulate09_def Postulate10_def
par_perp_perp_implies_par_perp_2_par by auto
moreover
have "Postulate10 ⟶ Postulate09"
using Postulate09_def Postulate10_def
par_perp_2_par_implies_par_perp_perp by blast
ultimately
show ?thesis
by blast
qed
moreover
have "Postulate09 ⟶ Postulate02"
by (simp add: Postulate02_def Postulate09_def
par_perp_perp_implies_playfair)
moreover
have "Postulate02 ⟶ Postulate11"
using Postulate02_def Postulate11_def
playfair__universal_posidonius_postulate by blast
moreover
have "Postulate11 ⟶ Postulate09"
by (simp add: Postulate09_def Postulate11_def
universal_posidonius_postulate__perpendicular_transversal_postulate)
moreover
have "Postulate02 ⟷ Postulate05"
proof -
have "Postulate02 ⟶ Postulate05"
using Postulate02_def Postulate05_def
playfair_implies_par_trans by auto
moreover
have "Postulate05 ⟶ Postulate02"
using Postulate02_def Postulate05_def
par_trans_implies_playfair by blast
ultimately
show ?thesis
by blast
qed
moreover
have "Postulate02 ⟶ Postulate07"
using Postulate07_def Postulate11_def calculation(3)
par_perp_perp_implies_playfair playfair__alternate_interior
universal_posidonius_postulate__perpendicular_transversal_postulate by blast
moreover
have "Postulate07 ⟶ Postulate12"
using Postulate07_def Postulate12_def
alternate_interior__playfair_bis by blast
moreover
have "Postulate12 ⟶ Postulate02"
using Postulate11_def Postulate12_def calculation(2)
calculation(4) playfair__universal_posidonius_postulate
playfair_bis__playfair by blast
moreover
have "Postulate07 ⟷ Postulate08"
proof -
have "Postulate07 ⟶ Postulate08"
using Postulate07_def Postulate08_def
alternate_interior__consecutive_interior by auto
moreover
have "Postulate08 ⟶ Postulate07"
using Postulate07_def Postulate08_def
consecutive_interior__alternate_interior by blast
ultimately
show ?thesis
by blast
qed
moreover
have "Postulate02 ⟷ Postulate06"
proof -
have "Postulate02 ⟶ Postulate06"
using Postulate02_def Postulate06_def
playfair_s_postulate_implies_midpoint_converse_postulate by blast
moreover
have "Postulate06 ⟶ Postulate02"
using Postulate02_def Postulate06_def
midpoint_converse_postulate_implies_playfair by auto
ultimately
show ?thesis
by blast
qed
ultimately
show ?thesis
by blast
qed
lemma Cycle_1:
shows "(Postulate01 ⟶ Postulate02) ∧
(Postulate09 ⟶ Postulate15) ∧
(Postulate15 ⟶ Postulate01)"
proof -
have "Postulate01 ⟶ Postulate02"
by (simp add: Postulate01_def Postulate02_def
tarski_s_euclid_implies_playfair_s_postulate)
moreover
have "Postulate09 ⟶ Postulate15"
using inter_dec_plus_par_perp_perp_imply_triangle_circumscription
Postulate09_def Postulate15_def by fastforce
moreover
have "Postulate15 ⟶ Postulate01"
by (simp add: Postulate01_def Postulate15_def
triangle_circumscription_implies_tarski_s_euclid)
ultimately
show ?thesis
by auto
qed
lemma Cycle_2:
shows "(Postulate01 ⟷ Postulate13) ∧
(Postulate13 ⟷ Postulate14) ∧
(Postulate14 ⟷ Postulate16) ∧
(Postulate16 ⟷ Postulate17) ∧
(Postulate17 ⟷ Postulate18) ∧
(Postulate18 ⟷ Postulate19) ∧
(Postulate19 ⟷ Postulate20) ∧
(Postulate20 ⟷ Postulate01)"
proof -
have "Postulate01 ⟶ Postulate17"
using Postulate01_def Postulate17_def
tarski_s_euclid_implies_euclid_5 by blast
moreover
have "Postulate17 ⟶ Postulate20"
by (simp add: Postulate17_def Postulate20_def
euclid_5__original_euclid)
moreover
have "Postulate20 ⟶ Postulate19"
using Postulate19_def Postulate20_def
original_euclid__original_spp by blast
moreover
have "Postulate19 ⟶ Postulate16"
by (simp add: Postulate16_def Postulate19_def
original_spp__inverse_projection_postulate)
moreover
have "Postulate16 ⟶ Postulate14"
using Postulate14_def Postulate16_def
inverse_projection_postulate__proclus_bis by blast
moreover
have "Postulate14 ⟶ Postulate13"
by (simp add: Postulate13_def Postulate14_def
proclus_bis__proclus)
moreover
have "Postulate13 ⟶ Postulate18"
by (simp add: Postulate13_def Postulate18_def
proclus_s_postulate_implies_strong_parallel_postulate)
moreover
have "Postulate18 ⟶ Postulate01"
using Postulate01_def Postulate18_def
strong_parallel_postulate_implies_tarski_s_euclid by blast
ultimately
show ?thesis
by auto
qed
lemma Cycle_3:
shows "(Postulate03 ⟷ Postulate21) ∧
(Postulate21 ⟷ Postulate22) ∧
(Postulate22 ⟷ Postulate23) ∧
(Postulate23 ⟷ Postulate24) ∧
(Postulate24 ⟷ Postulate25) ∧
(Postulate25 ⟷ Postulate26) ∧
(Postulate26 ⟷ Postulate27) ∧
(Postulate27 ⟷ Postulate28) ∧
(Postulate28 ⟷ Postulate29) ∧
(Postulate29 ⟷ Postulate30) ∧
(Postulate30 ⟷ Postulate03)"
proof -
have "Postulate03 ⟶ Postulate21"
using Postulate03_def Postulate21_def
triangle__existential_triangle by blast
moreover
have "Postulate21 ⟶ Postulate27"
using Postulate21_def Postulate27_def
existential_triangle__rah by fastforce
moreover
have "Postulate27 ⟶ Postulate03"
by (simp add: Postulate03_def
Postulate27_def rah__triangle)
moreover
have "Postulate27 ⟷ Postulate28"
proof -
have "Postulate27 ⟶ Postulate28"
by (simp add: Postulate27_def Postulate28_def
rah__existential_saccheri)
moreover
have "Postulate28 ⟶ Postulate27"
by (simp add: Postulate27_def Postulate28_def
existential_saccheri__rah)
ultimately show ?thesis
by auto
qed
moreover
have "Postulate27 ⟶ Postulate29"
using Postulate27_def Postulate29_def
rah__rectangle_principle by fastforce
moreover
have "Postulate29 ⟶ Postulate30"
using Postulate29_def Postulate30_def
rectangle_principle__rectangle_existence by blast
moreover
have "Postulate30 ⟶ Postulate27"
by (simp add: Postulate27_def Postulate30_def
rectangle_existence__rah)
moreover
have "Postulate27 ⟷ Postulate22"
proof -
have "Postulate27 ⟶ Postulate22"
using Postulate22_def Postulate27_def
rah__posidonius by blast
moreover
have "Postulate22 ⟶ Postulate27"
using Postulate22_def Postulate27_def
posidonius_postulate__rah by blast
ultimately
show ?thesis
by auto
qed
moreover
have "Postulate27 ⟶ Postulate24"
using Postulate24_def Postulate27_def
rah__thales_postulate by presburger
moreover
have "Postulate24 ⟶ Postulate25"
by (simp add: Postulate24_def Postulate25_def
thales_postulate__thales_converse_postulate)
moreover
have "Postulate25 ⟶ Postulate26"
using Postulate25_def Postulate26_def
thales_converse_postulate__thales_existence by fastforce
moreover
have "Postulate26 ⟶ Postulate27"
using Postulate26_def Postulate30_def calculation(7)
rah__rectangle_principle
rectangle_principle__rectangle_existence thales_existence__rah by blast
moreover
have "Postulate27 ⟷ Postulate23"
proof -
have "Postulate27 ⟶ Postulate23"
using Postulate23_def Postulate26_def calculation(10)
calculation(11) calculation(9) rah__similar
thales_existence__rah by blast
moreover
have "Postulate23 ⟶ Postulate27"
using Postulate22_def Postulate23_def
‹Postulate27 = Postulate22› rah__posidonius
similar__rah by blast
ultimately
show ?thesis
by auto
qed
ultimately
show ?thesis by blast
qed
lemma InterCycle1:
assumes "greenberg_s_axiom" and "Postulate03"
shows "Postulate12"
using greenberg_s_axiom_def Postulate03_def Postulate12_def
assms(1) assms(2) triangle__playfair_bis by blast
lemma InterCycle2:
assumes "Postulate07"
shows "Postulate03"
using Postulate03_def Postulate07_def
alternate_interior__triangle assms by blast
lemma InterCycle3:
assumes "Postulate01"
shows "Postulate02"
using Postulate01_def Postulate02_def assms
tarski_s_euclid_implies_playfair_s_postulate by blast
lemma InterCycle4:
assumes "Postulate09"
shows "Postulate15"
using Postulate09_def Postulate15_def assms
inter_dec_plus_par_perp_perp_imply_triangle_circumscription
by auto
lemma InterAx1_R1:
assumes "Postulate13"
shows "aristotle_s_axiom"
using proclus__aristotle aristotle_s_axiom_def
Postulate13_def assms by blast
lemma InterAx1:
assumes "Postulate01"
shows "aristotle_s_axiom"
using InterAx1_R1 Postulate01_def Postulate13_def
assms euclid_5__original_euclid
inverse_projection_postulate__proclus_bis
original_euclid__original_spp original_spp__inverse_projection_postulate
proclus_bis__proclus
tarski_s_euclid_implies_euclid_5 by blast
lemma InterAx3:
assumes "greenberg_s_axiom" and "Postulate02"
shows "Postulate01"
proof -
have "Postulate03"
using Postulate02_def Postulate03_def alternate_interior__triangle
assms(2) playfair__alternate_interior by blast
hence "Postulate12"
using InterCycle1 assms(1) by auto
thus ?thesis
using greenberg_s_axiom_def Postulate01_def Postulate07_def
alternate_interior__proclus assms(1)
equivalent_postulates_without_decidability_of_intersection_of_lines
proclus_s_postulate_implies_strong_parallel_postulate
strong_parallel_postulate_implies_tarski_s_euclid by blast
qed
lemma InterAx4:
assumes "Postulate01"
shows "Axiom1"
by (simp add: Axiom1ProofIsabelleHOL)
lemma InterAx5:
assumes "Postulate02"
shows "Postulate01"
proof -
have "Postulate15"
using InterCycle4 Postulate02_def Postulate09_def
assms playfair__universal_posidonius_postulate
universal_posidonius_postulate__perpendicular_transversal_postulate
by blast
thus ?thesis
using Postulate01_def Postulate15_def
triangle_circumscription_implies_tarski_s_euclid by blast
qed
lemma PPR_Theorem_4_bis:
assumes "Postulate01"
shows "greenberg_s_axiom"
using aristotle_s_axiom_def greenberg_s_axiom_def InterAx1 InterAx5
aristotle__greenberg assms by blast
lemma PPR_Proposition_6:
assumes "archimedes_axiom"
shows "aristotle_s_axiom"
using t22_24 archimedes_axiom_def aristotle_s_axiom_def assms by blast
lemma InterCycle1bis:
assumes "Postulate01"
shows "Postulate03 ⟶ Postulate12"
using Cycle_1 assms
equivalent_postulates_without_decidability_of_intersection_of_lines by blast
lemma weak_inverse_projection_postulate__weak_tarski_s_parallel_postulate:
assumes "weak_inverse_projection_postulate"
shows "weak_tarski_s_parallel_postulate"
proof -
{
fix A B C P T
assume "Per A B C" and
"T InAngle A B C" and
"P ≠ T" and
"P B A CongA P B C" and
"Per B P T" and
"Coplanar A B C P"
have "B ≠ P"
using ‹P B A CongA P B C› conga_diff45 by blast
have "B ≠ A"
using ‹P B A CongA P B C› conga_diff2 by blast
have "B ≠ C"
using ‹T InAngle A B C› inangle_distincts by blast
have "P InAngle A B C"
by (meson conga_inangle_per2__inangle
‹Coplanar A B C P› ‹P B A CongA P B C› ‹Per A B C›
‹Per B P T› ‹T InAngle A B C›)
have "P B A P B A SumA A B C"
proof -
have "A B P P B C SumA A B C"
by (simp add: inangle__suma ‹P InAngle A B C›)
moreover have "A B P CongA P B A"
using ‹B ≠ A› ‹B ≠ P› conga_pseudo_refl by auto
moreover have "P B C CongA P B A"
using ‹P B A CongA P B C› conga_sym_equiv by force
moreover have "A B C CongA A B C"
using ‹B ≠ A› ‹B ≠ C› conga_refl by auto
ultimately show ?thesis
using conga3_suma__suma by blast
qed
have "Acute P B A"
by (meson conga_inangle_per__acute ‹P B A CongA P B C›
‹P InAngle A B C› ‹Per A B C› acute_sym)
have "B Out P P"
using ‹B ≠ P› out_trivial by auto
{
assume "Col A B C"
hence "¬ Per A B C"
using ‹B ≠ A› ‹B ≠ C› per_not_col by force
hence False
using ‹Per A B C› by blast
}
hence "¬ Col A B C"
by blast
have "Coplanar P B A T"
by (metis Col_cases ‹Coplanar A B C P› ‹T InAngle A B C› ‹¬ Col A B C›
coplanar_perm_12 coplanar_perm_21 coplanar_trans_1 inangle__coplanar)
hence "∃ X. B Out A X ∧ Col P T X"
using ‹Acute P B A› ‹Per A B C› ‹P B A P B A SumA A B C› ‹B Out P P›
‹P ≠ T› ‹Per B P T›
assms weak_inverse_projection_postulate_def
by blast
then obtain X where "B Out A X" and "Col P T X"
by blast
have "∃ Y. B Out C Y ∧ Col P T Y"
proof -
have "Acute P B C"
using ‹Acute P B A› ‹P B A CongA P B C› acute_conga__acute by blast
moreover have "Per C B A"
using Per_perm ‹Per A B C› by blast
moreover have "P B C P B C SumA C B A"
by (metis Tarski_neutral_dimensionless.conga3_suma__suma
Tarski_neutral_dimensionless_axioms ‹B ≠ A› ‹B ≠ C›
‹P B A CongA P B C› ‹P B A P B A SumA A B C› conga_pseudo_refl)
moreover have "Coplanar P B C T"
by (meson ‹Col A B C ⟹ False› ‹Coplanar A B C P›
‹T InAngle A B C› coplanar_pseudo_trans inangle__coplanar
ncop_distincts ncoplanar_perm_18)
ultimately show ?thesis
using ‹B Out P P› ‹P ≠ T› ‹Per B P T›
assms weak_inverse_projection_postulate_def
by blast
qed
then obtain Y where "B Out C Y" and "Col P T Y"
by blast
hence "∃ X Y. (B Out A X ∧ Col T P X ∧ B Out C Y ∧ Col T P Y)"
using ‹B Out A X› ‹Col P T X› not_col_permutation_4 by blast
}
moreover
{
assume LEMME: "∀ A B C P T. Per A B C ∧ T InAngle A B C ∧
P ≠ T ∧ P B A CongA P B C ∧ Per B P T ∧
Coplanar A B C P
⟶
(∃ X Y. (B Out A X ∧ Col T P X ∧ B Out C Y ∧ Col T P Y))"
{
fix A B C T
assume "Per A B C" and "T InAngle A B C"
obtain P0 where "P0 InAngle A B C" and "P0 B A CongA P0 B C"
using ‹T InAngle A B C› angle_bisector inangle_distincts by blast
have "A ≠ B"
using ‹P0 B A CongA P0 B C› conga_diff2 by auto
have "C ≠ B"
using ‹T InAngle A B C› inangle_distincts by blast
have "T ≠ B"
using ‹T InAngle A B C› inangle_distincts by blast
have "P0 ≠ B"
using ‹P0 B A CongA P0 B C› conga_diff45 by blast
{
assume "Col A B C"
hence "¬ Per A B C"
using ‹A ≠ B› ‹C ≠ B› per_not_col by force
hence False
by (simp add: ‹Per A B C›)
}
hence "¬ Col A B C"
by blast
have "¬ Col P0 B A"
proof -
have "P0 B A P0 B A SumA A B C"
proof -
have "A B P0 P0 B C SumA A B C"
using ‹P0 InAngle A B C› inangle__suma by force
moreover have "A B P0 CongA P0 B A"
using ‹A ≠ B› ‹P0 ≠ B› conga_pseudo_refl by auto
moreover have "P0 B C CongA P0 B A"
using ‹P0 B A CongA P0 B C› not_conga_sym by blast
moreover have "A B C CongA A B C"
by (simp add: ‹A ≠ B› ‹C ≠ B› conga_refl)
ultimately show ?thesis
using conga3_suma__suma by blast
qed
thus ?thesis
using ‹¬ Col A B C› col2_suma__col by blast
qed
{
assume "Col B P0 T"
have "∃ T'. T' InAngle A B C ∧ B T Perp T T'"
proof -
obtain T0 where "B P0 Perp T0 T" and "B P0 OS A T0"
using Col_cases ‹Col B P0 T› ‹¬ Col P0 B A› l10_15 by blast
have "∃ T'. T' InAngle A B C ∧ T ≠ T' ∧ Col T T0 T'"
proof -
have "¬ B Out A C"
using Col_cases ‹¬ Col A B C› out_col by blast
moreover have "T InAngle A B C"
by (simp add: ‹T InAngle A B C›)
moreover have "Coplanar A B C T0"
proof -
have "Coplanar P0 B A A"
using ncop_distincts by auto
moreover have "Coplanar P0 B A B"
using ncop_distincts by auto
moreover have "Coplanar P0 B A C"
using ‹P0 InAngle A B C› inangle__coplanar ncoplanar_perm_2 by blast
moreover have "Coplanar P0 B A T0"
by (simp add: ‹B P0 OS A T0› invert_one_side os__coplanar)
ultimately show ?thesis
using ‹¬ Col P0 B A› coplanar_perm_6 coplanar_trans_1 by blast
qed
ultimately show ?thesis
using cop_inangle__ex_col_inangle by blast
qed
then obtain T' where "T' InAngle A B C" and
"T ≠ T'" and "Col T T0 T'" by blast
have "B P0 Perp T T'"
by (metis ‹B P0 Perp T0 T› ‹Col T T0 T'› ‹T ≠ T'›
not_col_distincts perp_col2_bis)
hence "B T Perp T T'"
by (metis perp_col ‹Col B P0 T› ‹T ≠ B›)
thus ?thesis
using ‹T' InAngle A B C› by blast
qed
then obtain T' where "T' InAngle A B C" and "B T Perp T T'"
by blast
have "T ≠ T'"
using ‹B T Perp T T'› perp_not_eq_2 by auto
have "∃ X Y. B Out A X ∧ Col T' T X ∧ B Out C Y ∧ Col T' T Y"
proof -
have "T B A CongA T B C"
using ‹T ≠ B› ‹P0 B A CongA P0 B C› ‹Col B P0 T› col_conga__conga by blast
moreover have "Per B T T'"
using Perp_cases ‹B T Perp T T'› perp_per_1 by blast
moreover have "Coplanar A B C T"
using ‹T InAngle A B C› coplanar_perm_9 inangle__coplanar by blast
ultimately show ?thesis
using LEMME ‹Per A B C› ‹T' InAngle A B C› ‹T ≠ T'› by blast
qed
then obtain X Y where "B Out A X" and "Col T' T X" and "B Out C Y" and "Col T' T Y"
by blast
hence "∃ X Y. B Out A X ∧ B Out C Y ∧ Col X T Y"
by (metis Col_cases ‹T ≠ T'› col_transitivity_2)
}
moreover
{
assume "¬ Col B P0 T"
obtain P where "Col B P0 P" and "B P0 Perp T P"
using ‹¬ Col B P0 T› l8_18_existence by blast
have "B Out P P0"
proof -
have "Acute T B P0"
using ‹Per A B C› ‹T InAngle A B C› ‹P0 B A CongA P0 B C›
‹P0 InAngle A B C› acute_sym conga_inangle2_per__acute by blast
thus ?thesis
by (meson ‹B P0 Perp T P› ‹Col B P0 P› acute_col_perp__out)
qed
have "P ≠ T"
using ‹Col B P0 P› ‹¬ Col B P0 T› by blast
have "P ≠ B"
using ‹B Out P P0› l6_3_1 by auto
have "∃ X Y. B Out A X ∧ B Out C Y ∧ Col X T Y"
proof -
have "∃ X Y. (B Out A X ∧ Col T P X ∧ B Out C Y ∧ Col T P Y)"
proof -
have "P B A CongA P B C"
by (metis col_conga__conga ‹Col B P0 P› ‹P ≠ B› ‹P0 B A CongA P0 B C›)
moreover have "Per B P T"
proof -
have "B ≠ P"
using ‹P ≠ B› by auto
moreover have "B P0 Perp T P"
by (simp add: ‹B P0 Perp T P›)
moreover have "Col B P0 P"
by (simp add: ‹Col B P0 P›)
ultimately show ?thesis
using col_trivial_3 l8_16_1 l8_2 by blast
qed
moreover have "Coplanar A B C P"
using ‹Col B P0 P› ‹P0 InAngle A B C› ‹P0 ≠ B› col_cop__cop
coplanar_perm_11 inangle__coplanar ncoplanar_perm_2 by blast
ultimately show ?thesis
using ‹Per A B C› ‹T InAngle A B C› ‹P ≠ T› LEMME by blast
qed
then obtain X Y where "B Out A X ∧ Col T P X ∧ B Out C Y ∧ Col T P Y" by blast
thus ?thesis
using ‹P ≠ T› col2__eq col_permutation_2 by blast
qed
}
ultimately
have "∃ X Y. B Out A X ∧ B Out C Y ∧ Col X T Y"
by blast
then obtain X Y where "B Out A X" and "B Out C Y" and "Col X T Y"
by blast
have "Y ≠ B"
using Out_def ‹B Out C Y› by auto
have "X ≠ B"
using Out_def ‹B Out A X› by auto
have "¬ Col A B Y"
using Out_cases ‹A ≠ B› ‹B Out C Y› ‹¬ Col A B C› col_out2_col out_trivial by blast
have "X ≠ Y"
using ‹B Out A X› ‹¬ Col A B Y› not_col_permutation_4 out_col by blast
have "Bet X T Y"
proof -
{
assume "T = X" and "T = Y"
have "Bet X T Y"
using ‹T = X› ‹T = Y› ‹X ≠ Y› by auto
}
moreover
{
assume "T ≠ X" and "T ≠ Y"
have "B A OS T C"
by (metis Col_cases ‹B Out A X› ‹Col X T Y› ‹T InAngle A B C› ‹T ≠ X›
‹¬ Col A B C› ‹¬ Col A B Y› colx in_angle_one_side invert_one_side out_col)
hence "B A OS T Y"
using ‹B Out C Y› out_out_one_side by blast
hence "X B OS T Y"
by (meson ‹B Out A X› ‹X ≠ B› col2_os__os not_col_distincts out_col)
hence "X Out T Y"
using ‹Col X T Y› col_one_side_out by blast
have "B C OS T A"
proof -
have "¬ Col C B A"
using ‹¬ Col A B C› not_col_permutation_3 by blast
moreover have "¬ Col B C T"
by (metis Col_def Out_def ‹B Out A X› ‹B Out C Y› ‹Col X T Y› ‹T ≠ Y›
‹¬ Col A B C› col_permutation_1 colx not_col_distincts)
moreover have "T InAngle C B A"
using ‹T InAngle A B C› l11_24 by blast
ultimately show ?thesis
using in_angle_one_side invert_one_side by blast
qed
hence "B C OS X T"
using ‹B Out A X› col_trivial_3 one_side_symmetry os_out_os by blast
hence "Y B OS X T"
using ‹B Out C Y› ‹Y ≠ B› col2_os__os col_trivial_3 out_col by blast
moreover hence "Y Out X T"
using Col_def ‹Col X T Y› col_one_side_out by blast
ultimately have "Bet X T Y"
using out2__bet ‹X Out T Y› by blast
}
moreover
{
assume "T ≠ X" and "T = Y"
have "Bet X T Y"
by (simp add: ‹T = Y› between_trivial)
}
moreover
{
assume "T = X" and "T ≠ Y"
have "Bet X T Y"
by (simp add: ‹T = X› between_trivial2)
}
ultimately show ?thesis
by auto
qed
hence "∃ X Y. B Out A X ∧ B Out C Y ∧ Bet X T Y"
using ‹B Out A X› ‹B Out C Y› by auto
}
hence "weak_tarski_s_parallel_postulate"
using weak_tarski_s_parallel_postulate_def by blast
}
ultimately
have "weak_tarski_s_parallel_postulate"
by blast
thus ?thesis
by blast
qed
lemma weak_tarski_s_parallel_postulate__weak_inverse_projection_postulate_aux :
assumes "weak_tarski_s_parallel_postulate"
shows "∀ A B C P T.
Per A B C ∧ T InAngle A B C ∧
P ≠ T ∧ P B A CongA P B C ∧ Per B P T ∧ Coplanar A B C P
⟶
((∃ X. (B Out A X ∧ Col T P X)) ∨ (∃ Y. (B Out C Y ∧ Col T P Y)))"
proof -
{
fix A B C P T
assume "Per A B C" and "T InAngle A B C" and
"P ≠ T" and "P B A CongA P B C" and "Per B P T" and "Coplanar A B C P"
have "P InAngle A B C"
by (metis conga_inangle_per2__inangle ‹Coplanar A B C P›
‹P B A CongA P B C› ‹Per A B C› ‹Per B P T› ‹T InAngle A B C›)
have "Acute P B A"
by (meson conga_inangle_per__acute ‹P B A CongA P B C›
‹P InAngle A B C› ‹Per A B C› acute_sym)
have "Acute P B C"
by (meson acute_conga__acute ‹Acute P B A› ‹P B A CongA P B C›)
have "B ≠ P"
using ‹Acute P B C› acute_distincts by blast
have "B ≠ A"
using ‹T InAngle A B C› inangle_distincts by blast
have "B ≠ C"
using ‹P B A CongA P B C› conga_distinct by blast
have "B P Perp P T"
by (simp add: ‹B ≠ P› ‹P ≠ T› ‹Per B P T› per_perp)
have "¬ Col A B C"
using ‹Per A B C› ‹B ≠ A› ‹B ≠ C› per_not_col by auto
have "¬ Col B P T"
using ‹Per B P T› ‹B ≠ P› ‹P ≠ T› per_col_eq by blast
{
assume "Col A B T"
hence "B Out A T"
using ‹T InAngle A B C› ‹¬ Col A B C› bet_col
bet_in_angle_bet or_bet_out by blast
hence "(∃ X. (B Out A X ∧ Col T P X)) ∨ (∃ Y. (B Out C Y ∧ Col T P Y))"
using col_trivial_3 by blast
}
moreover
{
assume "¬ Col A B T"
have "∃ U V. (B Out A U ∧ B Out C V ∧ Bet U T V)"
using assms weak_tarski_s_parallel_postulate_def
‹Per A B C› ‹T InAngle A B C› by blast
then obtain U V where "B Out A U" and "B Out C V" and "Bet U T V"
by blast
have "Col B A U"
by (simp add: ‹B Out A U› out_col)
have "Col B C V"
using ‹B Out C V› out_col by blast
have "Coplanar A C U V"
using Coplanar_def ‹Col B A U› ‹Col B C V› not_col_permutation_2 by blast
have "Coplanar A B C T"
using ‹T InAngle A B C› coplanar_perm_9 inangle__coplanar by blast
have "Coplanar B U V T"
using ‹Bet U T V› bet__coplanar ncoplanar_perm_11 by blast
have "(∃ X. (B Out A X ∧ Col T P X)) ∨ (∃ Y. (B Out C Y ∧ Col T P Y))"
proof -
{
assume "Col P T U"
hence "(∃ X. (B Out A X ∧ Col T P X)) ∨ (∃ Y. (B Out C Y ∧ Col T P Y))"
using ‹B Out A U› not_col_permutation_4 by blast
}
moreover
{
assume "¬ Col P T U"
have "(∃ X. (B Out A X ∧ Col T P X)) ∨ (∃ Y. (B Out C Y ∧ Col T P Y))"
proof -
{
assume "Col P T V"
hence "(∃ X. (B Out A X ∧ Col T P X)) ∨ (∃ Y. (B Out C Y ∧ Col T P Y))"
using ‹B Out C V› not_col_permutation_4 by blast
}
moreover
{
assume "¬ Col P T V"
have "P T TS B U ∨ P T OS B U"
proof -
have "Coplanar P T B U"
proof -
have "Coplanar A B C B"
using ncop_distincts by blast
moreover have "Coplanar A B C U"
using Col_cases ‹Col B A U› ncop__ncols by blast
ultimately show ?thesis
using ‹¬ Col A B C› ‹Coplanar A B C P› ‹Coplanar A B C T›
coplanar_pseudo_trans by blast
qed
moreover have "¬ Col U P T"
using ‹¬ Col P T U› col_permutation_1 by blast
ultimately show ?thesis
using ‹¬ Col B P T› cop_nos__ts by blast
qed
have "(∃ X. (B Out A X ∧ Col T P X)) ∨ (∃ Y. (B Out C Y ∧ Col T P Y))"
proof -
{
assume "P T TS B U"
then obtain X where "Col X P T" and "Bet B X U"
using TS_def by blast
have "X ≠ B"
using ‹Col X P T› ‹¬ Col B P T› by blast
hence "B Out U X"
using Out_def ‹B Out A U› ‹Bet B X U› by presburger
hence "B Out A X"
using ‹B Out A U› l6_7 by blast
hence "(∃ X. (B Out A X ∧ Col T P X)) ∨ (∃ Y. (B Out C Y ∧ Col T P Y))"
using ‹Col X P T› col_permutation_3 by blast
}
moreover
{
assume "P T OS B U"
have "P T TS B V"
proof -
have "P T TS U V"
by (metis ‹Bet U T V› ‹¬ Col P T U› ‹¬ Col P T V›
bet__ts col_trivial_2 invert_two_sides
not_col_permutation_4)
moreover have "P T OS U B"
using ‹P T OS B U› one_side_symmetry by blast
ultimately show ?thesis
using l9_8_2 by blast
qed
then obtain Y where "Col Y P T" and "Bet B Y V"
using TS_def by blast
have "B Out C Y"
by (metis Col_def ‹B Out C V› ‹Bet B Y V› ‹Col Y P T›
‹P T OS B U› between_equality
between_symmetry col123__nos l6_7 not_out_bet)
hence "(∃ X. (B Out A X ∧ Col T P X)) ∨ (∃ Y. (B Out C Y ∧ Col T P Y))"
using ‹Col Y P T› not_col_permutation_3 by blast
}
ultimately show ?thesis
using ‹P T TS B U ∨ P T OS B U› by blast
qed
}
ultimately show ?thesis by blast
qed
}
ultimately show ?thesis by blast
qed
}
ultimately have "(∃ X. (B Out A X ∧ Col T P X)) ∨ (∃ Y. (B Out C Y ∧ Col T P Y))"
by blast
}
thus ?thesis by blast
qed
lemma weak_tarski_s_parallel_postulate__weak_inverse_projection_postulate:
assumes "weak_tarski_s_parallel_postulate"
shows "weak_inverse_projection_postulate"
proof -
{
fix A B C P T
assume "Per A B C" and "T InAngle A B C" and
"P ≠ T" and "P B A CongA P B C" and "Coplanar A B C P" and "Per B P T"
have "¬ B Out A C"
by (metis Col_def Out_def Bet_perm per_not_col ‹Per A B C›)
have "B P Perp P T"
using CongA_def ‹P B A CongA P B C› ‹P ≠ T› ‹Per B P T› per_perp by auto
have "((∃ X. (B Out A X ∧ Col T P X)) ∨ (∃ Y. (B Out C Y ∧ Col T P Y)))"
using assms weak_tarski_s_parallel_postulate__weak_inverse_projection_postulate_aux
‹Coplanar A B C P› ‹P B A CongA P B C› ‹P ≠ T›
‹Per A B C› ‹Per B P T› ‹T InAngle A B C› by blast
moreover
{
assume "∃ X. (B Out A X ∧ Col T P X)"
then obtain X where "B Out A X" and "Col T P X"
by blast
obtain Y where "P Midpoint X Y"
using symmetric_point_construction by blast
{
assume "X = Y"
hence "B Out A P"
using ‹B Out A X› ‹P Midpoint X Y› l8_20_2 by blast
hence "B Out P C"
by (metis Col_def Out_def ‹P B A CongA P B C› ‹¬ B Out A C›
between_symmetry col_conga__conga eq_conga_out)
hence False
using ‹B Out A P› ‹¬ B Out A C› l6_7 by blast
}
hence "X ≠ Y"
by blast
have "Y X ReflectL B P"
proof -
have "(∃ X0. X0 Midpoint X Y ∧ Col B P X0)"
using ‹P Midpoint X Y› col_trivial_2 by blast
moreover have "(B P Perp X Y ∨ X = Y)"
by (metis Perp_perm perp_col0
‹B P Perp P T› ‹Col T P X› ‹P Midpoint X Y›
col_trivial_2 midpoint_col midpoint_distinct_1)
ultimately show ?thesis
by (simp add: ReflectL_def)
qed
hence "X Y ReflectL B P"
using l10_4_spec by blast
moreover hence "B Out C Y"
using ‹B Out A X› ‹P B A CongA P B C› ‹¬ B Out A C› ‹Coplanar A B C P›
conga_cop_out_reflectl__out by blast
moreover have "Col T P X"
by (simp add: ‹Col T P X›)
hence "Col P X T"
using not_col_permutation_2 by blast
have "P ≠ X"
using ‹P Midpoint X Y› ‹X = Y ⟹ False› is_midpoint_id by blast
hence "Col P X Y"
using ‹P Midpoint X Y› midpoint_col by blast
moreover hence "Col T P Y"
using ‹Col T P X› ‹P ≠ X› col_trivial_2 colx by blast
ultimately
have "∃ X Y. (B Out A X ∧ Col T P X ∧ B Out C Y ∧ Col T P Y)"
using ‹B Out A X› ‹Col T P X› by blast
}
moreover
{
assume "∃ Y. (B Out C Y ∧ Col T P Y)"
then obtain Y where "B Out C Y" and "Col T P Y"
by blast
obtain X where "P Midpoint Y X"
using symmetric_point_construction by blast
{
assume "X = Y"
hence "X = P"
using ‹P Midpoint Y X› l7_17_bis l7_3_2 by blast
hence "Y = P"
by (simp add: ‹X = Y›)
have "B Out A P"
proof -
have "B Out P C"
using ‹B Out C Y› ‹Y = P› l6_6 by blast
moreover have "P B C CongA P B A"
using ‹P B A CongA P B C› conga_sym_equiv by auto
ultimately show ?thesis
using Out_cases out_conga_out by blast
qed
have "B Out C P"
using ‹B Out C Y› ‹X = P› ‹X = Y› by blast
moreover hence "B Out P C"
using l6_6 by blast
ultimately have False
using ‹¬ B Out A C› l6_7 ‹B Out A P› by blast
}
hence "X ≠ Y"
by blast
have "B Out A X"
proof -
have "¬ B Out C A"
using ‹¬ B Out A C› l6_6 by blast
moreover have "Coplanar C B A P"
using ‹Coplanar A B C P› coplanar_perm_14 by presburger
moreover have "P B C CongA P B A"
using ‹P B A CongA P B C› conga_sym_equiv by auto
moreover have "Y X ReflectL B P"
proof -
have "∃ X0. X0 Midpoint Y X ∧ Col B P X0"
using ‹P Midpoint Y X› col_trivial_2 by blast
moreover have "B P Perp Y X ∨ Y = X"
by (metis col_permutation_4 col_trivial_3 midpoint_distinct_1
‹B P Perp P T› ‹Col T P Y› ‹P Midpoint Y X› colx
midpoint_col perp_col2_bis)
ultimately show ?thesis
by (metis ReflectL_def l10_4_spec)
qed
ultimately show ?thesis
using ‹B Out C Y› conga_cop_out_reflectl__out by blast
qed
have "P ≠ X"
using ‹P Midpoint Y X› ‹X = Y ⟹ False› is_midpoint_id_2 by blast
have "Col P X Y"
using ‹P Midpoint Y X› Col_def Midpoint_def by blast
hence "Col P X T"
by (metis ‹Col T P Y› ‹P Midpoint Y X› col_permutation_1
col_trivial_3 colx l7_2 midpoint_distinct_2)
moreover hence "Col T P X"
using not_col_permutation_1 by blast
moreover have "Col T P Y"
by (simp add: ‹Col T P Y›)
ultimately
have "∃ X Y. (B Out A X ∧ Col T P X ∧ B Out C Y ∧ Col T P Y)"
using ‹B Out C Y› ‹B Out A X› by blast
}
ultimately have "∃ X Y. (B Out A X ∧ Col T P X ∧ B Out C Y ∧ Col T P Y)"
by blast
}
hence LEMME: "∀ A B C P T.
Per A B C ∧ T InAngle A B C ∧
P ≠ T ∧ P B A CongA P B C ∧ Coplanar A B C P ∧ Per B P T ⟶
(∃ X Y. (B Out A X ∧ Col T P X ∧ B Out C Y ∧ Col T P Y))"
by blast
moreover
{
assume "∀ A B C P T.
Per A B C ∧ T InAngle A B C ∧
P ≠ T ∧ P B A CongA P B C ∧ Coplanar A B C P ∧ Per B P T ⟶
(∃ X Y. (B Out A X ∧ Col T P X ∧ B Out C Y ∧ Col T P Y))"
{
fix A B C D E F P Q
assume "Acute A B C" and "Per D E F" and "A B C A B C SumA D E F" and
"B Out A P" and "P ≠ Q" and "Per B P Q" and "Coplanar A B C Q"
have "¬ Col A B C"
using ‹Per D E F›
by (metis col2_suma__col suma_distincts ‹A B C A B C SumA D E F› per_not_col)
have "¬ Col B P Q"
by (metis Col_def per_col_eq ‹B Out A P› ‹P ≠ Q›
‹Per B P Q› between_trivial l6_4_1)
have "A B C CongA P B C"
by (metis ‹Acute A B C› ‹B Out A P› acute_distincts bet_out_1
conga_sym_equiv not_bet_distincts out2__conga)
have "¬ Col P B C"
by (metis Out_def ‹B Out A P› ‹¬ Col A B C› col_out2_col
col_permutation_3 col_trivial_3 l6_16_1 out_trivial)
have "B P Perp P Q"
by (metis ‹B Out A P› ‹P ≠ Q› ‹Per B P Q› out_diff2 per_perp)
have "C B A A B C SumA D E F"
by (simp add: ‹A B C A B C SumA D E F› suma_left_comm)
then obtain J where "A B J CongA A B C" and "¬ B A OS C J" and
"Coplanar C B A J" and "C B J CongA D E F"
using SumA_def by blast
have "∃ Q'. (P ≠ Q') ∧ Col P Q Q' ∧ Q' InAngle C B P"
proof -
have "∃ Q0. Col Q P Q0 ∧ B P OS C Q0"
proof -
have "Q ≠ P"
using ‹P ≠ Q› by blast
moreover have "Col B P P"
by (simp add: col_trivial_2)
moreover have "Col Q P P"
by (simp add: col_trivial_2)
moreover have "¬ Col B P C"
using ‹¬ Col P B C› not_col_permutation_4 by blast
moreover have "Coplanar B P Q C"
by (metis (no_types, opaque_lifting) Col_def Out_def ‹B Out A P›
‹Coplanar A B C Q› ‹¬ Col A B C›
coplanar_pseudo_trans_lem1 ncop__ncols ncop_distincts)
ultimately show ?thesis
using ‹¬ Col B P Q› cop_not_par_same_side by blast
qed
then obtain Q0 where "Col Q P Q0" and "B P OS C Q0"
by blast
{
assume "B C OS P Q0"
hence "∃ Q'. (P ≠ Q') ∧ Col P Q Q' ∧ Q' InAngle C B P"
using ‹B P OS C Q0› ‹Col Q P Q0› not_col_permutation_4
os2__inangle os_distincts by blast
}
moreover
{
assume "¬ B C OS P Q0"
have "∃ Q'. Col P Q Q' ∧ Col B C Q'"
proof (cases "Col B C Q0")
case True
thus ?thesis
using ‹Col Q P Q0› not_col_permutation_4 by blast
next
case False
have "∃ Q'. Col Q' B C ∧ Bet P Q' Q0"
proof -
have "Coplanar B C P Q0"
using False ‹B P OS C Q0› inangle__coplanar ncoplanar_perm_22
os_ts__inangle ts__coplanar two_sides_cases by blast
moreover have "¬ Col P B C"
using ‹¬ Col P B C› by auto
moreover have "¬ Col Q0 B C"
by (simp add: False not_col_permutation_2)
moreover have "¬ B C OS P Q0"
using ‹¬ B C OS P Q0› by auto
ultimately show ?thesis
using TS_def cop__one_or_two_sides by blast
qed
then obtain Q' where "Col Q' B C" and "Bet P Q' Q0"
by blast
have "Col P Q Q'"
using ‹P ≠ Q› ‹Bet P Q' Q0› ‹Col Q P Q0› bet_col bet_neq12__neq col2__eq
col_permutation_4 by blast
moreover have "Col B C Q'"
using ‹Col Q' B C› not_col_permutation_2 by blast
ultimately show ?thesis
by blast
qed
then obtain Q' where "Col P Q Q'" and "Col B C Q'"
by blast
have "P ≠ Q'"
using ‹Col B C Q'› ‹¬ Col P B C› col_permutation_2 by blast
moreover have "Col P Q Q'"
using ‹Col P Q Q'› by auto
moreover have "Q' InAngle C B P"
proof -
have "P ≠ B"
using ‹B P OS C Q0› os_distincts by blast
moreover have "B Out C Q'"
proof -
have "Acute P B C"
by (meson acute_conga__acute ‹A B C CongA P B C› ‹Acute A B C›)
moreover have "B P Perp P Q'"
by (meson perp_col1 ‹B P Perp P Q› ‹Col P Q Q'› ‹P ≠ Q'›)
ultimately show ?thesis
using ‹Col B C Q'› acute_col_perp__out_1 l6_6 by blast
qed
ultimately show ?thesis
using out321__inangle by auto
qed
ultimately have "∃ Q'. (P ≠ Q') ∧ Col P Q Q' ∧ Q' InAngle C B P"
by blast
}
ultimately show ?thesis
by blast
qed
then obtain Q' where "P ≠ Q'" and "Col P Q Q'" and "Q' InAngle C B P"
by blast
have "B Out P A"
by (simp add: ‹B Out A P› l6_6)
have "C ≠ B"
using ‹¬ Col P B C› col_trivial_2 by auto
have "P ≠ B"
using ‹B Out A P› out_distinct by presburger
have "J ≠ B"
using ‹A B J CongA A B C› conga_diff2 by blast
have "D ≠ E"
using ‹C B J CongA D E F› conga_diff45 by auto
{
assume "E = F"
hence "A B C A B C SumA D E E"
using ‹A B C A B C SumA D E F› by blast
hence False
using ‹C B J CongA D E F› ‹E = F› conga_diff56 by blast
}
hence "F ≠ E"
by blast
have "A B C CongA A B J"
using ‹A B J CongA A B C› conga_sym_equiv by auto
hence "¬ Col A B J"
using ‹¬ Col A B C› ‹A B J CongA A B C› col_conga_col by blast
have "P InAngle C B J"
proof -
have "A InAngle C B J"
proof -
have "B A TS C J"
proof -
have "Coplanar B A C J"
using ‹Coplanar C B A J› coplanar_perm_8 by presburger
moreover have "¬ Col C B A"
using NCol_cases ‹¬ Col A B C› by blast
moreover have "¬ Col J B A"
using Col_cases ‹¬ Col A B J› by blast
ultimately show ?thesis
using ‹¬ B A OS C J› cop_nts__os by blast
qed
moreover have "B C OS J A"
proof -
have "Coplanar C B A J"
by (simp add: ‹Coplanar C B A J›)
moreover have "¬ Col A C B"
using NCol_cases ‹¬ Col A B C› by blast
have "¬ Col C B J"
proof -
have "¬ Col D E F"
using ‹D ≠ E› ‹F ≠ E› ‹Per D E F› per_not_col by auto
moreover have "D E F CongA C B J"
by (simp add: ‹C B J CongA D E F› conga_sym_equiv)
ultimately show ?thesis
by (meson col_conga_col ‹C B J CongA D E F›)
qed
moreover hence "¬ Col J C B"
using col_permutation_1 by blast
have "SAMS C B A A B C"
using ‹Acute A B C› acute2__sams acute_sym by blast
moreover hence "¬ C B TS A J"
using ‹A B J CongA A B C› ‹¬ B A OS C J› conga_sams_nos__nts by blast
ultimately show ?thesis
using invert_one_side one_side_symmetry cop_nts__os
‹¬ Col A C B› ‹¬ Col J C B› by blast
qed
ultimately show ?thesis
using os_ts__inangle by blast
qed
moreover have "B Out C C"
using ‹C ≠ B› out_trivial by auto
moreover have "B Out J J"
using ‹J ≠ B› out_trivial by auto
ultimately show ?thesis
using ‹B Out P A› l11_25 by blast
qed
hence "Q' InAngle C B J"
using ‹Q' InAngle C B P› in_angle_trans by blast
have "∃ Y. B Out C Y ∧ Col Q' P Y"
proof -
have "D E F CongA C B J"
by (simp add: ‹C B J CongA D E F› conga_sym_equiv)
hence "Per C B J"
using ‹Per D E F› l11_17 by blast
moreover have "Q' InAngle C B J"
using ‹Q' InAngle C B J› by auto
moreover have "P ≠ Q'"
by (simp add: ‹P ≠ Q'›)
moreover have "P B C CongA P B J"
by (metis col_conga__conga not_conga_sym out_col
‹A B J CongA A B C› ‹B Out A P› ‹P ≠ B›)
moreover have "Coplanar C B J P"
by (meson ‹P InAngle C B J› coplanar_perm_9 inangle__coplanar)
moreover have "Per B P Q'"
using ‹Col P Q Q'› ‹P ≠ Q› ‹Per B P Q› per_col by blast
ultimately show ?thesis
using LEMME by blast
qed
then obtain Y where "B Out C Y" and "Col Q' P Y"
by blast
hence "∃ Y. B Out C Y ∧ Col P Q Y"
by (metis ‹Col P Q Q'› ‹P ≠ Q'› col_trivial_3 colx)
}
hence "∀ A B C D E F P Q.
Acute A B C ∧ Per D E F ∧ A B C A B C SumA D E F ∧
B Out A P ∧ P ≠ Q ∧ Per B P Q ∧ Coplanar A B C Q
⟶
(∃ Y. B Out C Y ∧ Col P Q Y)"
by blast
}
ultimately show ?thesis
using weak_inverse_projection_postulate_def by fastforce
qed
lemma P31_P32:
shows "Postulate31 ⟷ Postulate32"
using Postulate31_def Postulate32_def
weak_inverse_projection_postulate__weak_tarski_s_parallel_postulate
weak_tarski_s_parallel_postulate__weak_inverse_projection_postulate by blast
lemma P31_P04:
shows "Postulate31 ⟷ Postulate04"
using Postulate04_def Postulate31_def
bachmann_s_lotschnittaxiom__weak_inverse_projection_postulate
weak_inverse_projection_postulate__bachmann_s_lotschnittaxiom by blast
lemma P04_P33:
shows "Postulate04 ⟷ Postulate33"
using Postulate04_def Postulate33_def
bachmann_s_lotschnittaxiom__weak_triangle_circumscription_principle
weak_triangle_circumscription_principle__bachmann_s_lotschnittaxiom by blast
lemma equivalent_postulates_without_any_continuity_bis:
shows "Postulate04 ⟷ Postulate33 ∧
Postulate31 ⟷ Postulate04 ∧
Postulate31 ⟷ Postulate32"
proof -
have "Postulate31 ⟷ Postulate32"
using Postulate31_def Postulate32_def
weak_inverse_projection_postulate__weak_tarski_s_parallel_postulate
weak_tarski_s_parallel_postulate__weak_inverse_projection_postulate by blast
moreover have "Postulate31 ⟷ Postulate04"
using Postulate04_def Postulate31_def
bachmann_s_lotschnittaxiom__weak_inverse_projection_postulate
weak_inverse_projection_postulate__bachmann_s_lotschnittaxiom by blast
moreover have "Postulate04 ⟷ Postulate33"
using Postulate04_def Postulate33_def
bachmann_s_lotschnittaxiom__weak_triangle_circumscription_principle
weak_triangle_circumscription_principle__bachmann_s_lotschnittaxiom by blast
ultimately show ?thesis
by blast
qed
lemma P4_P34:
assumes "Postulate04"
shows "Postulate34"
using P31_P04 P31_P32 Postulate32_def Postulate34_def
assms bachmann_s_lotschnittaxiom__legendre_s_parallel_postulate
weak_inverse_projection_postulate__bachmann_s_lotschnittaxiom
weak_tarski_s_parallel_postulate__weak_inverse_projection_postulate by blast
lemma P01__P35:
assumes "Postulate01"
shows "Postulate35"
using Postulate01_def Postulate35_def playfair__existential_playfair
tarski_s_euclid_implies_playfair_s_postulate assms by blast
lemma P35__P01:
assumes "greenberg_s_axiom" and
"Postulate01"
shows "Postulate35"
proof -
have "Postulate35 ⟶ Postulate27"
by (simp add: Postulate27_def Postulate35_def existential_playfair__rah)
moreover
have "Postulate27 ⟶ Postulate03"
using Cycle_3 by blast
moreover
have "Postulate03 ⟶ Postulate12"
by (simp add: InterCycle1 assms(1))
moreover have "Postulate12 ⟶ Postulate09"
by (simp add: Postulate09_def Postulate12_def playfair__universal_posidonius_postulate
playfair_bis__playfair
universal_posidonius_postulate__perpendicular_transversal_postulate)
moreover
have "Postulate09 ⟶ Postulate01"
using Cycle_1 Cycle_2 by blast
ultimately show ?thesis
using P01__P35 assms(2) by fastforce
qed
theorem stronger_legendre_s_first_theorem:
assumes "aristotle_s_axiom"
shows "∀ A B C D E F. C A B A B C SumA D E F ⟶ SAMS D E F B C A"
using aristotle__obtuse_case_elimination assms t22_20 by blast
theorem legendre_s_first_theorem:
assumes "archimedes_axiom"
shows "∀ A B C D E F. C A B A B C SumA D E F ⟶ SAMS D E F B C A"
using assms stronger_legendre_s_first_theorem t22_24 by blast
theorem legendre_s_second_theorem:
assumes "postulate_of_existence_of_a_triangle_whose_angles_sum_to_two_rights"
shows "triangle_postulate"
using assms rah__triangle existential_triangle__rah by blast
lemma legendre_s_third_theorem_aux:
assumes "aristotle_s_axiom" and
"triangle_postulate"
shows "euclid_s_parallel_postulate"
using Cycle_2 Postulate01_def Postulate13_def
alternate_interior__proclus aristotle__greenberg
assms(1) assms(2) playfair__alternate_interior
playfair_bis__playfair tarski_s_implies_euclid_s_parallel_postulate
triangle__playfair_bis by fastforce
theorem legendre_s_third_theorem:
assumes "archimedes_axiom" and
"triangle_postulate"
shows "euclid_s_parallel_postulate"
by (simp add: assms(1) assms(2) legendre_s_third_theorem_aux t22_24)
lemma legendre_aux:
assumes "¬ hypothesis_of_obtuse_saccheri_quadrilaterals"
shows "∀ A B C D B1 C1 P Q R S T U V W X.
¬ Col A B C ∧ A C B CongA C B D ∧
Cong A C B D ∧ B C TS A D ∧ A Out B B1 ∧ A Out C C1 ∧ Bet B1 D C1 ∧
Defect A B C P Q R ∧ Defect A B1 C1 S T U ∧ P Q R P Q R SumA V W X ⟶
(SAMS P Q R P Q R ∧ V W X LeA S T U)"
proof -
{
fix A B C D B1 C1 P Q R S T U V W X
assume "¬ Col A B C" and "A C B CongA C B D" and
"Cong A C B D" and "B C TS A D" and "A Out B B1" and
"A Out C C1" and "Bet B1 D C1" and
"Defect A B C P Q R" and "Defect A B1 C1 S T U" and
"P Q R P Q R SumA V W X"
have "A ≠ B"
using ‹B C TS A D› ts_distincts by blast
have "Cong A B D C ∧ (A ≠ B) ⟶ (C A B CongA B D C ∧ C B A CongA B C D)"
proof -
have "A C B CongA D B C"
using ‹A C B CongA C B D› conga_right_comm by blast
moreover have "Cong C A B D"
using ‹Cong A C B D› not_cong_2134 by blast
moreover have "Cong C B B C"
by (simp add: cong_pseudo_reflexivity)
ultimately show ?thesis
using ‹A ≠ B› l11_49 by blast
qed
have "Cong A B D C"
by (metis cong2_conga_cong ‹A C B CongA C B D› ‹Cong A C B D›
cong_pseudo_reflexivity cong_right_commutativity conga_right_comm)
have "C A B CongA B D C"
by (simp add: ‹A ≠ B› ‹Cong A B D C›
‹Cong A B D C ∧ A ≠ B ⟶ C A B CongA B D C ∧ C B A CongA B C D› )
have "C B A CongA B C D"
by (simp add: ‹A ≠ B› ‹Cong A B D C›
‹Cong A B D C ∧ A ≠ B ⟶ C A B CongA B D C ∧ C B A CongA B C D› )
have "A C ParStrict B D"
proof -
have "A C Par B D"
by (meson conga_right_comm ‹A C B CongA C B D› ‹B C TS A D›
invert_two_sides l12_21_b par_left_comm)
moreover have "Col B D B"
by (simp add: col_trivial_3)
moreover have "¬ Col A C B"
using ‹¬ Col A B C› col_permutation_5 by blast
ultimately show ?thesis
using par_not_col_strict by blast
qed
have "A B ParStrict C D"
proof -
have "A B Par C D"
proof -
have "B C TS A D"
using ‹B C TS A D› by auto
moreover have "A B C CongA D C B"
by (simp add: ‹C B A CongA B C D› conga_comm)
ultimately show ?thesis
using l12_21_b par_left_comm by blast
qed
moreover have "Col C D C"
by (simp add: col_trivial_3)
moreover have "¬ Col A B C"
using ‹¬ Col A B C› by blast
ultimately show ?thesis
using par_not_col_strict by blast
qed
have "¬ Col B C D"
using ‹A B ParStrict C D› par_strict_not_col_2 by auto
have "¬ Col C D A"
using ‹A B ParStrict C D› col_trivial_3 l9_19 pars__os3412 by blast
have "¬ Col A B D"
by (meson Par_strict_perm ‹A B ParStrict C D› l12_6 one_side_not_col123)
have "B D ParStrict A C1"
by (metis Par_strict_cases ‹A C ParStrict B D› ‹A Out C C1›
out_col out_diff2 par_strict_col_par_strict)
have "¬ Col B D C1"
by (metis Par_strict_perm ‹A Out C C1› ‹B D ParStrict A C1›
diff_bet_ex3 l6_16_1 l6_3_1 l9_19 pars__os3412)
have "B ≠ B1"
using ‹Bet B1 D C1› ‹¬ Col B D C1› bet_col by blast
have "¬ Col B1 B D"
by (metis ‹A Out B B1› ‹B ≠ B1› ‹¬ Col A B D› col_trivial_2 colx out_col)
have "B D TS B1 C1"
using TS_def ‹Bet B1 D C1› ‹¬ Col B D C1› ‹¬ Col B1 B D›
col_trivial_3 not_col_permutation_2 by blast
hence "¬ Col B1 B D ∧ B D TS B1 C1 ∧ Bet A B B1"
by (metis ‹A Out B B1› ‹B D ParStrict A C1› ‹¬ Col B1 B D›
col_trivial_3 l12_6 l9_9 not_out_bet out_col out_two_sides_two_sides)
have "Bet A B B1"
by (simp add: ‹¬ Col B1 B D ∧ B D TS B1 C1 ∧ Bet A B B1›)
have "C D ParStrict A B1"
by (metis Col_def ‹A B ParStrict C D› ‹Bet A B B1›
between_identity col_trivial_3 par_strict_col2_par_strict
par_strict_symmetry)
have "¬ Col C D B1"
by (meson Par_strict_perm ‹C D ParStrict A B1› l12_6 one_side_not_col123)
have "C ≠ C1"
using ‹Bet B1 D C1› ‹¬ Col C D B1› bet_col between_symmetry by blast
have "C D TS A C1"
proof -
have "C D TS B1 C1"
by (metis ‹Bet B1 D C1› ‹¬ Col B D C1› ‹¬ Col C D B1›
bet__ts col_trivial_2 invert_two_sides not_col_permutation_4)
moreover have "C D OS B1 A"
using ‹C D ParStrict A B1› l12_6 one_side_symmetry by blast
ultimately show ?thesis
using l9_8_2 by blast
qed
hence "Bet A C C1"
using ‹A Out C C1› col_two_sides_bet not_out_bet out_col by blast
have "∃ Z. Bet B Z D ∧ Bet C Z B1"
proof -
have "B D TS C B1"
proof -
have "B D TS C1 B1"
using ‹B D TS B1 C1› l9_2 by blast
moreover have "B D OS C1 C"
by (metis bet_col1 l12_6 par_strict_col2_par_strict
‹B D ParStrict A C1› ‹Bet A C C1› ‹C ≠ C1› not_bet_distincts)
ultimately show ?thesis
using l9_8_2 by blast
qed
moreover have "C B1 TS B D"
proof -
have "C D OS B1 B"
proof -
have "C D ParStrict B A"
using Par_strict_perm ‹A B ParStrict C D› by blast
moreover have "Col B A B1"
using ‹A Out B B1› col_permutation_4 out_col by blast
ultimately show ?thesis
using ‹B ≠ B1› one_side_symmetry par_strict_all_one_side by blast
qed
have "C B OS B1 C1"
proof -
have "C B TS B1 A"
by (meson ‹B ≠ B1› ‹Bet A B B1› ‹¬ Col A B C› bet__ts invert_two_sides
l9_2 not_col_permutation_1)
moreover have "C B TS C1 A"
using Col_cases ‹Bet A C C1› ‹C ≠ C1› ‹¬ Col A B C› bet__ts l9_2 by blast
ultimately show ?thesis
using OS_def by blast
qed
hence "C B OS B1 D"
using ‹Bet B1 D C1› l9_17 by blast
moreover
have "C D OS B1 B"
using ‹C D OS B1 B› by blast
ultimately show ?thesis
using l9_31 by auto
qed
ultimately show ?thesis
using ts2__ex_bet2 by blast
qed
then obtain Z where "Bet B Z D" and "Bet C Z B1"
by blast
obtain G H I where "Defect A B1 C G H I"
using ex_defect
by (metis Col_def ‹A Out B B1› ‹Bet A B B1› ‹¬ Col A B C›
not_col_distincts out_diff2)
obtain J K L where "Defect B1 C C1 J K L"
using ex_defect
by (metis Col_def TS_def ‹B C TS A D› ‹Bet B Z D› ‹Bet C Z B1›
‹C ≠ C1› ‹Defect A B1 C1 S T U› bet_neq12__neq defect_distincts)
have "C ≠ B1"
using ‹¬ Col C D B1› col_trivial_3 by blast
have "B1 ≠ B"
using ‹B ≠ B1› by auto
have "C ≠ B"
using ‹¬ Col B C D› col_trivial_1 by fastforce
obtain M N O0 where "Defect C B B1 M N O0"
using ex_defect ‹C ≠ B› ‹C ≠ B1› ‹B ≠ B1› by blast
have "B1 ≠ C"
using ‹C ≠ B1› by auto
have "C ≠ D"
using ‹¬ Col B C D› col_trivial_2 by blast
have "B1 ≠ D"
using ‹B D TS B1 C1› ts_distincts by blast
obtain A' B' C' where "Defect B1 C D A' B' C'"
using ex_defect ‹B1 ≠ D› ‹C ≠ B1› ‹C ≠ D› by presburger
have "D ≠ C1"
using ‹C D TS A C1› ts_distincts by blast
obtain D' E' F' where "Defect C D C1 D' E' F'"
using ex_defect ‹C ≠ C1› ‹C ≠ D› ‹D ≠ C1› by presburger
obtain M' N' O' where "Defect B1 B D M' N' O'"
using ex_defect ‹B ≠ B1› ‹B1 ≠ D› ‹C A B CongA B D C›
conga_distinct by presburger
have "G ≠ H"
using ‹Defect A B1 C G H I› defect_distincts by blast
have "I ≠ H"
using ‹Defect A B1 C G H I› defect_distincts by blast
have "M ≠ N"
using ‹Defect C B B1 M N O0› defect_distincts by blast
have "N ≠ O0"
using ‹Defect C B B1 M N O0› defect_distincts by blast
have "A' ≠ B'"
using ‹Defect B1 C D A' B' C'› defect_distincts by blast
have "C' ≠ B'"
using ‹Defect B1 C D A' B' C'› defect_distincts by blast
obtain G' H' I' where "G H I A' B' C' SumA G' H' I'"
using ‹A' ≠ B'› ‹C' ≠ B'› ‹G ≠ H› ‹I ≠ H› ex_suma by presburger
have "O0 ≠ N"
using ‹N ≠ O0› by blast
then obtain J' K' L' where "M N O0 A' B' C' SumA J' K' L'"
using ‹A' ≠ B'› ‹C' ≠ B'› ‹M ≠ N› ex_suma by presburger
have "SAMS G H I J K L ∧ G H I J K L SumA S T U"
using assms ‹Bet A C C1› t22_16_1bis ‹Defect A B1 C G H I› ‹Defect A B1 C1 S T U›
‹Defect B1 C C1 J K L› by force
hence "SAMS G H I J K L"
by blast
have "G H I J K L SumA S T U"
using ‹SAMS G H I J K L ∧ G H I J K L SumA S T U› by auto
have "SAMS A' B' C' D' E' F' ∧ A' B' C' D' E' F' SumA J K L"
using assms ‹Bet B1 D C1› t22_16_1bis ‹Defect B1 C C1 J K L› ‹Defect B1 C D A' B' C'›
‹Defect C D C1 D' E' F'› by blast
hence "SAMS A' B' C' D' E' F'"
by blast
have "A' B' C' D' E' F' SumA J K L"
by (simp add: ‹SAMS A' B' C' D' E' F' ∧ A' B' C' D' E' F' SumA J K L›)
have "SAMS P Q R M N O0 ∧ P Q R M N O0 SumA G H I"
proof -
have "Defect A C B P Q R"
using ‹Defect A B C P Q R› defect_perm_132 by blast
moreover have "Defect A C B1 G H I"
using ‹Defect A B1 C G H I› defect_perm_132 by blast
ultimately show ?thesis
using ‹Bet A B B1› ‹Defect C B B1 M N O0› assms t22_16_1bis by blast
qed
hence "SAMS P Q R M N O0"
by blast
have "P Q R M N O0 SumA G H I"
by (simp add: ‹SAMS P Q R M N O0 ∧ P Q R M N O0 SumA G H I›)
have "SAMS G H I A' B' C'"
proof -
have "G H I LeA G H I"
by (simp add: ‹G ≠ H› ‹I ≠ H› lea_refl)
moreover have "A' B' C' LeA J K L"
using ‹SAMS A' B' C' D' E' F'› ‹A' B' C' D' E' F' SumA J K L›
sams_suma__lea123789 by blast
ultimately show ?thesis
using ‹SAMS G H I J K L› sams_lea2__sams by blast
qed
have "SAMS M N O0 A' B' C'"
proof -
have "M N O0 LeA G H I"
using ‹SAMS P Q R M N O0› ‹P Q R M N O0 SumA G H I›
sams_suma__lea456789 by auto
moreover have "A' B' C' LeA A' B' C'"
using ‹A' ≠ B'› ‹C' ≠ B'› lea_refl by auto
ultimately show ?thesis
using ‹SAMS G H I A' B' C'› sams_lea2__sams by blast
qed
have "G' H' I' D' E' F' SumA S T U"
using ‹SAMS G H I A' B' C'› ‹SAMS A' B' C' D' E' F'›
‹G H I A' B' C' SumA G' H' I'› ‹A' B' C' D' E' F' SumA J K L›
‹G H I J K L SumA S T U› suma_assoc by blast
have "SAMS G' H' I' D' E' F'"
using ‹SAMS G H I A' B' C'› ‹SAMS A' B' C' D' E' F'›
‹G H I A' B' C' SumA G' H' I'› ‹A' B' C' D' E' F' SumA J K L›
‹SAMS G H I J K L› sams_assoc by blast
have "P Q R J' K' L' SumA G' H' I'"
using ‹SAMS P Q R M N O0› ‹SAMS M N O0 A' B' C'›
‹P Q R M N O0 SumA G H I› ‹M N O0 A' B' C' SumA J' K' L'›
‹G H I A' B' C' SumA G' H' I'› suma_assoc_1 by blast
have "SAMS P Q R J' K' L'"
using ‹SAMS P Q R M N O0› ‹SAMS M N O0 A' B' C'›
‹P Q R M N O0 SumA G H I› ‹M N O0 A' B' C' SumA J' K' L'›
‹SAMS G H I A' B' C'› sams_assoc_1 by blast
have "P ≠ Q"
using ‹P Q R P Q R SumA V W X› suma_distincts by auto
have "Q ≠ R"
using ‹P Q R P Q R SumA V W X› suma_distincts by blast
have "SAMS P Q R M' N' O' ∧ P Q R M' N' O' SumA J' K' L'"
proof -
have "Defect C B D P Q R"
proof -
have "A B C CongA D C B"
by (simp add: ‹C B A CongA B C D› conga_comm)
moreover have "B C A CongA C B D"
using ‹A C B CongA C B D› conga_left_comm by blast
ultimately show ?thesis
using ‹Defect A B C P Q R› ‹C A B CongA B D C› conga3_defect__defect
defect_perm_231 by blast
qed
moreover have "Defect C D B1 A' B' C'"
by (simp add: ‹Defect B1 C D A' B' C'› defect_perm_231)
ultimately show ?thesis
using ‹Defect C B B1 M N O0› ‹Defect B1 B D M' N' O'› ‹Bet C Z B1›
‹Bet B Z D› ‹SAMS M N O0 A' B' C'› ‹M N O0 A' B' C' SumA J' K' L'›
assms t22_16_2 by blast
qed
have "P Q R LeA J' K' L'"
using ‹SAMS P Q R M' N' O' ∧ P Q R M' N' O' SumA J' K' L'›
sams_suma__lea123789 by blast
have "SAMS P Q R P Q R"
proof -
have "P Q R LeA P Q R"
using ‹P ≠ Q› ‹Q ≠ R› lea_refl by force
thus ?thesis
using ‹SAMS P Q R J' K' L'› ‹P Q R LeA J' K' L'› sams_lea2__sams by blast
qed
moreover have "V W X LeA S T U"
proof -
have "V W X LeA G' H' I'"
using ‹P Q R LeA J' K' L'› ‹SAMS P Q R J' K' L'›
‹P Q R P Q R SumA V W X› ‹P Q R J' K' L' SumA G' H' I'›
sams_lea456_suma2__lea by blast
moreover have "G' H' I' LeA S T U"
using ‹G' H' I' D' E' F' SumA S T U› ‹SAMS G' H' I' D' E' F'›
sams_suma__lea123789 by blast
ultimately show ?thesis
using lea_trans by blast
qed
ultimately have "SAMS P Q R P Q R ∧ V W X LeA S T U"
by blast
}
thus ?thesis
by blast
qed
lemma legendre_aux1:
shows "∀ A B C B' C'.
¬ Col A B C ∧ A Out B B' ∧ A Out C C' ⟶
(∃ D'. D' InAngle B A C ∧ A C' B' CongA C' B' D' ∧
Cong A C' B' D' ∧ B' C' TS A D')"
proof -
{
fix A B C B' C'
assume "¬ Col A B C" and "A Out B B'" and "A Out C C'"
have "A ≠ B'"
using Out_def ‹A Out B B'› by force
have "A ≠ C'"
using ‹A Out C C'› out_diff2 by blast
have "B' ≠ C'"
using ‹A Out B B'› ‹A Out C C'› ‹¬ Col A B C› l6_6 l6_7 out_col by blast
{
assume "Col A B' C'"
hence "Col A B C"
by (metis Col_perm ‹A Out B B'› ‹A Out C C'› ‹A ≠ B'›
‹A ≠ C'› col_transitivity_1 out_col)
hence False
using ‹¬ Col A B C› by blast
}
hence "¬ Col A B' C'"
by blast
obtain M where "M Midpoint B' C'"
using midpoint_existence by blast
have "A ≠ M"
using Bet_cases Col_def Midpoint_def ‹Col A B' C' ⟹ False›
‹M Midpoint B' C'› by blast
have "M ≠ B'"
using ‹Col A B' C' ⟹ False› ‹M Midpoint B' C'›
col_trivial_2 is_midpoint_id by blast
have "M ≠ C'"
using ‹M Midpoint B' C'› ‹M ≠ B'› is_midpoint_id_2 by blast
obtain D' where "M Midpoint A D'"
using symmetric_point_construction by blast
{
assume "Col A M B'"
hence "Col A B' C'"
by (metis Col_def Midpoint_def ‹M Midpoint B' C'› ‹M ≠ B'› l6_16_1)
hence False
using ‹Col A B' C' ⟹ False› by blast
}
hence "¬ Col A M B'"
by blast
have "A ≠ D'"
using ‹M Midpoint A D'› ‹¬ Col A M B'› col_trivial_1 l7_3 by blast
hence "M ≠ D'"
using ‹M Midpoint A D'› is_midpoint_id_2 by blast
have "Col A D' M"
using Bet_cases Col_def Midpoint_def ‹M Midpoint A D'› by blast
have "Col B' C' M" using ‹M Midpoint B' C'›
by (meson midpoint_col not_col_permutation_2)
{
assume "Col D' B' C'"
hence "Col A B' C'"
by (metis (full_types) ‹Col A D' M› ‹Col B' C' M›
‹M ≠ D'› col_permutation_2 colx)
hence False
using ‹Col A B' C' ⟹ False› by blast
}
hence "¬ Col D' B' C'"
by blast
have "D' InAngle B A C"
proof -
have "D' InAngle B' A C'"
proof -
have "Bet B' M C'"
using Midpoint_def ‹M Midpoint B' C'› by blast
moreover have "Bet A M D'"
using Midpoint_def ‹M Midpoint A D'› by auto
moreover hence "M = A ∨ A Out M D'"
using bet_out by blast
ultimately show ?thesis
using InAngle_def ‹A ≠ B'› ‹A ≠ C'› ‹A ≠ D'› by auto
qed
moreover have "A Out D' D'"
using ‹A ≠ D'› out_trivial by auto
ultimately show ?thesis
using ‹A Out B B'› ‹A Out C C'› l11_25 by blast
qed
moreover have "A C' B' CongA C' B' D'"
proof -
have "A M C' CongA D' M B'"
proof -
have "Bet A M D'"
using ‹M Midpoint A D'› by (simp add: Midpoint_def)
moreover have "Bet C' M B'"
using Bet_cases Midpoint_def ‹M Midpoint B' C'› by blast
ultimately show ?thesis
using ‹M ≠ B'› ‹M ≠ C'› ‹M ≠ D'› ‹A ≠ M› l11_14 by blast
qed
moreover have "Cong M A M D'"
using Cong_cases ‹M Midpoint A D'› midpoint_cong by blast
moreover have "Cong M C' M B'"
using ‹M Midpoint B' C'› midpoint_cong not_cong_4312 by blast
ultimately show ?thesis
by (meson Mid_cases ‹A ≠ C'› ‹B' ≠ C'› ‹M Midpoint A D'›
‹M Midpoint B' C'› conga_right_comm symmetry_preserves_conga)
qed
moreover have "Cong A C' B' D'"
by (metis l7_13 ‹M Midpoint A D'› ‹M Midpoint B' C'› cong_3421 l7_2)
moreover have "B' C' TS A D'"
using Midpoint_def TS_def ‹Col A B' C' ⟹ False› ‹Col B' C' M›
‹M Midpoint A D'› ‹¬ Col D' B' C'› not_col_permutation_1 by blast
ultimately have "∃ D'. D' InAngle B A C ∧ A C' B' CongA C' B' D' ∧
Cong A C' B' D' ∧ B' C' TS A D'"
by blast
}
thus ?thesis
by blast
qed
lemma legendre_aux2:
assumes "¬ hypothesis_of_obtuse_saccheri_quadrilaterals"
shows "∀ A B C.
¬ Col A B C ∧ Acute B A C ∧
(∀ T. T InAngle B A C ⟶ (∃ X Y. A Out B X ∧ A Out C Y ∧ Bet X T Y))
⟶
(∀ P Q R S T U. Defect A B C P Q R ∧ GradAExp P Q R S T U ⟶
(∃ B' C' P' Q' R'. (A Out B B' ∧ A Out C C' ∧
Defect A B' C' P' Q' R' ∧ S T U LeA P' Q' R')))"
proof -
{
fix A B C
assume "¬ Col A B C" and
"Acute B A C" and
"∀ T. T InAngle B A C ⟶ (∃ X Y. A Out B X ∧ A Out C Y ∧ Bet X T Y)"
{
fix P Q R S T U
assume "Defect A B C P Q R" and
"GradAExp P Q R S T U"
let ?th = " (∃ B' C' P' Q' R'. (A Out B B' ∧ A Out C C' ∧
Defect A B' C' P' Q' R' ∧ S T U LeA P' Q' R'))"
have ?th
proof (rule GradAExp.induct [OF ‹GradAExp P Q R S T U›])
show "⋀D E F.
P Q R CongA D E F ⟹
∃B' C' P' Q' R'.
A Out B B' ∧
A Out C C' ∧ Defect A B' C' P' Q' R' ∧ D E F LeA P' Q' R'"
by (metis ‹Defect A B C P Q R› bet_out_1 conga__lea456123
defect_distincts not_bet_distincts)
{
fix S T U G H I
assume "GradAExp P Q R S T U" and
P1: "∃B' C' P' Q' R'. A Out B B' ∧ A Out C C' ∧ Defect A B' C' P' Q' R' ∧
S T U LeA P' Q' R'" and
"SAMS S T U S T U" and
"S T U S T U SumA G H I"
obtain B' C' P' Q' R' where "A Out B B'" and "A Out C C'" and
"Defect A B' C' P' Q' R'" and "S T U LeA P' Q' R'" using P1 by blast
obtain D' where "D' InAngle B A C" and "A C' B' CongA C' B' D'" and
"Cong A C' B' D'" and "B' C' TS A D'"
using legendre_aux1 ‹A Out B B'› ‹A Out C C'› ‹¬ Col A B C› by blast
have "¬ Col A B' C'"
using TS_def ‹B' C' TS A D'› by presburger
obtain B'' C'' where "A Out B B''" and "A Out C C''" and "Bet B'' D' C''"
using ‹D' InAngle B A C›
‹∀T. T InAngle B A C ⟶ (∃X Y. A Out B X ∧ A Out C Y ∧ Bet X T Y)› by blast
have "Q' ≠ P'"
using ‹Defect A B' C' P' Q' R'› defect_distincts by blast
have "Q' ≠ R'"
using ‹Defect A B' C' P' Q' R'› defect_distincts by blast
have "A ≠ C''"
using ‹A Out C C''› l6_3_1 by blast
have "A ≠ B''"
using ‹A Out B B''› out_distinct by blast
have "B'' ≠ C''"
by (metis Col_def Out_def ‹A Out B B''› ‹A Out C C''›
‹¬ Col A B C› between_symmetry l6_7)
then obtain P'' Q'' R'' where "Defect A B'' C'' P'' Q'' R''"
using ex_defect ‹A ≠ B''› ‹A ≠ C''› by presburger
moreover
obtain V W X where "P' Q' R' P' Q' R' SumA V W X"
using ex_suma ‹Q' ≠ P'› ‹Q' ≠ R'› by presburger
have "SAMS P' Q' R' P' Q' R' ∧ V W X LeA P'' Q'' R''"
proof -
have "A Out B' B''"
using ‹A Out B B''› ‹A Out B B'› l6_6 l6_7 by blast
moreover have "A Out C' C''"
using ‹A Out C C''› ‹A Out C C'› l6_6 l6_7 by blast
ultimately show ?thesis
using assms ‹¬ Col A B' C'› ‹A C' B' CongA C' B' D'› ‹Cong A C' B' D'›
‹B' C' TS A D'› ‹P' Q' R' P' Q' R' SumA V W X› ‹Bet B'' D' C''›
‹Defect A B' C' P' Q' R'› ‹Defect A B'' C'' P'' Q'' R''› legendre_aux by blast
qed
have "G H I LeA P'' Q'' R''"
proof -
have "G H I LeA V W X"
using sams_lea2_suma2__lea [where ?A="S" and ?B="T" and ?C="U" and
?D="S" and ?E="T" and ?F="U" and ?A'="P'" and ?B'="Q'" and ?C'="R'" and
?D'="P'" and ?E'="Q'" and ?F'="R'"] ‹S T U LeA P' Q' R'› ‹S T U LeA P' Q' R'›
‹SAMS P' Q' R' P' Q' R' ∧ V W X LeA P'' Q'' R''›
‹S T U S T U SumA G H I› ‹P' Q' R' P' Q' R' SumA V W X›
by blast
moreover have "V W X LeA P'' Q'' R''"
using ‹SAMS P' Q' R' P' Q' R' ∧ V W X LeA P'' Q'' R''› by blast
ultimately show ?thesis
using lea_trans by blast
qed
ultimately have "∃B' C' P' Q' R'. A Out B B' ∧ A Out C C' ∧
Defect A B' C' P' Q' R' ∧ G H I LeA P' Q' R'"
using ‹A Out B B''› ‹A Out C C''› by blast
}
thus "⋀D E F G H I.
GradAExp P Q R D E F ⟹
∃B' C' P' Q' R'.
A Out B B' ∧ A Out C C' ∧ Defect A B' C' P' Q' R' ∧ D E F LeA P' Q' R' ⟹
SAMS D E F D E F ⟹
D E F D E F SumA G H I ⟹
∃B' C' P' Q' R'.
A Out B B' ∧
A Out C C' ∧ Defect A B' C' P' Q' R' ∧ G H I LeA P' Q' R'"
by blast
qed
}
hence "(∀ P Q R S T U.
Defect A B C P Q R ∧ GradAExp P Q R S T U ⟶
(∃ B' C' P' Q' R'.
(A Out B B' ∧ A Out C C' ∧
Defect A B' C' P' Q' R' ∧ S T U LeA P' Q' R')))" by blast
}
thus ?thesis
by blast
qed
lemma legendre_s_fourth_theorem_aux:
assumes "archimedes_axiom" and
"legendre_s_parallel_postulate"
shows "postulate_of_right_saccheri_quadrilaterals"
proof -
obtain A B C where "¬ Col B A C" and "Acute B A C" and
"∀ T. (T InAngle B A C) ⟶ (∃ X Y. A Out B X ∧ A Out C Y ∧ Bet X T Y)"
using assms(2) legendre_s_parallel_postulate_def by blast
have "A ≠ B"
using ‹Acute B A C› acute_distincts by auto
have "A ≠ C"
using ‹¬ Col B A C› not_col_distincts by auto
have "B ≠ C"
using ‹¬ Col B A C› col_trivial_3 by auto
obtain P Q R where "Defect A B C P Q R"
using ‹A ≠ B› ‹A ≠ C› ‹B ≠ C› ex_defect by presburger
{
assume "Col P Q R"
hence "¬ hypothesis_of_obtuse_saccheri_quadrilaterals"
using archi__obtuse_case_elimination assms(1) by presburger
moreover have "¬ Col A B C"
by (simp add: ‹¬ Col B A C› not_col_permutation_4)
moreover have "Q Out P R"
proof -
{
assume "Bet P Q R"
have "Defect B A C P Q R"
using ‹Defect A B C P Q R› defect_perm_213 by blast
then obtain D E F G H I where "B A C A C B SumA G H I" and
"G H I C B A SumA D E F" and "D E F SuppA P Q R"
using Defect_def TriSumA_def by auto
have "Col B A C"
proof -
have "P Q R SuppA D E F"
by (simp add: ‹D E F SuppA P Q R› suppa_sym)
hence "E Out D F"
using ‹Bet P Q R› bet_suppa__out by blast
moreover
have "SAMS G H I C B A"
using ‹B A C A C B SumA G H I› assms(1) legendre_s_first_theorem by blast
hence "C B A LeA D E F"
using ‹G H I C B A SumA D E F› sams_suma__lea456789 by blast
ultimately show ?thesis
using l6_6 out_col out_lea__out by blast
qed
hence False
by (simp add: ‹¬ Col B A C›)
}
hence "¬ Bet P Q R"
by blast
thus ?thesis
using ‹Col P Q R› l6_4_2 by blast
qed
ultimately
have "postulate_of_right_saccheri_quadrilaterals"
using ‹Defect A B C P Q R› defect_ncol_out__rah
existential_playfair__rah_1 by blast
}
moreover
{
assume "¬ Col P Q R"
obtain S T U where "GradAExp P Q R S T U" and "Obtuse S T U"
using archi__gradaexp_destruction ‹¬ Col P Q R› assms(1) by blast
have "¬ hypothesis_of_obtuse_saccheri_quadrilaterals"
by (simp add: archi__obtuse_case_elimination assms(1))
hence P2: "∀ A B C.
¬ Col A B C ∧ Acute B A C ∧
(∀ T. T InAngle B A C ⟶ (∃ X Y. A Out B X ∧ A Out C Y ∧ Bet X T Y))
⟶
(∀ P Q R S T U. Defect A B C P Q R ∧ GradAExp P Q R S T U ⟶
(∃ B' C' P' Q' R'. (A Out B B' ∧ A Out C C' ∧
Defect A B' C' P' Q' R' ∧ S T U LeA P' Q' R')))"
using legendre_aux2 by blast
moreover have "¬ Col A B C"
by (simp add: ‹¬ Col B A C› not_col_permutation_4)
ultimately have "∃ B' C' P' Q' R'. (A Out B B' ∧ A Out C C' ∧
Defect A B' C' P' Q' R' ∧ S T U LeA P' Q' R')"
using ‹∀T. T InAngle B A C ⟶ (∃X Y. A Out B X ∧ A Out C Y ∧ Bet X T Y)› ‹Acute B A C›
‹Defect A B C P Q R› ‹GradAExp P Q R S T U› by blast
then obtain B' C' P' Q' R' where "A Out B B'" and "A Out C C'" and
"Defect A B' C' P' Q' R'" and " S T U LeA P' Q' R'"
by blast
have "¬ SAMS P' Q' R' P' Q' R'"
using lea_obtuse_obtuse ‹Obtuse S T U› ‹S T U LeA P' Q' R'› obtuse__nsams by blast
obtain D' where "D' InAngle B A C" and "A C' B' CongA C' B' D'" and
"Cong A C' B' D'" and "B' C' TS A D'"
using legendre_aux1 ‹A Out B B'› ‹A Out C C'› ‹¬ Col A B C› by blast
have "¬ Col A B' C'"
using TS_def ‹B' C' TS A D'› by auto
obtain B'' C'' where "A Out B B''" and "A Out C C''" and "Bet B'' D' C''"
using ‹D' InAngle B A C›
‹∀T. T InAngle B A C ⟶ (∃X Y. A Out B X ∧ A Out C Y ∧ Bet X T Y)›
by blast
have "A ≠ B''"
using Out_def ‹A Out B B''› by auto
have "A ≠ C''"
using ‹A Out C C''› l6_3_1 by blast
have "B'' ≠ C''"
using ‹A Out B B''› ‹A Out C C''› ‹¬ Col A B C› l6_6 l6_7 out_col by blast
then obtain S' T' U' where "Defect A B'' C'' S' T' U'"
using ex_defect ‹A ≠ B''› ‹A ≠ C''› by presburger
have "P' ≠ Q'"
using ‹Defect A B' C' P' Q' R'› defect_distincts by blast
have "R' ≠ Q'"
using ‹S T U LeA P' Q' R'› lea_distincts by blast
then obtain V W X where "P' Q' R' P' Q' R' SumA V W X"
using ex_suma ‹P' ≠ Q'› by presburger
have " SAMS P' Q' R' P' Q' R'"
proof -
have "A Out B' B''"
using Out_cases ‹A Out B B''› ‹A Out B B'› l6_7 by blast
moreover have "A Out C' C''"
using ‹A Out C C''› ‹A Out C C'› l6_6 l6_7 by blast
ultimately show ?thesis
using legendre_aux ‹P' Q' R' P' Q' R' SumA V W X› ‹Defect A B' C' P' Q' R'›
‹Defect A B'' C'' S' T' U'› ‹¬ Col A B' C'› ‹A C' B' CongA C' B' D'›
‹Cong A C' B' D'› ‹B' C' TS A D'› ‹Bet B'' D' C''›
‹¬ HypothesisObtuseSaccheriQuadrilaterals› by blast
qed
hence "False" using ‹¬ SAMS P' Q' R' P' Q' R'› by blast
hence "∀ A B C D. Saccheri A B C D ⟶ Per A B C"
by blast
}
ultimately show ?thesis
using postulate_of_right_saccheri_quadrilaterals_def by blast
qed
theorem legendre_s_fourth_theorem:
assumes "archimedes_axiom" and
"legendre_s_parallel_postulate"
shows "postulate_of_existence_of_a_triangle_whose_angles_sum_to_two_rights"
using assms(1) assms(2) legendre_s_fourth_theorem_aux rah__triangle
triangle__existential_triangle by blast
lemma P34_P21:
assumes "archimedes_axiom" and
"Postulate34"
shows "Postulate21"
using assms(1) assms(2) legendre_s_fourth_theorem Postulate21_def Postulate34_def by blast
lemma P34_P27:
assumes "archimedes_axiom" and
"Postulate34"
shows "Postulate27"
proof -
have "Postulate21"
using P34_P21 assms(1) assms(2) by blast
thus ?thesis
using Cycle_3 by blast
qed
lemma P25_33:
assumes "Postulate25"
shows "Postulate33"
using Postulate25_def Postulate33_def assms
thales_converse_postulate__weak_triangle_circumscription_principle by auto
lemma P23_33:
assumes "Postulate23"
shows "Postulate33"
proof -
have "Postulate25"
using assms(1) Cycle_3 by blast
thus ?thesis
using P25_33 by blast
qed
lemma P01_35:
assumes "Postulate01"
shows "Postulate35"
using Postulate01_def Postulate35_def assms playfair__existential_playfair
tarski_s_euclid_implies_playfair_s_postulate by blast
lemma P35_27:
assumes "Postulate35"
shows "Postulate27"
using Postulate27_def Postulate35_def assms existential_playfair__rah by blast
lemma Thm10_1:
assumes "archimedes_axiom"
shows "(Postulate01 ⟷ Postulate02) ∧
(Postulate01 ⟷ Postulate03) ∧
(Postulate01 ⟷ Postulate04) ∧
(Postulate01 ⟷ Postulate05) ∧
(Postulate01 ⟷ Postulate06) ∧
(Postulate01 ⟷ Postulate07) ∧
(Postulate01 ⟷ Postulate08) ∧
(Postulate01 ⟷ Postulate09) ∧
(Postulate01 ⟷ Postulate10)"
using InterAx5 InterCycle3 Postulate01_def Postulate03_def playfair__alternate_interior
tarski_s_euclid_implies_playfair_s_postulate alternate_interior__triangle
Cycle_2 Postulate03_def Postulate20_def assms legendre_s_third_theorem InterAx5
Cycle_3 P04_P33 P25_33 P34_P27 P4_P34 assms InterCycle1bis Postulate02_def
Postulate12_def playfair_bis__playfair Postulate07_def Postulate08_def
alternate_interior__consecutive_interior consecutive_interior__alternate_interior
equivalent_postulates_without_decidability_of_intersection_of_lines
equivalent_postulates_without_decidability_of_intersection_of_lines
by blast
lemma Thm10_2:
assumes "archimedes_axiom"
shows "(Postulate01 ⟷ Postulate11) ∧
(Postulate01 ⟷ Postulate12) ∧
(Postulate01 ⟷ Postulate13) ∧
(Postulate01 ⟷ Postulate14) ∧
(Postulate01 ⟷ Postulate15) ∧
(Postulate01 ⟷ Postulate16) ∧
(Postulate01 ⟷ Postulate17) ∧
(Postulate01 ⟷ Postulate18) ∧
(Postulate01 ⟷ Postulate19) ∧
(Postulate01 ⟷ Postulate20)"
using InterAx5 InterCycle1bis InterCycle3 Postulate02_def Postulate03_def
Postulate12_def playfair__alternate_interior alternate_interior__triangle
playfair_bis__playfair equivalent_postulates_without_decidability_of_intersection_of_lines
Cycle_2 Cycle_1 Postulate11_def Postulate15_def
inter_dec_plus_par_perp_perp_imply_triangle_circumscription
universal_posidonius_postulate__perpendicular_transversal_postulate
by blast
lemma Thm10_3:
assumes "archimedes_axiom"
shows "(Postulate01 ⟷ Postulate21) ∧
(Postulate01 ⟷ Postulate22) ∧
(Postulate01 ⟷ Postulate23) ∧
(Postulate01 ⟷ Postulate24) ∧
(Postulate01 ⟷ Postulate25) ∧
(Postulate01 ⟷ Postulate26) ∧
(Postulate01 ⟷ Postulate27) ∧
(Postulate01 ⟷ Postulate28) ∧
(Postulate01 ⟷ Postulate29) ∧
(Postulate01 ⟷ Postulate30)"
using Postulate03_def Postulate21_def legendre_s_second_theorem
triangle__existential_triangle assms Thm10_1 Cycle_3 by blast
lemma Thm10_4:
assumes "archimedes_axiom"
shows "(Postulate01 ⟷ Postulate31) ∧
(Postulate01 ⟷ Postulate32) ∧
(Postulate01 ⟷ Postulate33) ∧
(Postulate01 ⟷ Postulate34) ∧
(Postulate01 ⟷ Postulate35)"
using assms Thm10_1 P31_P04 P31_P04 P31_P32 P04_P33 P4_P34 P34_P27 Thm10_3
P01__P35 P35_27 by blast
theorem Thm10:
assumes "archimedes_axiom"
shows "(Postulate01 ⟷ Postulate02) ∧
(Postulate01 ⟷ Postulate03) ∧
(Postulate01 ⟷ Postulate04) ∧
(Postulate01 ⟷ Postulate05) ∧
(Postulate01 ⟷ Postulate06) ∧
(Postulate01 ⟷ Postulate07) ∧
(Postulate01 ⟷ Postulate08) ∧
(Postulate01 ⟷ Postulate09) ∧
(Postulate01 ⟷ Postulate10) ∧
(Postulate01 ⟷ Postulate11) ∧
(Postulate01 ⟷ Postulate12) ∧
(Postulate01 ⟷ Postulate13) ∧
(Postulate01 ⟷ Postulate14) ∧
(Postulate01 ⟷ Postulate15) ∧
(Postulate01 ⟷ Postulate16) ∧
(Postulate01 ⟷ Postulate17) ∧
(Postulate01 ⟷ Postulate18) ∧
(Postulate01 ⟷ Postulate19) ∧
(Postulate01 ⟷ Postulate20) ∧
(Postulate01 ⟷ Postulate21) ∧
(Postulate01 ⟷ Postulate22) ∧
(Postulate01 ⟷ Postulate23) ∧
(Postulate01 ⟷ Postulate24) ∧
(Postulate01 ⟷ Postulate25) ∧
(Postulate01 ⟷ Postulate26) ∧
(Postulate01 ⟷ Postulate27) ∧
(Postulate01 ⟷ Postulate28) ∧
(Postulate01 ⟷ Postulate29) ∧
(Postulate01 ⟷ Postulate30) ∧
(Postulate01 ⟷ Postulate31) ∧
(Postulate01 ⟷ Postulate32) ∧
(Postulate01 ⟷ Postulate33) ∧
(Postulate01 ⟷ Postulate34) ∧
(Postulate01 ⟷ Postulate35)"
using InterAx5 InterCycle3 Postulate01_def Postulate03_def playfair__alternate_interior
tarski_s_euclid_implies_playfair_s_postulate alternate_interior__triangle
Cycle_2 Postulate03_def Postulate20_def assms legendre_s_third_theorem InterAx5
Cycle_3 P04_P33 P25_33 P34_P27 P4_P34 assms InterCycle1bis Postulate02_def
Postulate12_def playfair_bis__playfair Postulate07_def Postulate08_def
alternate_interior__consecutive_interior consecutive_interior__alternate_interior
equivalent_postulates_without_decidability_of_intersection_of_lines
equivalent_postulates_without_decidability_of_intersection_of_lines
InterAx5 InterCycle1bis InterCycle3 Postulate02_def Postulate03_def
Postulate12_def playfair__alternate_interior alternate_interior__triangle
playfair_bis__playfair equivalent_postulates_without_decidability_of_intersection_of_lines
Cycle_2 Cycle_1 Postulate11_def Postulate15_def
inter_dec_plus_par_perp_perp_imply_triangle_circumscription
universal_posidonius_postulate__perpendicular_transversal_postulate
Postulate03_def Postulate21_def legendre_s_second_theorem
triangle__existential_triangle assms Thm10_1 Cycle_3 assms Thm10_1 P31_P04
P31_P04 P31_P32 P04_P33 P4_P34 P34_P27 Thm10_3 P01__P35 P35_27 by blast
theorem equivalent_postulates_assuming_greenberg_s_axiom:
assumes "greenberg_s_axiom"
shows "(tarski_s_parallel_postulate ⟷ alternate_interior_angles_postulate) ∧
(tarski_s_parallel_postulate ⟷ alternative_playfair_s_postulate) ∧
(tarski_s_parallel_postulate ⟷ alternative_playfair_s_postulate) ∧
(tarski_s_parallel_postulate ⟷ alternative_proclus_postulate) ∧
(tarski_s_parallel_postulate ⟷ alternative_strong_parallel_postulate) ∧
(tarski_s_parallel_postulate ⟷ consecutive_interior_angles_postulate) ∧
(tarski_s_parallel_postulate ⟷ euclid_5) ∧
(tarski_s_parallel_postulate ⟷ euclid_s_parallel_postulate) ∧
(tarski_s_parallel_postulate ⟷ existential_playfair_s_postulate) ∧
(tarski_s_parallel_postulate ⟷ existential_thales_postulate) ∧
(tarski_s_parallel_postulate ⟷ inverse_projection_postulate) ∧
(tarski_s_parallel_postulate ⟷ midpoint_converse_postulate) ∧
(tarski_s_parallel_postulate ⟷ perpendicular_transversal_postulate) ∧
(tarski_s_parallel_postulate ⟷ postulate_of_transitivity_of_parallelism) ∧
(tarski_s_parallel_postulate ⟷ playfair_s_postulate) ∧
(tarski_s_parallel_postulate ⟷ posidonius_postulate) ∧
(tarski_s_parallel_postulate ⟷ universal_posidonius_postulate) ∧
(tarski_s_parallel_postulate
⟷ postulate_of_existence_of_a_right_lambert_quadrilateral) ∧
(tarski_s_parallel_postulate
⟷ postulate_of_existence_of_a_right_saccheri_quadrilateral) ∧
(tarski_s_parallel_postulate
⟷ postulate_of_existence_of_a_triangle_whose_angles_sum_to_two_rights) ∧
(tarski_s_parallel_postulate ⟷ postulate_of_existence_of_similar_triangles) ∧
(tarski_s_parallel_postulate
⟷ postulate_of_parallelism_of_perpendicular_transversals) ∧
(tarski_s_parallel_postulate ⟷ postulate_of_right_lambert_quadrilaterals) ∧
(tarski_s_parallel_postulate ⟷ postulate_of_right_saccheri_quadrilaterals) ∧
(tarski_s_parallel_postulate ⟷ postulate_of_transitivity_of_parallelism) ∧
(tarski_s_parallel_postulate ⟷ proclus_postulate) ∧
(tarski_s_parallel_postulate ⟷ strong_parallel_postulate) ∧
(tarski_s_parallel_postulate ⟷ tarski_s_parallel_postulate) ∧
(tarski_s_parallel_postulate ⟷ thales_postulate) ∧
(tarski_s_parallel_postulate ⟷ thales_converse_postulate) ∧
(tarski_s_parallel_postulate ⟷ triangle_circumscription_principle) ∧
(tarski_s_parallel_postulate ⟷ triangle_postulate)"
proof -
have "aristotle_s_axiom"
using aristotle_s_axiom_def assms greenberg__aristotle by blast
have "tarski_s_parallel_postulate ⟷ alternate_interior_angles_postulate"
using InterAx5 Postulate01_def Postulate02_def alternate_interior__playfair_bis
playfair__alternate_interior playfair_bis__playfair
tarski_s_euclid_implies_playfair_s_postulate by blast
moreover have "tarski_s_parallel_postulate ⟷ alternative_playfair_s_postulate"
using alternate_interior__playfair_bis calculation playfair__alternate_interior
playfair_bis__playfair by blast
moreover have "tarski_s_parallel_postulate ⟷ alternative_proclus_postulate"
using inverse_projection_postulate__proclus_bis original_euclid__original_spp
original_spp__inverse_projection_postulate proclus_bis__proclus
proclus_s_postulate_implies_strong_parallel_postulate
strong_parallel_postulate_implies_tarski_s_euclid
tarski_s_implies_euclid_s_parallel_postulate by blast
moreover have "tarski_s_parallel_postulate ⟷ alternative_strong_parallel_postulate"
using calculation(3) inverse_projection_postulate__proclus_bis
original_euclid__original_spp original_spp__inverse_projection_postulate
tarski_s_implies_euclid_s_parallel_postulate by blast
moreover have "tarski_s_parallel_postulate ⟷ consecutive_interior_angles_postulate"
using alternate_interior__consecutive_interior calculation(1)
consecutive_interior__alternate_interior by blast
moreover have "tarski_s_parallel_postulate ⟷ euclid_5"
using calculation(4) euclid_5__original_euclid original_euclid__original_spp
tarski_s_euclid_implies_euclid_5 by blast
moreover have "tarski_s_parallel_postulate ⟷ euclid_s_parallel_postulate"
using calculation(4) original_euclid__original_spp
tarski_s_implies_euclid_s_parallel_postulate by linarith
moreover have "tarski_s_parallel_postulate ⟷ existential_playfair_s_postulate"
using Postulate35_def Cycle_3 InterCycle1 P01__P35 P35_27 Postulate01_def
Postulate12_def ‹greenberg_s_axiom› calculation(2) by blast
moreover have "tarski_s_parallel_postulate ⟷ existential_thales_postulate"
using Postulate26_def Cycle_3 InterCycle1 P01__P35 P35_27 Postulate01_def
Postulate12_def ‹greenberg_s_axiom› calculation(2) by blast
moreover have "tarski_s_parallel_postulate ⟷ inverse_projection_postulate"
using calculation(3) calculation(4) inverse_projection_postulate__proclus_bis
original_spp__inverse_projection_postulate by blast
moreover have "tarski_s_parallel_postulate ⟷ midpoint_converse_postulate"
using Postulate06_def calculation(2) calculation(8)
midpoint_converse_postulate_implies_playfair playfair__existential_playfair
playfair_bis__playfair playfair_s_postulate_implies_midpoint_converse_postulate by blast
moreover have "tarski_s_parallel_postulate ⟷ perpendicular_transversal_postulate"
using Postulate09_def inter_dec_plus_par_perp_perp_imply_triangle_circumscription
playfair__universal_posidonius_postulate
tarski_s_euclid_implies_playfair_s_postulate
triangle_circumscription_implies_tarski_s_euclid
universal_posidonius_postulate__perpendicular_transversal_postulate by blast
moreover have "tarski_s_parallel_postulate ⟷ postulate_of_transitivity_of_parallelism"
using InterAx5 Postulate01_def Postulate02_def par_trans_implies_playfair
playfair_implies_par_trans tarski_s_euclid_implies_playfair_s_postulate by blast
moreover have "tarski_s_parallel_postulate ⟷ playfair_s_postulate"
using calculation(13) playfair_implies_par_trans
tarski_s_euclid_implies_playfair_s_postulate by blast
moreover have "tarski_s_parallel_postulate ⟷ posidonius_postulate"
using Postulate22_def Cycle_3 Postulate26_def calculation(9) by blast
moreover have "tarski_s_parallel_postulate ⟷ universal_posidonius_postulate"
using Postulate11_def calculation(12) playfair__universal_posidonius_postulate
tarski_s_euclid_implies_playfair_s_postulate
universal_posidonius_postulate__perpendicular_transversal_postulate by blast
moreover have "tarski_s_parallel_postulate
⟷ postulate_of_existence_of_a_right_lambert_quadrilateral"
using Cycle_3 Postulate22_def Postulate30_def calculation(15) by blast
moreover have "tarski_s_parallel_postulate
⟷ postulate_of_existence_of_a_right_saccheri_quadrilateral"
using Cycle_3 Postulate28_def Postulate30_def calculation(17) by blast
moreover have "tarski_s_parallel_postulate
⟷ postulate_of_existence_of_a_triangle_whose_angles_sum_to_two_rights"
using Cycle_3 Postulate21_def Postulate22_def calculation(15) by blast
moreover have "tarski_s_parallel_postulate
⟷ postulate_of_existence_of_similar_triangles"
using Cycle_3 Postulate22_def Postulate23_def calculation(15) by blast
moreover have "tarski_s_parallel_postulate
⟷ postulate_of_parallelism_of_perpendicular_transversals"
using calculation(12) par_perp_2_par_implies_par_perp_perp
par_perp_perp_implies_par_perp_2_par by blast
moreover have "tarski_s_parallel_postulate ⟷ postulate_of_right_lambert_quadrilaterals"
using Cycle_3 Postulate26_def Postulate29_def calculation(9) by blast
moreover have "tarski_s_parallel_postulate ⟷ postulate_of_right_saccheri_quadrilaterals"
using calculation(18) calculation(9) rah__existential_saccheri thales_existence__rah by blast
moreover have "tarski_s_parallel_postulate ⟷ proclus_postulate"
using Cycle_2 Postulate13_def Postulate01_def by blast
moreover have "tarski_s_parallel_postulate ⟷ strong_parallel_postulate"
using calculation(24) proclus_s_postulate_implies_strong_parallel_postulate
strong_parallel_postulate_implies_tarski_s_euclid by blast
moreover have "tarski_s_parallel_postulate ⟷ thales_postulate"
using Cycle_3 Postulate24_def Postulate26_def calculation(9) by blast
moreover have "tarski_s_parallel_postulate ⟷ thales_converse_postulate"
using Cycle_3 Postulate25_def Postulate30_def calculation(17) by blast
moreover have "tarski_s_parallel_postulate ⟷ triangle_circumscription_principle"
using inter_dec_plus_par_perp_perp_imply_triangle_circumscription calculation(12)
triangle_circumscription_implies_tarski_s_euclid by blast
moreover have "tarski_s_parallel_postulate ⟷ triangle_postulate"
using Cycle_3 Postulate03_def Postulate30_def calculation(17) by blast
ultimately show ?thesis
by blast
qed
theorem equivalent_postulates_assuming_archimesdes_axiom:
assumes "archimedes_axiom"
shows "alternate_interior_angles_postulate ⟷ alternative_playfair_s_postulate ∧
alternative_playfair_s_postulate ⟷ alternative_proclus_postulate ∧
alternative_proclus_postulate ⟷ alternative_strong_parallel_postulate ∧
alternative_strong_parallel_postulate ⟷ bachmann_s_lotschnittaxiom ∧
bachmann_s_lotschnittaxiom ⟷ consecutive_interior_angles_postulate ∧
consecutive_interior_angles_postulate ⟷ euclid_5 ∧
euclid_5 ⟷ euclid_s_parallel_postulate ∧
euclid_s_parallel_postulate ⟷ existential_playfair_s_postulate ∧
existential_playfair_s_postulate ⟷ existential_thales_postulate ∧
existential_thales_postulate ⟷ inverse_projection_postulate ∧
inverse_projection_postulate ⟷ legendre_s_parallel_postulate ∧
legendre_s_parallel_postulate ⟷ midpoint_converse_postulate ∧
midpoint_converse_postulate ⟷ perpendicular_transversal_postulate ∧
perpendicular_transversal_postulate ⟷ postulate_of_transitivity_of_parallelism ∧
postulate_of_transitivity_of_parallelism ⟷ playfair_s_postulate ∧
playfair_s_postulate ⟷ posidonius_postulate ∧
posidonius_postulate ⟷ universal_posidonius_postulate ∧
universal_posidonius_postulate ⟷
postulate_of_existence_of_a_right_lambert_quadrilateral ∧
postulate_of_existence_of_a_right_lambert_quadrilateral ⟷
postulate_of_existence_of_a_right_saccheri_quadrilateral ∧
postulate_of_existence_of_a_right_saccheri_quadrilateral ⟷
postulate_of_existence_of_a_triangle_whose_angles_sum_to_two_rights ∧
postulate_of_existence_of_a_triangle_whose_angles_sum_to_two_rights ⟷
postulate_of_existence_of_similar_triangles ∧
postulate_of_existence_of_similar_triangles ⟷
postulate_of_parallelism_of_perpendicular_transversals ∧
postulate_of_parallelism_of_perpendicular_transversals ⟷
postulate_of_right_lambert_quadrilaterals ∧
postulate_of_right_lambert_quadrilaterals ⟷ postulate_of_right_saccheri_quadrilaterals ∧
postulate_of_right_saccheri_quadrilaterals ⟷ postulate_of_transitivity_of_parallelism ∧
postulate_of_transitivity_of_parallelism ⟷ proclus_postulate ∧
proclus_postulate ⟷ strong_parallel_postulate ∧
strong_parallel_postulate ⟷ tarski_s_parallel_postulate ∧
tarski_s_parallel_postulate ⟷ thales_postulate ∧
thales_postulate ⟷ thales_converse_postulate ∧
thales_converse_postulate ⟷ triangle_circumscription_principle ∧
triangle_circumscription_principle ⟷ triangle_postulate ∧
triangle_postulate ⟷ weak_inverse_projection_postulate ∧
weak_inverse_projection_postulate ⟷ weak_tarski_s_parallel_postulate ∧
weak_tarski_s_parallel_postulate ⟷ weak_triangle_circumscription_principle"
using alternate_interior__consecutive_interior alternate_interior__playfair_bis assms
bachmann_s_lotschnittaxiom__legendre_s_parallel_postulate consecutive_interior__alternate_interior
euclid_5__original_euclid existential_playfair__rah existential_saccheri__rah
inter_dec_plus_par_perp_perp_imply_triangle_circumscription
inverse_projection_postulate__proclus_bis legendre_s_fourth_theorem_aux legendre_s_second_theorem
legendre_s_third_theorem midpoint_converse_postulate_implies_playfair original_euclid__original_spp
original_spp__inverse_projection_postulate par_perp_2_par_implies_par_perp_perp
par_perp_perp_implies_par_perp_2_par playfair__alternate_interior playfair__existential_playfair
playfair__universal_posidonius_postulate playfair_bis__playfair
playfair_s_postulate_implies_midpoint_converse_postulate posidonius_postulate__rah
proclus_bis__proclus proclus_s_postulate_implies_strong_parallel_postulate
rah__existential_saccheri rah__posidonius rah__rectangle_principle rah__similar
rah__thales_postulate rah__triangle rectangle_existence__rah
rectangle_principle__rectangle_existence similar__rah
strong_parallel_postulate_implies_tarski_s_euclid tarski_s_euclid_implies_euclid_5
tarski_s_euclid_implies_playfair_s_postulate thales_converse_postulate__thales_existence
thales_converse_postulate__weak_triangle_circumscription_principle thales_existence__rah
thales_postulate__thales_converse_postulate triangle__existential_triangle
triangle_circumscription_implies_tarski_s_euclid
universal_posidonius_postulate__perpendicular_transversal_postulate
weak_inverse_projection_postulate__weak_tarski_s_parallel_postulate
weak_tarski_s_parallel_postulate__weak_inverse_projection_postulate
weak_triangle_circumscription_principle__bachmann_s_lotschnittaxiom by argo
section "Szmielew: hyperbolic plane postulate"
subsection "Definition"
definition hyperbolic_plane_postulate ::
"bool"
("HyperbolicPlanePostulate") where
"hyperbolic_plane_postulate ≡
∀ A1 A2 P.
¬ Col A1 A2 P
⟶
(∃ B1 B2 C1 C2.
A1 A2 Par B1 B2 ∧ Col P B1 B2 ∧ A1 A2 Par C1 C2 ∧ Col P C1 C2 ∧ ¬ Col C1 B1 B2)"
subsection "Propositions"
lemma hpp__nP35:
assumes "greenberg_s_axiom"
shows "hyperbolic_plane_postulate ⟷ ¬ Postulate35"
proof -
have "hyperbolic_plane_postulate ⟶ ¬ existential_playfair_s_postulate"
using existential_playfair_s_postulate_def hyperbolic_plane_postulate_def by blast
moreover
have "(greenberg_s_axiom ∧ ¬ existential_playfair_s_postulate) ⟶ hyperbolic_plane_postulate"
using existential_playfair_s_postulate_def hyperbolic_plane_postulate_def
col_permutation_5 par_right_comm by blast
ultimately show ?thesis
using Postulate35_def assms by blast
qed
lemma aah__hpp:
assumes "hypothesis_of_acute_saccheri_quadrilaterals"
shows "hyperbolic_plane_postulate"
proof -
{
fix A1 A2 P
assume "¬ Col A1 A2 P"
then obtain Q where "Col A1 A2 Q" and "A1 A2 Perp P Q"
using l8_18_existence ‹¬ Col A1 A2 P› by blast
then obtain X where "A1 ≠ X" and "A2 ≠ X" and "Q ≠ X" and "Col A1 A2 X"
using diff_col_ex3 by blast
obtain Y where "Bet X Q Y" and "Cong X Q Q Y"
using cong_4312 segment_construction by blast
have "A1 ≠ A2"
using ‹A1 A2 Perp P Q› perp_not_eq_1 by blast
have "Q ≠ Y"
using ‹Cong X Q Q Y› ‹Q ≠ X› cong_identity_inv by auto
have "P ≠ Q"
using ‹Col A1 A2 Q› ‹¬ Col A1 A2 P› by auto
have "Col A1 A2 Y"
by (metis ‹Bet X Q Y› ‹Col A1 A2 Q› ‹Col A1 A2 X› ‹Q ≠ X› bet_col colx)
have "Per P Q X"
by (meson l8_16_1 ‹A1 A2 Perp P Q› ‹Col A1 A2 Q› ‹Col A1 A2 X›)
then obtain B1 where "Saccheri Q P B1 X"
using ‹P ≠ Q› ‹Q ≠ X› per__ex_saccheri by blast
hence "Q X Par P B1"
by (simp add: sac__par1423)
have "Per P Q Y"
by (meson l8_16_1 ‹A1 A2 Perp P Q› ‹Col A1 A2 Q› ‹Col A1 A2 Y›)
then obtain C1 where "Saccheri Q P C1 Y"
using ‹P ≠ Q› ‹Q ≠ Y› per__ex_saccheri by blast
hence "Q Y Par P C1"
using sac__par1423 by blast
have "A1 A2 Par B1 P"
using Par_cases ‹A1 ≠ A2› ‹Col A1 A2 Q› ‹Col A1 A2 X› ‹Q X Par P B1›
par_col2_par_bis by blast
moreover have "Col P B1 P"
using col_trivial_3 by auto
moreover have "A1 A2 Par C1 P"
using Par_cases ‹A1 ≠ A2› ‹Col A1 A2 Q› ‹Col A1 A2 Y› ‹Q Y Par P C1›
par_col2_par_bis by blast
moreover have "Col P C1 P"
by (simp add: col_trivial_3)
moreover
{
assume "Col C1 B1 P"
have "Q P ParStrict B1 X"
by (simp add: ‹Saccheri Q P B1 X› sac__pars1234)
have "Q P ParStrict C1 Y"
using ‹Saccheri Q P C1 Y› sac__pars1234 by auto
have "P Q TS Y X"
by (metis NCol_perm invert_two_sides ‹Bet X Q Y› ‹Col A1 A2 Q›
‹Col A1 A2 X› ‹Q ≠ X› ‹Q ≠ Y› ‹¬ Col A1 A2 P› bet__ts col_trivial_2 l6_21 l9_2)
hence "P Q TS X C1"
by (meson Par_strict_cases l9_8_2 ‹Q P ParStrict C1 Y› l12_6 l9_2)
hence "P Q TS B1 C1"
using ‹Q P ParStrict B1 X› l12_6 l9_8_2 par_strict_comm by blast
hence "Bet B1 P C1"
using Col_cases ‹Col C1 B1 P› col_two_sides_bet by blast
have "B1 ≠ P"
using calculation(1) par_distincts by auto
have "C1 ≠ P"
using calculation(3) par_distinct by blast
have "¬ B1 P C1 LtA X Q Y"
using ‹Bet B1 P C1› ‹Bet X Q Y› bet2_lta__lta lta_distincts by blast
moreover
have "B1 P C1 LtA X Q Y"
proof -
have "¬ Col P Q X"
using TS_def ‹P Q TS X C1› not_col_permutation_1 by presburger
have "Q P TS X Y"
using ‹P Q TS Y X› invert_two_sides l9_2 by blast
have "Acute B1 P Q"
using ‹Saccheri Q P B1 X› acute_sym assms
hypothesis_of_acute_saccheri_quadrilaterals_def by blast
hence "B1 P Q LtA P Q X"
using acute_per__lta ‹P ≠ Q› ‹Q ≠ X› ‹Per P Q X› by blast
moreover have "Acute Q P C1"
using ‹Saccheri Q P C1 Y› assms hypothesis_of_acute_saccheri_quadrilaterals_def by blast
hence "Q P C1 LtA P Q Y"
using acute_per__lta ‹P ≠ Q› ‹Per P Q Y› ‹Q ≠ Y› by blast
moreover have "SAMS P Q X P Q Y"
using ‹P ≠ Q› ‹Per P Q X› ‹Per P Q Y› ‹Q ≠ X› ‹Q ≠ Y› per2__sams by force
moreover have "B1 P Q Q P C1 SumA B1 P C1"
using ‹B1 ≠ P› ‹Bet B1 P C1› ‹C1 ≠ P› ‹P ≠ Q› bet__suma by force
moreover have "P Q X P Q Y SumA X Q Y"
using ‹Bet X Q Y› ‹P ≠ Q› ‹Q ≠ X› ‹Q ≠ Y› bet__suma suma_left_comm by presburger
ultimately show ?thesis
using sams_lta2_suma2__lta by blast
qed
ultimately have False
by blast
}
ultimately have "∃ B1 B2 C1 C2.
A1 A2 Par B1 B2 ∧ Col P B1 B2 ∧ A1 A2 Par C1 C2 ∧ Col P C1 C2 ∧ ¬ Col C1 B1 B2"
by blast
}
thus ?thesis
using hyperbolic_plane_postulate_def by blast
qed
theorem szmielew_s_theorem:
assumes "aristotle_s_axiom"
shows "∀ P:: bool.
(playfair_s_postulate ⟶ P) ∧ (hyperbolic_plane_postulate ⟶ ¬ P)
⟶
(P ⟷ playfair_s_postulate)"
proof -
{
fix P:: bool
assume "playfair_s_postulate ⟶ P" and
"hyperbolic_plane_postulate ⟶ ¬ P"
have "hypothesis_of_acute_saccheri_quadrilaterals ∨
hypothesis_of_right_saccheri_quadrilaterals"
by (simp add: aristotle__acute_or_right assms)
moreover
have "greenberg_s_axiom"
by (simp add: aristotle__greenberg assms)
hence "playfair_s_postulate ⟷ postulate_of_existence_of_a_right_saccheri_quadrilateral"
using equivalent_postulates_assuming_greenberg_s_axiom assms by blast
{
assume "hypothesis_of_acute_saccheri_quadrilaterals"
hence "P ⟶ playfair_s_postulate"
using ‹HyperbolicPlanePostulate ⟶ ¬ P› aah__hpp by blast
}
moreover
{
assume "hypothesis_of_right_saccheri_quadrilaterals"
assume P
have "¬ hyperbolic_plane_postulate"
using ‹HyperbolicPlanePostulate ⟶ ¬ P› ‹P› by fastforce
hence "Postulate35"
using hpp__nP35 assms by (simp add: ‹GreenBergsAxiom›)
hence "playfair_s_postulate"
using equivalent_postulates_assuming_greenberg_s_axiom assms
Postulate35_def ‹GreenBergsAxiom› by fastforce
}
ultimately
have "P ⟶ playfair_s_postulate"
by blast
hence "P ⟷ playfair_s_postulate"
using ‹PlayfairSPostulate ⟶ P› by blast
}
thus ?thesis
by blast
qed
end
end