@@ -67,7 +67,7 @@ measurable space, σ-algebra, measurable function, measurable equivalence, dynki
67
67
π-λ theorem, π-system
68
68
-/
69
69
70
- open set encodable function
70
+ open set encodable function equiv
71
71
open_locale classical filter
72
72
73
73
@@ -157,6 +157,20 @@ lemma is_measurable.Inter [encodable β] {f : β → set α} (h : ∀ b, is_meas
157
157
is_measurable.compl_iff.1 $
158
158
by { rw compl_Inter, exact is_measurable.Union (λ b, (h b).compl) }
159
159
160
+ section fintype
161
+
162
+ local attribute [instance] fintype.encodable
163
+
164
+ lemma is_measurable.Union_fintype [fintype β] {f : β → set α} (h : ∀ b, is_measurable (f b)) :
165
+ is_measurable (⋃ b, f b) :=
166
+ is_measurable.Union h
167
+
168
+ lemma is_measurable.Inter_fintype [fintype β] {f : β → set α} (h : ∀ b, is_measurable (f b)) :
169
+ is_measurable (⋂ b, f b) :=
170
+ is_measurable.Inter h
171
+
172
+ end fintype
173
+
160
174
lemma is_measurable.bInter {f : β → set α} {s : set β} (hs : countable s)
161
175
(h : ∀ b ∈ s, is_measurable (f b)) : is_measurable (⋂ b ∈ s, f b) :=
162
176
is_measurable.compl_iff.1 $
@@ -201,6 +215,10 @@ disjointed_induct (h n) (assume t i ht, is_measurable.diff ht $ h _)
201
215
@[simp] lemma is_measurable.const (p : Prop ) : is_measurable {a : α | p} :=
202
216
by { by_cases p; simp [h, is_measurable.empty]; apply is_measurable.univ }
203
217
218
+ /-- Every set has a measurable superset. Declare this as local instance as needed. -/
219
+ lemma nonempty_measurable_superset (s : set α) : nonempty { t // s ⊆ t ∧ is_measurable t} :=
220
+ ⟨⟨univ, subset_univ s, is_measurable.univ⟩⟩
221
+
204
222
end
205
223
206
224
@[ext] lemma measurable_space.ext : ∀ {m₁ m₂ : measurable_space α},
@@ -527,7 +545,7 @@ section constructions
527
545
variables [measurable_space α] [measurable_space β] [measurable_space γ]
528
546
529
547
instance : measurable_space empty := ⊤
530
- instance : measurable_space unit := ⊤
548
+ instance : measurable_space punit := ⊤ -- this also works for `unit`
531
549
instance : measurable_space bool := ⊤
532
550
instance : measurable_space ℕ := ⊤
533
551
instance : measurable_space ℤ := ⊤
@@ -716,21 +734,68 @@ instance measurable_space.pi [m : Π a, measurable_space (π a)] : measurable_sp
716
734
717
735
variables [Π a, measurable_space (π a)] [measurable_space γ]
718
736
737
+ lemma measurable_pi_iff {g : α → Π a, π a} :
738
+ measurable g ↔ ∀ a, measurable (λ x, g x a) :=
739
+ by simp_rw [measurable_iff_comap_le, measurable_space.pi, measurable_space.comap_supr,
740
+ measurable_space.comap_comp, function.comp, supr_le_iff]
741
+
719
742
lemma measurable_pi_apply (a : δ) : measurable (λ f : Π a, π a, f a) :=
720
743
measurable.of_comap_le $ le_supr _ a
721
744
745
+ lemma measurable.eval {a : δ} {g : α → Π a, π a}
746
+ (hg : measurable g) : measurable (λ x, g x a) :=
747
+ (measurable_pi_apply a).comp hg
748
+
722
749
lemma measurable_pi_lambda (f : α → Π a, π a) (hf : ∀ a, measurable (λ c, f c a)) :
723
750
measurable f :=
724
- measurable.of_le_map $ supr_le $ assume a, measurable_space.comap_le_iff_le_map. 2 (hf a)
751
+ measurable_pi_iff.mpr hf
725
752
726
- lemma is_measurable_pi {s : set δ} {t : Π i : δ, set (π i)} (hs : countable s)
753
+ /-- The function `update f a : π a → Π a, π a` is always measurable.
754
+ This doesn't require `f` to be measurable.
755
+ This should not be confused with the statement that `update f a x` is measurable. -/
756
+ lemma measurable_update (f : Π (a : δ), π a) {a : δ} : measurable (update f a) :=
757
+ begin
758
+ apply measurable_pi_lambda,
759
+ intro x, by_cases hx : x = a,
760
+ { cases hx, convert measurable_id, ext, simp },
761
+ simp_rw [update_noteq hx], apply measurable_const,
762
+ end
763
+
764
+ /- Even though we cannot use projection notation, we still keep a dot to be consistent with similar
765
+ lemmas, like `is_measurable.prod`. -/
766
+ lemma is_measurable.pi {s : set δ} {t : Π i : δ, set (π i)} (hs : countable s)
727
767
(ht : ∀ i ∈ s, is_measurable (t i)) :
728
768
is_measurable (s.pi t) :=
769
+ by { rw [pi_def], exact is_measurable.bInter hs (λ i hi, measurable_pi_apply _ (ht i hi)) }
770
+
771
+ lemma is_measurable.pi_univ [encodable δ] {t : Π i : δ, set (π i)}
772
+ (ht : ∀ i, is_measurable (t i)) : is_measurable (pi univ t) :=
773
+ is_measurable.pi (countable_encodable _) (λ i _, ht i)
774
+
775
+ lemma is_measurable_pi_of_nonempty {s : set δ} {t : Π i, set (π i)} (hs : countable s)
776
+ (h : (pi s t).nonempty) : is_measurable (pi s t) ↔ ∀ i ∈ s, is_measurable (t i) :=
777
+ begin
778
+ rcases h with ⟨f, hf⟩, refine ⟨λ hst i hi, _, is_measurable.pi hs⟩,
779
+ convert measurable_update f hst, rw [update_preimage_pi hi], exact λ j hj _, hf j hj
780
+ end
781
+
782
+ lemma is_measurable_pi {s : set δ} {t : Π i, set (π i)} (hs : countable s) :
783
+ is_measurable (pi s t) ↔ (∀ i ∈ s, is_measurable (t i)) ∨ pi s t = ∅ :=
729
784
begin
730
- rw [pi_def],
731
- exact is_measurable.bInter hs (λ i hi, measurable_pi_apply _ (ht i hi))
785
+ cases (pi s t).eq_empty_or_nonempty with h h,
786
+ { simp [h] },
787
+ { simp [is_measurable_pi_of_nonempty hs, h, ← not_nonempty_iff_eq_empty] }
732
788
end
733
789
790
+ section fintype
791
+
792
+ local attribute [instance] fintype.encodable
793
+
794
+ lemma is_measurable.pi_fintype [fintype δ] {s : set δ} {t : Π i, set (π i)}
795
+ (ht : ∀ i ∈ s, is_measurable (t i)) : is_measurable (pi s t) :=
796
+ is_measurable.pi (countable_encodable _) ht
797
+
798
+ end fintype
734
799
end pi
735
800
736
801
instance {α β} [m₁ : measurable_space α] [m₂ : measurable_space β] : measurable_space (α ⊕ β) :=
@@ -801,6 +866,9 @@ lemma coe_eq (e : α ≃ᵐ β) : (e : α → β) = e.to_equiv := rfl
801
866
protected lemma measurable (e : α ≃ᵐ β) : measurable (e : α → β) :=
802
867
e.measurable_to_fun
803
868
869
+ @[simp] lemma coe_mk (e : α ≃ β) (h1 : measurable e) (h2 : measurable e.symm) :
870
+ ((⟨e, h1, h2⟩ : α ≃ᵐ β) : α → β) = e := rfl
871
+
804
872
/-- Any measurable space is equivalent to itself. -/
805
873
def refl (α : Type *) [measurable_space α] : α ≃ᵐ α :=
806
874
{ to_equiv := equiv.refl α,
@@ -821,6 +889,9 @@ instance : inhabited (α ≃ᵐ α) := ⟨refl α⟩
821
889
measurable_to_fun := ab.measurable_inv_fun,
822
890
measurable_inv_fun := ab.measurable_to_fun }
823
891
892
+ @[simp] lemma coe_symm_mk (e : α ≃ β) (h1 : measurable e) (h2 : measurable e.symm) :
893
+ ((⟨e, h1, h2⟩ : α ≃ᵐ β).symm : β → α) = e.symm := rfl
894
+
824
895
/-- Equal measurable spaces are equivalent. -/
825
896
protected def cast {α β} [i₁ : measurable_space α] [i₂ : measurable_space β]
826
897
(h : α = β) (hi : i₁ == i₂) : α ≃ᵐ β :=
@@ -838,27 +909,27 @@ iff.intro
838
909
839
910
/-- Products of equivalent measurable spaces are equivalent. -/
840
911
def prod_congr (ab : α ≃ᵐ β) (cd : γ ≃ᵐ δ) : α × γ ≃ᵐ β × δ :=
841
- { to_equiv := equiv. prod_congr ab.to_equiv cd.to_equiv,
912
+ { to_equiv := prod_congr ab.to_equiv cd.to_equiv,
842
913
measurable_to_fun := (ab.measurable_to_fun.comp measurable_id.fst).prod_mk
843
914
(cd.measurable_to_fun.comp measurable_id.snd),
844
915
measurable_inv_fun := (ab.measurable_inv_fun.comp measurable_id.fst).prod_mk
845
916
(cd.measurable_inv_fun.comp measurable_id.snd) }
846
917
847
918
/-- Products of measurable spaces are symmetric. -/
848
919
def prod_comm : α × β ≃ᵐ β × α :=
849
- { to_equiv := equiv. prod_comm α β,
920
+ { to_equiv := prod_comm α β,
850
921
measurable_to_fun := measurable_id.snd.prod_mk measurable_id.fst,
851
922
measurable_inv_fun := measurable_id.snd.prod_mk measurable_id.fst }
852
923
853
924
/-- Products of measurable spaces are associative. -/
854
925
def prod_assoc : (α × β) × γ ≃ᵐ α × (β × γ) :=
855
- { to_equiv := equiv. prod_assoc α β γ,
926
+ { to_equiv := prod_assoc α β γ,
856
927
measurable_to_fun := measurable_fst.fst.prod_mk $ measurable_fst.snd.prod_mk measurable_snd,
857
928
measurable_inv_fun := (measurable_fst.prod_mk measurable_snd.fst).prod_mk measurable_snd.snd }
858
929
859
930
/-- Sums of measurable spaces are symmetric. -/
860
931
def sum_congr (ab : α ≃ᵐ β) (cd : γ ≃ᵐ δ) : α ⊕ γ ≃ᵐ β ⊕ δ :=
861
- { to_equiv := equiv. sum_congr ab.to_equiv cd.to_equiv,
932
+ { to_equiv := sum_congr ab.to_equiv cd.to_equiv,
862
933
measurable_to_fun :=
863
934
begin
864
935
cases ab with ab' abm, cases ab', cases cd with cd' cdm, cases cd',
@@ -898,7 +969,7 @@ noncomputable def set.image (f : α → β) (s : set α) (hf : injective f)
898
969
measurable_to_fun := (hfm.comp measurable_id.subtype_coe).subtype_mk,
899
970
measurable_inv_fun :=
900
971
begin
901
- rintro t ⟨u, hu, rfl⟩, simp [preimage_preimage, equiv. set.image_symm_preimage hf],
972
+ rintro t ⟨u, hu, rfl⟩, simp [preimage_preimage, set.image_symm_preimage hf],
902
973
exact measurable_subtype_coe (hfi u hu)
903
974
end }
904
975
@@ -948,7 +1019,7 @@ def set.range_inr : (range sum.inr : set (α ⊕ β)) ≃ᵐ β :=
948
1019
/-- Products distribute over sums (on the right) as measurable spaces. -/
949
1020
def sum_prod_distrib (α β γ) [measurable_space α] [measurable_space β] [measurable_space γ] :
950
1021
(α ⊕ β) × γ ≃ᵐ (α × γ) ⊕ (β × γ) :=
951
- { to_equiv := equiv. sum_prod_distrib α β γ,
1022
+ { to_equiv := sum_prod_distrib α β γ,
952
1023
measurable_to_fun :=
953
1024
begin
954
1025
refine measurable_of_measurable_union_cover
@@ -986,6 +1057,17 @@ def sum_prod_sum (α β γ δ)
986
1057
(α ⊕ β) × (γ ⊕ δ) ≃ᵐ ((α × γ) ⊕ (α × δ)) ⊕ ((β × γ) ⊕ (β × δ)) :=
987
1058
(sum_prod_distrib _ _ _).trans $ sum_congr (prod_sum_distrib _ _ _) (prod_sum_distrib _ _ _)
988
1059
1060
+ variables {π π' : δ' → Type *} [∀ x, measurable_space (π x)] [∀ x, measurable_space (π' x)]
1061
+
1062
+ /-- A family of measurable equivalences `Π a, β₁ a ≃ᵐ β₂ a` generates a measurable equivalence
1063
+ between `Π a, β₁ a` and `Π a, β₂ a`. -/
1064
+ def Pi_congr_right (e : Π a, π a ≃ᵐ π' a) : (Π a, π a) ≃ᵐ (Π a, π' a) :=
1065
+ { to_equiv := Pi_congr_right (λ a, (e a).to_equiv),
1066
+ measurable_to_fun :=
1067
+ measurable_pi_lambda _ (λ i, (e i).measurable_to_fun.comp (measurable_pi_apply i)),
1068
+ measurable_inv_fun :=
1069
+ measurable_pi_lambda _ (λ i, (e i).measurable_inv_fun.comp (measurable_pi_apply i)) }
1070
+
989
1071
end measurable_equiv
990
1072
991
1073
/-- A pi-system is a collection of subsets of `α` that is closed under intersections of sets that
0 commit comments