Theory Ultrametric_Restriction_Spaces_Locale
section ‹Locales factorizing the proof Work›
theory Ultrametric_Restriction_Spaces_Locale
imports Restriction_Spaces.Restriction_Spaces_Locales Elementary_Ultrametric_Spaces
begin
subsection ‹Preliminaries on strictly decreasing Sequences›
abbreviation strict_decseq :: ‹(nat ⇒ 'a :: order) ⇒ bool›
where ‹strict_decseq ≡ monotone (<) (λx y. y < x)›
lemma strict_decseq_def : ‹strict_decseq X ⟷ (∀m n. m < n ⟶ X n < X m)›
by (fact monotone_def)
lemma strict_decseqI : ‹strict_decseq X› if ‹⋀n. X (Suc n) < X n›
by (metis Suc_le_eq decseqD decseq_Suc_iff le_less_trans nless_le strict_decseq_def that)
lemma strict_decseqD : ‹strict_decseq X ⟹ m < n ⟹ X n < X m›
using strict_decseq_def by blast
lemma strict_decseq_def_bis : ‹strict_decseq X ⟷ (∀m n. X n < X m ⟷ m < n)›
by (metis linorder_less_linear order_less_imp_not_less strict_decseq_def)
lemma strict_decseq_def_ter : ‹strict_decseq X ⟷ (∀m n. X n ≤ X m ⟷ m ≤ n)›
unfolding strict_decseq_def_bis
by (rule iffI, metis le_simps(2) order_le_less, simp add: less_le_not_le)
lemma strict_decseq_imp_decseq : ‹strict_decseq σ ⟹ decseq σ›
by (simp add: monotone_on_def order_le_less)
lemma strict_decseq_SucI : ‹(⋀n. X (Suc n) < X n) ⟹ strict_decseq X›
by (metis Suc_le_eq decseqD decseq_Suc_iff less_le_not_le order_less_le strict_decseq_def)
lemma strict_decseq_SucD : ‹strict_decseq A ⟹ A (Suc i) < A i›
by (simp add: strict_decseq_def)
text ‹
Classically, a restriction space is given the structure of a metric space by defining
‹dist x y ≡ Inf {(1 / 2) ^ n| n. x ↓ n = y ↓ n}›.
This obviously also works if we replace \<^term>‹1 / 2 :: real› by any real \<^term>‹δ›
such that \<^term>‹0 < (δ :: real)› and \<^term>‹(δ :: real) < 1›.
But more generally, this still works if we set
‹dist x y ≡ Inf {σ n| n. x ↓ n = y ↓ n}› where \<^term>‹σ› is a sequence of \<^typ>‹real›
verifying \<^term>‹∀n. 0 < (σ :: nat ⇒ real) n› and \<^term>‹σ ⇢ 0›.
As you would expect, the more structure you have, the more powerful theorems you get.
We explore all these variants in the theory below.
›
subsection ‹The Construction with Locales›
text ‹Our formalization will extend the class \<^class>‹metric_space›.
But some proofs are redundant, especially when it comes to the product type.
So first we will be working with locales, and interpret them with the classes.›
locale NonDecseqRestrictionSpace = PreorderRestrictionSpace +
fixes M :: ‹'a set› and restriction_σ :: ‹nat ⇒ real› (‹σ⇩↓›)
and restriction_dist :: ‹'a ⇒ 'a ⇒ real› (‹dist⇩↓›)
assumes restriction_σ_tendsto_zero : ‹restriction_σ ⇢ 0›
and zero_less_restriction_σ [simp] : ‹0 < restriction_σ n›
and dist_restriction_is :
‹dist⇩↓ x y = (INF n ∈ restriction_related_set x y. restriction_σ n)›
begin
lemma zero_le_restriction_σ [simp] : ‹0 ≤ σ⇩↓ n›
by (simp add: order_less_imp_le)
lemma restriction_σ_neq_zero [simp] : ‹σ⇩↓ n ≠ 0›
by (metis zero_less_restriction_σ order_less_irrefl)
lemma bounded_range_restriction_σ: ‹bounded (range σ⇩↓)›
by (fact convergent_imp_bounded[OF restriction_σ_tendsto_zero])
abbreviation restriction_σ_related_set :: ‹'a ⇒ 'a ⇒ real set›
where ‹restriction_σ_related_set x y ≡ σ⇩↓ ` restriction_related_set x y›
abbreviation restriction_σ_not_related_set :: ‹'a ⇒ 'a ⇒ real set›
where ‹restriction_σ_not_related_set x y ≡ σ⇩↓ ` restriction_not_related_set x y›
lemma nonempty_restriction_σ_related_set :
‹restriction_σ_related_set x y ≠ {}› by simp
lemma restriction_σ_related_set_Un_restriction_σ_not_related_set :
‹restriction_σ_related_set x y ∪ restriction_σ_not_related_set x y = range σ⇩↓›
by blast
lemma ‹bdd_above (restriction_σ_related_set x y)›
by (meson bdd_above.I2 bdd_above.unfold bounded_imp_bdd_above
bounded_range_restriction_σ rangeI)
lemma ‹bdd_above (restriction_σ_not_related_set x y)›
by (meson bdd_above.E bdd_above.I2 bounded_imp_bdd_above
bounded_range_restriction_σ range_eqI)
lemma bounded_restriction_σ_related_set: ‹bounded (restriction_σ_related_set x y)›
by (meson bounded_range_restriction_σ bounded_subset image_mono top_greatest)
lemma bounded_restriction_σ_not_related_set: ‹bounded (restriction_σ_not_related_set x y)›
by (meson bounded_range_restriction_σ bounded_subset image_mono subset_UNIV)
corollary restriction_space_Inf_properties:
‹a ∈ restriction_σ_related_set x y ⟹ dist⇩↓ x y ≤ a›
‹⟦⋀a. a ∈ restriction_σ_related_set x y ⟹ b ≤ a⟧ ⟹ b ≤ dist⇩↓ x y›
unfolding dist_restriction_is
by (simp_all add: bounded_has_Inf(1) bounded_restriction_σ_related_set cInf_greatest)
lemma restriction_σ_related_set_alt :
‹restriction_σ_related_set x y = {σ⇩↓ n| n. n ∈ restriction_related_set x y}›
by blast
lemma exists_less_restriction_σ : ‹∃n. m < n ∧ σ⇩↓ n < σ⇩↓ m›
proof (rule ccontr)
assume ‹¬ (∃n>m. σ⇩↓ n < σ⇩↓ m)›
hence ‹∀n≥m. σ⇩↓ m ≤ σ⇩↓ n›
by (metis linorder_not_le nle_le)
hence ‹¬ σ⇩↓ ⇢ 0›
by (meson Lim_bounded2 linorder_not_le zero_less_restriction_σ)
with restriction_σ_tendsto_zero show False by simp
qed
lemma ‹dist⇩↓ x y = Inf (restriction_σ_related_set x y)›
by (fact dist_restriction_is)
lemma not_related_imp_dist_restriction_is_some_restriction_σ :
‹∃n. dist⇩↓ x y = σ⇩↓ n ∧ (∀m≤n. x ↓ m ⪅ y ↓ m) › if ‹¬ x ⪅ y›
proof -
have ‹finite (restriction_related_set x y)›
by (simp add: finite_restriction_related_set_iff ‹¬ x ⪅ y›)
have ‹Inf (restriction_σ_related_set x y) ∈ restriction_σ_related_set x y›
by (rule closed_contains_Inf[OF nonempty_restriction_σ_related_set])
(simp_all add: ‹finite (restriction_related_set x y)› finite_imp_closed)
hence ‹dist⇩↓ x y ∈ restriction_σ_related_set x y›
by (fold dist_restriction_is)
with restriction_related_le obtain n
where ‹n ∈ restriction_related_set x y› ‹dist⇩↓ x y = σ⇩↓ n›
‹∀m≤n. x ↓ m ⪅ y ↓ m› by blast
with ‹dist⇩↓ x y ∈ restriction_σ_related_set x y› show ?thesis by blast
qed
lemma not_related_imp_dist_restriction_le_some_restriction_σ :
‹¬ x ⪅ y ⟹ ∃n. dist⇩↓ x y ≤ σ⇩↓ n ∧ (¬ x ↓ Suc n ⪅ y ↓ Suc n) ∧ (∀m≤n. x ↓ m ⪅ y ↓ m)›
by (blast intro: restriction_space_Inf_properties
dest: ex_not_restriction_related_optimized)
lemma restriction_dist_eq_0_iff_related : ‹dist⇩↓ x y = 0 ⟷ x ⪅ y›
proof (rule iffI)
show ‹dist⇩↓ x y = 0 ⟹ x ⪅ y›
by (erule contrapos_pp)
(auto dest: not_related_imp_dist_restriction_is_some_restriction_σ)
next
show ‹dist⇩↓ x y = 0› if ‹x ⪅ y›
proof (rule order_antisym)
show ‹0 ≤ dist⇩↓ x y› by (simp add: cINF_greatest dist_restriction_is)
next
define Δ where ‹Δ n ≡ - σ⇩↓ n› for n
have * : ‹Δ n ≤ - dist⇩↓ x y› for n
unfolding Δ_def using ‹x ⪅ y› restriction_space_Inf_properties(1)
by simp (metis UNIV_restriction_related_set_iff rangeI)
from restriction_σ_tendsto_zero tendsto_minus_cancel_left
have ‹Δ ⇢ 0› unfolding Δ_def by force
from lim_le[OF convergentI[OF ‹Δ ⇢ 0›] "*"] limI[OF ‹Δ ⇢ 0›]
show ‹dist⇩↓ x y ≤ 0› by simp
qed
qed
end
locale DecseqRestrictionSpace = NonDecseqRestrictionSpace +
assumes decseq_restriction_σ : ‹decseq σ⇩↓›
begin
lemma dist_restriction_is_bis :
‹dist⇩↓ x y = (if x ⪅ y then 0 else σ⇩↓ (Sup (restriction_related_set x y)))›
if ‹x ∈ M› and ‹y ∈ M›
proof (split if_split, intro conjI impI)
from ‹x ∈ M› and ‹y ∈ M› show ‹x ⪅ y ⟹ restriction_dist x y = 0›
by (simp add: restriction_dist_eq_0_iff_related)
next
show ‹dist⇩↓ x y = σ⇩↓ (Sup (restriction_related_set x y))› if ‹¬ x ⪅ y›
proof (rule order_antisym)
show ‹dist⇩↓ x y ≤ σ⇩↓ (Sup (restriction_related_set x y))›
unfolding dist_restriction_is
by (rule cINF_lower[OF _ Sup_in_restriction_related_set[OF ‹¬ x ⪅ y›]])
(meson bdd_below.I2 zero_le_restriction_σ)
next
show ‹σ⇩↓ (Sup (restriction_related_set x y)) ≤ dist⇩↓ x y›
proof (unfold dist_restriction_is, rule cINF_greatest)
show ‹restriction_related_set x y ≠ {}› by (fact nonempty_restriction_related_set)
next
fix n assume ‹n ∈ restriction_related_set x y›
hence ‹n ≤ Sup (restriction_related_set x y)›
by (metis ‹n ∈ restriction_related_set x y› le_cSup_finite
finite_restriction_related_set_iff ‹¬ x ⪅ y›)
from decseqD[OF decseq_restriction_σ this]
show ‹restriction_σ (Sup (restriction_related_set x y)) ≤ restriction_σ n› .
qed
qed
qed
lemma not_eq_imp_dist_restriction_is_restriction_σ_Sup_restriction_eq :
‹dist⇩↓ x y = σ⇩↓ (Sup (restriction_related_set x y))›
‹∀m≤Sup (restriction_related_set x y). x ↓ m ⪅ y ↓ m›
‹∀m>Sup (restriction_related_set x y). ¬ x ↓ m ⪅ y ↓ m›
if ‹¬ x ⪅ y› and ‹x ∈ M› and ‹y ∈ M›
subgoal by (subst dist_restriction_is_bis; simp add: ‹¬ x ⪅ y› ‹x ∈ M› ‹y ∈ M›)
subgoal using Sup_in_restriction_related_set[OF ‹¬ x ⪅ y›] restriction_related_le by blast
using cSup_upper[OF _ bdd_above_restriction_related_set_iff[THEN iffD2, OF ‹¬ x ⪅ y›],
of ‹Suc (Sup (restriction_related_set x y))›]
by (metis (mono_tags, lifting) Suc_leI dual_order.refl mem_Collect_eq not_less_eq_eq restriction_related_le)
theorem restriction_dist_tendsto_zero_independent_of_restriction_σ :
assumes ‹DecseqRestrictionSpace (↓) (⪅) restriction_σ' restriction_dist'›
and ‹Σ ∈ M› and ‹range σ ⊆ M›
shows ‹(λn. dist⇩↓ (σ n) Σ) ⇢ 0 ⟷ (λn. restriction_dist' (σ n) Σ) ⇢ 0›
proof -
{ fix restriction_σ restriction_dist restriction_σ' restriction_dist'
assume a1 : ‹DecseqRestrictionSpace (↓) (⪅) restriction_σ restriction_dist ›
and a2 : ‹DecseqRestrictionSpace (↓) (⪅) restriction_σ' restriction_dist'›
and * : ‹(λn. restriction_dist (σ n) Σ) ⇢ 0›
interpret i1 : DecseqRestrictionSpace ‹(↓)› ‹(⪅)› M restriction_σ restriction_dist by (fact a1)
interpret i2 : DecseqRestrictionSpace ‹(↓)› ‹(⪅)› M restriction_σ' restriction_dist' by (fact a2)
have ‹(λn. restriction_dist' (σ n) Σ) ⇢ 0›
proof (rule metric_LIMSEQ_I)
fix ε :: real assume ‹0 < ε›
from metric_LIMSEQ_D[OF i2.restriction_σ_tendsto_zero ‹0 < ε›]
obtain N where ** : ‹N ≤ n ⟹ restriction_σ' n < ε› for n by auto
fix N' :: nat
have ‹∃N'. ∀n≥N'. N ∈ restriction_related_set (σ n) Σ›
proof (rule ccontr)
assume ‹∄N'. ∀n≥N'. N ∈ restriction_related_set (σ n) Σ›
hence *** : ‹∀N'. ∃n≥N'. ¬ σ n ↓ N ⪅ Σ ↓ N› by simp
have **** : ‹∀N'. ∃n≥N'. restriction_σ N ≤ restriction_dist (σ n) Σ›
proof (rule allI)
fix N' :: nat
from "***" obtain n where ‹N' ≤ n› ‹¬ σ n ↓ N ⪅ Σ ↓ N› by blast
hence ‹¬ σ n ⪅ Σ› using mono_restriction_related by blast
have ‹restriction_σ N ≤ restriction_dist (σ n) Σ›
proof (subst i1.dist_restriction_is_bis)
show ‹σ n ∈ M› ‹Σ ∈ M›
by (simp_all add: assms(2, 3) range_subsetD)
next
show ‹restriction_σ N ≤ (if σ n ⪅ Σ then 0
else restriction_σ (Sup (restriction_related_set (σ n) Σ)))›
using ‹¬ σ n ⪅ Σ› ‹¬ σ n ↓ N ⪅ Σ ↓ N› assms(2, 3) nle_le
not_eq_imp_dist_restriction_is_restriction_σ_Sup_restriction_eq(2)
by (fastforce intro: decseqD[OF i1.decseq_restriction_σ])
qed
with ‹N' ≤ n› show ‹∃n≥N'. restriction_σ N ≤ restriction_dist (σ n) Σ› by blast
qed
from metric_LIMSEQ_D[OF "*", of ‹restriction_σ N›]
have ‹∃N''. ∀n≥N''. restriction_dist (σ n) Σ < restriction_σ N›
by (metis abs_of_nonneg i1.zero_le_restriction_σ i1.zero_less_restriction_σ norm_conv_dist order_trans real_norm_def
verit_comp_simplify1(3))
with "****" show False by fastforce
qed
then obtain N' where *** : ‹N' ≤ n ⟹ N ∈ restriction_related_set (σ n) Σ› for n by blast
have ‹restriction_dist' (σ n) Σ < ε› if ‹N' ≤ n› for n
proof (rule le_less_trans[OF i2.restriction_space_Inf_properties(1), of ‹restriction_σ' N›])
from ‹N' ≤ n› "***"
show ‹restriction_σ' N ∈ i2.restriction_σ_related_set (σ n) Σ› by blast
next
show ‹restriction_σ' N < ε› by (simp add: "**")
qed
thus ‹∃N. ∀n≥N. dist (restriction_dist' (σ n) Σ) 0 < ε›
by (metis abs_of_nonneg dist_0_norm dist_commute i2.not_related_imp_dist_restriction_is_some_restriction_σ
i2.restriction_dist_eq_0_iff_related i2.zero_less_restriction_σ order_less_imp_not_less real_norm_def
verit_comp_simplify1(3))
qed }
note * = this
show ‹(λn. dist⇩↓ (σ n) Σ) ⇢ 0 = (λn. restriction_dist' (σ n) Σ) ⇢ 0›
using "*" DecseqRestrictionSpace_axioms assms(1) by blast
qed
end
end