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

Commit 315a642

Browse files
committed
feat(measure_theory): add Hahn decomposition
1 parent ed2ab1a commit 315a642

File tree

4 files changed

+250
-3
lines changed

4 files changed

+250
-3
lines changed

src/data/real/ennreal.lean

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,16 @@ by refine_struct {..}; simp
102102
lemma add_eq_top : a + b = ∞ ↔ a = ∞ ∨ b = ∞ := with_top.add_eq_top _ _
103103
lemma add_lt_top : a + b < ∞ ↔ a < ∞ ∧ b < ∞ := with_top.add_lt_top _ _
104104

105+
lemma to_nnreal_add {r₁ r₂ : ennreal} (h₁ : r₁ < ⊤) (h₂ : r₂ < ⊤) :
106+
(r₁ + r₂).to_nnreal = r₁.to_nnreal + r₂.to_nnreal :=
107+
begin
108+
rw [← coe_eq_coe, coe_add, coe_to_nnreal, coe_to_nnreal, coe_to_nnreal];
109+
apply @ne_top_of_lt ennreal _ _ ⊤,
110+
exact h₂,
111+
exact h₁,
112+
exact add_lt_top.2 ⟨h₁, h₂⟩
113+
end
114+
105115
/- rw has trouble with the generic lt_top_iff_ne_top and bot_lt_iff_ne_bot
106116
(contrary to erw). This is solved with the next lemmas -/
107117
protected lemma lt_top_iff_ne_top : a < ∞ ↔ a ≠ ∞ := lt_top_iff_ne_top

src/data/real/nnreal.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ protected def of_real (r : ℝ) : ℝ≥0 := ⟨max r 0, le_max_right _ _⟩
3636
lemma coe_of_real (r : ℝ) (hr : 0 ≤ r) : (nnreal.of_real r : ℝ) = r :=
3737
max_eq_left hr
3838

