# Vitali families #

On a metric space X with a measure μ, consider for each x : X a family of measurable sets with nonempty interiors, called setsAt x. This family is a Vitali family if it satisfies the following property: consider a (possibly non-measurable) set s, and for any x in s a subfamily f x of setsAt x containing sets of arbitrarily small diameter. Then one can extract a disjoint subfamily covering almost all s.

Vitali families are provided by covering theorems such as the Besicovitch covering theorem or the Vitali covering theorem. They make it possible to formulate general versions of theorems on differentiations of measure that apply in both contexts.

This file gives the basic definition of Vitali families. More interesting developments of this notion are deferred to other files:

• constructions of specific Vitali families are provided by the Besicovitch covering theorem, in Besicovitch.vitaliFamily, and by the Vitali covering theorem, in Vitali.vitaliFamily.
• The main theorem on differentiation of measures along a Vitali family is proved in VitaliFamily.ae_tendsto_rnDeriv.

## Main definitions #

• VitaliFamily μ is a structure made, for each x : X, of a family of sets around x, such that one can extract an almost everywhere disjoint covering from any subfamily containing sets of arbitrarily small diameters.

Let v be such a Vitali family.

• v.FineSubfamilyOn describes the subfamilies of v from which one can extract almost everywhere disjoint coverings. This property, called v.FineSubfamilyOn.exists_disjoint_covering_ae, is essentially a restatement of the definition of a Vitali family. We also provide an API to use efficiently such a disjoint covering.
• v.filterAt x is a filter on sets of X, such that convergence with respect to this filter means convergence when sets in the Vitali family shrink towards x.

## References #

structure VitaliFamily {X : Type u_1} [] {m : } (μ : ) :
Type u_1

On a metric space X with a measure μ, consider for each x : X a family of measurable sets with nonempty interiors, called setsAt x. This family is a Vitali family if it satisfies the following property: consider a (possibly non-measurable) set s, and for any x in s a subfamily f x of setsAt x containing sets of arbitrarily small diameter. Then one can extract a disjoint subfamily covering almost all s.

Vitali families are provided by covering theorems such as the Besicovitch covering theorem or the Vitali covering theorem. They make it possible to formulate general versions of theorems on differentiations of measure that apply in both contexts.

• setsAt : XSet (Set X)

Sets of the family "centered" at a given point.

• measurableSet : ∀ (x : X), sself.setsAt x,

All sets of the family are measurable.

• nonempty_interior : ∀ (x : X), sself.setsAt x, (interior s).Nonempty

All sets of the family have nonempty interior.

• nontrivial : ∀ (x : X), ε > 0, sself.setsAt x, s

For any closed ball around x, there exists a set of the family contained in this ball.

• covering : ∀ (s : Set X) (f : XSet (Set X)), (∀ xs, f x self.setsAt x)(∀ xs, ε > 0, tf x, t )∃ (t : Set (X × Set X)), (∀ pt, p.1 s) (t.PairwiseDisjoint fun (p : X × Set X) => p.2) (∀ pt, p.2 f p.1) μ (s \ pt, p.2) = 0

Consider a (possibly non-measurable) set s, and for any x in s a subfamily f x of setsAt x containing sets of arbitrarily small diameter. Then one can extract a disjoint subfamily covering almost all s.

Instances For
theorem VitaliFamily.measurableSet {X : Type u_1} [] {m : } {μ : } (self : ) (x : X) (s : Set X) :
s self.setsAt x

All sets of the family are measurable.

theorem VitaliFamily.nonempty_interior {X : Type u_1} [] {m : } {μ : } (self : ) (x : X) (s : Set X) :
s self.setsAt x(interior s).Nonempty

All sets of the family have nonempty interior.

theorem VitaliFamily.nontrivial {X : Type u_1} [] {m : } {μ : } (self : ) (x : X) (ε : ) :
ε > 0sself.setsAt x, s

For any closed ball around x, there exists a set of the family contained in this ball.

theorem VitaliFamily.covering {X : Type u_1} [] {m : } {μ : } (self : ) (s : Set X) (f : XSet (Set X)) :
(∀ xs, f x self.setsAt x)(∀ xs, ε > 0, tf x, t )∃ (t : Set (X × Set X)), (∀ pt, p.1 s) (t.PairwiseDisjoint fun (p : X × Set X) => p.2) (∀ pt, p.2 f p.1) μ (s \ pt, p.2) = 0

Consider a (possibly non-measurable) set s, and for any x in s a subfamily f x of setsAt x containing sets of arbitrarily small diameter. Then one can extract a disjoint subfamily covering almost all s.

def VitaliFamily.mono {X : Type u_1} [] {m0 : } {μ : } (v : ) (ν : ) (hν : ν.AbsolutelyContinuous μ) :

