Zulip Chat Archive

Stream: Is there code for X?

Topic: Lebesgue Density Theorem


Yaël Dillies (Jul 19 2022 at 15:03):

Jason, Bhavik and I are proving that order-connected sets are measurable. For this we need the Lebesgue Density Theorem. Is it somewhere in mathlib?

Yaël Dillies (Jul 19 2022 at 15:04):

Ahah! It looks like it is docs#vitali_family.ae_tendsto_measure_inter_div_of_measurable_set

Jason KY. (Jul 19 2022 at 15:51):

Also Yael found out we also have docs#set.ord_connected.measurable_set already!

Oliver Nash (Sep 15 2022 at 18:19):

I need a version of the Lebesgue Density Theorem with a sequence of balls whose centres are not fixed.

A month or so ago I cobbled together the following which is sufficient for my purposes (in my application α is just the circle):

import measure_theory.covering.vitali
import measure_theory.covering.differentiation

open set filter function metric measure_theory measure_theory.measure_space
open_locale nnreal ennreal topological_space

variables {α : Type*} [measurable_space α] (μ : measure α)
variables [metric_space α] [proper_space α] [borel_space α] [is_locally_finite_measure μ]

lemma closed_ball.ae_tendsto_measure_inter_div
  (f : 0  0) (d : )
  (hfd :  (t : 0), ∀ᶠ (ε : 0) in 𝓝 0, f (t * ε) = t^d * f ε)
  (hfμ : ∀ᶠ (ε : 0) in 𝓝 0,  x, μ (closed_ball x ε) = f ε)
  (S : set α) :
  ∀ᵐ x μ.restrict S,  (w :   α) (δ :   )
    (hδ₀ :  j, 0 < δ j)
    (hδ₁ : tendsto δ at_top (𝓝 0))
    (hδ₂ :  j, x  closed_ball (w j) (δ j)),
    tendsto (λ j, μ (S  closed_ball (w j) (δ j)) / μ (closed_ball (w j) (δ j))) at_top (𝓝 1) :=
sorry -- I have a (horrible) proof of this.

but I would like to get the statement set down in the appropriate generality and I am not happy with the above.

At first I thought that the assumptions of docs#besicovitch.ae_tendsto_measure_inter_div might be sufficient but now I am not so sure. I know nothing of Besicovitch theory!

Can some measure theorist point me in the right direction?

Sebastien Gouezel (Sep 16 2022 at 06:58):

The right assumption is probably to assume that the ratio of measures mu (B(x, 2 r)) / mu (B (x, r)) is uniformly bounded. (More precisely, it is enough to assume that there exists C such that, for all x, for all small enough r, then mu (B(x, 2r)) ≤ C * mu (B(x, r))).

I don't know how your proof looks, but to me it looks like all the math is already in ae_tendsto_measure_inter_div, and that you just need a little bit of glue to apply it in your context. Here is a possible skeleton:

import measure_theory.covering.vitali
import measure_theory.covering.differentiation

open set filter function metric measure_theory measure_theory.measure_space
open_locale nnreal ennreal topological_space

variables {α : Type*} [measurable_space α] {μ : measure α}
variables [metric_space α] [proper_space α] [borel_space α] [is_locally_finite_measure μ]

lemma vitali_family.tendsto_filter_at (v : vitali_family μ) {β : Type*} {l : filter β}
  {f : β  set α} {x : α}
  (H : ∀ᶠ i in l, f i  v.sets_at x) (H' :  (ε > (0 : )), ∀ᶠ i in l, f i  closed_ball x ε) :
  tendsto f l (v.filter_at x)  :=
begin
  assume s hs,
  change ∀ᶠ i in l, f i  s,
  obtain ε, εpos,  :  (ε : ) (H : ε > 0),  (a : set α),
    a  v.sets_at x  a  closed_ball x ε  a  s :=
      (vitali_family.mem_filter_at_iff _).1 hs,
  filter_upwards [H, H' ε εpos] with i hi h'i using  _ hi h'i,
end

lemma closed_ball.ae_tendsto_measure_inter_div
  (f : 0  0) (d : )
  (hfd :  (t : 0), ∀ᶠ (ε : 0) in 𝓝 0, f (t * ε) = t^d * f ε)
  (hfμ : ∀ᶠ (ε : 0) in 𝓝 0,  x, μ (closed_ball x ε) = f ε)
  (S : set α) :
  ∀ᵐ x μ.restrict S,  (w :   α) (δ :   )
    (hδ₀ :  j, 0 < δ j)
    (hδ₁ : tendsto δ at_top (𝓝 0))
    (hδ₂ :  j, x  closed_ball (w j) (δ j)),
    tendsto (λ j, μ (S  closed_ball (w j) (δ j)) / μ (closed_ball (w j) (δ j))) at_top (𝓝 1) :=
begin
  let v : vitali_family μ := vitali.vitali_family μ (6^d) sorry,
  filter_upwards [v.ae_tendsto_measure_inter_div S] with x hx,
  assume w δ δpos δlim xmem,
  have : tendsto (λ j, closed_ball (w j) (δ j)) at_top (v.filter_at x),
  { apply v.tendsto_filter_at,
    { simp only [v, vitali.vitali_family, mem_set_of_eq, mem_closed_ball],
      sorry },
    { sorry } },
  exact hx.comp this,
end

(the lemma vitali_family.tendsto_filter_at is clearly missing in the current API, and it should probably be formulated as an iff).

Oliver Nash (Sep 16 2022 at 08:22):

Thank you very much @Sebastien Gouezel If I'm lucky I'll have time to take this up this afternoon (but it might not be till next week). I'll report back when I do!

Oliver Nash (Oct 02 2022 at 15:16):

I have finally returned to this and created a PR: #16762


Last updated: Dec 20 2023 at 11:08 UTC