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

Commit cb7fb9b

Browse files
committed
feat(topology): basic setup for measurable spaces
1 parent 51042cd commit cb7fb9b

File tree

1 file changed

+214
-0
lines changed

1 file changed

+214
-0
lines changed

topology/measurable_space.lean

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
/-
2+
Copyright (c) 2017 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+
Measurable spaces -- σ-algberas
7+
-/
8+
import data.set order.galois_connection
9+
open classical set lattice
10+
local attribute [instance] decidable_inhabited prop_decidable
11+
12+
universes u v w x
13+
14+
structure measurable_space (α : Type u) :=
15+
(is_measurable : set α → Prop)
16+
(is_measurable_empty : is_measurable ∅)
17+
(is_measurable_compl : ∀s, is_measurable s → is_measurable (- s))
18+
(is_measurable_Union : ∀f:ℕ → set α, (∀i, is_measurable (f i)) → is_measurable (⋃i, f i))
19+
20+
attribute [class] measurable_space
21+
22+
variables {α : Type u} {β : Type v} {γ : Type w} {ι : Sort x} {s t u : set α}
23+
24+
section
25+
variable [m : measurable_space α]
26+
include m
27+
28+
def is_measurable : set α → Prop := m.is_measurable
29+
lemma is_measurable_empty : is_measurable (∅ : set α) := m.is_measurable_empty
30+
lemma is_measurable_compl : is_measurable s → is_measurable (-s) :=
31+
m.is_measurable_compl s
32+
lemma is_measurable_Union {f : ℕ → set α} : (∀i, is_measurable (f i)) → is_measurable (⋃i, f i) :=
33+
m.is_measurable_Union f
34+
35+
end
36+
37+
lemma measurable_space_eq :
38+
∀{m₁ m₂ : measurable_space α}, (∀s:set α, m₁.is_measurable s ↔ m₂.is_measurable s) → m₁ = m₂
39+
| ⟨s₁, _, _, _⟩ ⟨s₂, _, _, _⟩ h :=
40+
have s₁ = s₂, from funext $ assume x, propext $ h x,
41+
by subst this
42+
43+
namespace measurable_space
44+
section complete_lattice
45+
46+
instance : partial_order (measurable_space α) :=
47+
{ partial_order .
48+
le := λm₁ m₂, m₁.is_measurable ≤ m₂.is_measurable,
49+
le_refl := assume a b, le_refl _,
50+
le_trans := assume a b c, le_trans,
51+
le_antisymm := assume a b h₁ h₂, measurable_space_eq $ assume s, ⟨h₁ s, h₂ s⟩ }
52+
53+
instance : has_top (measurable_space α) :=
54+
⟨{measurable_space .
55+
is_measurable := λs, true,
56+
is_measurable_empty := trivial,
57+
is_measurable_compl := assume s hs, trivial,
58+
is_measurable_Union := assume f hf, trivial }⟩
59+
60+
instance : has_bot (measurable_space α) :=
61+
⟨{measurable_space .
62+
is_measurable := λs, s = ∅ ∨ s = univ,
63+
is_measurable_empty := or.inl rfl,
64+
is_measurable_compl := by simp [or_imp_iff_and_imp] {contextual := tt},
65+
is_measurable_Union := assume f hf, by_cases
66+
(assume h : ∃i, f i = univ,
67+
let ⟨i, hi⟩ := h in
68+
or.inr $ eq_univ_of_univ_subset $ hi ▸ le_supr f i)
69+
(assume h : ¬ ∃i, f i = univ,
70+
or.inl $ eq_empty_of_subset_empty $ Union_subset $ assume i,
71+
(hf i).elim (by simp {contextual := tt}) (assume hi, false.elim $ h ⟨i, hi⟩)) }⟩
72+
73+
instance : has_inf (measurable_space α) :=
74+
⟨λm₁ m₂, {measurable_space .
75+
is_measurable := λs:set α, m₁.is_measurable s ∧ m₂.is_measurable s,
76+
is_measurable_empty := ⟨m₁.is_measurable_empty, m₂.is_measurable_empty⟩,
77+
is_measurable_compl := assume s ⟨h₁, h₂⟩, ⟨m₁.is_measurable_compl s h₁, m₂.is_measurable_compl s h₂⟩,
78+
is_measurable_Union := assume f hf,
79+
⟨m₁.is_measurable_Union f (λi, (hf i).left), m₂.is_measurable_Union f (λi, (hf i).right)⟩ }⟩
80+
81+
instance : has_Inf (measurable_space α) :=
82+
⟨λx, {measurable_space .
83+
is_measurable := λs:set α, ∀m:measurable_space α, m ∈ x → m.is_measurable s,
84+
is_measurable_empty := assume m hm, m.is_measurable_empty,
85+
is_measurable_compl := assume s hs m hm, m.is_measurable_compl s $ hs _ hm,
86+
is_measurable_Union := assume f hf m hm, m.is_measurable_Union f $ assume i, hf _ _ hm }⟩
87+
88+
protected lemma le_Inf {s : set (measurable_space α)} {m : measurable_space α}
89+
(h : ∀m'∈s, m ≤ m') : m ≤ Inf s :=
90+
assume s hs m hm, h m hm s hs
91+
92+
protected lemma Inf_le {s : set (measurable_space α)} {m : measurable_space α}
93+
(h : m ∈ s) : Inf s ≤ m :=
94+
assume s hs, hs m h
95+
96+
instance : complete_lattice (measurable_space α) :=
97+
{ measurable_space.partial_order with
98+
sup := λa b, Inf {x | a ≤ x ∧ b ≤ x},
99+
le_sup_left := assume a b, measurable_space.le_Inf $ assume x, assume h : a ≤ x ∧ b ≤ x, h.left,
100+
le_sup_right := assume a b, measurable_space.le_Inf $ assume x, assume h : a ≤ x ∧ b ≤ x, h.right,
101+
sup_le := assume a b c h₁ h₂,
102+
measurable_space.Inf_le $ show c ∈ {x | a ≤ x ∧ b ≤ x}, from ⟨h₁, h₂⟩,
103+
inf := (⊓),
104+
le_inf := assume a b h h₁ h₂ s hs, ⟨h₁ s hs, h₂ s hs⟩,
105+
inf_le_left := assume a b s ⟨h₁, h₂⟩, h₁,
106+
inf_le_right := assume a b s ⟨h₁, h₂⟩, h₂,
107+
top := ⊤,
108+
le_top := assume a t ht, trivial,
109+
bot := ⊥,
110+
bot_le := assume a s hs, hs.elim
111+
(assume h, h.symm ▸ a.is_measurable_empty)
112+
(assume h, begin rw [h, ←compl_empty], exact a.is_measurable_compl _ a.is_measurable_empty end),
113+
Sup := λtt, Inf {t | ∀t'∈tt, t' ≤ t},
114+
le_Sup := assume s f h, measurable_space.le_Inf $ assume t ht, ht _ h,
115+
Sup_le := assume s f h, measurable_space.Inf_le $ assume t ht, h _ ht,
116+
Inf := Inf,
117+
le_Inf := assume s a, measurable_space.le_Inf,
118+
Inf_le := assume s a, measurable_space.Inf_le }
119+
120+
instance : inhabited (measurable_space α) := ⟨⊤⟩
121+
122+
end complete_lattice
123+
124+
section functors
125+
variables {m m₁ m₂ : measurable_space α} {m' : measurable_space β} {f : α → β} {g : β → α}
126+
127+
protected def map (f : α → β) (m : measurable_space α) : measurable_space β :=
128+
{measurable_space .
129+
is_measurable := λs, m.is_measurable $ f ⁻¹' s,
130+
is_measurable_empty := m.is_measurable_empty,
131+
is_measurable_compl := assume s hs, m.is_measurable_compl _ hs,
132+
is_measurable_Union := assume f hf, by rw [preimage_Union]; exact m.is_measurable_Union _ hf }
133+
134+
@[simp] lemma map_id : m.map id = m :=
135+
measurable_space_eq $ assume s, iff.refl _
136+
137+
@[simp] lemma map_comp {f : α → β} {g : β → γ} : (m.map f).map g = m.map (g ∘ f) :=
138+
measurable_space_eq $ assume s, by refl
139+
140+
protected def comap (f : α → β) (m : measurable_space β) : measurable_space α :=
141+
{measurable_space .
142+
is_measurable := λs, ∃s', m.is_measurable s' ∧ s = f ⁻¹' s',
143+
is_measurable_empty := ⟨∅, m.is_measurable_empty, rfl⟩,
144+
is_measurable_compl := assume s ⟨s', h₁, h₂⟩, ⟨-s', m.is_measurable_compl _ h₁, h₂.symm ▸ rfl⟩,
145+
is_measurable_Union := assume s hs,
146+
let ⟨s', hs'⟩ := axiom_of_choice hs in
147+
have ∀i, s i = f ⁻¹' s' i, from assume i, (hs' i).right,
148+
⟨⋃i, s' i, m.is_measurable_Union _ (λi, (hs' i).left), by simp [this] ⟩ }
149+
150+
@[simp] lemma comap_id : m.comap id = m :=
151+
measurable_space_eq $ assume s, ⟨assume ⟨s', hs', h⟩, h.symm ▸ hs', assume h, ⟨s, h, rfl⟩⟩
152+
153+
@[simp] lemma comap_comp {f : β → α} {g : γ → β} : (m.comap f).comap g = m.comap (f ∘ g) :=
154+
measurable_space_eq $ assume s,
155+
⟨assume ⟨t, ⟨u, h, hu⟩, ht⟩, ⟨u, h, ht.symm ▸ hu.symm ▸ rfl⟩,
156+
assume ⟨t, h, ht⟩, ⟨f ⁻¹' t, ⟨_, h, rfl⟩, ht⟩⟩
157+
158+
lemma comap_le_iff_le_map {f : α → β} : m'.comap f ≤ m ↔ m' ≤ m.map f :=
159+
⟨assume h s hs, h _ ⟨_, hs, rfl⟩, assume h s ⟨t, ht, heq⟩, heq.symm ▸ h _ ht⟩
160+
161+
lemma gc_comap_map (f : α → β) :
162+
galois_connection (measurable_space.comap f) (measurable_space.map f) :=
163+
assume f g, comap_le_iff_le_map
164+
165+
lemma map_mono (h : m₁ ≤ m₂) : m₁.map f ≤ m₂.map f := (gc_comap_map f).monotone_u h
166+
lemma monotone_map : monotone (measurable_space.map f) := assume a b h, map_mono h
167+
lemma comap_mono (h : m₁ ≤ m₂) : m₁.comap g ≤ m₂.comap g := (gc_comap_map g).monotone_l h
168+
lemma monotone_comap : monotone (measurable_space.comap g) := assume a b h, comap_mono h
169+
170+
@[simp] lemma comap_bot : (⊥:measurable_space α).comap g = ⊥ := (gc_comap_map g).l_bot
171+
@[simp] lemma comap_sup : (m₁ ⊔ m₂).comap g = m₁.comap g ⊔ m₂.comap g := (gc_comap_map g).l_sup
172+
@[simp] lemma comap_supr {m : ι → measurable_space α} :(⨆i, m i).comap g = (⨆i, (m i).comap g) :=
173+
(gc_comap_map g).l_supr
174+
175+
@[simp] lemma map_top : (⊤:measurable_space α).map f = ⊤ := (gc_comap_map f).u_top
176+
@[simp] lemma map_inf : (m₁ ⊓ m₂).map f = m₁.map f ⊓ m₂.map f := (gc_comap_map f).u_inf
177+
@[simp] lemma map_infi {m : ι → measurable_space α} : (⨅i, m i).map f = (⨅i, (m i).map f) :=
178+
(gc_comap_map f).u_infi
179+
180+
lemma comap_map_le : (m.map f).comap f ≤ m := (gc_comap_map f).decreasing_l_u _
181+
lemma le_map_comap : m ≤ (m.comap g).map g := (gc_comap_map g).increasing_u_l _
182+
183+
end functors
184+
185+
end measurable_space
186+
187+
section measurable_functions
188+
189+
def measurable [m₁ : measurable_space α] [m₂ : measurable_space β] {f : α → β} := m₂ ≤ m₁.map f
190+
191+
192+
end measurable_functions
193+
194+
section constructions
195+
196+
instance : measurable_space empty := ⊤
197+
instance : measurable_space unit := ⊤
198+
instance : measurable_space bool := ⊤
199+
instance : measurable_space ℕ := ⊤
200+
instance : measurable_space ℤ := ⊤
201+
202+
instance {p : α → Prop} [m : measurable_space α] : measurable_space (subtype p) :=
203+
m.comap subtype.val
204+
205+
instance [m₁ : measurable_space α] [m₂ : measurable_space β] : measurable_space (α × β) :=
206+
m₁.comap prod.fst ⊔ m₂.comap prod.snd
207+
208+
instance [m₁ : measurable_space α] [m₂ : measurable_space β] : measurable_space (α ⊕ β) :=
209+
m₁.map sum.inl ⊓ m₂.map sum.inr
210+
211+
instance {β : α → Type v} [m : Πa, measurable_space (β a)] : measurable_space (sigma β) :=
212+
⨅a, (m a).map (sigma.mk a)
213+
214+
end constructions

0 commit comments

Comments
 (0)