Lean source · namespace BFPP
EDSupremum.lean
BFPP/EDSupremum.lean · 151 lines
1import BFPP.ContinuousBall2import Mathlib.Topology.ExtremallyDisconnected3import Mathlib.Topology.Order.Basic4import Mathlib.Topology.ContinuousMap.Algebra5import Mathlib.Topology.ContinuousMap.Ordered67/-! # Continuous lattice suprema on an extremally disconnected compact space -/89namespace BFPP1011set_option autoImplicit false12open Set TopologicalSpace1314variable {K : Type*} [TopologicalSpace K] [CompactSpace K] [ExtremallyDisconnected K]1516def edCut (S : Set (UnitBall C(K, ℝ))) (q : ℝ) : Set K :=17 closure (⋃ f : S, {t | q < f.val.val t})1819theorem edCut_isClopen (S : Set (UnitBall C(K, ℝ))) (q : ℝ) : IsClopen (edCut S q) :=20 ⟨isClosed_closure, ExtremallyDisconnected.open_closure _21 (isOpen_iUnion fun f => isOpen_lt continuous_const f.val.val.continuous)⟩2223theorem edCut_antitone (S : Set (UnitBall C(K, ℝ))) : Antitone (edCut S) := by24 intro p q hpq25 apply closure_mono26 intro t ht27 obtain ⟨f, hf⟩ := mem_iUnion.mp ht28 exact mem_iUnion.mpr ⟨f, lt_of_le_of_lt hpq hf⟩2930def edSupValues (S : Set (UnitBall C(K, ℝ))) (t : K) : Set ℝ :=31 {-1} ∪ {q | q ∈ Icc (-1) 1 ∧ t ∈ edCut S q}3233theorem edSupValues_nonempty (S : Set (UnitBall C(K, ℝ))) (t : K) :34 (edSupValues S t).Nonempty := ⟨-1, Or.inl rfl⟩3536theorem edSupValues_bddAbove (S : Set (UnitBall C(K, ℝ))) (t : K) :37 BddAbove (edSupValues S t) := by38 refine ⟨1, ?_⟩39 rintro q (hq | hq)40 · have he : q = -1 := hq41 rw [he]42 norm_num43 · exact hq.1.24445noncomputable def edSupValue (S : Set (UnitBall C(K, ℝ))) (t : K) : ℝ := sSup (edSupValues S t)4647theorem edSupValue_bounds (S : Set (UnitBall C(K, ℝ))) (t : K) :48 -1 ≤ edSupValue S t ∧ edSupValue S t ≤ 1 := by49 refine ⟨le_csSup (edSupValues_bddAbove S t) (Or.inl rfl), ?_⟩50 apply csSup_le (edSupValues_nonempty S t)51 rintro q (hq | hq)52 · have he : q = -1 := hq53 rw [he]54 norm_num55 · exact hq.1.25657theorem le_edSupValue_of_mem (S : Set (UnitBall C(K, ℝ))) (t : K) (q : ℝ)58 (hq : q ∈ Icc (-1) 1) (ht : t ∈ edCut S q) : q ≤ edSupValue S t :=59 le_csSup (edSupValues_bddAbove S t) (Or.inr ⟨hq, ht⟩)6061theorem edSupValue_le_of_not_mem (S : Set (UnitBall C(K, ℝ))) (t : K) (q : ℝ)62 (hq : -1 ≤ q) (ht : t ∉ edCut S q) : edSupValue S t ≤ q := by63 apply csSup_le (edSupValues_nonempty S t)64 rintro r (hr | hr)65 · have he : r = -1 := hr66 simpa only [he] using hq67 · by_contra h68 exact ht (edCut_antitone S (le_of_not_ge h) hr.2)6970theorem exists_cut_above_of_lt (S : Set (UnitBall C(K, ℝ))) (t : K) (a : ℝ)71 (ha : -1 ≤ a) (ht : a < edSupValue S t) :72 ∃ q, q ∈ Icc (-1) 1 ∧ a < q ∧ t ∈ edCut S q := by73 by_contra hn74 apply not_le_of_gt ht75 apply csSup_le (edSupValues_nonempty S t)76 rintro q (hq | hq)77 · have he : q = -1 := hq78 simpa only [he] using ha79 · by_contra h80 exact hn ⟨q, hq.1, lt_of_not_ge h, hq.2⟩8182theorem edSupValue_continuous (S : Set (UnitBall C(K, ℝ))) : Continuous (edSupValue S) := by83 apply OrderTopology.continuous_iff.mpr84 intro a85 constructor86 · apply isOpen_iff_mem_nhds.mpr87 intro t ht88 change a < edSupValue S t at ht89 by_cases ha : a < -190 · apply Filter.mem_of_superset Filter.univ_mem91 intro x _92 exact ha.trans_le (edSupValue_bounds S x).193 · obtain ⟨q, hq, haq, htq⟩ := exists_cut_above_of_lt S t a (le_of_not_gt ha) ht94 apply Filter.mem_of_superset ((edCut_isClopen S q).isOpen.mem_nhds htq)95 intro x hx96 exact haq.trans_le (le_edSupValue_of_mem S x q hq hx)97 · apply isOpen_iff_mem_nhds.mpr98 intro t ht99 change edSupValue S t < a at ht100 by_cases ha : 1 < a101 · apply Filter.mem_of_superset Filter.univ_mem102 intro x _103 exact (edSupValue_bounds S x).2.trans_lt ha104 · obtain ⟨q, hqt, hqa⟩ := exists_between ht105 have hq₀ : -1 ≤ q := (edSupValue_bounds S t).1.trans hqt.le106 have hq₁ : q ≤ 1 := hqa.le.trans (le_of_not_gt ha)107 have htq : t ∉ edCut S q := fun h =>108 (not_le_of_gt hqt) (le_edSupValue_of_mem S t q ⟨hq₀, hq₁⟩ h)109 apply Filter.mem_of_superset ((edCut_isClopen S q).isClosed.isOpen_compl.mem_nhds htq)110 intro x hx111 exact (edSupValue_le_of_not_mem S x q hq₀ hx).trans_lt hqa112113noncomputable def edSup (S : Set (UnitBall C(K, ℝ))) : UnitBall C(K, ℝ) :=114 ⟨⟨edSupValue S, edSupValue_continuous S⟩,115 (ContinuousMap.norm_le _ (by norm_num)).mpr (fun t => abs_le.mpr (edSupValue_bounds S t))⟩116117theorem edSup_upper (S : Set (UnitBall C(K, ℝ))) (f : UnitBall C(K, ℝ)) (hf : f ∈ S)118 (t : K) : f.val t ≤ (edSup S).val t := by119 change f.val t ≤ edSupValue S t120 by_contra hn121 obtain ⟨q, hqg, hqf⟩ := exists_between (lt_of_not_ge hn)122 have hq : q ∈ Icc (-1) 1 :=123 ⟨(edSupValue_bounds S t).1.trans hqg.le, hqf.le.trans (continuousBall_bounds f t).2⟩124 have htq : t ∈ edCut S q := subset_closure (mem_iUnion.mpr ⟨⟨f, hf⟩, hqf⟩)125 exact (not_le_of_gt hqg) (le_edSupValue_of_mem S t q hq htq)126127theorem edSup_le (S : Set (UnitBall C(K, ℝ))) (h : UnitBall C(K, ℝ))128 (hh : ∀ f ∈ S, ∀ t, f.val t ≤ h.val t) (t : K) : (edSup S).val t ≤ h.val t := by129 change edSupValue S t ≤ h.val t130 apply csSup_le (edSupValues_nonempty S t)131 rintro q (hq | hq)132 · have he : q = -1 := hq133 simpa only [he] using (continuousBall_bounds h t).1134 · have hcut : edCut S q ⊆ {x | q ≤ h.val x} := by135 apply closure_minimal136 · intro x hx137 obtain ⟨f, hf⟩ := mem_iUnion.mp hx138 exact hf.le.trans (hh f.val f.property x)139 · exact isClosed_le continuous_const h.val.continuous140 exact hcut hq.2141142theorem edSup_isLUB (S : Set (UnitBall C(K, ℝ))) : IsLUB S (edSup S) := by143 refine ⟨fun f hf t => edSup_upper S f hf t, ?_⟩144 intro h hh t145 exact edSup_le S h (fun f hf t => hh hf t) t146147@[instance_reducible] noncomputable def edBallCompleteLattice : CompleteLattice (UnitBall C(K, ℝ)) := by148 letI : SupSet (UnitBall C(K, ℝ)) := ⟨edSup⟩149 exact completeLatticeOfSup _ edSup_isLUB150151end BFPPSHA-256
a598e97e4c2a7cf6928b3f64506d91a1fa5b3d05b51e0cdb279945de3a4564ac