A Vitali family for a measure μ is also a Vitali family for any measure absolutely continuous with respect to μ.

Equations
• v.mono ν = { setsAt := v.setsAt, measurableSet := , nonempty_interior := , nontrivial := , covering := }
Instances For
def VitaliFamily.FineSubfamilyOn {X : Type u_1} [] {m0 : } {μ : } (v : ) (f : XSet (Set X)) (s : Set X) :

Given a Vitali family v for a measure μ, a family f is a fine subfamily on a set s if every point x in s belongs to arbitrarily small sets in v.setsAt x ∩ f x. This is precisely the subfamilies for which the Vitali family definition ensures that one can extract a disjoint covering of almost all s.

Equations
• v.FineSubfamilyOn f s = xs, ε > 0, tv.setsAt x f x, t
Instances For
theorem VitaliFamily.FineSubfamilyOn.exists_disjoint_covering_ae {X : Type u_1} [] {m0 : } {μ : } {v : } {f : XSet (Set X)} {s : Set X} (h : v.FineSubfamilyOn f s) :
∃ (t : Set (X × Set X)), (∀ pt, p.1 s) (t.PairwiseDisjoint fun (p : X × Set X) => p.2) (∀ pt, p.2 v.setsAt p.1 f p.1) μ (s \ pt, p.2) = 0
def VitaliFamily.FineSubfamilyOn.index {X : Type u_1} [] {m0 : } {μ : } {v : } {f : XSet (Set X)} {s : Set X} (h : v.FineSubfamilyOn f s) :
Set (X × Set X)

Given h : v.FineSubfamilyOn f s, then h.index is a set parametrizing a disjoint covering of almost every s.

Equations
• h.index = .choose
Instances For
def VitaliFamily.FineSubfamilyOn.covering {X : Type u_1} [] {m0 : } {μ : } {v : } {f : XSet (Set X)} {s : Set X} (_h : v.FineSubfamilyOn f s) :
X × Set XSet X

Given h : v.FineSubfamilyOn f s, then h.covering p is a set in the family, for p ∈ h.index, such that these sets form a disjoint covering of almost every s.

Equations
• _h.covering p = p.2
Instances For
theorem VitaliFamily.FineSubfamilyOn.index_subset {X : Type u_1} [] {m0 : } {μ : } {v : } {f : XSet (Set X)} {s : Set X} (h : v.FineSubfamilyOn f s) (p : X × Set X) :
p h.indexp.1 s
theorem VitaliFamily.FineSubfamilyOn.covering_disjoint {X : Type u_1} [] {m0 : } {μ : } {v : } {f : XSet (Set X)} {s : Set X} (h : v.FineSubfamilyOn f s) :
h.index.PairwiseDisjoint h.covering
theorem VitaliFamily.FineSubfamilyOn.covering_disjoint_subtype {X : Type u_1} [] {m0 : } {μ : } {v : } {f : XSet (Set X)} {s : Set X} (h : v.FineSubfamilyOn f s) :
Pairwise (Disjoint on fun (x : h.index) => h.covering x)
theorem VitaliFamily.FineSubfamilyOn.covering_mem {X : Type u_1} [] {m0 : } {μ : } {v : } {f : XSet (Set X)} {s : Set X} (h : v.FineSubfamilyOn f s) {p : X × Set X} (hp : p h.index) :
h.covering p f p.1
theorem VitaliFamily.FineSubfamilyOn.covering_mem_family {X : Type u_1} [] {m0 : } {μ : } {v : } {f : XSet (Set X)} {s : Set X} (h : v.FineSubfamilyOn f s) {p : X × Set X} (hp : p h.index) :
h.covering p v.setsAt p.1
theorem VitaliFamily.FineSubfamilyOn.measure_diff_biUnion {X : Type u_1} [] {m0 : } {μ : } {v : } {f : XSet (Set X)} {s : Set X} (h : v.FineSubfamilyOn f s) :
μ (s \ ph.index, h.covering p) = 0
theorem VitaliFamily.FineSubfamilyOn.index_countable {X : Type u_1} [] {m0 : } {μ : } {v : } {f : XSet (Set X)} {s : Set X} (h : v.FineSubfamilyOn f s) :
h.index.Countable
theorem VitaliFamily.FineSubfamilyOn.measurableSet_u {X : Type u_1} [] {m0 : } {μ : } {v : } {f : XSet (Set X)} {s : Set X} (h : v.FineSubfamilyOn f s) {p : X × Set X} (hp : p h.index) :
MeasurableSet (h.covering p)
theorem VitaliFamily.FineSubfamilyOn.measure_le_tsum_of_absolutelyContinuous {X : Type u_1} [] {m0 : } {μ : } {v : } {f : XSet (Set X)} {s : Set X} (h : v.FineSubfamilyOn f s) {ρ : } (hρ : ρ.AbsolutelyContinuous μ) :
ρ s ∑' (p : h.index), ρ (h.covering p)
theorem VitaliFamily.FineSubfamilyOn.measure_le_tsum {X : Type u_1} [] {m0 : } {μ : } {v : } {f : XSet (Set X)} {s : Set X} (h : v.FineSubfamilyOn f s) :
μ s ∑' (x : h.index), μ (h.covering x)
def VitaliFamily.enlarge {X : Type u_1} [] {m0 : } {μ : } (v : ) (δ : ) (δpos : 0 < δ) :

