Theory TarskiIsomorphism
theory TarskiIsomorphism
imports Poincare_Disc.Tarski
begin
locale TarskiAbsoluteIso = TarskiAbsolute +
fixes φ :: "'a ⇒ 'b"
fixes cong' :: "'b ⇒ 'b ⇒ 'b ⇒ 'b ⇒ bool"
fixes betw' :: "'b ⇒ 'b ⇒ 'b ⇒ bool"
assumes φbij: "bij φ"
assumes φcong: "⋀ x y z w. cong' (φ x) (φ y) (φ z) (φ w) ⟷ cong x y z w"
assumes φbetw: "⋀ x y z. betw' (φ x) (φ y) (φ z) ⟷ betw x y z"
sublocale TarskiAbsoluteIso ⊆ TA: TarskiAbsolute cong' betw'
proof
fix x y
show "cong' x y y x"
by (smt (verit) φcong φbij bij_iff cong_reflexive)
next
fix x y z u v w
show "cong' x y z u ∧ cong' x y v w ⟶ cong' z u v w"
by (smt (verit) φcong φbij bij_iff cong_transitive)
next
fix x y z
show "cong' x y z z ⟶ x = y"
by (smt (verit) φcong φbij bij_iff cong_identity)
next
fix x y a b
show "∃ z. betw' x y z ∧ cong' y z a b"
by (smt (verit) φcong φbetw φbij bij_iff segment_construction)
next
fix x y z x' y' z' u u'
show "x ≠ y ∧ betw' x y z ∧ betw' x' y' z' ∧ cong' x y x' y' ∧ cong' y z y' z' ∧ cong' x u x' u' ∧ cong' y u y' u' ⟶
cong' z u z' u'"
by (smt (verit) φcong φbetw φbij bij_iff five_segment)
next
fix x y
show "betw' x y x ⟶ x = y"
by (metis φbetw φbij betw_identity bij_pointE)
next
fix x u z y v
show "betw' x u z ∧ betw' y v z ⟶ (∃a. betw' u a y ∧ betw' x a v)"
by (smt (verit) φbetw φbij Pasch bij_pointE)
next
show "∃ a b c. ¬ betw' a b c ∧ ¬ betw' b c a ∧ ¬ betw' c a b"
by (smt (verit) φbetw φbij lower_dimension bij_pointE)
next
fix x u v y z
show "cong' x u x v ∧ cong' y u y v ∧ cong' z u z v ∧ u ≠ v ⟶ betw' x y z ∨ betw' y z x ∨ betw' z x y"
by (smt (verit) φcong φbetw φbij upper_dimension bij_pointE)
qed
context TarskiAbsoluteIso
begin
lemma φon_line:
shows "TA.on_line (φ p) (φ a) (φ b) ⟷ on_line p a b"
using TA.on_line_def φbetw on_line_def
by presburger
lemma φon_ray:
shows "TA.on_ray (φ p) (φ a) (φ b) ⟷ on_ray p a b"
using TA.on_ray_def φbetw on_ray_def
by presburger
lemma φin_angle:
shows "TA.in_angle (φ p) (φ a) (φ b) (φ c) ⟷ in_angle p a b c"
proof
assume "in_angle p a b c"
then show "TA.in_angle (φ p) (φ a) (φ b) (φ c)"
by (smt (verit, best) TA.in_angle_def in_angle_def φbetw φbij φon_ray bij_is_inj inj_eq)
next
assume "TA.in_angle (φ p) (φ a) (φ b) (φ c)"
then obtain x where "φ b ≠ φ a ∧ φ b ≠ φ c ∧ φ p ≠ φ b" "betw' (φ a) (φ x) (φ c) ∧ φ x ≠ φ a ∧ φ x ≠ φ c" "TA.on_ray (φ p) (φ b) (φ x)"
by (smt (verit, ccfv_threshold) TA.in_angle_def φbij bij_pointE)
then show "in_angle p a b c"
unfolding in_angle_def
using φbetw φon_ray by auto
qed
lemma φray_meets_line:
shows "TA.ray_meets_line (φ ra) (φ rb) (φ la) (φ lb) ⟷
ray_meets_line ra rb la lb"
unfolding TA.ray_meets_line_def ray_meets_line_def
by (metis φbij φon_line φon_ray bij_pointE)
end
locale TarskiHyperbolicIso = TarskiHyperbolic +
fixes φ :: "'a ⇒ 'b"
fixes cong' :: "'b ⇒ 'b ⇒ 'b ⇒ 'b ⇒ bool"
fixes betw' :: "'b ⇒ 'b ⇒ 'b ⇒ bool"
assumes φbij: "bij φ"
assumes φcong: "⋀ x y z w. cong' (φ x) (φ y) (φ z) (φ w) ⟷ cong x y z w"
assumes φbetw: "⋀ x y z. betw' (φ x) (φ y) (φ z) ⟷ betw x y z"
sublocale TarskiHyperbolicIso ⊆ TAI: TarskiAbsoluteIso
by (simp add: TarskiAbsoluteIso.intro TarskiAbsoluteIso_axioms_def TarskiAbsolute_axioms φbetw φbij φcong)
sublocale TarskiHyperbolicIso ⊆ TarskiHyperbolic cong' betw'
proof
show "∃a b c d t. betw' a d t ∧ betw' b d c ∧ a ≠ d ∧ (∀x y. betw' a b x ∧ betw' a c y ⟶ ¬ betw' x t y)"
by (smt (verit) φbetw φbij euclid_negation bij_pointE)
next
fix a x1 x2
assume "¬ TAI.TA.on_line a x1 x2"
then have *: "¬ on_line (inv φ a) (inv φ x1) (inv φ x2)"
by (metis φbij TAI.φon_line bij_inv_eq_iff)
obtain a1 a2 where *:
"¬ on_line (inv φ a) (inv φ a1) (inv φ a2)"
"¬ ray_meets_line (inv φ a) (inv φ a1) (inv φ x1) (inv φ x2)"
"¬ ray_meets_line (inv φ a) (inv φ a2) (inv φ x1) (inv φ x2)"
"(∀a'. in_angle a' (inv φ a1) (inv φ a) (inv φ a2) ⟶ ray_meets_line (inv φ a) a' (inv φ x1) (inv φ x2))"
using limiting_parallels[OF *]
by (smt (verit, ccfv_threshold) φbij bij_inv_eq_iff)
then have "¬ TAI.TA.on_line a a1 a2 ∧ ¬ TAI.TA.ray_meets_line a a1 x1 x2 ∧ ¬ TAI.TA.ray_meets_line a a2 x1 x2"
by (metis φbij TAI.φon_line TAI.φray_meets_line bij_is_surj surj_f_inv_f)
moreover
have "∀a'. TAI.TA.in_angle a' a1 a a2 ⟶ TAI.TA.ray_meets_line a a' x1 x2"
proof safe
fix a'
assume "TAI.TA.in_angle a' a1 a a2"
then have "ray_meets_line (inv φ a) (inv φ a') (inv φ x1) (inv φ x2)"
using *(4) TAI.φray_meets_line TAI.φin_angle φbij bij_pointE
by (smt (verit, ccfv_SIG) bij_is_surj surj_f_inv_f)
then show "TAI.TA.ray_meets_line a a' x1 x2"
by (metis φbij TAI.φray_meets_line bij_is_surj surj_f_inv_f)
qed
ultimately show "∃a1 a2.
¬ TAI.TA.on_line a a1 a2 ∧
¬ TAI.TA.ray_meets_line a a1 x1 x2 ∧
¬ TAI.TA.ray_meets_line a a2 x1 x2 ∧
(∀a'. TAI.TA.in_angle a' a1 a a2 ⟶ TAI.TA.ray_meets_line a a' x1 x2)"
by blast
qed
locale ElementaryTarskiHyperbolicIso = ElementaryTarskiHyperbolic +
fixes φ :: "'a ⇒ 'b"
fixes cong' :: "'b ⇒ 'b ⇒ 'b ⇒ 'b ⇒ bool"
fixes betw' :: "'b ⇒ 'b ⇒ 'b ⇒ bool"
assumes φbij: "bij φ"
assumes φcong: "⋀ x y z w. cong' (φ x) (φ y) (φ z) (φ w) ⟷ cong x y z w"
assumes φbetw: "⋀ x y z. betw' (φ x) (φ y) (φ z) ⟷ betw x y z"
sublocale ElementaryTarskiHyperbolicIso ⊆ THI: TarskiHyperbolicIso
by (simp add: TarskiHyperbolicIso.intro TarskiHyperbolicIso_axioms_def TarskiHyperbolic_axioms φbetw φbij φcong)
sublocale ElementaryTarskiHyperbolicIso ⊆ ElementaryTarskiHyperbolic cong' betw'
proof
fix Φ Ψ
assume "∃a. ∀x y. Φ x ∧ Ψ y ⟶ betw' a x y"
then have "∃a. ∀x y. (Φ ∘ φ) x ∧ (Ψ ∘ φ) y ⟶ betw a x y"
by (metis (no_types, opaque_lifting) φbetw φbij bij_pointE comp_eq_dest_lhs)
then have "∃b. ∀x y. (Φ ∘ φ) x ∧ (Ψ ∘ φ) y ⟶ betw x b y"
using continuity
by simp
then show "∃b. ∀x y. Φ x ∧ Ψ y ⟶ betw' x b y"
by (metis (no_types, opaque_lifting) φbetw φbij bij_pointE comp_eq_dest_lhs)
qed
end