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

Commit bf58bf4

Browse files
committed
feat(topology/measurable_space): induction rule for sigma-algebras with intersection-stable generators; uses Dynkin systems
1 parent 74c3e6e commit bf58bf4

File tree

1 file changed

+269
-4
lines changed

1 file changed

+269
-4
lines changed

topology/measurable_space.lean

Lines changed: 269 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,52 @@ Authors: Johannes Hölzl
55
66
Measurable spaces -- σ-algberas
77
-/
8-
import data.set order.galois_connection data.set.countable
8+
import data.set data.finset order.galois_connection data.set.countable
99
open classical set lattice
1010
local attribute [instance] decidable_inhabited prop_decidable
1111

1212
universes u v w x
13+
variables {α : Type u} {β : Type v} {γ : Type w} {ι : Sort x}
14+
{s t u : set α}
15+
16+
namespace set
17+
def disjointed (f : ℕ → set α) (n : ℕ) : set α := f n ∩ (⋂i<n, - f i)
18+
19+
lemma disjoint_disjointed {i j : ℕ} {f : ℕ → set α} (h : i ≠ j) :
20+
disjointed f i ∩ disjointed f j = ∅ :=
21+
have ∀i j, i < j → disjointed f i ∩ disjointed f j = ∅,
22+
from assume i j hij, eq_empty_of_forall_not_mem $ assume x h,
23+
have x ∈ f i, from h.left.left,
24+
have x ∈ (⋂i<j, - f i), from h.right.right,
25+
have x ∉ f i, begin simp at this; exact this _ hij end,
26+
absurd ‹x ∈ f i› this,
27+
show disjointed f i ∩ disjointed f j = ∅,
28+
from (ne_iff_lt_or_gt.mp h).elim (this i j) begin rw [inter_comm], exact this j i end
29+
30+
lemma disjointed_Union {f : ℕ → set α} : (⋃n, disjointed f n) = (⋃n, f n) :=
31+
subset.antisymm (Union_subset_Union $ assume i, inter_subset_left _ _) $
32+
assume x h,
33+
have ∃n, x ∈ f n, from (mem_Union_eq _ _).mp h,
34+
have hn : ∀ (i : ℕ), i < nat.find this → x ∉ f i,
35+
from assume i, nat.find_min this,
36+
(mem_Union_eq _ _).mpr ⟨nat.find this, nat.find_spec this, by simp; assumption⟩
37+
end set
38+
39+
namespace nat
40+
open nat
41+
42+
lemma lt_succ_iff {n i : ℕ } : n < i.succ ↔ (n < i ∨ n = i) :=
43+
calc n < i.succ ↔ n ≤ i : succ_le_succ_iff _ _
44+
... ↔ (n + 1 ≤ i ∨ n = i) : iff.intro
45+
(assume h : n ≤ i, match le.dest h with
46+
| ⟨zero, h⟩ := by simp at h; simp [*]
47+
| ⟨succ k, h⟩ := or.inl $ h ▸ add_le_add_left (le_add_left _ _) _
48+
end)
49+
(or.rec (assume h, le_trans (le_add_right _ _) h) le_of_eq)
50+
51+
end nat
52+
53+
open set
1354

1455
structure measurable_space (α : Type u) :=
1556
(is_measurable : set α → Prop)
@@ -19,9 +60,6 @@ structure measurable_space (α : Type u) :=
1960

2061
attribute [class] measurable_space
2162

22-
variables {α : Type u} {β : Type v} {γ : Type w} {ι : Sort x}
23-
{s t u : set α}
24-
2563
section
2664
variable [m : measurable_space α]
2765
include m
@@ -33,6 +71,10 @@ lemma is_measurable_empty : is_measurable (∅ : set α) := m.is_measurable_empt
3371
lemma is_measurable_compl : is_measurable s → is_measurable (-s) :=
3472
m.is_measurable_compl s
3573

74+
lemma is_measurable_univ : is_measurable (univ : set α) :=
75+
have is_measurable (- ∅ : set α), from is_measurable_compl is_measurable_empty,
76+
by simp * at *
77+
3678
lemma is_measurable_Union_nat {f : ℕ → set α} : (∀i, is_measurable (f i)) → is_measurable (⋃i, f i) :=
3779
m.is_measurable_Union f
3880

@@ -112,6 +154,7 @@ lemma measurable_space_eq :
112154
by subst this
113155

114156
namespace measurable_space
157+
115158
section complete_lattice
116159

117160
instance : partial_order (measurable_space α) :=
@@ -121,6 +164,34 @@ instance : partial_order (measurable_space α) :=
121164
le_trans := assume a b c, le_trans,
122165
le_antisymm := assume a b h₁ h₂, measurable_space_eq $ assume s, ⟨h₁ s, h₂ s⟩ }
123166