39+
lemma coe_nonneg (r : nnreal) : (0 : ℝ) ≤ r := r.2
40+
3941
instance : has_zero ℝ≥0 := ⟨⟨0, le_refl 0⟩⟩
4042
instance : has_one ℝ≥0 := ⟨⟨1, zero_le_one⟩⟩
4143
instance : has_add ℝ≥0 := ⟨λa b, ⟨a + b, add_nonneg a.2 b.2⟩⟩
Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
/-
2+
Copyright (c) 2019 Johannes Hölzl. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Johannes Hölzl
5+
6+
Hahn decomposition theorem
7+
8+
TODO:
9+
* introduce finite measures (into nnreal)
10+
* show general for signed measures (into ℝ)
11+
-/
12+
import measure_theory.measure_space
13+
14+
local attribute [instance, priority 0] classical.prop_decidable
15+
16+
namespace measure_theory
17+
open set lattice filter
18+
19+
variables {α : Type*} [measurable_space α] {μ ν : measure α}
20+
21+
lemma hahn_decomposition (hμ : μ univ < ⊤) (hν : ν univ < ⊤) :
22+
∃s, is_measurable s ∧
23+
(∀t, is_measurable t → t ⊆ s → ν t ≤ μ t) ∧
24+
(∀t, is_measurable t → t ⊆ - s → μ t ≤ ν t) :=
25+
begin
26+
let d : set α → ℝ := λs, ((μ s).to_nnreal : ℝ) - (ν s).to_nnreal,
27+
let c : set ℝ := d '' {s | is_measurable s },
28+
let γ : ℝ := Sup c,
29+
30+
have hμ : ∀s, μ s < ⊤ := assume s, lt_of_le_of_lt (measure_mono $ subset_univ _) hμ,
31+
have hν : ∀s, ν s < ⊤ := assume s, lt_of_le_of_lt (measure_mono $ subset_univ _) hν,
32+
have to_nnreal_μ : ∀s, ((μ s).to_nnreal : ennreal) = μ s :=
33+
(assume s, ennreal.coe_to_nnreal $ ne_top_of_lt $ hμ _),
34+
have to_nnreal_ν : ∀s, ((ν s).to_nnreal : ennreal) = ν s :=
35+
(assume s, ennreal.coe_to_nnreal $ ne_top_of_lt $ hν _),
36+
37+
have d_empty : d ∅ = 0, { simp [d], rw [measure_empty, measure_empty], simp },
38+
39+
have d_split : ∀s t, is_measurable s → is_measurable t →
40+
d s = d (s \ t) + d (s ∩ t),
41+
{ assume s t hs ht,
42+
simp only [d],
43+
rw [measure_eq_inter_diff hs ht, measure_eq_inter_diff hs ht,
44+
ennreal.to_nnreal_add (hμ _) (hμ _), ennreal.to_nnreal_add (hν _) (hν _),
45+
nnreal.coe_add, nnreal.coe_add],
46+
simp only [sub_eq_add_neg, neg_add],
47+
ac_refl },
48+
49+
have d_Union : ∀(s : ℕ → set α), (∀n, is_measurable (s n)) → monotone s →
50+
tendsto (λn, d (s n)) at_top (nhds (d (⋃n, s n))),
51+
{ assume s hs hm,
52+
refine tendsto_sub _ _;
53+
refine (nnreal.tendsto_coe.2 $
54+
(tendsto_measure_Union hs hm).comp $ ennreal.tendsto_to_nnreal $ @ne_top_of_lt _ _ _ ⊤ _),
55+
exact hμ _,
56+
exact hν _ },
57+
58+
have d_Inter : ∀(s : ℕ → set α), (∀n, is_measurable (s n)) → (∀n m, n ≤ m → s m ⊆ s n) →
59+
tendsto (λn, d (s n)) at_top (nhds (d (⋂n, s n))),
60+
{ assume s hs hm,
61+
refine tendsto_sub _ _;
62+
refine (nnreal.tendsto_coe.2 $
63+
(tendsto_measure_Inter hs hm _).comp $ ennreal.tendsto_to_nnreal $ @ne_top_of_lt _ _ _ ⊤ _),
64+
exact ⟨0, hμ _⟩,
65+
exact hμ _,
66+
exact ⟨0, hν _⟩,
67+
exact hν _ },
68+
69+
have bdd_c : bdd_above c,
70+
{ use (μ univ).to_nnreal,
71+
rintros r ⟨s, hs, rfl⟩,
72+
refine le_trans (sub_le_self _ $ nnreal.coe_nonneg _) _,
73+
rw [← nnreal.coe_le, ← ennreal.coe_le_coe, to_nnreal_μ, to_nnreal_μ],
74+
exact measure_mono (subset_univ _) },
75+
76+
have c_nonempty : c ≠ ∅ := ne_empty_of_mem (mem_image_of_mem _ is_measurable.empty),
77+
78+
have d_le_γ : ∀s, is_measurable s → d s ≤ γ := assume s hs, le_cSup bdd_c ⟨s, hs, rfl⟩,
79+
80+
have : ∀n:ℕ, ∃s : set α, is_measurable s ∧ γ - (1/2)^n < d s,
81+
{ assume n,
82+
have : γ - (1/2)^n < γ := sub_lt_self γ (pow_pos (half_pos zero_lt_one) n),
83+
rcases exists_lt_of_lt_cSup c_nonempty this with ⟨r, ⟨s, hs, rfl⟩, hlt⟩,
84+
exact ⟨s, hs, hlt⟩ },
85+
rcases classical.axiom_of_choice this with ⟨e, he⟩,
86+
change ℕ → set α at e,
87+
have he₁ : ∀n, is_measurable (e n) := assume n, (he n).1,
88+
have he₂ : ∀n, γ - (1/2)^n < d (e n) := assume n, (he n).2,
89+
90+
let f : ℕ → ℕ → set α := λn m, (finset.Ico n (m + 1)).inf e,
91+
92+
have hf : ∀n m, is_measurable (f n m),
93+
{ assume n m,
94+
simp only [f, finset.inf_eq_infi],
95+
exact is_measurable.bInter (countable_encodable _) (assume i _, he₁ _) },
96+
97+
have f_subset_f : ∀{a b c d}, a ≤ b → c ≤ d → f a d ⊆ f b c,
98+
{ assume a b c d hab hcd,
99+
dsimp only [f],
100+
rw [finset.inf_eq_infi, finset.inf_eq_infi],
101+
refine bInter_subset_bInter_left _,
102+
simp,
103+
rintros j ⟨hbj, hjc⟩,
104+
exact ⟨le_trans hab hbj, lt_of_lt_of_le hjc $ add_le_add_right hcd 1⟩ },
105+
106+
have f_succ : ∀n m, n ≤ m → f n (m + 1) = f n m ∩ e (m + 1),
107+
{ assume n m hnm,
108+
have : n ≤ m + 1 := le_of_lt (nat.succ_le_succ hnm),
109+
simp only [f],
110+
rw [finset.Ico.succ_top this, finset.inf_insert, set.inter_comm],
111+
refl },
112+
113+
have le_d_f : ∀n m, m ≤ n → γ - 2 * ((1 / 2) ^ m) + (1 / 2) ^ n ≤ d (f m n),
114+
{ assume n m h,
115+
refine nat.le_induction _ _ n h,
116+
{ have := he₂ m,
117+
simp only [f],
118+
rw [finset.Ico.succ_singleton, finset.inf_singleton],
119+
linarith },
120+
{ assume n (hmn : m ≤ n) ih,
121+
have : γ + (γ - 2 * (1 / 2)^m + (1 / 2) ^ (n + 1)) ≤ γ + d (f m (n + 1)),
122+
{ calc γ + (γ - 2 * (1 / 2)^m + (1 / 2) ^ (n+1)) ≤
123+
γ + (γ - 2 * (1 / 2)^m + ((1 / 2) ^ n - (1/2)^(n+1))) :
124+
begin
125+
refine add_le_add_left (add_le_add_left _ _) γ,
126+
simp only [pow_add, pow_one, le_sub_iff_add_le],
127+
linarith
128+
end
129+
... = (γ - (1 / 2)^(n+1)) + (γ - 2 * (1 / 2)^m + (1 / 2)^n) :
130+
by simp only [sub_eq_add_neg]; ac_refl
131+
... ≤ d (e (n + 1)) + d (f m n) : add_le_add (le_of_lt $ he₂ _) ih
132+
... ≤ d (e (n + 1)) + d (f m n \ e (n + 1)) + d (f m (n + 1)) :
133+
by rw [f_succ _ _ hmn, d_split (f m n) (e (n + 1)) (hf _ _) (he₁ _), add_assoc]
134+
... = d (e (n + 1) ∪ f m n) + d (f m (n + 1)) :
135+
begin
136+
rw [d_split (e (n + 1) ∪ f m n) (e (n + 1)),
137+
union_diff_left, union_inter_cancel_left],
138+
ac_refl,
139+
exact (he₁ _).union (hf _ _),
140+
exact (he₁ _)
141+
end
142+
... ≤ γ + d (f m (n + 1)) :
143+
add_le_add_right (d_le_γ _ $ (he₁ _).union (hf _ _)) _ },
144+
exact (add_le_add_iff_left γ).1 this } },
145+
146+
let s := ⋃ m, ⋂n, f m n,
147+
have γ_le_d_s : γ ≤ d s,
148+
{ have hγ : tendsto (λm:ℕ, γ - 2 * (1/2)^m) at_top (nhds γ),
149+
{ suffices : tendsto (λm:ℕ, γ - 2 * (1/2)^m) at_top (nhds (γ - 2 * 0)), { simpa },
150+
exact (tendsto_sub tendsto_const_nhds $ tendsto_mul tendsto_const_nhds $
151+
tendsto_pow_at_top_nhds_0_of_lt_1
152+
(le_of_lt $ half_pos $ zero_lt_one) (half_lt_self zero_lt_one)) },
153+
have hd : tendsto (λm, d (⋂n, f m n)) at_top (nhds (d (⋃ m, ⋂ n, f m n))),
154+
{ refine d_Union _ _ _,
155+
{ assume n, exact is_measurable.Inter (assume m, hf _ _) },
156+
{ exact assume n m hnm, subset_Inter
157+
(assume i, subset.trans (Inter_subset (f n) i) $ f_subset_f hnm $ le_refl _) } },
158+
refine le_of_tendsto_of_tendsto (@at_top_ne_bot ℕ _ _) hγ hd (univ_mem_sets' $ assume m, _),
159+
change γ - 2 * (1 / 2) ^ m ≤ d (⋂ (n : ℕ), f m n),
160+
have : tendsto (λn, d (f m n)) at_top (nhds (d (⋂ n, f m n))),
161+
{ refine d_Inter _ _ _,
162+
{ assume n, exact hf _ _ },
163+
{ assume n m hnm, exact f_subset_f (le_refl _) hnm } },
164+
refine ge_of_tendsto (@at_top_ne_bot ℕ _ _) this (mem_at_top_sets.2 ⟨m, assume n hmn, _⟩),
165+
change γ - 2 * (1 / 2) ^ m ≤ d (f m n),
166+
refine le_trans _ (le_d_f _ _ hmn),
167+
exact le_add_of_le_of_nonneg (le_refl _) (pow_nonneg (le_of_lt $ half_pos $ zero_lt_one) _) },
168+
169+
have hs : is_measurable s :=
170+
is_measurable.Union (assume n, is_measurable.Inter (assume m, hf _ _)),
171+
refine ⟨s, hs, _, _⟩,
172+
{ assume t ht hts,
173+
have : 0 ≤ d t := ((add_le_add_iff_left γ).1 $
174+
calc γ + 0 ≤ d s : by rw [add_zero]; exact γ_le_d_s
175+
... = d (s \ t) + d t : by rw [d_split _ _ hs ht, inter_eq_self_of_subset_right hts]
176+
... ≤ γ + d t : add_le_add (d_le_γ _ (hs.diff ht)) (le_refl _)),
177+
rw [← to_nnreal_μ, ← to_nnreal_ν, ennreal.coe_le_coe, nnreal.coe_le],
178+
simpa only [d, le_sub_iff_add_le, zero_add] using this },
179+
{ assume t ht hts,
180+
have : d t ≤ 0,
181+
exact ((add_le_add_iff_left γ).1 $
182+
calc γ + d t ≤ d s + d t : add_le_add γ_le_d_s (le_refl _)
183+
... = d (s ∪ t) :
184+
begin
185+
rw [d_split _ _ (hs.union ht) ht, union_diff_right, union_inter_cancel_right,
186+
diff_eq_self.2],
187+
exact assume a ⟨hat, has⟩, hts hat has
188+
end
189+
... ≤ γ + 0 : by rw [add_zero]; exact d_le_γ _ (hs.union ht)),
190+
rw [← to_nnreal_μ, ← to_nnreal_ν, ennreal.coe_le_coe, nnreal.coe_le],
191+
simpa only [d, sub_le_iff_le_add, zero_add] using this }
192+
end
193+
194+
end measure_theory

src/measure_theory/measure_space.lean

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,26 @@ local attribute [instance] prop_decidable
2626

2727
universes u v w x
2828

29+
section tendsto
30+
variables {α : Type*} [topological_space α]
31+
open lattice filter
32+
33+
lemma tendsto_at_top_supr_nat [complete_linear_order α] [orderable_topology α]
34+
(f : ℕ → α) (hf : monotone f) : tendsto f at_top (nhds (⨆i, f i)) :=
35+
tendsto_orderable.2 $ and.intro
36+
(assume a ha, let ⟨n, hn⟩ := lt_supr_iff.1 ha in
37+
mem_at_top_sets.2 ⟨n, assume i hi, lt_of_lt_of_le hn (hf hi)⟩)
38+
(assume a ha, univ_mem_sets' (assume n, lt_of_le_of_lt (le_supr _ n) ha))
39+
40+
lemma tendsto_at_top_infi_nat [complete_linear_order α] [orderable_topology α]
41+
(f : ℕ → α) (hf : ∀{n m}, n ≤ m → f m ≤ f n) : tendsto f at_top (nhds (⨅i, f i)) :=
42+
tendsto_orderable.2 $ and.intro
43+
(assume a ha, univ_mem_sets' (assume n, lt_of_lt_of_le ha (infi_le _ _)))
44+
(assume a ha, let ⟨n, hn⟩ := infi_lt_iff.1 ha in
45+
mem_at_top_sets.2 ⟨n, assume i hi, lt_of_le_of_lt (hf hi) hn⟩)
46+
47+
end tendsto
48+
2949
namespace measure_theory
3050

3151
section of_measurable
@@ -383,6 +403,28 @@ begin
383403
{ exact λ i j ij, diff_subset_diff_right (hs _ _ ij) }
384404
end
385405

406+
lemma measure_eq_inter_diff {μ : measure α} {s t : set α}
407+
(hs : is_measurable s) (ht : is_measurable t) :
408+
μ s = μ (s ∩ t) + μ (s \ t) :=
409+
have hd : disjoint (s ∩ t) (s \ t) := assume a ⟨⟨_, hs⟩, _, hns⟩, hns hs ,
410+
by rw [← measure_union hd (hs.inter ht) (hs.diff ht), inter_union_diff s t]
411+
412+
lemma tendsto_measure_Union {μ : measure α} {s : ℕ → set α}
413+
(hs : ∀n, is_measurable (s n)) (hm : monotone s) :
414+
tendsto (μ ∘ s) at_top (nhds (μ (⋃n, s n))) :=
415+
begin
416+
rw measure_Union_eq_supr_nat hs hm,
417+
exact tendsto_at_top_supr_nat (μ ∘ s) (assume n m hnm, measure_mono $ hm $ hnm)
418+
end
419+
420+
lemma tendsto_measure_Inter {μ : measure α} {s : ℕ → set α}
421+
(hs : ∀n, is_measurable (s n)) (hm : ∀n m, n ≤ m → s m ⊆ s n) (hf : ∃i, μ (s i) < ⊤):
422+
tendsto (μ ∘ s) at_top (nhds (μ (⋂n, s n))) :=
423+
begin
424+
rw measure_Inter_eq_infi_nat hs hm hf,
425+
exact tendsto_at_top_infi_nat (μ ∘ s) (assume n m hnm, measure_mono $ hm _ _ $ hnm),
426+
end
427+
386428
end
387429

388430
def outer_measure.to_measure {α} (m : outer_measure α)
@@ -486,14 +528,13 @@ begin
486528
simp only [outer_measure.Inf_gen_nonempty1 _ _ ht, le_infi_iff, ball_image_iff,
487529
to_outer_measure_apply, measure_eq_infi t],
488530
assume μ hμ u htu hu,
489-
have hd : disjoint (u ∩ s) (u \ s) := assume a ⟨⟨_, hs⟩, _, hns⟩, hns hs ,
490531
have hm : ∀{s t}, s ⊆ t → outer_measure.Inf_gen (to_outer_measure '' m) s ≤ μ t,
491532
{ assume s t hst,
492533
rw [outer_measure.Inf_gen_nonempty2 _ _ (mem_image_of_mem _ hμ)],
493534
refine infi_le_of_le (μ.to_outer_measure) (infi_le_of_le (mem_image_of_mem _ hμ) _),
494535
rw [to_outer_measure_apply],
495536
refine measure_mono hst },
496-
rw [← inter_union_diff u s, measure_union hd (hu.inter hs) (hu.diff hs)],
537+
rw [measure_eq_inter_diff hu hs],
497538
refine add_le_add' (hm $ inter_subset_inter_left _ htu) (hm $ diff_subset_diff_left htu)
498539
end
499540

@@ -551,7 +592,7 @@ if hf : measurable f then
551592
le_to_outer_measure_caratheodory μ _ (hf _ hs) (f ⁻¹' t)
552593
else 0
553594

554-
variable {μ : measure α}
595+
variables ν : measure α}
555596

556597
@[simp] theorem map_apply {f : α → β} (hf : measurable f)
557598
{s : set β} (hs : is_measurable s) :

0 commit comments

Comments
 (0)