@@ -60,7 +60,7 @@ measurable space, σ-algebra, measurable function, measurable equivalence, dynki
60
60
-/
61
61
62
62
open set encodable function equiv
63
- open_locale classical filter measure_theory
63
+ open_locale filter measure_theory
64
64
65
65
66
66
variables {α β γ δ δ' : Type *} {ι : Sort *} {s t u : set α}
@@ -283,6 +283,13 @@ instance : measurable_space ℕ := ⊤
283
283
instance : measurable_space ℤ := ⊤
284
284
instance : measurable_space ℚ := ⊤
285
285
286
+ instance : measurable_singleton_class empty := ⟨λ _, trivial⟩
287
+ instance : measurable_singleton_class punit := ⟨λ _, trivial⟩
288
+ instance : measurable_singleton_class bool := ⟨λ _, trivial⟩
289
+ instance : measurable_singleton_class ℕ := ⟨λ _, trivial⟩
290
+ instance : measurable_singleton_class ℤ := ⟨λ _, trivial⟩
291
+ instance : measurable_singleton_class ℚ := ⟨λ _, trivial⟩
292
+
286
293
lemma measurable_to_encodable [measurable_space α] [encodable α] {f : β → α}
287
294
(h : ∀ y, measurable_set (f ⁻¹' {f y})) :
288
295
measurable f :=
@@ -308,12 +315,13 @@ measurable_from_top
308
315
lemma measurable_to_nat {f : α → ℕ} : (∀ y, measurable_set (f ⁻¹' {f y})) → measurable f :=
309
316
measurable_to_encodable
310
317
311
- lemma measurable_find_greatest' {p : α → ℕ → Prop }
318
+ lemma measurable_find_greatest' {p : α → ℕ → Prop } [∀ x, decidable_pred (p x)]
312
319
{N : ℕ} (hN : ∀ k ≤ N, measurable_set {x | nat.find_greatest (p x) N = k}) :
313
320
measurable (λ x, nat.find_greatest (p x) N) :=
314
321
measurable_to_nat $ λ x, hN _ N.find_greatest_le
315
322
316
- lemma measurable_find_greatest {p : α → ℕ → Prop } {N} (hN : ∀ k ≤ N, measurable_set {x | p x k}) :
323
+ lemma measurable_find_greatest {p : α → ℕ → Prop } [∀ x, decidable_pred (p x)]
324
+ {N} (hN : ∀ k ≤ N, measurable_set {x | p x k}) :
317
325
measurable (λ x, nat.find_greatest (p x) N) :=
318
326
begin
319
327
refine measurable_find_greatest' (λ k hk, _),
@@ -322,8 +330,8 @@ begin
322
330
measurable_set.Inter_Prop, measurable_set.compl, hN]; try { intros } }
323
331
end
324
332
325
- lemma measurable_find {p : α → ℕ → Prop } (hp : ∀ x, ∃ N, p x N)
326
- (hm : ∀ k, measurable_set {x | p x k}) :
333
+ lemma measurable_find {p : α → ℕ → Prop } [ ∀ x, decidable_pred ( p x)]
334
+ (hp : ∀ x, ∃ N, p x N) ( hm : ∀ k, measurable_set {x | p x k}) :
327
335
measurable (λ x, nat.find (hp x)) :=
328
336
begin
329
337
refine measurable_to_nat (λ x, _),
@@ -557,7 +565,10 @@ lemma measurable_set_swap_iff {s : set (α × β)} :
557
565
measurable_set (prod.swap ⁻¹' s) ↔ measurable_set s :=
558
566
⟨λ hs, by { convert measurable_swap hs, ext ⟨x, y⟩, refl }, λ hs, measurable_swap hs⟩
559
567
560
- lemma measurable_from_prod_encodable [encodable β] [measurable_singleton_class β]
568
+ omit m
569
+
570
+ lemma measurable_from_prod_encodable
571
+ [measurable_space α] [encodable β] [measurable_singleton_class β]
561
572
{f : α × β → γ} (hf : ∀ y, measurable (λ x, f (x, y))) :
562
573
measurable f :=
563
574
begin
@@ -569,6 +580,47 @@ begin
569
580
exact measurable_set.Union (λ y, (hf y hs).prod (measurable_set_singleton y))
570
581
end
571
582
583
+ /-- A piecewise function on countably many pieces is measurable if all the data is measurable. -/
584
+ @[measurability]
585
+ lemma measurable.find {m : measurable_space α}
586
+ {f : ℕ → α → β} {p : ℕ → α → Prop } [∀ n, decidable_pred (p n)]
587
+ (hf : ∀ n, measurable (f n)) (hp : ∀ n, measurable_set {x | p n x}) (h : ∀ x, ∃ n, p n x) :
588
+ measurable (λ x, f (nat.find (h x)) x) :=
589
+ begin
590
+ have : measurable (λ (p : α × ℕ), f p.2 p.1 ) := measurable_from_prod_encodable (λ n, hf n),
591
+ exact this.comp (measurable.prod_mk measurable_id (measurable_find h hp)),
592
+ end
593
+
594
+ /-- Given countably many disjoint measurable sets `t n` and countably many measurable
595
+ functions `g n`, one can construct a measurable function that coincides with `g n` on `t n`. -/
596
+ lemma exists_measurable_piecewise_nat {m : measurable_space α} (t : ℕ → set β)
597
+ (t_meas : ∀ n, measurable_set (t n)) (t_disj : pairwise (disjoint on t))
598
+ (g : ℕ → β → α) (hg : ∀ n, measurable (g n)) :
599
+ ∃ f : β → α, measurable f ∧ (∀ n x, x ∈ t n → f x = g n x) :=
600
+ begin
601
+ classical,
602
+ let p : ℕ → β → Prop := λ n x, x ∈ t n ∪ (⋃ k, t k)ᶜ,
603
+ have M : ∀ n, measurable_set {x | p n x} :=
604
+ λ n, (t_meas n).union (measurable_set.compl (measurable_set.Union t_meas)),
605
+ have P : ∀ x, ∃ n, p n x,
606
+ { assume x,
607
+ by_cases H : ∀ (i : ℕ), x ∉ t i,
608
+ { exact ⟨0 , or.inr (by simpa only [mem_Inter, compl_Union] using H)⟩ },
609
+ { simp only [not_forall, not_not_mem] at H,
610
+ rcases H with ⟨n, hn⟩,
611
+ exact ⟨n, or.inl hn⟩ } },
612
+ refine ⟨λ x, g (nat.find (P x)) x, measurable.find hg M P, _⟩,
613
+ assume n x hx,
614
+ have : x ∈ t (nat.find (P x)),
615
+ { have B : x ∈ t (nat.find (P x)) ∪ (⋃ k, t k)ᶜ := nat.find_spec (P x),
616
+ have B' : (∀ (i : ℕ), x ∉ t i) ↔ false,
617
+ { simp only [iff_false, not_forall, not_not_mem], exact ⟨n, hx⟩ },
618
+ simpa only [B', mem_union_eq, mem_Inter, or_false, compl_Union, mem_compl_eq] using B },
619
+ congr,
620
+ by_contra h,
621
+ exact t_disj n (nat.find (P x)) (ne.symm h) ⟨hx, this ⟩
622
+ end
623
+
572
624
end prod
573
625
574
626
section pi
@@ -603,7 +655,7 @@ measurable_pi_iff.mpr hf
603
655
This doesn't require `f` to be measurable.
604
656
This should not be confused with the statement that `update f a x` is measurable. -/
605
657
@[measurability]
606
- lemma measurable_update (f : Π (a : δ), π a) {a : δ} : measurable (update f a) :=
658
+ lemma measurable_update (f : Π (a : δ), π a) {a : δ} [decidable_eq δ] : measurable (update f a) :=
607
659
begin
608
660
apply measurable_pi_lambda,
609
661
intro x, by_cases hx : x = a,
@@ -623,9 +675,11 @@ lemma measurable_set.univ_pi [encodable δ] {t : Π i : δ, set (π i)}
623
675
(ht : ∀ i, measurable_set (t i)) : measurable_set (pi univ t) :=
624
676
measurable_set.pi (countable_encodable _) (λ i _, ht i)
625
677
626
- lemma measurable_set_pi_of_nonempty {s : set δ} {t : Π i, set (π i)} (hs : countable s)
678
+ lemma measurable_set_pi_of_nonempty
679
+ {s : set δ} {t : Π i, set (π i)} (hs : countable s)
627
680
(h : (pi s t).nonempty) : measurable_set (pi s t) ↔ ∀ i ∈ s, measurable_set (t i) :=
628
681
begin
682
+ classical,
629
683
rcases h with ⟨f, hf⟩, refine ⟨λ hst i hi, _, measurable_set.pi hs⟩,
630
684
convert measurable_update f hst, rw [update_preimage_pi hi], exact λ j hj _, hf j hj
631
685
end
@@ -702,7 +756,7 @@ begin
702
756
{ exact (measurable_pi_apply i).prod_mk ih }
703
757
end
704
758
705
- lemma measurable_tprod_elim : ∀ {l : list δ} {i : δ} (hi : i ∈ l),
759
+ lemma measurable_tprod_elim [decidable_eq δ] : ∀ {l : list δ} {i : δ} (hi : i ∈ l),
706
760
measurable (λ (v : tprod π l), v.elim hi)
707
761
| (i :: is) j hj := begin
708
762
by_cases hji : j = i,
@@ -711,7 +765,7 @@ lemma measurable_tprod_elim : ∀ {l : list δ} {i : δ} (hi : i ∈ l),
711
765
exact (measurable_tprod_elim (hj.resolve_left hji)).comp measurable_snd }
712
766
end
713
767
714
- lemma measurable_tprod_elim' {l : list δ} (h : ∀ i, i ∈ l) :
768
+ lemma measurable_tprod_elim' [decidable_eq δ] {l : list δ} (h : ∀ i, i ∈ l) :
715
769
measurable (tprod.elim' h : tprod π l → Π i, π i) :=
716
770
measurable_pi_lambda _ (λ i, measurable_tprod_elim (h i))
717
771
@@ -1159,7 +1213,8 @@ def Pi_congr_right (e : Π a, π a ≃ᵐ π' a) : (Π a, π a) ≃ᵐ (Π a, π
1159
1213
1160
1214
/-- Pi-types are measurably equivalent to iterated products. -/
1161
1215
@[simps {fully_applied := ff}]
1162
- noncomputable def pi_measurable_equiv_tprod {l : list δ'} (hnd : l.nodup) (h : ∀ i, i ∈ l) :
1216
+ def pi_measurable_equiv_tprod [decidable_eq δ']
1217
+ {l : list δ'} (hnd : l.nodup) (h : ∀ i, i ∈ l) :
1163
1218
(Π i, π i) ≃ᵐ list.tprod π l :=
1164
1219
{ to_equiv := list.tprod.pi_equiv_tprod hnd h,
1165
1220
measurable_to_fun := measurable_tprod_mk l,
0 commit comments