Zulip Chat Archive
Stream: Is there code for X?
Topic: Refine open cover of closed interval by finite partition
Junyan Xu (Oct 02 2023 at 07:19):
If not, golf welcome! I tried to use docs#LipschitzWith.projIcc but the current proof is shorter.
import Mathlib.Topology.UnitInterval
open unitInterval
theorem lebesgue_number_lemma_unitInterval {ι} {c : ι → Set I} (hc₁ : ∀ i, IsOpen (c i))
(hc₂ : Set.univ ⊆ ⋃ i, c i) : ∃ t : ℕ → I, t 0 = 0 ∧ Monotone t ∧
(∀ n, ∃ i, Set.Icc (t n) (t <| n + 1) ⊆ c i) ∧ ∃ n, ∀ m ≥ n, t m = 1 := by
obtain ⟨δ, δ_pos, ball_subset⟩ := lebesgue_number_lemma_of_metric isCompact_univ hc₁ hc₂
refine ⟨fun n ↦ Set.projIcc 0 1 zero_le_one (n * (δ/2)), ?_, fun n m hnm ↦ ?_, fun n ↦ ?_, ?_⟩
· dsimp only; rw [Nat.cast_zero, zero_mul, Set.projIcc_left]; rfl
· apply Set.monotone_projIcc
rw [mul_le_mul_right (div_pos δ_pos zero_lt_two)]
exact_mod_cast hnm
· obtain ⟨i, hsub⟩ := ball_subset (Set.projIcc 0 1 zero_le_one (n * (δ/2))) trivial
refine ⟨i, fun x hx ↦ hsub ?_⟩
rw [Metric.mem_ball]
apply (abs_eq_self.mpr _).trans_lt
· apply (sub_le_sub_right _ _).trans_lt
on_goal 3 => exact hx.2
refine (max_sub_max_le_max _ _ _ _).trans_lt (max_lt (by rwa [sub_zero]) ?_)
refine ((le_abs_self _).trans <| abs_min_sub_min_le_max _ _ _ _).trans_lt (max_lt ?_ ?_)
· rwa [sub_self, abs_zero]
· rw [← sub_mul, Nat.cast_succ, add_sub_cancel', one_mul, abs_lt]
constructor <;> linarith only [δ_pos]
· exact sub_nonneg_of_le hx.1
· refine ⟨Nat.ceil (δ/2)⁻¹, fun n hn ↦ (Set.projIcc_eq_right zero_lt_one).mpr ?_⟩
rwa [GE.ge, Nat.ceil_le, inv_pos_le_iff_one_le_mul (div_pos δ_pos zero_lt_two)] at hn
Last updated: Dec 20 2023 at 11:08 UTC