Skip to content

Commit 040db1b

Browse files
committed
refactor(Probability/Kernel/CondCdf): mv lintegral_iInf_directed_of_measurable (#10041)
- [x] depends on: #10036 Co-authored-by: Moritz Firsching <firsching@google.com>
1 parent 1a65f05 commit 040db1b

File tree

2 files changed

+38
-39
lines changed

2 files changed

+38
-39
lines changed

Mathlib/MeasureTheory/Integral/Lebesgue.lean

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1054,6 +1054,44 @@ theorem lintegral_iInf {f : ℕ → α → ℝ≥0∞} (h_meas : ∀ n, Measurab
10541054
lintegral_iInf_ae h_meas (fun n => ae_of_all _ <| h_anti n.le_succ) h_fin
10551055
#align measure_theory.lintegral_infi MeasureTheory.lintegral_iInf
10561056

1057+
/-- Monotone convergence for an infimum over a directed family and indexed by a countable type -/
1058+
theorem lintegral_iInf_directed_of_measurable {mα : MeasurableSpace α} [Countable β]
1059+
{f : β → α → ℝ≥0∞} {μ : Measure α} (hμ : μ ≠ 0) (hf : ∀ b, Measurable (f b))
1060+
(hf_int : ∀ b, ∫⁻ a, f b a ∂μ ≠ ∞) (h_directed : Directed (· ≥ ·) f) :
1061+
∫⁻ a, ⨅ b, f b a ∂μ = ⨅ b, ∫⁻ a, f b a ∂μ := by
1062+
cases nonempty_encodable β
1063+
cases isEmpty_or_nonempty β
1064+
· -- Porting note: the next `simp only` doesn't do anything, so added a workaround below.
1065+
-- simp only [WithTop.iInf_empty, lintegral_const]
1066+
conv =>
1067+
lhs
1068+
congr
1069+
· skip
1070+
· ext x
1071+
rw [WithTop.iInf_empty]
1072+
rw [WithTop.iInf_empty, lintegral_const]
1073+
rw [ENNReal.top_mul', if_neg]
1074+
simp only [Measure.measure_univ_eq_zero, hμ, not_false_iff]
1075+
inhabit β
1076+
have : ∀ a, ⨅ b, f b a = ⨅ n, f (h_directed.sequence f n) a := by
1077+
refine' fun a =>
1078+
le_antisymm (le_iInf fun n => iInf_le _ _)
1079+
(le_iInf fun b => iInf_le_of_le (Encodable.encode b + 1) _)
1080+
exact h_directed.sequence_le b a
1081+
-- Porting note: used `∘` below to deal with its reduced reducibility
1082+
calc
1083+
∫⁻ a, ⨅ b, f b a ∂μ
1084+
_ = ∫⁻ a, ⨅ n, (f ∘ h_directed.sequence f) n a ∂μ := by simp only [this, Function.comp_apply]
1085+
_ = ⨅ n, ∫⁻ a, (f ∘ h_directed.sequence f) n a ∂μ := by
1086+
rw [lintegral_iInf ?_ h_directed.sequence_anti]
1087+
· exact hf_int _
1088+
· exact (fun n => hf _)
1089+
_ = ⨅ b, ∫⁻ a, f b a ∂μ := by
1090+
refine' le_antisymm (le_iInf fun b => _) (le_iInf fun n => _)
1091+
· exact iInf_le_of_le (Encodable.encode b + 1) (lintegral_mono <| h_directed.sequence_le b)
1092+
· exact iInf_le (fun b => ∫⁻ a, f b a ∂μ) _
1093+
#align lintegral_infi_directed_of_measurable MeasureTheory.lintegral_iInf_directed_of_measurable
1094+
10571095
/-- Known as Fatou's lemma, version with `AEMeasurable` functions -/
10581096
theorem lintegral_liminf_le' {f : ℕ → α → ℝ≥0∞} (h_meas : ∀ n, AEMeasurable (f n) μ) :
10591097
∫⁻ a, liminf (fun n => f n a) atTop ∂μ ≤ liminf (fun n => ∫⁻ a, f n a ∂μ) atTop :=

Mathlib/Probability/Kernel/CondCdf.lean

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -87,45 +87,6 @@ theorem atTop_le_nhds_top {α : Type*} [TopologicalSpace α] [LinearOrder α] [O
8787
@atBot_le_nhds_bot αᵒᵈ _ _ _ _
8888
#align at_top_le_nhds_top atTop_le_nhds_top
8989

90-
-- todo: move to measure_theory/measurable_space
91-
/-- Monotone convergence for an infimum over a directed family and indexed by a countable type -/
92-
theorem lintegral_iInf_directed_of_measurable {mα : MeasurableSpace α} [Countable β]
93-
{f : β → α → ℝ≥0∞} {μ : Measure α} (hμ : μ ≠ 0) (hf : ∀ b, Measurable (f b))
94-
(hf_int : ∀ b, ∫⁻ a, f b a ∂μ ≠ ∞) (h_directed : Directed (· ≥ ·) f) :
95-
∫⁻ a, ⨅ b, f b a ∂μ = ⨅ b, ∫⁻ a, f b a ∂μ := by
96-
cases nonempty_encodable β
97-
cases isEmpty_or_nonempty β
98-
· -- Porting note: the next `simp only` doesn't do anything, so added a workaround below.
99-
-- simp only [WithTop.iInf_empty, lintegral_const]
100-
conv =>
101-
lhs
102-
congr
103-
· skip
104-
· ext x
105-
rw [WithTop.iInf_empty]
106-
rw [WithTop.iInf_empty, lintegral_const]
107-
rw [ENNReal.top_mul', if_neg]
108-
simp only [Measure.measure_univ_eq_zero, hμ, not_false_iff]
109-
inhabit β
110-
have : ∀ a, ⨅ b, f b a = ⨅ n, f (h_directed.sequence f n) a := by
111-
refine' fun a =>
112-
le_antisymm (le_iInf fun n => iInf_le _ _)
113-
(le_iInf fun b => iInf_le_of_le (Encodable.encode b + 1) _)
114-
exact h_directed.sequence_le b a
115-
-- Porting note: used `∘` below to deal with its reduced reducibility
116-
calc
117-
∫⁻ a, ⨅ b, f b a ∂μ
118-
_ = ∫⁻ a, ⨅ n, (f ∘ h_directed.sequence f) n a ∂μ := by simp only [this, Function.comp_apply]
119-
_ = ⨅ n, ∫⁻ a, (f ∘ h_directed.sequence f) n a ∂μ := by
120-
rw [lintegral_iInf ?_ h_directed.sequence_anti]
121-
· exact hf_int _
122-
· exact (fun n => hf _)
123-
_ = ⨅ b, ∫⁻ a, f b a ∂μ := by
124-
refine' le_antisymm (le_iInf fun b => _) (le_iInf fun n => _)
125-
· exact iInf_le_of_le (Encodable.encode b + 1) (lintegral_mono <| h_directed.sequence_le b)
126-
· exact iInf_le (fun b => ∫⁻ a, f b a ∂μ) _
127-
#align lintegral_infi_directed_of_measurable lintegral_iInf_directed_of_measurable
128-
12990
end AuxLemmasToBeMoved
13091

13192
namespace MeasureTheory.Measure

0 commit comments

Comments
 (0)