167+
section generated_from
168+
169+
inductive generate_measurable (s : set (set α)) : set α → Prop
170+
| basic : ∀u∈s, generate_measurable u
171+
| empty : generate_measurable ∅
172+
| compl : ∀s, generate_measurable s → generate_measurable (-s)
173+
| union : ∀f:ℕ → set α, (∀n, generate_measurable (f n)) → generate_measurable (⋃i, f i)
174+
175+
def generate_from (s : set (set α)) : measurable_space α :=
176+
{measurable_space .
177+
is_measurable := generate_measurable s,
178+
is_measurable_empty := generate_measurable.empty s,
179+
is_measurable_compl := generate_measurable.compl,
180+
is_measurable_Union := generate_measurable.union }
181+
182+
lemma is_measurable_generate_from {s : set (set α)} {t : set α} (ht : t ∈ s) :
183+
(generate_from s).is_measurable t :=
184+
generate_measurable.basic t ht
185+
186+
lemma generate_from_le {s : set (set α)} {m : measurable_space α} (h : ∀t∈s, m.is_measurable t) :
187+
generate_from s ≤ m :=
188+
assume t (ht : generate_measurable s t), ht.rec_on h
189+
(is_measurable_empty m)
190+
(assume s _ hs, is_measurable_compl m s hs)
191+
(assume f _ hf, is_measurable_Union m f hf)
192+
193+
end generated_from
194+
124195
instance : has_top (measurable_space α) :=
125196
⟨{measurable_space .
126197
is_measurable := λs, true,
@@ -267,6 +338,10 @@ lemma measurable_comp [measurable_space α] [measurable_space β] [measurable_sp
267338
{f : α → β} {g : β → γ} (hf : measurable f) (hg : measurable g) : measurable (g ∘ f) :=
268339
le_trans hg $ map_mono hf
269340

341+
lemma measurable_generate_from [measurable_space α] {s : set (set β)} {f : α → β}
342+
(h : ∀t∈s, is_measurable (f ⁻¹' t)) : @measurable _ _ _ (generate_from s) f :=
343+
generate_from_le h
344+
270345
end measurable_functions
271346

272347
section constructions
@@ -290,3 +365,193 @@ instance {β : α → Type v} [m : Πa, measurable_space (β a)] : measurable_sp
290365
⨅a, (m a).map (sigma.mk a)
291366

292367
end constructions
368+
369+
namespace measurable_space
370+
371+
/-- Dynkin systems
372+
The main purpose of Dynkin systems is to provide a powerful induction rule for σ-algebras generated
373+
by intersection stable set systems.
374+
-/
375+
structure dynkin_system (α : Type*) :=
376+
(has : set α → Prop)
377+
(has_empty : has ∅)
378+
(has_compl : ∀{a}, has a → has (-a))
379+
(has_Union : ∀{f:ℕ → set α}, (∀i j, i ≠ j → f i ∩ f j = ∅) → (∀i, has (f i)) → has (⋃i, f i))
380+
381+
namespace dynkin_system
382+
383+
lemma dynkin_system_eq :
384+
∀{d₁ d₂ : dynkin_system α}, (∀s:set α, d₁.has s ↔ d₂.has s) → d₁ = d₂
385+
| ⟨s₁, _, _, _⟩ ⟨s₂, _, _, _⟩ h :=
386+
have s₁ = s₂, from funext $ assume x, propext $ h x,
387+
by subst this
388+
389+
instance : partial_order (dynkin_system α) :=
390+
{ partial_order .
391+
le := λm₁ m₂, m₁.has ≤ m₂.has,
392+
le_refl := assume a b, le_refl _,
393+
le_trans := assume a b c, le_trans,
394+
le_antisymm := assume a b h₁ h₂, dynkin_system_eq $ assume s, ⟨h₁ s, h₂ s⟩ }
395+
396+
def of_measurable_space (m : measurable_space α) : dynkin_system α :=
397+
{ dynkin_system .
398+
has := m.is_measurable,
399+
has_empty := m.is_measurable_empty,
400+
has_compl := m.is_measurable_compl,
401+
has_Union := assume f _ hf, m.is_measurable_Union f hf }
402+
403+
lemma of_measurable_space_le_of_measurable_space_iff {m₁ m₂ : measurable_space α} :
404+
of_measurable_space m₁ ≤ of_measurable_space m₂ ↔ m₁ ≤ m₂ :=
405+
iff.refl _
406+
407+
inductive generate_has (s : set (set α)) : set α → Prop
408+
| basic : ∀t∈s, generate_has t
409+
| empty : generate_has ∅
410+
| compl : ∀{a}, generate_has a → generate_has (-a)
411+
| Union : ∀{f:ℕ → set α}, (∀i j, i ≠ j → f i ∩ f j = ∅) →
412+
(∀i, generate_has (f i)) → generate_has (⋃i, f i)
413+
414+
def generate (s : set (set α)) : dynkin_system α :=
415+
{ dynkin_system .
416+
has := generate_has s,
417+
has_empty := generate_has.empty s,
418+
has_compl := assume a, generate_has.compl,
419+
has_Union := assume f, generate_has.Union }
420+
421+
section internal
422+
parameters {δ : Type*} (d : dynkin_system δ)
423+
424+
lemma has_univ : d.has univ :=
425+
have d.has (- ∅), from d.has_compl d.has_empty,
426+
by simp * at *
427+
428+
lemma has_union {s₁ s₂ : set δ} (h₁ : d.has s₁) (h₂ : d.has s₂) (h : s₁ ∩ s₂ = ∅) : d.has (s₁ ∪ s₂) :=
429+
let f := [s₁, s₂].inth in
430+
have hf0 : f 0 = s₁, from rfl,
431+
have hf1 : f 1 = s₂, from rfl,
432+
have hf2 : ∀n:ℕ, f n.succ.succ = ∅, from assume n, rfl,
433+
have (∀i j, i ≠ j → f i ∩ f j = ∅),
434+
from assume i, i.two_step_induction
435+
(assume j, j.two_step_induction (by simp) (by simp [hf0, hf1, h]) (by simp [hf2]))
436+
(assume j, j.two_step_induction (by simp [hf0, hf1, h]) (by simp) (by simp [hf2]))
437+
(by simp [hf2]),
438+
have eq : s₁ ∪ s₂ = (⋃i, f i),
439+
from subset.antisymm (union_subset (le_supr f 0) (le_supr f 1)) $
440+
Union_subset $ assume i,
441+
match i with
442+
| 0 := subset_union_left _ _
443+
| 1 := subset_union_right _ _
444+
| nat.succ (nat.succ n) := by simp [hf2]
445+
end,
446+
by rw [eq]; exact d.has_Union this (assume i,
447+
match i with
448+
| 0 := h₁
449+
| 1 := h₂
450+
| nat.succ (nat.succ n) := by simp [d.has_empty, hf2]
451+
end)
452+
453+
lemma has_sdiff {s₁ s₂ : set δ} (h₁ : d.has s₁) (h₂ : d.has s₂) (h : s₂ ⊆ s₁) : d.has (s₁ - s₂) :=
454+
have d.has (- (s₂ ∪ -s₁)),
455+
from d.has_compl $ d.has_union h₂ (d.has_compl h₁) $ eq_empty_of_forall_not_mem $
456+
assume x ⟨h₁, h₂⟩, h₂ $ h h₁,
457+
have s₁ - s₂ = - (s₂ ∪ -s₁),
458+
by rw [compl_union, compl_compl, inter_comm]; refl,
459+
by rwa [this]
460+
461+
def to_measurable_space (h_inter : ∀s₁ s₂, d.has s₁ → d.has s₂ → d.has (s₁ ∩ s₂)) :=
462+
{ measurable_space .
463+
is_measurable := d.has,
464+
is_measurable_empty := d.has_empty,
465+
is_measurable_compl := assume s h, d.has_compl h,
466+
is_measurable_Union := assume f hf,
467+
have h_diff : ∀{s₁ s₂}, d.has s₁ → d.has s₂ → d.has (s₁ - s₂),
468+
from assume s₁ s₂ h₁ h₂, h_inter _ _ h₁ (d.has_compl h₂),
469+
have ∀n, d.has (disjointed f n),
470+
from assume n, h_inter _ _ (hf n)
471+
begin
472+
induction n,
473+
case nat.zero {
474+
have h : (⋂ (i : ℕ) (H : i < 0), -f i) = univ,
475+
{ apply eq_univ_of_forall,
476+
simp [mem_Inter, nat.not_lt_zero] },
477+
simp [h, d.has_univ] },
478+
case nat.succ n ih {
479+
have h : (⨅ (i : ℕ) (H : i < n.succ), -f i) = (⨅ (i : ℕ) (H : i < n), -f i) ⊓ - f n,
480+
by simp [nat.lt_succ_iff, infi_or, infi_inf_eq, inf_comm],
481+
change (⋂ (i : ℕ) (H : i < n.succ), -f i) = (⋂ (i : ℕ) (H : i < n), -f i) ∩ - f n at h,
482+
rw [h],
483+
exact h_inter _ _ ih (d.has_compl $ hf _) },
484+
end,
485+
have d.has (⋃n, disjointed f n), from d.has_Union (assume i j, disjoint_disjointed) this,
486+
by rwa [disjointed_Union] at this }
487+
488+
lemma of_measurable_space_to_measurable_space
489+
(h_inter : ∀s₁ s₂, d.has s₁ → d.has s₂ → d.has (s₁ ∩ s₂)) :
490+
of_measurable_space (d.to_measurable_space h_inter) = d :=
491+
dynkin_system_eq $ assume s, iff.refl _
492+
493+
def restrict_on {s : set δ} (h : d.has s) : dynkin_system δ :=
494+
{ dynkin_system .
495+
has := λt, d.has (t ∩ s),
496+
has_empty := by simp [d.has_empty],
497+
has_compl := assume t hts,
498+
have -t ∩ s = (- (t ∩ s)) \ -s,
499+
from set.ext $ assume x, by by_cases x ∈ s; simp [h],
500+
by rw [this]; from d.has_sdiff (d.has_compl hts) (d.has_compl h)
501+
(compl_subset_compl_iff_subset.mpr $ inter_subset_right _ _),
502+
has_Union := assume f hd hf,
503+
begin
504+
rw [inter_comm, inter_distrib_Union_left],
505+
apply d.has_Union,
506+
exact assume i j h,
507+
calc s ∩ f i ∩ (s ∩ f j) = s ∩ s ∩ (f i ∩ f j) : by cc
508+
... = ∅ : by rw [hd i j h]; simp,
509+
intro i, rw [inter_comm], exact hf i
510+
end }
511+
512+
lemma generate_le {s : set (set δ)} (h : ∀t∈s, d.has t) : generate s ≤ d :=
513+
assume t ht,
514+
ht.rec_on h d.has_empty (assume a _ h, d.has_compl h) (assume f hd _ hf, d.has_Union hd hf)
515+
516+
end internal
517+
518+
lemma generate_inter {s : set (set α)}
519+
(hs : ∀t₁ t₂, t₁ ∈ s → t₂ ∈ s → t₁ ∩ t₂ ∈ s) {t₁ t₂ : set α}
520+
(ht₁ : (generate s).has t₁) (ht₂ : (generate s).has t₂) : (generate s).has (t₁ ∩ t₂) :=
521+
have generate s ≤ (generate s).restrict_on ht₂,
522+
from generate_le _ $ assume s₁ hs₁,
523+
have (generate s).has s₁, from generate_has.basic s₁ hs₁,
524+
have generate s ≤ (generate s).restrict_on this,
525+
from generate_le _ $ assume s₂ hs₂, show (generate s).has (s₂ ∩ s₁),
526+
from generate_has.basic _ (hs _ _ hs₂ hs₁),
527+
have (generate s).has (t₂ ∩ s₁), from this _ ht₂,
528+
show (generate s).has (s₁ ∩ t₂), by rwa [inter_comm],
529+
this _ ht₁
530+
531+
lemma generate_from_eq {s : set (set α)}
532+
(hs : ∀t₁ t₂, t₁ ∈ s → t₂ ∈ s → t₁ ∩ t₂ ∈ s) :
533+
generate_from s = (generate s).to_measurable_space (assume t₁ t₂, generate_inter hs) :=
534+
le_antisymm
535+
(generate_from_le $ assume t ht, generate_has.basic t ht)
536+
(of_measurable_space_le_of_measurable_space_iff.mp $
537+
by rw [of_measurable_space_to_measurable_space];
538+
from (generate_le _ $ assume t ht, is_measurable_generate_from ht))
539+
540+
end dynkin_system
541+
542+
lemma induction_on_inter {C : set α → Prop} {s : set (set α)} {m : measurable_space α}
543+
(h_eq : m = generate_from s)
544+
(h_inter : ∀t₁ t₂, t₁ ∈ s → t₂ ∈ s → t₁ ∩ t₂ ∈ s)
545+
(h_empty : C ∅) (h_basic : ∀t∈s, C t) (h_compl : ∀t, m.is_measurable t → C t → C (- t))
546+
(h_union : ∀f:ℕ → set α, (∀i j, i ≠ j → f i ∩ f j = ∅) →
547+
(∀i, m.is_measurable (f i)) → (∀i, C (f i)) → C (⋃i, f i)) :
548+
∀{t}, m.is_measurable t → C t :=
549+
have eq : m.is_measurable = dynkin_system.generate_has s,
550+
by rw [h_eq, dynkin_system.generate_from_eq h_inter]; refl,
551+
assume t ht,
552+
have dynkin_system.generate_has s t, by rwa [eq] at ht,
553+
this.rec_on h_basic h_empty
554+
(assume t ht, h_compl t $ by rw [eq]; exact ht)
555+
(assume f hf ht, h_union f hf $ assume i, by rw [eq]; exact ht _)
556+
557+
end measurable_space

0 commit comments

Comments
 (0)