Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 13cd192

Browse files
committed
feat(measure_theory/measure_space): added sub for measure_theory.measure (#4639)
This definition is useful for proving the Lebesgue-Radon-Nikodym theorem for non-negative measures. Co-authored-by: mzinkevi <41597957+mzinkevi@users.noreply.github.com>
1 parent e83458c commit 13cd192

File tree

3 files changed

+90
-0
lines changed

3 files changed

+90
-0
lines changed

src/data/real/ennreal.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,4 +1245,11 @@ lemma supr_coe_nat : (⨆n:ℕ, (n : ennreal)) = ⊤ :=
12451245

12461246
end supr
12471247

1248+
/-- `le_of_add_le_add_left` is normally applicable to `ordered_cancel_add_comm_monoid`,
1249+
but it holds in `ennreal` with the additional assumption that `a < ∞`. -/
1250+
lemma le_of_add_le_add_left {a b c : ennreal} : a < ∞ →
1251+
a + b ≤ a + c → b ≤ c :=
1252+
by cases a; cases b; cases c; simp [← ennreal.coe_add, ennreal.coe_le_coe]
1253+
1254+
12481255
end ennreal

src/measure_theory/measure_space.lean

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,9 @@ end Inf
668668

669669
protected lemma zero_le (μ : measure α) : 0 ≤ μ := bot_le
670670

671+
lemma le_zero_iff_eq' : μ ≤ 0 ↔ μ = 0 :=
672+
μ.zero_le.le_iff_eq
673+
671674
@[simp] lemma measure_univ_eq_zero {μ : measure α} : μ univ = 0 ↔ μ = 0 :=
672675
⟨λ h, bot_unique $ λ s hs, trans_rel_left (≤) (measure_mono (subset_univ s)) h, λ h, h.symm ▸ rfl⟩
673676

@@ -1378,6 +1381,11 @@ lemma measure_lt_top (μ : measure α) [finite_measure μ] (s : set α) : μ s <
13781381
lemma measure_ne_top (μ : measure α) [finite_measure μ] (s : set α) : μ s ≠ ⊤ :=
13791382
ne_of_lt (measure_lt_top μ s)
13801383

1384+
/-- `le_of_add_le_add_left` is normally applicable to `ordered_cancel_add_comm_monoid`,
1385+
but it holds for measures with the additional assumption that μ is finite. -/
1386+
lemma measure.le_of_add_le_add_left {μ ν₁ ν₂ : measure α} [finite_measure μ] (A2 : μ + ν₁ ≤ μ + ν₂) : ν₁ ≤ ν₂ :=
1387+
λ S B1, ennreal.le_of_add_le_add_left (measure_theory.measure_lt_top μ S) (A2 S B1)
1388+
13811389
@[priority 100]
13821390
instance probability_measure.to_finite_measure (μ : measure α) [probability_measure μ] :
13831391
finite_measure μ :=
@@ -1614,6 +1622,71 @@ lemma finite_at_nhds_within [topological_space α] (μ : measure α) [locally_fi
16141622
@[simp] lemma finite_at_principal {s : set α} : μ.finite_at_filter (𝓟 s) ↔ μ s < ⊤ :=
16151623
⟨λ ⟨t, ht, hμ⟩, (measure_mono ht).trans_lt hμ, λ h, ⟨s, mem_principal_self s, h⟩⟩
16161624

1625+
/-! ### Subtraction of measures -/
1626+
1627+
/-- The measure `μ - ν` is defined to be the least measure `τ` such that `μ ≤ τ + ν`.
1628+
It is the equivalent of `(μ - ν) ⊔ 0` if `μ` and `ν` were signed measures.
1629+
Compare with `ennreal.has_sub`.
1630+
Specifically, note that if you have `α = {1,2}`, and `μ {1} = 2`, `μ {2} = 0`, and
1631+
`ν {2} = 2`, `ν {1} = 0`, then `(μ - ν) {1, 2} = 2`. However, if `μ ≤ ν`, and
1632+
`ν univ ≠ ⊤`, then `(μ - ν) + ν = μ`. -/
1633+
noncomputable instance has_sub {α : Type*} [measurable_space α] : has_sub (measure α) :=
1634+
⟨λ μ ν, Inf {τ | μ ≤ τ + ν} ⟩
1635+
1636+
section measure_sub
1637+
variables {ν : measure_theory.measure α}
1638+
1639+
lemma sub_def : μ - ν = Inf {d | μ ≤ d + ν} := rfl
1640+
1641+
lemma sub_eq_zero_of_le (h : μ ≤ ν) : μ - ν = 0 :=
1642+
begin
1643+
rw [← le_zero_iff_eq', measure.sub_def],
1644+
apply @Inf_le (measure α) _ _,
1645+
simp [h],
1646+
end
1647+
1648+
/-- This application lemma only works in special circumstances. Given knowledge of
1649+
when `μ ≤ ν` and `ν ≤ μ`, a more general application lemma can be written. -/
1650+
lemma sub_apply {s : set α} [finite_measure ν] (h₁ : is_measurable s) (h₂ : ν ≤ μ) :
1651+
(μ - ν) s = μ s - ν s :=
1652+
begin
1653+
-- We begin by defining `measure_sub`, which will be equal to `(μ - ν)`.
1654+
let measure_sub : measure α := @measure_theory.measure.of_measurable α _
1655+
(λ (t : set α) (h_t_is_measurable : is_measurable t), (μ t - ν t))
1656+
begin
1657+
simp
1658+
end
1659+
begin
1660+
intros g h_meas h_disj, simp only, rw ennreal.tsum_sub,
1661+
repeat { rw ← measure_theory.measure_Union h_disj h_meas },
1662+
apply measure_theory.measure_lt_top, intro i, apply h₂, apply h_meas
1663+
end,
1664+
-- Now, we demonstrate `μ - ν = measure_sub`, and apply it.
1665+
begin
1666+
have h_measure_sub_add : (ν + measure_sub = μ),
1667+
{ ext t h_t_is_measurable,
1668+
simp only [pi.add_apply, coe_add],
1669+
rw [measure_theory.measure.of_measurable_apply _ h_t_is_measurable, add_comm,
1670+
ennreal.sub_add_cancel_of_le (h₂ t h_t_is_measurable)] },
1671+
have h_measure_sub_eq : (μ - ν) = measure_sub,
1672+
{ rw measure_theory.measure.sub_def, apply le_antisymm,
1673+
{ apply @Inf_le (measure α) (measure.complete_lattice), simp [le_refl, add_comm, h_measure_sub_add] },
1674+
apply @le_Inf (measure α) (measure.complete_lattice),
1675+
intros d h_d, rw [← h_measure_sub_add, mem_set_of_eq, add_comm d] at h_d,
1676+
apply measure.le_of_add_le_add_left h_d },
1677+
rw h_measure_sub_eq,
1678+
apply measure.of_measurable_apply _ h₁,
1679+
end
1680+
end
1681+
1682+
lemma sub_add_cancel_of_le [finite_measure ν] (h₁ : ν ≤ μ) : μ - ν + ν = μ :=
1683+
begin
1684+
ext s h_s_meas,
1685+
rw [add_apply, sub_apply h_s_meas h₁, ennreal.sub_add_cancel_of_le (h₁ s h_s_meas)],
1686+
end
1687+
1688+
end measure_sub
1689+
16171690
end measure
16181691

16191692
end measure_theory

src/topology/instances/ennreal.lean

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,16 @@ protected lemma tsum_apply {ι α : Type*} {f : ι → α → ennreal} {x : α}
595595
(∑' i, f i) x = ∑' i, f i x :=
596596
tsum_apply $ pi.summable.mpr $ λ _, ennreal.summable
597597

598+
lemma tsum_sub {f : ℕ → ennreal} {g : ℕ → ennreal} (h₁ : (∑' i, g i) < ∞) (h₂ : g ≤ f) :
599+
(∑' i, (f i - g i)) = (∑' i, f i) - (∑' i, g i) :=
600+
begin
601+
have h₃:(∑' i, (f i - g i)) = (∑' i, (f i - g i) + (g i))-(∑' i, g i),
602+
{ rw [ennreal.tsum_add, add_sub_self h₁]},
603+
have h₄:(λ i, (f i - g i) + (g i)) = f,
604+
{ ext n, rw ennreal.sub_add_cancel_of_le (h₂ n)},
605+
rw h₄ at h₃, apply h₃,
606+
end
607+
598608
end tsum
599609

600610
end ennreal

0 commit comments

Comments
 (0)