@@ -7,6 +7,7 @@ Authors: Johannes Hölzl, Mario Carneiro
7
7
import data.prod.tprod
8
8
import group_theory.coset
9
9
import logic.equiv.fin
10
+ import logic.lemmas
10
11
import measure_theory.measurable_space_def
11
12
import order.filter.small_sets
12
13
import order.liminf_limsup
@@ -136,6 +137,12 @@ lemma le_map_comap : m ≤ (m.comap g).map g := (gc_comap_map g).le_u_l _
136
137
137
138
end functors
138
139
140
+ @[simp] lemma map_const {m} (b : β) : measurable_space.map (λ a : α, b) m = ⊤ :=
141
+ eq_top_iff.2 $ by { rintro s hs, by_cases b ∈ s; change measurable_set (preimage _ _); simp [*] }
142
+
143
+ @[simp] lemma comap_const {m} (b : β) : measurable_space.comap (λ a : α, b) m = ⊥ :=
144
+ eq_bot_iff.2 $ by { rintro _ ⟨s, -, rfl⟩, by_cases b ∈ s; simp [*] }
145
+
139
146
lemma comap_generate_from {f : α → β} {s : set (set β)} :
140
147
(generate_from s).comap f = generate_from (preimage f '' s) :=
141
148
le_antisymm
@@ -291,13 +298,15 @@ section constructions
291
298
instance : measurable_space empty := ⊤
292
299
instance : measurable_space punit := ⊤ -- this also works for `unit`
293
300
instance : measurable_space bool := ⊤
301
+ instance Prop.measurable_space : measurable_space Prop := ⊤
294
302
instance : measurable_space ℕ := ⊤
295
303
instance : measurable_space ℤ := ⊤
296
304
instance : measurable_space ℚ := ⊤
297
305
298
306
instance : measurable_singleton_class empty := ⟨λ _, trivial⟩
299
307
instance : measurable_singleton_class punit := ⟨λ _, trivial⟩
300
308
instance : measurable_singleton_class bool := ⟨λ _, trivial⟩
309
+ instance Prop.measurable_singleton_class : measurable_singleton_class Prop := ⟨λ _, trivial⟩
301
310
instance : measurable_singleton_class ℕ := ⟨λ _, trivial⟩
302
311
instance : measurable_singleton_class ℤ := ⟨λ _, trivial⟩
303
312
instance : measurable_singleton_class ℚ := ⟨λ _, trivial⟩
@@ -340,6 +349,15 @@ begin
340
349
exact h,
341
350
end
342
351
352
+ lemma measurable_to_prop {f : α → Prop } (h : measurable_set (f⁻¹' {true})) : measurable f :=
353
+ begin
354
+ refine measurable_to_countable' (λ x, _),
355
+ by_cases hx : x,
356
+ { simpa [hx] using h },
357
+ { simpa only [hx, ←preimage_compl, Prop .compl_singleton, not_true, preimage_singleton_false]
358
+ using h.compl }
359
+ end
360
+
343
361
lemma measurable_find_greatest' {p : α → ℕ → Prop } [∀ x, decidable_pred (p x)]
344
362
{N : ℕ} (hN : ∀ k ≤ N, measurable_set {x | nat.find_greatest (p x) N = k}) :
345
363
measurable (λ x, nat.find_greatest (p x) N) :=
@@ -860,8 +878,38 @@ end sum
860
878
instance {α} {β : α → Type *} [m : Πa, measurable_space (β a)] : measurable_space (sigma β) :=
861
879
⨅a, (m a).map (sigma.mk a)
862
880
881
+ section prop
882
+ variables {p : α → Prop }
883
+
884
+ variables [measurable_space α]
885
+
886
+ @[simp] lemma measurable_set_set_of : measurable_set {a | p a} ↔ measurable p :=
887
+ ⟨λ h, measurable_to_prop $ by simpa only [preimage_singleton_true], λ h,
888
+ by simpa using h (measurable_set_singleton true)⟩
889
+
890
+ @[simp] lemma measurable_mem : measurable (∈ s) ↔ measurable_set s := measurable_set_set_of.symm
891
+
892
+ alias measurable_set_set_of ↔ _ measurable.set_of
893
+ alias measurable_mem ↔ _ measurable_set.mem
894
+
895
+ end prop
863
896
end constructions
864
897
898
+ namespace measurable_space
899
+
900
+ /-- The sigma-algebra generated by a single set `s` is `{∅, s, sᶜ, univ}`. -/
901
+ @[simp] lemma generate_from_singleton (s : set α) :
902
+ generate_from {s} = measurable_space.comap (∈ s) ⊤ :=
903
+ begin
904
+ classical,
905
+ letI : measurable_space α := generate_from {s},
906
+ refine le_antisymm (generate_from_le $ λ t ht, ⟨{true}, trivial, by simp [ht.symm]⟩) _,
907
+ rintro _ ⟨u, -, rfl⟩,
908
+ exact (show measurable_set s, from generate_measurable.basic _ $ mem_singleton s).mem trivial,
909
+ end
910
+
911
+ end measurable_space
912
+
865
913
/-- A map `f : α → β` is called a *measurable embedding* if it is injective, measurable, and sends
866
914
measurable sets to measurable sets. The latter assumption can be replaced with “`f` has measurable
867
915
inverse `g : range f → α`”, see `measurable_embedding.measurable_range_splitting`,
@@ -1052,6 +1100,9 @@ e.to_equiv.image_eq_preimage s
1052
1100
measurable_set (e '' s) ↔ measurable_set s :=
1053
1101
by rw [image_eq_preimage, measurable_set_preimage]
1054
1102
1103
+ @[simp] lemma map_eq (e : α ≃ᵐ β) : measurable_space.map e ‹_› = ‹_› :=
1104
+ e.measurable.le_map.antisymm' $ λ s, e.measurable_set_preimage.1
1105
+
1055
1106
/-- A measurable equivalence is a measurable embedding. -/
1056
1107
protected lemma measurable_embedding (e : α ≃ᵐ β) : measurable_embedding e :=
1057
1108
{ injective := e.injective,
@@ -1277,12 +1328,41 @@ def sum_compl {s : set α} [decidable_pred s] (hs : measurable_set s) : s ⊕ (s
1277
1328
measurable_to_fun := by {apply measurable.sum_elim; exact measurable_subtype_coe},
1278
1329
measurable_inv_fun := measurable.dite measurable_inl measurable_inr hs }
1279
1330
1331
+ /-- Convert a measurable involutive function `f` to a measurable permutation with
1332
+ `to_fun = inv_fun = f`. See also `function.involutive.to_perm`. -/
1333
+ @[simps to_equiv] def of_involutive (f : α → α) (hf : involutive f) (hf' : measurable f) : α ≃ᵐ α :=
1334
+ { measurable_to_fun := hf',
1335
+ measurable_inv_fun := hf',
1336
+ ..hf.to_perm _ }
1337
+
1338
+ @[simp] lemma of_involutive_apply (f : α → α) (hf : involutive f) (hf' : measurable f) (a : α) :
1339
+ of_involutive f hf hf' a = f a := rfl
1340
+
1341
+ @[simp] lemma of_involutive_symm (f : α → α) (hf : involutive f) (hf' : measurable f) :
1342
+ (of_involutive f hf hf').symm = of_involutive f hf hf' := rfl
1343
+
1280
1344
end measurable_equiv
1281
1345
1282
1346
namespace measurable_embedding
1283
1347
1284
1348
variables [measurable_space α] [measurable_space β] [measurable_space γ] {f : α → β} {g : β → α}
1285
1349
1350
+ @[simp] lemma comap_eq (hf : measurable_embedding f) : measurable_space.comap f ‹_› = ‹_› :=
1351
+ hf.measurable.comap_le.antisymm $ λ s h,
1352
+ ⟨_, hf.measurable_set_image' h, hf.injective.preimage_image _⟩
1353
+
1354
+ lemma iff_comap_eq :
1355
+ measurable_embedding f ↔
1356
+ injective f ∧ measurable_space.comap f ‹_› = ‹_› ∧ measurable_set (range f) :=
1357
+ ⟨λ hf, ⟨hf.injective, hf.comap_eq, hf.measurable_set_range⟩, λ hf,
1358
+ { injective := hf.1 ,
1359
+ measurable := by { rw ←hf.2 .1 , exact comap_measurable f },
1360
+ measurable_set_image' := begin
1361
+ rw ←hf.2 .1 ,
1362
+ rintro _ ⟨s, hs, rfl⟩,
1363
+ simpa only [image_preimage_eq_inter_range] using hs.inter hf.2 .2 ,
1364
+ end }⟩
1365
+
1286
1366
/-- A set is equivalent to its image under a function `f` as measurable spaces,
1287
1367
if `f` is a measurable embedding -/
1288
1368
noncomputable def equiv_image (s : set α) (hf : measurable_embedding f) :
@@ -1377,6 +1457,19 @@ end
1377
1457
1378
1458
end measurable_embedding
1379
1459
1460
+ lemma measurable_space.comap_compl {m' : measurable_space β} [boolean_algebra β]
1461
+ (h : measurable (compl : β → β)) (f : α → β) :
1462
+ measurable_space.comap (λ a, (f a)ᶜ) infer_instance = measurable_space.comap f infer_instance :=
1463
+ begin
1464
+ rw ←measurable_space.comap_comp,
1465
+ congr',
1466
+ exact (measurable_equiv.of_involutive _ compl_involutive h).measurable_embedding.comap_eq,
1467
+ end
1468
+
1469
+ @[simp] lemma measurable_space.comap_not (p : α → Prop ) :
1470
+ measurable_space.comap (λ a, ¬ p a) infer_instance = measurable_space.comap p infer_instance :=
1471
+ measurable_space.comap_compl (λ _ _, trivial) _
1472
+
1380
1473
section countably_generated
1381
1474
1382
1475
namespace measurable_space
0 commit comments