Lean source · namespace BFPP
Cozero.lean
BFPP/Cozero.lean · 80 lines
1import BFPP.FSpaceNecessary2import Mathlib.Analysis.SpecificLimits.Normed3import Mathlib.Topology.Algebra.InfiniteSum.Module45/-! # Countable unions of cozero sets -/67namespace BFPP89set_option autoImplicit false1011open Set1213universe u14variable {K : Type u} [TopologicalSpace K] [CompactSpace K]1516noncomputable def normalizedAbs (f : C(K, ℝ)) : C(K, ℝ) :=17 ⟨fun t => |f t| / (1 + ‖f‖), by fun_prop⟩1819theorem normalizedAbs_bounds (f : C(K, ℝ)) (t : K) :20 0 ≤ normalizedAbs f t ∧ normalizedAbs f t ≤ 1 := by21 have hd : 0 < 1 + ‖f‖ := by linarith [norm_nonneg f]22 constructor23 · exact div_nonneg (abs_nonneg _) hd.le24 · change |f t| / (1 + ‖f‖) ≤ 125 rw [div_le_one hd]26 have h : |f t| ≤ ‖f‖ := by simpa only [Real.norm_eq_abs] using f.norm_coe_le_norm t27 linarith2829theorem normalizedAbs_norm_le (f : C(K, ℝ)) : ‖normalizedAbs f‖ ≤ 1 := by30 apply (ContinuousMap.norm_le _ (by norm_num)).mpr31 intro t32 rw [Real.norm_eq_abs, abs_of_nonneg (normalizedAbs_bounds f t).1]33 exact (normalizedAbs_bounds f t).23435@[simp] theorem normalizedAbs_eq_zero (f : C(K, ℝ)) (t : K) :36 normalizedAbs f t = 0 ↔ f t = 0 := by37 have hd : 1 + ‖f‖ ≠ 0 := ne_of_gt (by linarith [norm_nonneg f])38 change |f t| / (1 + ‖f‖) = 0 ↔ f t = 039 simp [div_eq_zero_iff, hd]4041theorem countable_union_cozero (f : ℕ → C(K, ℝ)) :42 ∃ g : C(K, ℝ), {t | g t ≠ 0} = ⋃ n, {t | f n t ≠ 0} := by43 let term : ℕ → C(K, ℝ) := fun n => (1 / 2 : ℝ) ^ n • normalizedAbs (f n)44 have hp (n : ℕ) : 0 < (1 / 2 : ℝ) ^ n := pow_pos (by norm_num) n45 have hterm (n : ℕ) : ‖term n‖ ≤ (1 / 2 : ℝ) ^ n := by46 dsimp only [term]47 rw [norm_smul, Real.norm_eq_abs, abs_of_pos (hp n)]48 simpa only [mul_one] using mul_le_mul_of_nonneg_left49 (normalizedAbs_norm_le (f n)) (hp n).le50 have hgeo : Summable (fun n : ℕ => (1 / 2 : ℝ) ^ n) :=51 summable_geometric_of_abs_lt_one (by norm_num)52 have hs : Summable term := hgeo.of_norm_bounded hterm53 let g : C(K, ℝ) := ∑' n, term n54 have hnonneg (n : ℕ) (t : K) : 0 ≤ term n t :=55 mul_nonneg (hp n).le (normalizedAbs_bounds (f n) t).156 have hzero (t : K) : g t = 0 ↔ ∀ n, f n t = 0 := by57 have hseval := (ContinuousMap.evalCLM ℝ t).summable hs58 have heval : g t = ∑' n, term n t := (ContinuousMap.evalCLM ℝ t).map_tsum hs59 constructor60 · intro hg n61 have hle : term n t ≤ ∑' k, term k t := by62 simpa only [Finset.sum_singleton] using63 hseval.sum_le_tsum {n} (fun k _hk => hnonneg k t)64 rw [← heval, hg] at hle65 have hz : term n t = 0 := le_antisymm hle (hnonneg n t)66 change (1 / 2 : ℝ) ^ n * normalizedAbs (f n) t = 0 at hz67 exact (normalizedAbs_eq_zero (f n) t).mp68 ((mul_eq_zero.mp hz).resolve_left (ne_of_gt (hp n)))69 · intro h70 rw [heval]71 have hz : ∀ n, term n t = 0 := by72 intro n73 change (1 / 2 : ℝ) ^ n * normalizedAbs (f n) t = 074 rw [(normalizedAbs_eq_zero (f n) t).mpr (h n), mul_zero]75 simp only [hz, tsum_zero]76 refine ⟨g, ?_⟩77 ext t78 simp only [Set.mem_ofPred_eq, mem_iUnion, ne_eq, hzero, not_forall]7980end BFPPSHA-256
4a547d01bb8eb9b229e74b42b361aefa5b53efb776a5267fe88bf6338895642a