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