|
| 1 | +/- |
| 2 | +Copyright (c) 2023 Felix Weilacher. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Felix Weilacher |
| 5 | +-/ |
| 6 | +import topology.metric_space.pi_nat |
| 7 | + |
| 8 | +/-! |
| 9 | +# (Topological) Schemes and their induced maps |
| 10 | +
|
| 11 | +In topology, and especially descriptive set theory, one often constructs functions `(ℕ → β) → α`, |
| 12 | +where α is some topological space and β is a discrete space, as an appropriate limit of some map |
| 13 | +`list β → set α`. We call the latter type of map a "`β`-scheme on `α`". |
| 14 | +
|
| 15 | +This file develops the basic, abstract theory of these schemes and the functions they induce. |
| 16 | +
|
| 17 | +## Main Definitions |
| 18 | +
|
| 19 | +* `cantor_scheme.induced_map A` : The aforementioned "limit" of a scheme `A : list β → set α`. |
| 20 | + This is a partial function from `ℕ → β` to `a`, |
| 21 | + implemented here as an object of type `Σ s : set (ℕ → β), s → α`. |
| 22 | + That is, `(induced_map A).1` is the domain and `(induced_map A).2` is the function. |
| 23 | +
|
| 24 | +## Implementation Notes |
| 25 | +
|
| 26 | +We consider end-appending to be the fundamental way to build lists (say on `β`) inductively, |
| 27 | +as this interacts better with the topology on `ℕ → β`. |
| 28 | +As a result, functions like `list.nth` or `stream.take` do not have their intended meaning |
| 29 | +in this file. See instead `pi_nat.res`. |
| 30 | +
|
| 31 | +## References |
| 32 | +
|
| 33 | +* [kechris1995] (Chapters 6-7) |
| 34 | +
|
| 35 | +## Tags |
| 36 | +
|
| 37 | +scheme, cantor scheme, lusin scheme, approximation. |
| 38 | +
|
| 39 | +-/ |
| 40 | + |
| 41 | +namespace cantor_scheme |
| 42 | + |
| 43 | +open list function filter set pi_nat |
| 44 | +open_locale classical topology |
| 45 | + |
| 46 | +variables {β α : Type*} (A : list β → set α) |
| 47 | + |
| 48 | +/-- From a `β`-scheme on `α` `A`, we define a partial function from `(ℕ → β)` to `α` |
| 49 | +which sends each infinite sequence `x` to an element of the intersection along the |
| 50 | +branch corresponding to `x`, if it exists. |
| 51 | +We call this the map induced by the scheme. -/ |
| 52 | +noncomputable def induced_map : Σ s : set (ℕ → β), s → α := |
| 53 | +⟨λ x, set.nonempty ⋂ n : ℕ, A (res x n), λ x, x.property.some⟩ |
| 54 | + |
| 55 | +section topology |
| 56 | + |
| 57 | +/-- A scheme is antitone if each set contains its children. -/ |
| 58 | +protected def antitone : Prop := ∀ l : list β, ∀ a : β, A (a :: l) ⊆ A l |
| 59 | + |
| 60 | +/-- A useful strengthening of being antitone is to require that each set contains |
| 61 | +the closure of each of its children. -/ |
| 62 | +def closure_antitone [topological_space α] : Prop := |
| 63 | +∀ l : list β, ∀ a : β, closure (A (a :: l)) ⊆ A l |
| 64 | + |
| 65 | +/-- A scheme is disjoint if the children of each set of pairwise disjoint. -/ |
| 66 | +protected def disjoint : Prop := |
| 67 | +∀ l : list β, _root_.pairwise $ λ a b, disjoint (A (a :: l)) (A (b :: l)) |
| 68 | + |
| 69 | +variable {A} |
| 70 | + |
| 71 | +/-- If `x` is in the domain of the induced map of a scheme `A`, |
| 72 | +its image under this map is in each set along the corresponding branch. -/ |
| 73 | +lemma map_mem (x : (induced_map A).1) (n : ℕ) : |
| 74 | + (induced_map A).2 x ∈ A (res x n) := |
| 75 | +begin |
| 76 | + have := x.property.some_mem, |
| 77 | + rw mem_Inter at this, |
| 78 | + exact this n, |
| 79 | +end |
| 80 | + |
| 81 | +protected lemma closure_antitone.antitone [topological_space α] (hA : closure_antitone A) : |
| 82 | + cantor_scheme.antitone A := |
| 83 | +λ l a, subset_closure.trans (hA l a) |
| 84 | + |
| 85 | +protected lemma antitone.closure_antitone [topological_space α] (hanti : cantor_scheme.antitone A) |
| 86 | + (hclosed : ∀ l, is_closed (A l)) : closure_antitone A := |
| 87 | +λ l a, (hclosed _).closure_eq.subset.trans (hanti _ _) |
| 88 | + |
| 89 | +/-- A scheme where the children of each set are pairwise disjoint induces an injective map. -/ |
| 90 | +theorem disjoint.map_injective (hA : cantor_scheme.disjoint A) : injective (induced_map A).2 := |
| 91 | +begin |
| 92 | + rintros ⟨x, hx⟩ ⟨y, hy⟩ hxy, |
| 93 | + refine subtype.coe_injective (res_injective _), |
| 94 | + dsimp, |
| 95 | + ext n : 1, |
| 96 | + induction n with n ih, { simp }, |
| 97 | + simp only [res_succ], |
| 98 | + refine ⟨_, ih⟩, |
| 99 | + contrapose hA, |
| 100 | + simp only [cantor_scheme.disjoint, _root_.pairwise, ne.def, not_forall, exists_prop], |
| 101 | + refine ⟨res x n, _, _, hA, _⟩, |
| 102 | + rw not_disjoint_iff, |
| 103 | + refine ⟨(induced_map A).2 ⟨x, hx⟩, _, _⟩, |
| 104 | + { rw ← res_succ, |
| 105 | + apply map_mem, }, |
| 106 | + rw [hxy, ih, ← res_succ], |
| 107 | + apply map_mem, |
| 108 | +end |
| 109 | + |
| 110 | +end topology |
| 111 | + |
| 112 | +section metric |
| 113 | + |
| 114 | +variable [pseudo_metric_space α] |
| 115 | + |
| 116 | +variable (A) |
| 117 | + |
| 118 | +/-- A scheme on a metric space has vanishing diameter if diameter approaches 0 along each branch. -/ |
| 119 | +def vanishing_diam : Prop := |
| 120 | +∀ x : ℕ → β, tendsto (λ n : ℕ, emetric.diam (A (res x n))) at_top (𝓝 0) |
| 121 | + |
| 122 | +variable {A} |
| 123 | + |
| 124 | +lemma vanishing_diam.dist_lt (hA : vanishing_diam A) (ε : ℝ) (ε_pos : 0 < ε) (x : ℕ → β) : |
| 125 | + ∃ n : ℕ, ∀ y z ∈ A (res x n), dist y z < ε := |
| 126 | +begin |
| 127 | + specialize hA x, |
| 128 | + rw ennreal.tendsto_at_top_zero at hA, |
| 129 | + cases hA (ennreal.of_real (ε / 2)) |
| 130 | + (by { simp only [gt_iff_lt, ennreal.of_real_pos], linarith }) with n hn, |
| 131 | + use n, |
| 132 | + intros y hy z hz, |
| 133 | + rw [← ennreal.of_real_lt_of_real_iff ε_pos, ← edist_dist], |
| 134 | + apply lt_of_le_of_lt (emetric.edist_le_diam_of_mem hy hz), |
| 135 | + apply lt_of_le_of_lt (hn _ (le_refl _)), |
| 136 | + rw ennreal.of_real_lt_of_real_iff ε_pos, |
| 137 | + linarith, |
| 138 | +end |
| 139 | + |
| 140 | +/-- A scheme with vanishing diameter along each branch induces a continuous map. -/ |
| 141 | +theorem vanishing_diam.map_continuous [topological_space β] [discrete_topology β] |
| 142 | + (hA : vanishing_diam A) : continuous (induced_map A).2 := |
| 143 | +begin |
| 144 | + rw metric.continuous_iff', |
| 145 | + rintros ⟨x, hx⟩ ε ε_pos, |
| 146 | + cases hA.dist_lt _ ε_pos x with n hn, |
| 147 | + rw _root_.eventually_nhds_iff, |
| 148 | + refine ⟨coe ⁻¹' cylinder x n, _, _, by simp⟩, |
| 149 | + { rintros ⟨y, hy⟩ hyx, |
| 150 | + rw [mem_preimage, subtype.coe_mk, cylinder_eq_res, mem_set_of] at hyx, |
| 151 | + apply hn, |
| 152 | + { rw ← hyx, |
| 153 | + apply map_mem, }, |
| 154 | + apply map_mem, }, |
| 155 | + apply continuous_subtype_coe.is_open_preimage, |
| 156 | + apply is_open_cylinder, |
| 157 | +end |
| 158 | + |
| 159 | +/-- A scheme on a complete space with vanishing diameter |
| 160 | +such that each set contains the closure of its children |
| 161 | +induces a total map. -/ |
| 162 | +theorem closure_antitone.map_of_vanishing_diam [complete_space α] |
| 163 | + (hdiam : vanishing_diam A) (hanti : closure_antitone A) (hnonempty : ∀ l, (A l).nonempty) : |
| 164 | + (induced_map A).1 = univ := |
| 165 | +begin |
| 166 | + rw eq_univ_iff_forall, |
| 167 | + intro x, |
| 168 | + choose u hu using λ n, hnonempty (res x n), |
| 169 | + have umem : ∀ n m : ℕ, n ≤ m → u m ∈ A (res x n), |
| 170 | + { have : antitone (λ n : ℕ, A (res x n)), |
| 171 | + { refine antitone_nat_of_succ_le _, |
| 172 | + intro n, |
| 173 | + apply hanti.antitone, }, |
| 174 | + intros n m hnm, |
| 175 | + exact this hnm (hu _), }, |
| 176 | + have : cauchy_seq u, |
| 177 | + { rw metric.cauchy_seq_iff, |
| 178 | + intros ε ε_pos, |
| 179 | + cases hdiam.dist_lt _ ε_pos x with n hn, |
| 180 | + use n, |
| 181 | + intros m₀ hm₀ m₁ hm₁, |
| 182 | + apply hn; apply umem; assumption, }, |
| 183 | + cases cauchy_seq_tendsto_of_complete this with y hy, |
| 184 | + use y, |
| 185 | + rw mem_Inter, |
| 186 | + intro n, |
| 187 | + apply hanti _ (x n), |
| 188 | + apply mem_closure_of_tendsto hy, |
| 189 | + rw eventually_at_top, |
| 190 | + exact ⟨n.succ, umem _⟩, |
| 191 | +end |
| 192 | + |
| 193 | +end metric |
| 194 | + |
| 195 | +end cantor_scheme |
0 commit comments