One can enlarge a Vitali family by adding to the sets f x at x all sets which are not contained in a δ-neighborhood on x. This does not change the local filter at a point, but it can be convenient to get a nicer global behavior.

Equations
• One or more equations did not get rendered due to their size.
Instances For
def VitaliFamily.filterAt {X : Type u_1} [] {m0 : } {μ : } (v : ) (x : X) :

Given a vitali family v, then v.filterAt x is the filter on Set X made of those families that contain all sets of v.setsAt x of a sufficiently small diameter. This filter makes it possible to express limiting behavior when sets in v.setsAt x shrink to x.

Equations
Instances For
theorem Filter.HasBasis.vitaliFamily {X : Type u_1} [] {m0 : } {μ : } (v : ) {ι : Sort u_2} {p : ιProp} {s : ιSet X} {x : X} (h : (nhds x).HasBasis p s) :
(v.filterAt x).HasBasis p fun (i : ι) => {t : Set X | t v.setsAt x t s i}
theorem VitaliFamily.filterAt_basis_closedBall {X : Type u_1} [] {m0 : } {μ : } (v : ) (x : X) :
(v.filterAt x).HasBasis (fun (x : ) => 0 < x) fun (x_1 : ) => {t : Set X | t v.setsAt x t }
theorem VitaliFamily.mem_filterAt_iff {X : Type u_1} [] {m0 : } {μ : } (v : ) {x : X} {s : Set (Set X)} :
s v.filterAt x ε > 0, tv.setsAt x, t t s
instance VitaliFamily.filterAt_neBot {X : Type u_1} [] {m0 : } {μ : } (v : ) (x : X) :
(v.filterAt x).NeBot
Equations
• =
theorem VitaliFamily.eventually_filterAt_iff {X : Type u_1} [] {m0 : } {μ : } (v : ) {x : X} {P : Set XProp} :
(∀ᶠ (t : Set X) in v.filterAt x, P t) ε > 0, tv.setsAt x, t P t
theorem VitaliFamily.tendsto_filterAt_iff {X : Type u_1} [] {m0 : } {μ : } (v : ) {ι : Type u_2} {l : } {f : ιSet X} {x : X} :
Filter.Tendsto f l (v.filterAt x) (∀ᶠ (i : ι) in l, f i v.setsAt x) ε > 0, ∀ᶠ (i : ι) in l, f i
theorem VitaliFamily.eventually_filterAt_mem_setsAt {X : Type u_1} [] {m0 : } {μ : } (v : ) (x : X) :
∀ᶠ (t : Set X) in v.filterAt x, t v.setsAt x
theorem VitaliFamily.eventually_filterAt_subset_closedBall {X : Type u_1} [] {m0 : } {μ : } (v : ) (x : X) {ε : } (hε : 0 < ε) :
∀ᶠ (t : Set X) in v.filterAt x, t
theorem VitaliFamily.eventually_filterAt_measurableSet {X : Type u_1} [] {m0 : } {μ : } (v : ) (x : X) :
∀ᶠ (t : Set X) in v.filterAt x,
theorem VitaliFamily.frequently_filterAt_iff {X : Type u_1} [] {m0 : } {μ : } (v : ) {x : X} {P : Set XProp} :
(∃ᶠ (t : Set X) in v.filterAt x, P t) ε > 0, tv.setsAt x, t P t
theorem VitaliFamily.eventually_filterAt_subset_of_nhds {X : Type u_1} [] {m0 : } {μ : } (v : ) {x : X} {o : Set X} (hx : o nhds x) :
∀ᶠ (t : Set X) in v.filterAt x, t o
theorem VitaliFamily.fineSubfamilyOn_of_frequently {X : Type u_1} [] {m0 : } {μ : } (v : ) (f : XSet (Set X)) (s : Set X) (h : xs, ∃ᶠ (t : Set X) in v.filterAt x, t f x) :
v.FineSubfamilyOn f s