analysis.box_integral.integrability
⟷
Mathlib.Analysis.BoxIntegral.Integrability
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -157,7 +157,7 @@ theorem BoxIntegral.HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι
rintro x ⟨J, ⟨hJ, rfl⟩, hx⟩
exact ⟨hrU _ (hπ.1 _ hJ (box.coe_subset_Icc hx)), π.le_of_mem' J hJ hx⟩
lift m to ℝ≥0 using ne_top_of_lt this
- rw [ENNReal.coe_toReal, ← NNReal.coe_nat_cast, ← NNReal.coe_mul, NNReal.coe_le_coe, ←
+ rw [ENNReal.coe_toReal, ← NNReal.coe_natCast, ← NNReal.coe_mul, NNReal.coe_le_coe, ←
ENNReal.coe_le_coe, ENNReal.coe_mul, ENNReal.coe_natCast, mul_comm]
exact (mul_le_mul_left' this.le _).trans ENNReal.mul_div_le
#align box_integral.has_integral_zero_of_ae_eq_zero BoxIntegral.HasIntegral.of_aeEq_zero
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -158,7 +158,7 @@ theorem BoxIntegral.HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι
exact ⟨hrU _ (hπ.1 _ hJ (box.coe_subset_Icc hx)), π.le_of_mem' J hJ hx⟩
lift m to ℝ≥0 using ne_top_of_lt this
rw [ENNReal.coe_toReal, ← NNReal.coe_nat_cast, ← NNReal.coe_mul, NNReal.coe_le_coe, ←
- ENNReal.coe_le_coe, ENNReal.coe_mul, ENNReal.coe_nat, mul_comm]
+ ENNReal.coe_le_coe, ENNReal.coe_mul, ENNReal.coe_natCast, mul_comm]
exact (mul_le_mul_left' this.le _).trans ENNReal.mul_div_le
#align box_integral.has_integral_zero_of_ae_eq_zero BoxIntegral.HasIntegral.of_aeEq_zero
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -35,8 +35,8 @@ open MeasureTheory Metric Set Finset Filter BoxIntegral
namespace BoxIntegral
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (F «expr ⊆ » «expr ∩ »(s, I.Icc)) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (U «expr ⊇ » «expr ∩ »(s, I.Icc)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (F «expr ⊆ » «expr ∩ »(s, I.Icc)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (U «expr ⊇ » «expr ∩ »(s, I.Icc)) -/
#print BoxIntegral.hasIntegralIndicatorConst /-
/-- The indicator function of a measurable set is McShane integrable with respect to any
locally-finite measure. -/
@@ -103,7 +103,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
#align box_integral.has_integral_indicator_const BoxIntegral.hasIntegralIndicatorConst
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (U «expr ⊇ » «expr ⁻¹' »(N, {n})) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (U «expr ⊇ » «expr ⁻¹' »(N, {n})) -/
#print BoxIntegral.HasIntegral.of_aeEq_zero /-
/-- If `f` is a.e. equal to zero on a rectangular box, then it has McShane integral zero on this
box. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -47,7 +47,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
((μ (s ∩ I)).toReal • y) :=
by
refine' has_integral_of_mul ‖y‖ fun ε ε0 => _
- lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0
+ lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0
/- First we choose a closed set `F ⊆ s ∩ I.Icc` and an open set `U ⊇ s` such that
both `(s ∩ I.Icc) \ F` and `U \ s` have measuer less than `ε`. -/
have A : μ (s ∩ I.Icc) ≠ ∞ :=
@@ -114,10 +114,10 @@ theorem BoxIntegral.HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι
/- Each set `{x | n < ‖f x‖ ≤ n + 1}`, `n : ℕ`, has measure zero. We cover it by an open set of
measure less than `ε / 2 ^ n / (n + 1)`. Then the norm of the integral sum is less than `ε`. -/
refine' has_integral_iff.2 fun ε ε0 => _
- lift ε to ℝ≥0 using ε0.lt.le; rw [gt_iff_lt, NNReal.coe_pos] at ε0
+ lift ε to ℝ≥0 using ε0.lt.le; rw [gt_iff_lt, NNReal.coe_pos] at ε0
rcases NNReal.exists_pos_sum_of_countable ε0.ne' ℕ with ⟨δ, δ0, c, hδc, hcε⟩
haveI := Fact.mk (I.measure_coe_lt_top μ)
- change μ.restrict I {x | f x ≠ 0} = 0 at hf
+ change μ.restrict I {x | f x ≠ 0} = 0 at hf
set N : (ι → ℝ) → ℕ := fun x => ⌈‖f x‖⌉₊
have N0 : ∀ {x}, N x = 0 ↔ f x = 0 := by intro x; simp [N]
have : ∀ n, ∃ (U : _) (_ : U ⊇ N ⁻¹' {n}), IsOpen U ∧ μ.restrict I U < δ n / n :=
@@ -142,7 +142,7 @@ theorem BoxIntegral.HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι
have :
∀ J ∈ π.filter fun J => N (π.tag J) = n, ‖(μ ↑J).toReal • f (π.tag J)‖ ≤ (μ J).toReal * n :=
by
- intro J hJ; rw [tagged_prepartition.mem_filter] at hJ
+ intro J hJ; rw [tagged_prepartition.mem_filter] at hJ
rw [norm_smul, Real.norm_eq_abs, abs_of_nonneg ENNReal.toReal_nonneg]
exact mul_le_mul_of_nonneg_left (hJ.2 ▸ Nat.le_ceil _) ENNReal.toReal_nonneg
refine' (norm_sum_le_of_le _ this).trans _; clear this
@@ -150,7 +150,7 @@ theorem BoxIntegral.HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι
generalize hm : μ (π.filter fun J => N (π.tag J) = n).iUnion = m
have : m < δ n / n :=
by
- simp only [measure.restrict_apply (hUo _).MeasurableSet] at hμU
+ simp only [measure.restrict_apply (hUo _).MeasurableSet] at hμU
refine' hm ▸ (measure_mono _).trans_lt (hμU _)
simp only [Set.subset_def, tagged_prepartition.mem_Union, exists_prop,
tagged_prepartition.mem_filter]
@@ -248,7 +248,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
/- Now consider `ε > 0`. We need to find `r` such that for any tagged partition subordinate
to `r`, the integral sum is `(μ I + 1 + 1) * ε`-close to the Bochner integral. -/
refine' has_integral_of_mul ((μ I).toReal + 1 + 1) fun ε ε0 => _
- lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0 ; have ε0' := ENNReal.coe_pos.2 ε0
+ lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0; have ε0' := ENNReal.coe_pos.2 ε0
-- Choose `N` such that the integral of `‖f N x - g x‖` is less than or equal to `ε`.
obtain ⟨N₀, hN₀⟩ : ∃ N : ℕ, ∫ x in I, ‖f N x - g x‖ ∂μ ≤ ε :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2021 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-/
-import Mathbin.Analysis.BoxIntegral.Basic
-import Mathbin.MeasureTheory.Integral.SetIntegral
-import Mathbin.MeasureTheory.Measure.Regular
+import Analysis.BoxIntegral.Basic
+import MeasureTheory.Integral.SetIntegral
+import MeasureTheory.Measure.Regular
#align_import analysis.box_integral.integrability from "leanprover-community/mathlib"@"c20927220ef87bb4962ba08bf6da2ce3cf50a6dd"
@@ -35,8 +35,8 @@ open MeasureTheory Metric Set Finset Filter BoxIntegral
namespace BoxIntegral
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (F «expr ⊆ » «expr ∩ »(s, I.Icc)) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » «expr ∩ »(s, I.Icc)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (F «expr ⊆ » «expr ∩ »(s, I.Icc)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (U «expr ⊇ » «expr ∩ »(s, I.Icc)) -/
#print BoxIntegral.hasIntegralIndicatorConst /-
/-- The indicator function of a measurable set is McShane integrable with respect to any
locally-finite measure. -/
@@ -103,7 +103,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
#align box_integral.has_integral_indicator_const BoxIntegral.hasIntegralIndicatorConst
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » «expr ⁻¹' »(N, {n})) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (U «expr ⊇ » «expr ⁻¹' »(N, {n})) -/
#print BoxIntegral.HasIntegral.of_aeEq_zero /-
/-- If `f` is a.e. equal to zero on a rectangular box, then it has McShane integral zero on this
box. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2021 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module analysis.box_integral.integrability
-! leanprover-community/mathlib commit c20927220ef87bb4962ba08bf6da2ce3cf50a6dd
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.BoxIntegral.Basic
import Mathbin.MeasureTheory.Integral.SetIntegral
import Mathbin.MeasureTheory.Measure.Regular
+#align_import analysis.box_integral.integrability from "leanprover-community/mathlib"@"c20927220ef87bb4962ba08bf6da2ce3cf50a6dd"
+
/-!
# McShane integrability vs Bochner integrability
@@ -38,8 +35,8 @@ open MeasureTheory Metric Set Finset Filter BoxIntegral
namespace BoxIntegral
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (F «expr ⊆ » «expr ∩ »(s, I.Icc)) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (U «expr ⊇ » «expr ∩ »(s, I.Icc)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (F «expr ⊆ » «expr ∩ »(s, I.Icc)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » «expr ∩ »(s, I.Icc)) -/
#print BoxIntegral.hasIntegralIndicatorConst /-
/-- The indicator function of a measurable set is McShane integrable with respect to any
locally-finite measure. -/
@@ -106,7 +103,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
#align box_integral.has_integral_indicator_const BoxIntegral.hasIntegralIndicatorConst
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (U «expr ⊇ » «expr ⁻¹' »(N, {n})) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » «expr ⁻¹' »(N, {n})) -/
#print BoxIntegral.HasIntegral.of_aeEq_zero /-
/-- If `f` is a.e. equal to zero on a rectangular box, then it has McShane integral zero on this
box. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -40,6 +40,7 @@ namespace BoxIntegral
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (F «expr ⊆ » «expr ∩ »(s, I.Icc)) -/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (U «expr ⊇ » «expr ∩ »(s, I.Icc)) -/
+#print BoxIntegral.hasIntegralIndicatorConst /-
/-- The indicator function of a measurable set is McShane integrable with respect to any
locally-finite measure. -/
theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = false)
@@ -103,6 +104,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
refine' hrs'F _ ⟨π.tag_mem_Icc J, hxF⟩ _
simpa only [r, s.piecewise_eq_of_not_mem _ _ hxF] using hπ.1 J hJπ (box.coe_subset_Icc hxJ)
#align box_integral.has_integral_indicator_const BoxIntegral.hasIntegralIndicatorConst
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (U «expr ⊇ » «expr ⁻¹' »(N, {n})) -/
#print BoxIntegral.HasIntegral.of_aeEq_zero /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -251,7 +251,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
refine' has_integral_of_mul ((μ I).toReal + 1 + 1) fun ε ε0 => _
lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0 ; have ε0' := ENNReal.coe_pos.2 ε0
-- Choose `N` such that the integral of `‖f N x - g x‖` is less than or equal to `ε`.
- obtain ⟨N₀, hN₀⟩ : ∃ N : ℕ, (∫ x in I, ‖f N x - g x‖ ∂μ) ≤ ε :=
+ obtain ⟨N₀, hN₀⟩ : ∃ N : ℕ, ∫ x in I, ‖f N x - g x‖ ∂μ ≤ ε :=
by
have : tendsto (fun n => ∫⁻ x in I, ‖f n x - g x‖₊ ∂μ) at_top (𝓝 0) :=
simple_func.tendsto_approx_on_range_L1_nnnorm hg.measurable hgi
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -38,8 +38,8 @@ open MeasureTheory Metric Set Finset Filter BoxIntegral
namespace BoxIntegral
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (F «expr ⊆ » «expr ∩ »(s, I.Icc)) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » «expr ∩ »(s, I.Icc)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (F «expr ⊆ » «expr ∩ »(s, I.Icc)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (U «expr ⊇ » «expr ∩ »(s, I.Icc)) -/
/-- The indicator function of a measurable set is McShane integrable with respect to any
locally-finite measure. -/
theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = false)
@@ -104,7 +104,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
simpa only [r, s.piecewise_eq_of_not_mem _ _ hxF] using hπ.1 J hJπ (box.coe_subset_Icc hxJ)
#align box_integral.has_integral_indicator_const BoxIntegral.hasIntegralIndicatorConst
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » «expr ⁻¹' »(N, {n})) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (U «expr ⊇ » «expr ⁻¹' »(N, {n})) -/
#print BoxIntegral.HasIntegral.of_aeEq_zero /-
/-- If `f` is a.e. equal to zero on a rectangular box, then it has McShane integral zero on this
box. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
! This file was ported from Lean 3 source module analysis.box_integral.integrability
-! leanprover-community/mathlib commit fd5edc43dc4f10b85abfe544b88f82cf13c5f844
+! leanprover-community/mathlib commit c20927220ef87bb4962ba08bf6da2ce3cf50a6dd
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.MeasureTheory.Measure.Regular
/-!
# McShane integrability vs Bochner integrability
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
In this file we prove that any Bochner integrable function is McShane integrable (hence, it is
Henstock and `⊥` integrable) with the same integral. The proof is based on
[Russel A. Gordon, *The integrals of Lebesgue, Denjoy, Perron, and Henstock*][Gordon55].
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3209ddf94136d36e5e5c624b10b2a347cc9d090
@@ -39,7 +39,7 @@ namespace BoxIntegral
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » «expr ∩ »(s, I.Icc)) -/
/-- The indicator function of a measurable set is McShane integrable with respect to any
locally-finite measure. -/
-theorem hasIntegral_indicator_const (l : IntegrationParams) (hl : l.bRiemann = false)
+theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = false)
{s : Set (ι → ℝ)} (hs : MeasurableSet s) (I : Box ι) (y : E) (μ : Measure (ι → ℝ))
[IsLocallyFiniteMeasure μ] :
HasIntegral.{u, v, v} I l (s.indicator fun _ => y) μ.toBoxAdditive.toSMul
@@ -99,12 +99,13 @@ theorem hasIntegral_indicator_const (l : IntegrationParams) (hl : l.bRiemann = f
contrapose hxF
refine' hrs'F _ ⟨π.tag_mem_Icc J, hxF⟩ _
simpa only [r, s.piecewise_eq_of_not_mem _ _ hxF] using hπ.1 J hJπ (box.coe_subset_Icc hxJ)
-#align box_integral.has_integral_indicator_const BoxIntegral.hasIntegral_indicator_const
+#align box_integral.has_integral_indicator_const BoxIntegral.hasIntegralIndicatorConst
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » «expr ⁻¹' »(N, {n})) -/
+#print BoxIntegral.HasIntegral.of_aeEq_zero /-
/-- If `f` is a.e. equal to zero on a rectangular box, then it has McShane integral zero on this
box. -/
-theorem hasIntegral_zero_of_ae_eq_zero {l : IntegrationParams} {I : Box ι} {f : (ι → ℝ) → E}
+theorem BoxIntegral.HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι} {f : (ι → ℝ) → E}
{μ : Measure (ι → ℝ)} [IsLocallyFiniteMeasure μ] (hf : f =ᵐ[μ.restrict I] 0)
(hl : l.bRiemann = false) : HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul 0 :=
by
@@ -157,8 +158,10 @@ theorem hasIntegral_zero_of_ae_eq_zero {l : IntegrationParams} {I : Box ι} {f :
rw [ENNReal.coe_toReal, ← NNReal.coe_nat_cast, ← NNReal.coe_mul, NNReal.coe_le_coe, ←
ENNReal.coe_le_coe, ENNReal.coe_mul, ENNReal.coe_nat, mul_comm]
exact (mul_le_mul_left' this.le _).trans ENNReal.mul_div_le
-#align box_integral.has_integral_zero_of_ae_eq_zero BoxIntegral.hasIntegral_zero_of_ae_eq_zero
+#align box_integral.has_integral_zero_of_ae_eq_zero BoxIntegral.HasIntegral.of_aeEq_zero
+-/
+#print BoxIntegral.HasIntegral.congr_ae /-
/-- If `f` has integral `y` on a box `I` with respect to a locally finite measure `μ` and `g` is
a.e. equal to `f` on `I`, then `g` has the same integral on `I`. -/
theorem HasIntegral.congr_ae {l : IntegrationParams} {I : Box ι} {y : E} {f g : (ι → ℝ) → E}
@@ -169,6 +172,7 @@ theorem HasIntegral.congr_ae {l : IntegrationParams} {I : Box ι} {y : E} {f g :
have : g - f =ᵐ[μ.restrict I] 0 := hfg.mono fun x hx => sub_eq_zero.2 hx.symm
simpa using hf.add (has_integral_zero_of_ae_eq_zero this hl)
#align box_integral.has_integral.congr_ae BoxIntegral.HasIntegral.congr_ae
+-/
end BoxIntegral
@@ -176,8 +180,9 @@ namespace MeasureTheory
namespace SimpleFunc
+#print MeasureTheory.SimpleFunc.hasBoxIntegral /-
/-- A simple function is McShane integrable w.r.t. any locally finite measure. -/
-theorem has_box_integral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ)) [IsLocallyFiniteMeasure μ]
+theorem hasBoxIntegral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ)) [IsLocallyFiniteMeasure μ]
(I : Box ι) (l : IntegrationParams) (hl : l.bRiemann = false) :
HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul (f.integral (μ.restrict I)) :=
by
@@ -185,28 +190,32 @@ theorem has_box_integral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι →
·
simpa only [measure.restrict_apply hs, const_zero, integral_piecewise_zero, integral_const,
measure.restrict_apply, MeasurableSet.univ, Set.univ_inter] using
- BoxIntegral.hasIntegral_indicator_const l hl hs I y μ
+ BoxIntegral.hasIntegralIndicatorConst l hl hs I y μ
· borelize E; haveI := Fact.mk (I.measure_coe_lt_top μ)
rw [integral_add]
exacts [hfi.add hgi, integrable_iff.2 fun _ _ => measure_lt_top _ _,
integrable_iff.2 fun _ _ => measure_lt_top _ _]
-#align measure_theory.simple_func.has_box_integral MeasureTheory.SimpleFunc.has_box_integral
+#align measure_theory.simple_func.has_box_integral MeasureTheory.SimpleFunc.hasBoxIntegral
+-/
+#print MeasureTheory.SimpleFunc.box_integral_eq_integral /-
/-- For a simple function, its McShane (or Henstock, or `⊥`) box integral is equal to its
integral in the sense of `measure_theory.simple_func.integral`. -/
theorem box_integral_eq_integral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ))
[IsLocallyFiniteMeasure μ] (I : Box ι) (l : IntegrationParams) (hl : l.bRiemann = false) :
BoxIntegral.integral.{u, v, v} I l f μ.toBoxAdditive.toSMul = f.integral (μ.restrict I) :=
- (f.has_box_integral μ I l hl).integral_eq
+ (f.hasBoxIntegral μ I l hl).integral_eq
#align measure_theory.simple_func.box_integral_eq_integral MeasureTheory.SimpleFunc.box_integral_eq_integral
+-/
end SimpleFunc
open TopologicalSpace
+#print MeasureTheory.IntegrableOn.hasBoxIntegral /-
/-- If `f : ℝⁿ → E` is Bochner integrable w.r.t. a locally finite measure `μ` on a rectangular box
`I`, then it is McShane integrable on `I` with the same integral. -/
-theorem IntegrableOn.has_box_integral [CompleteSpace E] {f : (ι → ℝ) → E} {μ : Measure (ι → ℝ)}
+theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {μ : Measure (ι → ℝ)}
[IsLocallyFiniteMeasure μ] {I : Box ι} (hf : IntegrableOn f I μ) (l : IntegrationParams)
(hl : l.bRiemann = false) :
HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul (∫ x in I, f x ∂μ) :=
@@ -225,7 +234,7 @@ theorem IntegrableOn.has_box_integral [CompleteSpace E] {f : (ι → ℝ) → E}
simple_func.approx_on g hg.measurable (range g ∪ {0}) 0 (by simp)
have hfi : ∀ n, integrable_on (f n) I μ :=
simple_func.integrable_approx_on_range hg.measurable hgi
- have hfi' := fun n => ((f n).has_box_integral μ I l hl).Integrable
+ have hfi' := fun n => ((f n).hasBoxIntegral μ I l hl).Integrable
have hfgi : tendsto (fun n => (f n).integral (μ.restrict I)) at_top (𝓝 <| ∫ x in I, g x ∂μ) :=
tendsto_integral_approx_on_of_measurable_of_range_subset hg.measurable hgi _ subset.rfl
have hfg_mono : ∀ (x) {m n}, m ≤ n → ‖f n x - g x‖ ≤ ‖f m x - g x‖ :=
@@ -323,7 +332,8 @@ theorem IntegrableOn.has_box_integral [CompleteSpace E] {f : (ι → ℝ) → E}
rw [dist_eq_norm, ← integral_sub (hfi _ J hJ) (hgi J hJ)]
refine' norm_integral_le_of_norm_le (hfgi _ J hJ) (eventually_of_forall fun x => _)
exact hfg_mono x (hNx (π.tag J))
-#align measure_theory.integrable_on.has_box_integral MeasureTheory.IntegrableOn.has_box_integral
+#align measure_theory.integrable_on.has_box_integral MeasureTheory.IntegrableOn.hasBoxIntegral
+-/
end MeasureTheory
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3209ddf94136d36e5e5c624b10b2a347cc9d090
@@ -39,7 +39,7 @@ namespace BoxIntegral
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » «expr ∩ »(s, I.Icc)) -/
/-- The indicator function of a measurable set is McShane integrable with respect to any
locally-finite measure. -/
-theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = false)
+theorem hasIntegral_indicator_const (l : IntegrationParams) (hl : l.bRiemann = false)
{s : Set (ι → ℝ)} (hs : MeasurableSet s) (I : Box ι) (y : E) (μ : Measure (ι → ℝ))
[IsLocallyFiniteMeasure μ] :
HasIntegral.{u, v, v} I l (s.indicator fun _ => y) μ.toBoxAdditive.toSMul
@@ -99,12 +99,12 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
contrapose hxF
refine' hrs'F _ ⟨π.tag_mem_Icc J, hxF⟩ _
simpa only [r, s.piecewise_eq_of_not_mem _ _ hxF] using hπ.1 J hJπ (box.coe_subset_Icc hxJ)
-#align box_integral.has_integral_indicator_const BoxIntegral.hasIntegralIndicatorConst
+#align box_integral.has_integral_indicator_const BoxIntegral.hasIntegral_indicator_const
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » «expr ⁻¹' »(N, {n})) -/
/-- If `f` is a.e. equal to zero on a rectangular box, then it has McShane integral zero on this
box. -/
-theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι → ℝ) → E}
+theorem hasIntegral_zero_of_ae_eq_zero {l : IntegrationParams} {I : Box ι} {f : (ι → ℝ) → E}
{μ : Measure (ι → ℝ)} [IsLocallyFiniteMeasure μ] (hf : f =ᵐ[μ.restrict I] 0)
(hl : l.bRiemann = false) : HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul 0 :=
by
@@ -157,18 +157,18 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
rw [ENNReal.coe_toReal, ← NNReal.coe_nat_cast, ← NNReal.coe_mul, NNReal.coe_le_coe, ←
ENNReal.coe_le_coe, ENNReal.coe_mul, ENNReal.coe_nat, mul_comm]
exact (mul_le_mul_left' this.le _).trans ENNReal.mul_div_le
-#align box_integral.has_integral_zero_of_ae_eq_zero BoxIntegral.hasIntegralZeroOfAeEqZero
+#align box_integral.has_integral_zero_of_ae_eq_zero BoxIntegral.hasIntegral_zero_of_ae_eq_zero
/-- If `f` has integral `y` on a box `I` with respect to a locally finite measure `μ` and `g` is
a.e. equal to `f` on `I`, then `g` has the same integral on `I`. -/
-theorem HasIntegral.congrAe {l : IntegrationParams} {I : Box ι} {y : E} {f g : (ι → ℝ) → E}
+theorem HasIntegral.congr_ae {l : IntegrationParams} {I : Box ι} {y : E} {f g : (ι → ℝ) → E}
{μ : Measure (ι → ℝ)} [IsLocallyFiniteMeasure μ]
(hf : HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul y) (hfg : f =ᵐ[μ.restrict I] g)
(hl : l.bRiemann = false) : HasIntegral.{u, v, v} I l g μ.toBoxAdditive.toSMul y :=
by
have : g - f =ᵐ[μ.restrict I] 0 := hfg.mono fun x hx => sub_eq_zero.2 hx.symm
simpa using hf.add (has_integral_zero_of_ae_eq_zero this hl)
-#align box_integral.has_integral.congr_ae BoxIntegral.HasIntegral.congrAe
+#align box_integral.has_integral.congr_ae BoxIntegral.HasIntegral.congr_ae
end BoxIntegral
@@ -177,7 +177,7 @@ namespace MeasureTheory
namespace SimpleFunc
/-- A simple function is McShane integrable w.r.t. any locally finite measure. -/
-theorem hasBoxIntegral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ)) [IsLocallyFiniteMeasure μ]
+theorem has_box_integral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ)) [IsLocallyFiniteMeasure μ]
(I : Box ι) (l : IntegrationParams) (hl : l.bRiemann = false) :
HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul (f.integral (μ.restrict I)) :=
by
@@ -185,19 +185,19 @@ theorem hasBoxIntegral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ
·
simpa only [measure.restrict_apply hs, const_zero, integral_piecewise_zero, integral_const,
measure.restrict_apply, MeasurableSet.univ, Set.univ_inter] using
- BoxIntegral.hasIntegralIndicatorConst l hl hs I y μ
+ BoxIntegral.hasIntegral_indicator_const l hl hs I y μ
· borelize E; haveI := Fact.mk (I.measure_coe_lt_top μ)
rw [integral_add]
exacts [hfi.add hgi, integrable_iff.2 fun _ _ => measure_lt_top _ _,
integrable_iff.2 fun _ _ => measure_lt_top _ _]
-#align measure_theory.simple_func.has_box_integral MeasureTheory.SimpleFunc.hasBoxIntegral
+#align measure_theory.simple_func.has_box_integral MeasureTheory.SimpleFunc.has_box_integral
/-- For a simple function, its McShane (or Henstock, or `⊥`) box integral is equal to its
integral in the sense of `measure_theory.simple_func.integral`. -/
theorem box_integral_eq_integral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ))
[IsLocallyFiniteMeasure μ] (I : Box ι) (l : IntegrationParams) (hl : l.bRiemann = false) :
BoxIntegral.integral.{u, v, v} I l f μ.toBoxAdditive.toSMul = f.integral (μ.restrict I) :=
- (f.hasBoxIntegral μ I l hl).integral_eq
+ (f.has_box_integral μ I l hl).integral_eq
#align measure_theory.simple_func.box_integral_eq_integral MeasureTheory.SimpleFunc.box_integral_eq_integral
end SimpleFunc
@@ -206,7 +206,7 @@ open TopologicalSpace
/-- If `f : ℝⁿ → E` is Bochner integrable w.r.t. a locally finite measure `μ` on a rectangular box
`I`, then it is McShane integrable on `I` with the same integral. -/
-theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {μ : Measure (ι → ℝ)}
+theorem IntegrableOn.has_box_integral [CompleteSpace E] {f : (ι → ℝ) → E} {μ : Measure (ι → ℝ)}
[IsLocallyFiniteMeasure μ] {I : Box ι} (hf : IntegrableOn f I μ) (l : IntegrationParams)
(hl : l.bRiemann = false) :
HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul (∫ x in I, f x ∂μ) :=
@@ -216,7 +216,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
rcases hf.ae_strongly_measurable with ⟨g, hg, hfg⟩
haveI : separable_space (range g ∪ {0} : Set E) := hg.separable_space_range_union_singleton
rw [integral_congr_ae hfg]; have hgi : integrable_on g I μ := (integrable_congr hfg).1 hf
- refine' BoxIntegral.HasIntegral.congrAe _ hfg.symm hl
+ refine' BoxIntegral.HasIntegral.congr_ae _ hfg.symm hl
clear! f
/- Now consider the sequence of simple functions
`simple_func.approx_on g hg.measurable (range g ∪ {0}) 0 (by simp)`
@@ -225,7 +225,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
simple_func.approx_on g hg.measurable (range g ∪ {0}) 0 (by simp)
have hfi : ∀ n, integrable_on (f n) I μ :=
simple_func.integrable_approx_on_range hg.measurable hgi
- have hfi' := fun n => ((f n).hasBoxIntegral μ I l hl).Integrable
+ have hfi' := fun n => ((f n).has_box_integral μ I l hl).Integrable
have hfgi : tendsto (fun n => (f n).integral (μ.restrict I)) at_top (𝓝 <| ∫ x in I, g x ∂μ) :=
tendsto_integral_approx_on_of_measurable_of_range_subset hg.measurable hgi _ subset.rfl
have hfg_mono : ∀ (x) {m n}, m ≤ n → ‖f n x - g x‖ ≤ ‖f m x - g x‖ :=
@@ -323,7 +323,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
rw [dist_eq_norm, ← integral_sub (hfi _ J hJ) (hgi J hJ)]
refine' norm_integral_le_of_norm_le (hfgi _ J hJ) (eventually_of_forall fun x => _)
exact hfg_mono x (hNx (π.tag J))
-#align measure_theory.integrable_on.has_box_integral MeasureTheory.IntegrableOn.hasBoxIntegral
+#align measure_theory.integrable_on.has_box_integral MeasureTheory.IntegrableOn.has_box_integral
end MeasureTheory
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -41,7 +41,7 @@ namespace BoxIntegral
locally-finite measure. -/
theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = false)
{s : Set (ι → ℝ)} (hs : MeasurableSet s) (I : Box ι) (y : E) (μ : Measure (ι → ℝ))
- [LocallyFiniteMeasure μ] :
+ [IsLocallyFiniteMeasure μ] :
HasIntegral.{u, v, v} I l (s.indicator fun _ => y) μ.toBoxAdditive.toSMul
((μ (s ∩ I)).toReal • y) :=
by
@@ -105,7 +105,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
/-- If `f` is a.e. equal to zero on a rectangular box, then it has McShane integral zero on this
box. -/
theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι → ℝ) → E}
- {μ : Measure (ι → ℝ)} [LocallyFiniteMeasure μ] (hf : f =ᵐ[μ.restrict I] 0)
+ {μ : Measure (ι → ℝ)} [IsLocallyFiniteMeasure μ] (hf : f =ᵐ[μ.restrict I] 0)
(hl : l.bRiemann = false) : HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul 0 :=
by
/- Each set `{x | n < ‖f x‖ ≤ n + 1}`, `n : ℕ`, has measure zero. We cover it by an open set of
@@ -114,7 +114,7 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
lift ε to ℝ≥0 using ε0.lt.le; rw [gt_iff_lt, NNReal.coe_pos] at ε0
rcases NNReal.exists_pos_sum_of_countable ε0.ne' ℕ with ⟨δ, δ0, c, hδc, hcε⟩
haveI := Fact.mk (I.measure_coe_lt_top μ)
- change μ.restrict I { x | f x ≠ 0 } = 0 at hf
+ change μ.restrict I {x | f x ≠ 0} = 0 at hf
set N : (ι → ℝ) → ℕ := fun x => ⌈‖f x‖⌉₊
have N0 : ∀ {x}, N x = 0 ↔ f x = 0 := by intro x; simp [N]
have : ∀ n, ∃ (U : _) (_ : U ⊇ N ⁻¹' {n}), IsOpen U ∧ μ.restrict I U < δ n / n :=
@@ -162,7 +162,7 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
/-- If `f` has integral `y` on a box `I` with respect to a locally finite measure `μ` and `g` is
a.e. equal to `f` on `I`, then `g` has the same integral on `I`. -/
theorem HasIntegral.congrAe {l : IntegrationParams} {I : Box ι} {y : E} {f g : (ι → ℝ) → E}
- {μ : Measure (ι → ℝ)} [LocallyFiniteMeasure μ]
+ {μ : Measure (ι → ℝ)} [IsLocallyFiniteMeasure μ]
(hf : HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul y) (hfg : f =ᵐ[μ.restrict I] g)
(hl : l.bRiemann = false) : HasIntegral.{u, v, v} I l g μ.toBoxAdditive.toSMul y :=
by
@@ -177,7 +177,7 @@ namespace MeasureTheory
namespace SimpleFunc
/-- A simple function is McShane integrable w.r.t. any locally finite measure. -/
-theorem hasBoxIntegral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ)) [LocallyFiniteMeasure μ]
+theorem hasBoxIntegral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ)) [IsLocallyFiniteMeasure μ]
(I : Box ι) (l : IntegrationParams) (hl : l.bRiemann = false) :
HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul (f.integral (μ.restrict I)) :=
by
@@ -195,7 +195,7 @@ theorem hasBoxIntegral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ
/-- For a simple function, its McShane (or Henstock, or `⊥`) box integral is equal to its
integral in the sense of `measure_theory.simple_func.integral`. -/
theorem box_integral_eq_integral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ))
- [LocallyFiniteMeasure μ] (I : Box ι) (l : IntegrationParams) (hl : l.bRiemann = false) :
+ [IsLocallyFiniteMeasure μ] (I : Box ι) (l : IntegrationParams) (hl : l.bRiemann = false) :
BoxIntegral.integral.{u, v, v} I l f μ.toBoxAdditive.toSMul = f.integral (μ.restrict I) :=
(f.hasBoxIntegral μ I l hl).integral_eq
#align measure_theory.simple_func.box_integral_eq_integral MeasureTheory.SimpleFunc.box_integral_eq_integral
@@ -207,7 +207,7 @@ open TopologicalSpace
/-- If `f : ℝⁿ → E` is Bochner integrable w.r.t. a locally finite measure `μ` on a rectangular box
`I`, then it is McShane integrable on `I` with the same integral. -/
theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {μ : Measure (ι → ℝ)}
- [LocallyFiniteMeasure μ] {I : Box ι} (hf : IntegrableOn f I μ) (l : IntegrationParams)
+ [IsLocallyFiniteMeasure μ] {I : Box ι} (hf : IntegrableOn f I μ) (l : IntegrationParams)
(hl : l.bRiemann = false) :
HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul (∫ x in I, f x ∂μ) :=
by
@@ -300,7 +300,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
have :
l.mem_base_set I c ((hfi' n).convergenceR (δ n) c) (π.filter fun J => Nx (π.tag J) = n) :=
(hπ.filter _).mono' _ le_rfl le_rfl fun J hJ => (hrn J hJ).le
- convert(hfi' n).dist_integralSum_sum_integral_le_of_memBaseSet (δ0 _) this using 2
+ convert (hfi' n).dist_integralSum_sum_integral_le_of_memBaseSet (δ0 _) this using 2
· refine' sum_congr rfl fun J hJ => _
simp [hNxn J hJ]
· refine' sum_congr rfl fun J hJ => _
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -46,17 +46,17 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
((μ (s ∩ I)).toReal • y) :=
by
refine' has_integral_of_mul ‖y‖ fun ε ε0 => _
- lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0
+ lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0
/- First we choose a closed set `F ⊆ s ∩ I.Icc` and an open set `U ⊇ s` such that
both `(s ∩ I.Icc) \ F` and `U \ s` have measuer less than `ε`. -/
have A : μ (s ∩ I.Icc) ≠ ∞ :=
((measure_mono <| Set.inter_subset_right _ _).trans_lt (I.measure_Icc_lt_top μ)).Ne
have B : μ (s ∩ I) ≠ ∞ :=
((measure_mono <| Set.inter_subset_right _ _).trans_lt (I.measure_coe_lt_top μ)).Ne
- obtain ⟨F, hFs, hFc, hμF⟩ : ∃ (F : _)(_ : F ⊆ s ∩ I.Icc), IsClosed F ∧ μ ((s ∩ I.Icc) \ F) < ε
+ obtain ⟨F, hFs, hFc, hμF⟩ : ∃ (F : _) (_ : F ⊆ s ∩ I.Icc), IsClosed F ∧ μ ((s ∩ I.Icc) \ F) < ε
exact (hs.inter I.measurable_set_Icc).exists_isClosed_diff_lt A (ENNReal.coe_pos.2 ε0).ne'
obtain ⟨U, hsU, hUo, hUt, hμU⟩ :
- ∃ (U : _)(_ : U ⊇ s ∩ I.Icc), IsOpen U ∧ μ U < ∞ ∧ μ (U \ (s ∩ I.Icc)) < ε
+ ∃ (U : _) (_ : U ⊇ s ∩ I.Icc), IsOpen U ∧ μ U < ∞ ∧ μ (U \ (s ∩ I.Icc)) < ε
exact (hs.inter I.measurable_set_Icc).exists_isOpen_diff_lt A (ENNReal.coe_pos.2 ε0).ne'
/- Then we choose `r` so that `closed_ball x (r x) ⊆ U` whenever `x ∈ s ∩ I.Icc` and
`closed_ball x (r x)` is disjoint with `F` otherwise. -/
@@ -111,13 +111,13 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
/- Each set `{x | n < ‖f x‖ ≤ n + 1}`, `n : ℕ`, has measure zero. We cover it by an open set of
measure less than `ε / 2 ^ n / (n + 1)`. Then the norm of the integral sum is less than `ε`. -/
refine' has_integral_iff.2 fun ε ε0 => _
- lift ε to ℝ≥0 using ε0.lt.le; rw [gt_iff_lt, NNReal.coe_pos] at ε0
+ lift ε to ℝ≥0 using ε0.lt.le; rw [gt_iff_lt, NNReal.coe_pos] at ε0
rcases NNReal.exists_pos_sum_of_countable ε0.ne' ℕ with ⟨δ, δ0, c, hδc, hcε⟩
haveI := Fact.mk (I.measure_coe_lt_top μ)
- change μ.restrict I { x | f x ≠ 0 } = 0 at hf
+ change μ.restrict I { x | f x ≠ 0 } = 0 at hf
set N : (ι → ℝ) → ℕ := fun x => ⌈‖f x‖⌉₊
have N0 : ∀ {x}, N x = 0 ↔ f x = 0 := by intro x; simp [N]
- have : ∀ n, ∃ (U : _)(_ : U ⊇ N ⁻¹' {n}), IsOpen U ∧ μ.restrict I U < δ n / n :=
+ have : ∀ n, ∃ (U : _) (_ : U ⊇ N ⁻¹' {n}), IsOpen U ∧ μ.restrict I U < δ n / n :=
by
refine' fun n => (N ⁻¹' {n}).exists_isOpen_lt_of_lt _ _
cases n
@@ -139,7 +139,7 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
have :
∀ J ∈ π.filter fun J => N (π.tag J) = n, ‖(μ ↑J).toReal • f (π.tag J)‖ ≤ (μ J).toReal * n :=
by
- intro J hJ; rw [tagged_prepartition.mem_filter] at hJ
+ intro J hJ; rw [tagged_prepartition.mem_filter] at hJ
rw [norm_smul, Real.norm_eq_abs, abs_of_nonneg ENNReal.toReal_nonneg]
exact mul_le_mul_of_nonneg_left (hJ.2 ▸ Nat.le_ceil _) ENNReal.toReal_nonneg
refine' (norm_sum_le_of_le _ this).trans _; clear this
@@ -147,7 +147,7 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
generalize hm : μ (π.filter fun J => N (π.tag J) = n).iUnion = m
have : m < δ n / n :=
by
- simp only [measure.restrict_apply (hUo _).MeasurableSet] at hμU
+ simp only [measure.restrict_apply (hUo _).MeasurableSet] at hμU
refine' hm ▸ (measure_mono _).trans_lt (hμU _)
simp only [Set.subset_def, tagged_prepartition.mem_Union, exists_prop,
tagged_prepartition.mem_filter]
@@ -188,7 +188,7 @@ theorem hasBoxIntegral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ
BoxIntegral.hasIntegralIndicatorConst l hl hs I y μ
· borelize E; haveI := Fact.mk (I.measure_coe_lt_top μ)
rw [integral_add]
- exacts[hfi.add hgi, integrable_iff.2 fun _ _ => measure_lt_top _ _,
+ exacts [hfi.add hgi, integrable_iff.2 fun _ _ => measure_lt_top _ _,
integrable_iff.2 fun _ _ => measure_lt_top _ _]
#align measure_theory.simple_func.has_box_integral MeasureTheory.SimpleFunc.hasBoxIntegral
@@ -237,7 +237,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
/- Now consider `ε > 0`. We need to find `r` such that for any tagged partition subordinate
to `r`, the integral sum is `(μ I + 1 + 1) * ε`-close to the Bochner integral. -/
refine' has_integral_of_mul ((μ I).toReal + 1 + 1) fun ε ε0 => _
- lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0; have ε0' := ENNReal.coe_pos.2 ε0
+ lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0 ; have ε0' := ENNReal.coe_pos.2 ε0
-- Choose `N` such that the integral of `‖f N x - g x‖` is less than or equal to `ε`.
obtain ⟨N₀, hN₀⟩ : ∃ N : ℕ, (∫ x in I, ‖f N x - g x‖ ∂μ) ≤ ε :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -25,7 +25,7 @@ integral, McShane integral, Bochner integral
-/
-open Classical NNReal ENNReal Topology BigOperators
+open scoped Classical NNReal ENNReal Topology BigOperators
universe u v
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -46,8 +46,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
((μ (s ∩ I)).toReal • y) :=
by
refine' has_integral_of_mul ‖y‖ fun ε ε0 => _
- lift ε to ℝ≥0 using ε0.le
- rw [NNReal.coe_pos] at ε0
+ lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0
/- First we choose a closed set `F ⊆ s ∩ I.Icc` and an open set `U ⊇ s` such that
both `(s ∩ I.Icc) \ F` and `U \ s` have measuer less than `ε`. -/
have A : μ (s ∩ I.Icc) ≠ ∞ :=
@@ -69,8 +68,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
(nhds_basis_closed_ball.mem_iff.1 (hFc.is_open_compl.mem_nhds fun hx' => hx.2 (hFs hx').1))
choose! rs' hrs'F
set r : (ι → ℝ) → Ioi (0 : ℝ) := s.piecewise rs rs'
- refine' ⟨fun c => r, fun c => l.r_cond_of_bRiemann_eq_ff hl, fun c π hπ hπp => _⟩
- rw [mul_comm]
+ refine' ⟨fun c => r, fun c => l.r_cond_of_bRiemann_eq_ff hl, fun c π hπ hπp => _⟩; rw [mul_comm]
/- Then the union of boxes `J ∈ π` such that `π.tag ∈ s` includes `F` and is included by `U`,
hence its measure is `ε`-close to the measure of `s`. -/
dsimp [integral_sum]
@@ -113,15 +111,12 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
/- Each set `{x | n < ‖f x‖ ≤ n + 1}`, `n : ℕ`, has measure zero. We cover it by an open set of
measure less than `ε / 2 ^ n / (n + 1)`. Then the norm of the integral sum is less than `ε`. -/
refine' has_integral_iff.2 fun ε ε0 => _
- lift ε to ℝ≥0 using ε0.lt.le
- rw [gt_iff_lt, NNReal.coe_pos] at ε0
+ lift ε to ℝ≥0 using ε0.lt.le; rw [gt_iff_lt, NNReal.coe_pos] at ε0
rcases NNReal.exists_pos_sum_of_countable ε0.ne' ℕ with ⟨δ, δ0, c, hδc, hcε⟩
haveI := Fact.mk (I.measure_coe_lt_top μ)
change μ.restrict I { x | f x ≠ 0 } = 0 at hf
set N : (ι → ℝ) → ℕ := fun x => ⌈‖f x‖⌉₊
- have N0 : ∀ {x}, N x = 0 ↔ f x = 0 := by
- intro x
- simp [N]
+ have N0 : ∀ {x}, N x = 0 ↔ f x = 0 := by intro x; simp [N]
have : ∀ n, ∃ (U : _)(_ : U ⊇ N ⁻¹' {n}), IsOpen U ∧ μ.restrict I U < δ n / n :=
by
refine' fun n => (N ⁻¹' {n}).exists_isOpen_lt_of_lt _ _
@@ -144,12 +139,10 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
have :
∀ J ∈ π.filter fun J => N (π.tag J) = n, ‖(μ ↑J).toReal • f (π.tag J)‖ ≤ (μ J).toReal * n :=
by
- intro J hJ
- rw [tagged_prepartition.mem_filter] at hJ
+ intro J hJ; rw [tagged_prepartition.mem_filter] at hJ
rw [norm_smul, Real.norm_eq_abs, abs_of_nonneg ENNReal.toReal_nonneg]
exact mul_le_mul_of_nonneg_left (hJ.2 ▸ Nat.le_ceil _) ENNReal.toReal_nonneg
- refine' (norm_sum_le_of_le _ this).trans _
- clear this
+ refine' (norm_sum_le_of_le _ this).trans _; clear this
rw [← sum_mul, ← prepartition.measure_Union_to_real]
generalize hm : μ (π.filter fun J => N (π.tag J) = n).iUnion = m
have : m < δ n / n :=
@@ -193,8 +186,7 @@ theorem hasBoxIntegral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ
simpa only [measure.restrict_apply hs, const_zero, integral_piecewise_zero, integral_const,
measure.restrict_apply, MeasurableSet.univ, Set.univ_inter] using
BoxIntegral.hasIntegralIndicatorConst l hl hs I y μ
- · borelize E
- haveI := Fact.mk (I.measure_coe_lt_top μ)
+ · borelize E; haveI := Fact.mk (I.measure_coe_lt_top μ)
rw [integral_add]
exacts[hfi.add hgi, integrable_iff.2 fun _ _ => measure_lt_top _ _,
integrable_iff.2 fun _ _ => measure_lt_top _ _]
@@ -223,8 +215,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
-- First we replace an `ae_strongly_measurable` function by a measurable one.
rcases hf.ae_strongly_measurable with ⟨g, hg, hfg⟩
haveI : separable_space (range g ∪ {0} : Set E) := hg.separable_space_range_union_singleton
- rw [integral_congr_ae hfg]
- have hgi : integrable_on g I μ := (integrable_congr hfg).1 hf
+ rw [integral_congr_ae hfg]; have hgi : integrable_on g I μ := (integrable_congr hfg).1 hf
refine' BoxIntegral.HasIntegral.congrAe _ hfg.symm hl
clear! f
/- Now consider the sequence of simple functions
@@ -246,9 +237,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
/- Now consider `ε > 0`. We need to find `r` such that for any tagged partition subordinate
to `r`, the integral sum is `(μ I + 1 + 1) * ε`-close to the Bochner integral. -/
refine' has_integral_of_mul ((μ I).toReal + 1 + 1) fun ε ε0 => _
- lift ε to ℝ≥0 using ε0.le
- rw [NNReal.coe_pos] at ε0
- have ε0' := ENNReal.coe_pos.2 ε0
+ lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0; have ε0' := ENNReal.coe_pos.2 ε0
-- Choose `N` such that the integral of `‖f N x - g x‖` is less than or equal to `ε`.
obtain ⟨N₀, hN₀⟩ : ∃ N : ℕ, (∫ x in I, ‖f N x - g x‖ ∂μ) ≤ ε :=
by
@@ -285,12 +274,10 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
· /- Since each `f (Nx $ π.tag J)` is `ε`-close to `g (π.tag J)`, replacing the latter with
the former in the formula for the integral sum changes the sum at most by `μ I * ε`. -/
rw [← hπp.Union_eq, π.to_prepartition.measure_Union_to_real, sum_mul, integral_sum]
- refine' dist_sum_sum_le_of_le _ fun J hJ => _
- dsimp
+ refine' dist_sum_sum_le_of_le _ fun J hJ => _; dsimp
rw [dist_eq_norm, ← smul_sub, norm_smul, Real.norm_eq_abs, abs_of_nonneg ENNReal.toReal_nonneg]
refine' mul_le_mul_of_nonneg_left _ ENNReal.toReal_nonneg
- rw [← dist_eq_norm']
- exact hNxε _
+ rw [← dist_eq_norm']; exact hNxε _
· /- We group the terms of both sums by the values of `Nx (π.tag J)`.
For each `N`, the sum of Bochner integrals over the boxes is equal
to the sum of box integrals, and the sum of box integrals is `δᵢ`-close
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -42,7 +42,7 @@ locally-finite measure. -/
theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = false)
{s : Set (ι → ℝ)} (hs : MeasurableSet s) (I : Box ι) (y : E) (μ : Measure (ι → ℝ))
[LocallyFiniteMeasure μ] :
- HasIntegral.{u, v, v} I l (s.indicator fun _ => y) μ.toBoxAdditive.toSmul
+ HasIntegral.{u, v, v} I l (s.indicator fun _ => y) μ.toBoxAdditive.toSMul
((μ (s ∩ I)).toReal • y) :=
by
refine' has_integral_of_mul ‖y‖ fun ε ε0 => _
@@ -108,7 +108,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
box. -/
theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι → ℝ) → E}
{μ : Measure (ι → ℝ)} [LocallyFiniteMeasure μ] (hf : f =ᵐ[μ.restrict I] 0)
- (hl : l.bRiemann = false) : HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSmul 0 :=
+ (hl : l.bRiemann = false) : HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul 0 :=
by
/- Each set `{x | n < ‖f x‖ ≤ n + 1}`, `n : ℕ`, has measure zero. We cover it by an open set of
measure less than `ε / 2 ^ n / (n + 1)`. Then the norm of the integral sum is less than `ε`. -/
@@ -170,8 +170,8 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
a.e. equal to `f` on `I`, then `g` has the same integral on `I`. -/
theorem HasIntegral.congrAe {l : IntegrationParams} {I : Box ι} {y : E} {f g : (ι → ℝ) → E}
{μ : Measure (ι → ℝ)} [LocallyFiniteMeasure μ]
- (hf : HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSmul y) (hfg : f =ᵐ[μ.restrict I] g)
- (hl : l.bRiemann = false) : HasIntegral.{u, v, v} I l g μ.toBoxAdditive.toSmul y :=
+ (hf : HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul y) (hfg : f =ᵐ[μ.restrict I] g)
+ (hl : l.bRiemann = false) : HasIntegral.{u, v, v} I l g μ.toBoxAdditive.toSMul y :=
by
have : g - f =ᵐ[μ.restrict I] 0 := hfg.mono fun x hx => sub_eq_zero.2 hx.symm
simpa using hf.add (has_integral_zero_of_ae_eq_zero this hl)
@@ -186,7 +186,7 @@ namespace SimpleFunc
/-- A simple function is McShane integrable w.r.t. any locally finite measure. -/
theorem hasBoxIntegral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ)) [LocallyFiniteMeasure μ]
(I : Box ι) (l : IntegrationParams) (hl : l.bRiemann = false) :
- HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSmul (f.integral (μ.restrict I)) :=
+ HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul (f.integral (μ.restrict I)) :=
by
induction' f using MeasureTheory.SimpleFunc.induction with y s hs f g hd hfi hgi
·
@@ -204,7 +204,7 @@ theorem hasBoxIntegral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ
integral in the sense of `measure_theory.simple_func.integral`. -/
theorem box_integral_eq_integral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ))
[LocallyFiniteMeasure μ] (I : Box ι) (l : IntegrationParams) (hl : l.bRiemann = false) :
- BoxIntegral.integral.{u, v, v} I l f μ.toBoxAdditive.toSmul = f.integral (μ.restrict I) :=
+ BoxIntegral.integral.{u, v, v} I l f μ.toBoxAdditive.toSMul = f.integral (μ.restrict I) :=
(f.hasBoxIntegral μ I l hl).integral_eq
#align measure_theory.simple_func.box_integral_eq_integral MeasureTheory.SimpleFunc.box_integral_eq_integral
@@ -217,7 +217,7 @@ open TopologicalSpace
theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {μ : Measure (ι → ℝ)}
[LocallyFiniteMeasure μ] {I : Box ι} (hf : IntegrableOn f I μ) (l : IntegrationParams)
(hl : l.bRiemann = false) :
- HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSmul (∫ x in I, f x ∂μ) :=
+ HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul (∫ x in I, f x ∂μ) :=
by
borelize E
-- First we replace an `ae_strongly_measurable` function by a measurable one.
mathlib commit https://github.com/leanprover-community/mathlib/commit/f51de8769c34652d82d1c8e5f8f18f8374782bed
@@ -4,11 +4,12 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
! This file was ported from Lean 3 source module analysis.box_integral.integrability
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit fd5edc43dc4f10b85abfe544b88f82cf13c5f844
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Analysis.BoxIntegral.Basic
+import Mathbin.MeasureTheory.Integral.SetIntegral
import Mathbin.MeasureTheory.Measure.Regular
/-!
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -77,7 +77,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
sum_indicator_eq_sum_filter, ← sum_smul, ← sub_smul, norm_smul, Real.norm_eq_abs, ←
prepartition.filter_boxes, ← prepartition.measure_Union_to_real]
refine' mul_le_mul_of_nonneg_right _ (norm_nonneg y)
- set t := (π.to_prepartition.filter fun J => π.tag J ∈ s).unionᵢ
+ set t := (π.to_prepartition.filter fun J => π.tag J ∈ s).iUnion
change abs ((μ t).toReal - (μ (s ∩ I)).toReal) ≤ ε
have htU : t ⊆ U ∩ I :=
by
@@ -94,7 +94,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
refine' le_measure_diff.trans ((measure_mono _).trans hμF.le)
rintro x ⟨⟨hxs, hxI⟩, hxt⟩
refine' ⟨⟨hxs, box.coe_subset_Icc hxI⟩, fun hxF => hxt _⟩
- simp only [t, prepartition.Union_def, prepartition.mem_filter, Set.mem_unionᵢ, exists_prop]
+ simp only [t, prepartition.Union_def, prepartition.mem_filter, Set.mem_iUnion, exists_prop]
rcases hπp x hxI with ⟨J, hJπ, hxJ⟩
refine' ⟨J, ⟨hJπ, _⟩, hxJ⟩
contrapose hxF
@@ -150,7 +150,7 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
refine' (norm_sum_le_of_le _ this).trans _
clear this
rw [← sum_mul, ← prepartition.measure_Union_to_real]
- generalize hm : μ (π.filter fun J => N (π.tag J) = n).unionᵢ = m
+ generalize hm : μ (π.filter fun J => N (π.tag J) = n).iUnion = m
have : m < δ n / n :=
by
simp only [measure.restrict_apply (hUo _).MeasurableSet] at hμU
mathlib commit https://github.com/leanprover-community/mathlib/commit/d4437c68c8d350fc9d4e95e1e174409db35e30d7
@@ -40,7 +40,7 @@ namespace BoxIntegral
locally-finite measure. -/
theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = false)
{s : Set (ι → ℝ)} (hs : MeasurableSet s) (I : Box ι) (y : E) (μ : Measure (ι → ℝ))
- [IsLocallyFiniteMeasure μ] :
+ [LocallyFiniteMeasure μ] :
HasIntegral.{u, v, v} I l (s.indicator fun _ => y) μ.toBoxAdditive.toSmul
((μ (s ∩ I)).toReal • y) :=
by
@@ -106,7 +106,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
/-- If `f` is a.e. equal to zero on a rectangular box, then it has McShane integral zero on this
box. -/
theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι → ℝ) → E}
- {μ : Measure (ι → ℝ)} [IsLocallyFiniteMeasure μ] (hf : f =ᵐ[μ.restrict I] 0)
+ {μ : Measure (ι → ℝ)} [LocallyFiniteMeasure μ] (hf : f =ᵐ[μ.restrict I] 0)
(hl : l.bRiemann = false) : HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSmul 0 :=
by
/- Each set `{x | n < ‖f x‖ ≤ n + 1}`, `n : ℕ`, has measure zero. We cover it by an open set of
@@ -168,7 +168,7 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
/-- If `f` has integral `y` on a box `I` with respect to a locally finite measure `μ` and `g` is
a.e. equal to `f` on `I`, then `g` has the same integral on `I`. -/
theorem HasIntegral.congrAe {l : IntegrationParams} {I : Box ι} {y : E} {f g : (ι → ℝ) → E}
- {μ : Measure (ι → ℝ)} [IsLocallyFiniteMeasure μ]
+ {μ : Measure (ι → ℝ)} [LocallyFiniteMeasure μ]
(hf : HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSmul y) (hfg : f =ᵐ[μ.restrict I] g)
(hl : l.bRiemann = false) : HasIntegral.{u, v, v} I l g μ.toBoxAdditive.toSmul y :=
by
@@ -183,7 +183,7 @@ namespace MeasureTheory
namespace SimpleFunc
/-- A simple function is McShane integrable w.r.t. any locally finite measure. -/
-theorem hasBoxIntegral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ)) [IsLocallyFiniteMeasure μ]
+theorem hasBoxIntegral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ)) [LocallyFiniteMeasure μ]
(I : Box ι) (l : IntegrationParams) (hl : l.bRiemann = false) :
HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSmul (f.integral (μ.restrict I)) :=
by
@@ -202,7 +202,7 @@ theorem hasBoxIntegral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ
/-- For a simple function, its McShane (or Henstock, or `⊥`) box integral is equal to its
integral in the sense of `measure_theory.simple_func.integral`. -/
theorem box_integral_eq_integral (f : SimpleFunc (ι → ℝ) E) (μ : Measure (ι → ℝ))
- [IsLocallyFiniteMeasure μ] (I : Box ι) (l : IntegrationParams) (hl : l.bRiemann = false) :
+ [LocallyFiniteMeasure μ] (I : Box ι) (l : IntegrationParams) (hl : l.bRiemann = false) :
BoxIntegral.integral.{u, v, v} I l f μ.toBoxAdditive.toSmul = f.integral (μ.restrict I) :=
(f.hasBoxIntegral μ I l hl).integral_eq
#align measure_theory.simple_func.box_integral_eq_integral MeasureTheory.SimpleFunc.box_integral_eq_integral
@@ -214,7 +214,7 @@ open TopologicalSpace
/-- If `f : ℝⁿ → E` is Bochner integrable w.r.t. a locally finite measure `μ` on a rectangular box
`I`, then it is McShane integrable on `I` with the same integral. -/
theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {μ : Measure (ι → ℝ)}
- [IsLocallyFiniteMeasure μ] {I : Box ι} (hf : IntegrableOn f I μ) (l : IntegrationParams)
+ [LocallyFiniteMeasure μ] {I : Box ι} (hf : IntegrableOn f I μ) (l : IntegrationParams)
(hl : l.bRiemann = false) :
HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSmul (∫ x in I, f x ∂μ) :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/92c69b77c5a7dc0f7eeddb552508633305157caa
@@ -318,13 +318,13 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
· refine' sum_congr rfl fun J hJ => _
rw [← simple_func.integral_eq_integral, simple_func.box_integral_eq_integral _ _ _ _ hl,
hNxn J hJ]
- exact (hfi _).monoSet (prepartition.le_of_mem _ hJ)
+ exact (hfi _).mono_set (prepartition.le_of_mem _ hJ)
· /- For the last jump, we use the fact that the distance between `f (Nx x) x` and `g x` is less
than or equal to the distance between `f N₀ x` and `g x` and the integral of `‖f N₀ x - g x‖`
is less than or equal to `ε`. -/
refine' le_trans _ hN₀
have hfi : ∀ (n), ∀ J ∈ π, integrable_on (f n) (↑J) μ := fun n J hJ =>
- (hfi n).monoSet (π.le_of_mem' J hJ)
+ (hfi n).mono_set (π.le_of_mem' J hJ)
have hgi : ∀ J ∈ π, integrable_on g (↑J) μ := fun J hJ => hgi.mono_set (π.le_of_mem' J hJ)
have hfgi : ∀ (n), ∀ J ∈ π, integrable_on (fun x => ‖f n x - g x‖) J μ := fun n J hJ =>
((hfi n J hJ).sub (hgi J hJ)).norm
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -312,7 +312,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
have :
l.mem_base_set I c ((hfi' n).convergenceR (δ n) c) (π.filter fun J => Nx (π.tag J) = n) :=
(hπ.filter _).mono' _ le_rfl le_rfl fun J hJ => (hrn J hJ).le
- convert (hfi' n).dist_integralSum_sum_integral_le_of_memBaseSet (δ0 _) this using 2
+ convert(hfi' n).dist_integralSum_sum_integral_le_of_memBaseSet (δ0 _) this using 2
· refine' sum_congr rfl fun J hJ => _
simp [hNxn J hJ]
· refine' sum_congr rfl fun J hJ => _
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -34,8 +34,8 @@ open MeasureTheory Metric Set Finset Filter BoxIntegral
namespace BoxIntegral
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (F «expr ⊆ » «expr ∩ »(s, I.Icc)) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (U «expr ⊇ » «expr ∩ »(s, I.Icc)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (F «expr ⊆ » «expr ∩ »(s, I.Icc)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » «expr ∩ »(s, I.Icc)) -/
/-- The indicator function of a measurable set is McShane integrable with respect to any
locally-finite measure. -/
theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = false)
@@ -102,7 +102,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
simpa only [r, s.piecewise_eq_of_not_mem _ _ hxF] using hπ.1 J hJπ (box.coe_subset_Icc hxJ)
#align box_integral.has_integral_indicator_const BoxIntegral.hasIntegralIndicatorConst
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (U «expr ⊇ » «expr ⁻¹' »(N, {n})) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » «expr ⁻¹' »(N, {n})) -/
/-- If `f` is a.e. equal to zero on a rectangular box, then it has McShane integral zero on this
box. -/
theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι → ℝ) → E}
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -24,7 +24,7 @@ integral, McShane integral, Bochner integral
-/
-open Classical NNReal Ennreal Topology BigOperators
+open Classical NNReal ENNReal Topology BigOperators
universe u v
@@ -54,10 +54,10 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
have B : μ (s ∩ I) ≠ ∞ :=
((measure_mono <| Set.inter_subset_right _ _).trans_lt (I.measure_coe_lt_top μ)).Ne
obtain ⟨F, hFs, hFc, hμF⟩ : ∃ (F : _)(_ : F ⊆ s ∩ I.Icc), IsClosed F ∧ μ ((s ∩ I.Icc) \ F) < ε
- exact (hs.inter I.measurable_set_Icc).exists_isClosed_diff_lt A (Ennreal.coe_pos.2 ε0).ne'
+ exact (hs.inter I.measurable_set_Icc).exists_isClosed_diff_lt A (ENNReal.coe_pos.2 ε0).ne'
obtain ⟨U, hsU, hUo, hUt, hμU⟩ :
∃ (U : _)(_ : U ⊇ s ∩ I.Icc), IsOpen U ∧ μ U < ∞ ∧ μ (U \ (s ∩ I.Icc)) < ε
- exact (hs.inter I.measurable_set_Icc).exists_isOpen_diff_lt A (Ennreal.coe_pos.2 ε0).ne'
+ exact (hs.inter I.measurable_set_Icc).exists_isOpen_diff_lt A (ENNReal.coe_pos.2 ε0).ne'
/- Then we choose `r` so that `closed_ball x (r x) ⊆ U` whenever `x ∈ s ∩ I.Icc` and
`closed_ball x (r x)` is disjoint with `F` otherwise. -/
have : ∀ x ∈ s ∩ I.Icc, ∃ r : Ioi (0 : ℝ), closed_ball x r ⊆ U := fun x hx =>
@@ -85,12 +85,12 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
refine' fun J hJ hJs x hx => ⟨hrsU _ ⟨hJs, π.tag_mem_Icc J⟩ _, π.le_of_mem' J hJ hx⟩
simpa only [r, s.piecewise_eq_of_mem _ _ hJs] using hπ.1 J hJ (box.coe_subset_Icc hx)
refine' abs_sub_le_iff.2 ⟨_, _⟩
- · refine' (Ennreal.le_toReal_sub B).trans (Ennreal.toReal_le_coe_of_le_coe _)
+ · refine' (ENNReal.le_toReal_sub B).trans (ENNReal.toReal_le_coe_of_le_coe _)
refine' (tsub_le_tsub (measure_mono htU) le_rfl).trans (le_measure_diff.trans _)
refine' (measure_mono fun x hx => _).trans hμU.le
exact ⟨hx.1.1, fun hx' => hx.2 ⟨hx'.1, hx.1.2⟩⟩
· have hμt : μ t ≠ ∞ := ((measure_mono (htU.trans (inter_subset_left _ _))).trans_lt hUt).Ne
- refine' (Ennreal.le_toReal_sub hμt).trans (Ennreal.toReal_le_coe_of_le_coe _)
+ refine' (ENNReal.le_toReal_sub hμt).trans (ENNReal.toReal_le_coe_of_le_coe _)
refine' le_measure_diff.trans ((measure_mono _).trans hμF.le)
rintro x ⟨⟨hxs, hxI⟩, hxt⟩
refine' ⟨⟨hxs, box.coe_subset_Icc hxI⟩, fun hxF => hxt _⟩
@@ -125,7 +125,7 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
by
refine' fun n => (N ⁻¹' {n}).exists_isOpen_lt_of_lt _ _
cases n
- · simpa [Ennreal.div_zero (Ennreal.coe_pos.2 (δ0 _)).ne'] using measure_lt_top (μ.restrict I) _
+ · simpa [ENNReal.div_zero (ENNReal.coe_pos.2 (δ0 _)).ne'] using measure_lt_top (μ.restrict I) _
· refine' (measure_mono_null _ hf).le.trans_lt _
· exact fun x hxN hxf => n.succ_ne_zero ((Eq.symm hxN).trans <| N0.2 hxf)
· simp [(δ0 _).ne']
@@ -145,8 +145,8 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
by
intro J hJ
rw [tagged_prepartition.mem_filter] at hJ
- rw [norm_smul, Real.norm_eq_abs, abs_of_nonneg Ennreal.toReal_nonneg]
- exact mul_le_mul_of_nonneg_left (hJ.2 ▸ Nat.le_ceil _) Ennreal.toReal_nonneg
+ rw [norm_smul, Real.norm_eq_abs, abs_of_nonneg ENNReal.toReal_nonneg]
+ exact mul_le_mul_of_nonneg_left (hJ.2 ▸ Nat.le_ceil _) ENNReal.toReal_nonneg
refine' (norm_sum_le_of_le _ this).trans _
clear this
rw [← sum_mul, ← prepartition.measure_Union_to_real]
@@ -160,9 +160,9 @@ theorem hasIntegralZeroOfAeEqZero {l : IntegrationParams} {I : Box ι} {f : (ι
rintro x ⟨J, ⟨hJ, rfl⟩, hx⟩
exact ⟨hrU _ (hπ.1 _ hJ (box.coe_subset_Icc hx)), π.le_of_mem' J hJ hx⟩
lift m to ℝ≥0 using ne_top_of_lt this
- rw [Ennreal.coe_toReal, ← NNReal.coe_nat_cast, ← NNReal.coe_mul, NNReal.coe_le_coe, ←
- Ennreal.coe_le_coe, Ennreal.coe_mul, Ennreal.coe_nat, mul_comm]
- exact (mul_le_mul_left' this.le _).trans Ennreal.mul_div_le
+ rw [ENNReal.coe_toReal, ← NNReal.coe_nat_cast, ← NNReal.coe_mul, NNReal.coe_le_coe, ←
+ ENNReal.coe_le_coe, ENNReal.coe_mul, ENNReal.coe_nat, mul_comm]
+ exact (mul_le_mul_left' this.le _).trans ENNReal.mul_div_le
#align box_integral.has_integral_zero_of_ae_eq_zero BoxIntegral.hasIntegralZeroOfAeEqZero
/-- If `f` has integral `y` on a box `I` with respect to a locally finite measure `μ` and `g` is
@@ -240,14 +240,14 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
by
intro x m n hmn
rw [← dist_eq_norm, ← dist_eq_norm, dist_nndist, dist_nndist, NNReal.coe_le_coe, ←
- Ennreal.coe_le_coe, ← edist_nndist, ← edist_nndist]
+ ENNReal.coe_le_coe, ← edist_nndist, ← edist_nndist]
exact simple_func.edist_approx_on_mono hg.measurable _ x hmn
/- Now consider `ε > 0`. We need to find `r` such that for any tagged partition subordinate
to `r`, the integral sum is `(μ I + 1 + 1) * ε`-close to the Bochner integral. -/
refine' has_integral_of_mul ((μ I).toReal + 1 + 1) fun ε ε0 => _
lift ε to ℝ≥0 using ε0.le
rw [NNReal.coe_pos] at ε0
- have ε0' := Ennreal.coe_pos.2 ε0
+ have ε0' := ENNReal.coe_pos.2 ε0
-- Choose `N` such that the integral of `‖f N x - g x‖` is less than or equal to `ε`.
obtain ⟨N₀, hN₀⟩ : ∃ N : ℕ, (∫ x in I, ‖f N x - g x‖ ∂μ) ≤ ε :=
by
@@ -286,8 +286,8 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
rw [← hπp.Union_eq, π.to_prepartition.measure_Union_to_real, sum_mul, integral_sum]
refine' dist_sum_sum_le_of_le _ fun J hJ => _
dsimp
- rw [dist_eq_norm, ← smul_sub, norm_smul, Real.norm_eq_abs, abs_of_nonneg Ennreal.toReal_nonneg]
- refine' mul_le_mul_of_nonneg_left _ Ennreal.toReal_nonneg
+ rw [dist_eq_norm, ← smul_sub, norm_smul, Real.norm_eq_abs, abs_of_nonneg ENNReal.toReal_nonneg]
+ refine' mul_le_mul_of_nonneg_left _ ENNReal.toReal_nonneg
rw [← dist_eq_norm']
exact hNxε _
· /- We group the terms of both sums by the values of `Nx (π.tag J)`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
nat_cast
/int_cast
/rat_cast
to natCast
/intCast
/ratCast
(#11486)
Now that I am defining NNRat.cast
, I want a definitive answer to this naming issue. Plenty of lemmas in mathlib already use natCast
/intCast
/ratCast
over nat_cast
/int_cast
/rat_cast
, and this matches with the general expectation that underscore-separated name parts correspond to a single declaration.
@@ -151,7 +151,7 @@ theorem HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι} {f : (ι
exact ⟨hrU _ (hπ.1 _ hJ (Box.coe_subset_Icc hx)), π.le_of_mem' J hJ hx⟩
clear_value m
lift m to ℝ≥0 using ne_top_of_lt this
- rw [ENNReal.coe_toReal, ← NNReal.coe_nat_cast, ← NNReal.coe_mul, NNReal.coe_le_coe, ←
+ rw [ENNReal.coe_toReal, ← NNReal.coe_natCast, ← NNReal.coe_mul, NNReal.coe_le_coe, ←
ENNReal.coe_le_coe, ENNReal.coe_mul, ENNReal.coe_natCast, mul_comm]
exact (mul_le_mul_left' this.le _).trans ENNReal.mul_div_le
#align box_integral.has_integral_zero_of_ae_eq_zero BoxIntegral.HasIntegral.of_aeEq_zero
@@ -152,7 +152,7 @@ theorem HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι} {f : (ι
clear_value m
lift m to ℝ≥0 using ne_top_of_lt this
rw [ENNReal.coe_toReal, ← NNReal.coe_nat_cast, ← NNReal.coe_mul, NNReal.coe_le_coe, ←
- ENNReal.coe_le_coe, ENNReal.coe_mul, ENNReal.coe_nat, mul_comm]
+ ENNReal.coe_le_coe, ENNReal.coe_mul, ENNReal.coe_natCast, mul_comm]
exact (mul_le_mul_left' this.le _).trans ENNReal.mul_div_le
#align box_integral.has_integral_zero_of_ae_eq_zero BoxIntegral.HasIntegral.of_aeEq_zero
@@ -141,19 +141,15 @@ theorem HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι} {f : (ι
exact hJ.2 ▸ Nat.le_ceil _
refine' (norm_sum_le_of_le _ this).trans _; clear this
rw [← sum_mul, ← Prepartition.measure_iUnion_toReal]
- -- Adaption note: v4.7.0-rc1
- -- The behaviour of `generalize` was changed in https://github.com/leanprover/lean4/pull/3575
- -- to use transparancy `instances` (rather than `default`)
- -- `generalize'` is a temporary backwards compatibility shim.
- -- Hopefully we will be able to refactor this proof to use `generalize` again, and then drop
- -- `generalize'`.
- generalize' hm : μ (π.filter fun J => N (π.tag J) = n).iUnion = m
+ let m := μ (π.filter fun J => N (π.tag J) = n).iUnion
+ show m.toReal * ↑n ≤ ↑(δ n)
have : m < δ n / n := by
simp only [Measure.restrict_apply (hUo _).measurableSet] at hμU
- refine' hm ▸ (measure_mono _).trans_lt (hμU _)
+ refine' (measure_mono _).trans_lt (hμU _)
simp only [Set.subset_def, TaggedPrepartition.mem_iUnion, TaggedPrepartition.mem_filter]
rintro x ⟨J, ⟨hJ, rfl⟩, hx⟩
exact ⟨hrU _ (hπ.1 _ hJ (Box.coe_subset_Icc hx)), π.le_of_mem' J hJ hx⟩
+ clear_value m
lift m to ℝ≥0 using ne_top_of_lt this
rw [ENNReal.coe_toReal, ← NNReal.coe_nat_cast, ← NNReal.coe_mul, NNReal.coe_le_coe, ←
ENNReal.coe_le_coe, ENNReal.coe_mul, ENNReal.coe_nat, mul_comm]
This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0
branch as we update to intermediate nightlies.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>
@@ -5,6 +5,7 @@ Authors: Yury Kudryashov
-/
import Mathlib.Analysis.BoxIntegral.Basic
import Mathlib.MeasureTheory.Integral.SetIntegral
+import Mathlib.Tactic.Generalize
#align_import analysis.box_integral.integrability from "leanprover-community/mathlib"@"fd5edc43dc4f10b85abfe544b88f82cf13c5f844"
@@ -140,7 +141,13 @@ theorem HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι} {f : (ι
exact hJ.2 ▸ Nat.le_ceil _
refine' (norm_sum_le_of_le _ this).trans _; clear this
rw [← sum_mul, ← Prepartition.measure_iUnion_toReal]
- generalize hm : μ (π.filter fun J => N (π.tag J) = n).iUnion = m
+ -- Adaption note: v4.7.0-rc1
+ -- The behaviour of `generalize` was changed in https://github.com/leanprover/lean4/pull/3575
+ -- to use transparancy `instances` (rather than `default`)
+ -- `generalize'` is a temporary backwards compatibility shim.
+ -- Hopefully we will be able to refactor this proof to use `generalize` again, and then drop
+ -- `generalize'`.
+ generalize' hm : μ (π.filter fun J => N (π.tag J) = n).iUnion = m
have : m < δ n / n := by
simp only [Measure.restrict_apply (hUo _).measurableSet] at hμU
refine' hm ▸ (measure_mono _).trans_lt (hμU _)
@@ -76,10 +76,10 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
set t := (π.filter (π.tag · ∈ s)).iUnion
change abs ((μ t).toReal - (μ (s ∩ I)).toReal) ≤ ε
have htU : t ⊆ U ∩ I := by
- simp only [TaggedPrepartition.iUnion_def, iUnion_subset_iff, TaggedPrepartition.mem_filter,
+ simp only [t, TaggedPrepartition.iUnion_def, iUnion_subset_iff, TaggedPrepartition.mem_filter,
and_imp]
refine' fun J hJ hJs x hx => ⟨hrsU _ ⟨hJs, π.tag_mem_Icc J⟩ _, π.le_of_mem' J hJ hx⟩
- simpa only [s.piecewise_eq_of_mem _ _ hJs] using hπ.1 J hJ (Box.coe_subset_Icc hx)
+ simpa only [r, s.piecewise_eq_of_mem _ _ hJs] using hπ.1 J hJ (Box.coe_subset_Icc hx)
refine' abs_sub_le_iff.2 ⟨_, _⟩
· refine' (ENNReal.le_toReal_sub B).trans (ENNReal.toReal_le_coe_of_le_coe _)
refine' (tsub_le_tsub (measure_mono htU) le_rfl).trans (le_measure_diff.trans _)
@@ -90,13 +90,13 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
refine' le_measure_diff.trans ((measure_mono _).trans hμF.le)
rintro x ⟨⟨hxs, hxI⟩, hxt⟩
refine' ⟨⟨hxs, Box.coe_subset_Icc hxI⟩, fun hxF => hxt _⟩
- simp only [TaggedPrepartition.iUnion_def, TaggedPrepartition.mem_filter, Set.mem_iUnion,
+ simp only [t, TaggedPrepartition.iUnion_def, TaggedPrepartition.mem_filter, Set.mem_iUnion,
exists_prop]
rcases hπp x hxI with ⟨J, hJπ, hxJ⟩
refine' ⟨J, ⟨hJπ, _⟩, hxJ⟩
contrapose hxF
refine' hrs'F _ ⟨π.tag_mem_Icc J, hxF⟩ _
- simpa only [s.piecewise_eq_of_not_mem _ _ hxF] using hπ.1 J hJπ (Box.coe_subset_Icc hxJ)
+ simpa only [r, s.piecewise_eq_of_not_mem _ _ hxF] using hπ.1 J hJπ (Box.coe_subset_Icc hxJ)
#align box_integral.has_integral_indicator_const BoxIntegral.hasIntegralIndicatorConst
/-- If `f` is a.e. equal to zero on a rectangular box, then it has McShane integral zero on this
@@ -112,7 +112,7 @@ theorem HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι} {f : (ι
haveI := Fact.mk (I.measure_coe_lt_top μ)
change μ.restrict I {x | f x ≠ 0} = 0 at hf
set N : (ι → ℝ) → ℕ := fun x => ⌈‖f x‖⌉₊
- have N0 : ∀ {x}, N x = 0 ↔ f x = 0 := by simp
+ have N0 : ∀ {x}, N x = 0 ↔ f x = 0 := by simp [N]
have : ∀ n, ∃ U, N ⁻¹' {n} ⊆ U ∧ IsOpen U ∧ μ.restrict I U < δ n / n := fun n ↦ by
refine (N ⁻¹' {n}).exists_isOpen_lt_of_lt _ ?_
cases' n with n
@@ -5,7 +5,6 @@ Authors: Yury Kudryashov
-/
import Mathlib.Analysis.BoxIntegral.Basic
import Mathlib.MeasureTheory.Integral.SetIntegral
-import Mathlib.MeasureTheory.Measure.Regular
#align_import analysis.box_integral.integrability from "leanprover-community/mathlib"@"fd5edc43dc4f10b85abfe544b88f82cf13c5f844"
@@ -16,6 +15,8 @@ In this file we prove that any Bochner integrable function is McShane integrable
Henstock and `GP` integrable) with the same integral. The proof is based on
[Russel A. Gordon, *The integrals of Lebesgue, Denjoy, Perron, and Henstock*][Gordon55].
+We deduce that the same is true for the Riemann integral for continuous functions.
+
## Tags
integral, McShane integral, Bochner integral
@@ -302,4 +303,16 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
exact hfg_mono x (hNx (π.tag J))
#align measure_theory.integrable_on.has_box_integral MeasureTheory.IntegrableOn.hasBoxIntegral
+/-- If `f : ℝⁿ → E` is continuous on a rectangular box `I`, then it is Box integrable on `I`
+w.r.t. a locally finite measure `μ` with the same integral. -/
+theorem ContinuousOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} (μ : Measure (ι → ℝ))
+ [IsLocallyFiniteMeasure μ] {I : Box ι} (hc : ContinuousOn f (Box.Icc I))
+ (l : IntegrationParams) :
+ HasIntegral.{u, v, v} I l f μ.toBoxAdditive.toSMul (∫ x in I, f x ∂μ) := by
+ obtain ⟨y, hy⟩ := BoxIntegral.integrable_of_continuousOn l hc μ
+ convert hy
+ have : IntegrableOn f I μ :=
+ IntegrableOn.mono_set (hc.integrableOn_compact I.isCompact_Icc) Box.coe_subset_Icc
+ exact HasIntegral.unique (IntegrableOn.hasBoxIntegral this ⊥ rfl) (HasIntegral.mono hy bot_le)
+
end MeasureTheory
$
with <|
(#9319)
See Zulip thread for the discussion.
@@ -252,7 +252,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
(∑ J in π.boxes, ∫ x in J, f (Nx <| π.tag J) x ∂μ) _).trans _
rw [add_mul, add_mul, one_mul]
refine' add_le_add_three _ _ _
- · /- Since each `f (Nx $ π.tag J)` is `ε`-close to `g (π.tag J)`, replacing the latter with
+ · /- Since each `f (Nx <| π.tag J)` is `ε`-close to `g (π.tag J)`, replacing the latter with
the former in the formula for the integral sum changes the sum at most by `μ I * ε`. -/
rw [← hπp.iUnion_eq, π.measure_iUnion_toReal, sum_mul, integralSum]
refine' dist_sum_sum_le_of_le _ fun J _ => _; dsimp
Following on from previous gcongr
golfing PRs #4702 and #4784.
This is a replacement for #7901: this round of golfs, first introduced there, there exposed some performance issues in gcongr
, hopefully fixed by #8731, and I am opening a new PR so that the performance can be checked against current master rather than master at the time of #7901.
@@ -71,7 +71,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
simp only [mem_closedBall, dist_eq_norm, ← indicator_const_smul_apply,
sum_indicator_eq_sum_filter, ← sum_smul, ← sub_smul, norm_smul, Real.norm_eq_abs, ←
Prepartition.filter_boxes, ← Prepartition.measure_iUnion_toReal]
- refine' mul_le_mul_of_nonneg_right _ (norm_nonneg y)
+ gcongr
set t := (π.filter (π.tag · ∈ s)).iUnion
change abs ((μ t).toReal - (μ (s ∩ I)).toReal) ≤ ε
have htU : t ⊆ U ∩ I := by
@@ -135,7 +135,8 @@ theorem HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι} {f : (ι
‖(μ ↑J).toReal • f (π.tag J)‖ ≤ (μ J).toReal * n := fun J hJ ↦ by
rw [TaggedPrepartition.mem_filter] at hJ
rw [norm_smul, Real.norm_eq_abs, abs_of_nonneg ENNReal.toReal_nonneg]
- exact mul_le_mul_of_nonneg_left (hJ.2 ▸ Nat.le_ceil _) ENNReal.toReal_nonneg
+ gcongr
+ exact hJ.2 ▸ Nat.le_ceil _
refine' (norm_sum_le_of_le _ this).trans _; clear this
rw [← sum_mul, ← Prepartition.measure_iUnion_toReal]
generalize hm : μ (π.filter fun J => N (π.tag J) = n).iUnion = m
@@ -256,7 +257,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
rw [← hπp.iUnion_eq, π.measure_iUnion_toReal, sum_mul, integralSum]
refine' dist_sum_sum_le_of_le _ fun J _ => _; dsimp
rw [dist_eq_norm, ← smul_sub, norm_smul, Real.norm_eq_abs, abs_of_nonneg ENNReal.toReal_nonneg]
- refine' mul_le_mul_of_nonneg_left _ ENNReal.toReal_nonneg
+ gcongr
rw [← dist_eq_norm']; exact hNxε _
· /- We group the terms of both sums by the values of `Nx (π.tag J)`.
For each `N`, the sum of Bochner integrals over the boxes is equal
Due to recent changes in core we can reduce or remove many set_option maxHeartbeats
statements.
I have tried to be careful to not leave anything too close to the line, so don't be surprised if some of these can still be reduced further.
This reduces us from 96 maxHeartbeats
statements to 44
. (There are 10 false positives in meta or testing code.)
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -113,7 +113,6 @@ theorem HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι} {f : (ι
set N : (ι → ℝ) → ℕ := fun x => ⌈‖f x‖⌉₊
have N0 : ∀ {x}, N x = 0 ↔ f x = 0 := by simp
have : ∀ n, ∃ U, N ⁻¹' {n} ⊆ U ∧ IsOpen U ∧ μ.restrict I U < δ n / n := fun n ↦ by
- set_option synthInstance.maxHeartbeats 21000 in
refine (N ⁻¹' {n}).exists_isOpen_lt_of_lt _ ?_
cases' n with n
· simpa [ENNReal.div_zero (ENNReal.coe_pos.2 (δ0 _)).ne'] using measure_lt_top (μ.restrict I) _
And fix some names in comments where this revealed issues
@@ -208,7 +208,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
refine' BoxIntegral.HasIntegral.congr_ae _ hfg.symm hl
clear! f
/- Now consider the sequence of simple functions
- `simple_func.approx_on g hg.measurable (range g ∪ {0}) 0 (by simp)`
+ `SimpleFunc.approxOn g hg.measurable (range g ∪ {0}) 0 (by simp)`
approximating `g`. Recall some properties of this sequence. -/
set f : ℕ → SimpleFunc (ι → ℝ) E :=
SimpleFunc.approxOn g hg.measurable (range g ∪ {0}) 0 (by simp)
@@ -112,8 +112,9 @@ theorem HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι} {f : (ι
change μ.restrict I {x | f x ≠ 0} = 0 at hf
set N : (ι → ℝ) → ℕ := fun x => ⌈‖f x‖⌉₊
have N0 : ∀ {x}, N x = 0 ↔ f x = 0 := by simp
- have : ∀ n, ∃ U, N ⁻¹' {n} ⊆ U ∧ IsOpen U ∧ μ.restrict I U < δ n / n := by
- refine' fun n => (N ⁻¹' {n}).exists_isOpen_lt_of_lt _ _
+ have : ∀ n, ∃ U, N ⁻¹' {n} ⊆ U ∧ IsOpen U ∧ μ.restrict I U < δ n / n := fun n ↦ by
+ set_option synthInstance.maxHeartbeats 21000 in
+ refine (N ⁻¹' {n}).exists_isOpen_lt_of_lt _ ?_
cases' n with n
· simpa [ENNReal.div_zero (ENNReal.coe_pos.2 (δ0 _)).ne'] using measure_lt_top (μ.restrict I) _
· refine' (measure_mono_null _ hf).le.trans_lt _
@@ -2,16 +2,13 @@
Copyright (c) 2021 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module analysis.box_integral.integrability
-! leanprover-community/mathlib commit fd5edc43dc4f10b85abfe544b88f82cf13c5f844
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.BoxIntegral.Basic
import Mathlib.MeasureTheory.Integral.SetIntegral
import Mathlib.MeasureTheory.Measure.Regular
+#align_import analysis.box_integral.integrability from "leanprover-community/mathlib"@"fd5edc43dc4f10b85abfe544b88f82cf13c5f844"
+
/-!
# McShane integrability vs Bochner integrability
This is the second half of the changes originally in #5699, removing all occurrences of ;
after a space and implementing a linter rule to enforce it.
In most cases this 2-character substring has a space after it, so the following command was run first:
find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;
The remaining cases were few enough in number that they were done manually.
@@ -225,7 +225,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
/- Now consider `ε > 0`. We need to find `r` such that for any tagged partition subordinate
to `r`, the integral sum is `(μ I + 1 + 1) * ε`-close to the Bochner integral. -/
refine' HasIntegral.of_mul ((μ I).toReal + 1 + 1) fun ε ε0 => _
- lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0 ; have ε0' := ENNReal.coe_pos.2 ε0
+ lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0; have ε0' := ENNReal.coe_pos.2 ε0
-- Choose `N` such that the integral of `‖f N x - g x‖` is less than or equal to `ε`.
obtain ⟨N₀, hN₀⟩ : ∃ N : ℕ, ∫ x in I, ‖f N x - g x‖ ∂μ ≤ ε := by
have : Tendsto (fun n => ∫⁻ x in I, ‖f n x - g x‖₊ ∂μ) atTop (𝓝 0) :=
@@ -43,7 +43,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
HasIntegral.{u, v, v} I l (s.indicator fun _ => y) μ.toBoxAdditive.toSMul
((μ (s ∩ I)).toReal • y) := by
refine' HasIntegral.of_mul ‖y‖ fun ε ε0 => _
- lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0
+ lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0
/- First we choose a closed set `F ⊆ s ∩ I.Icc` and an open set `U ⊇ s` such that
both `(s ∩ I.Icc) \ F` and `U \ s` have measure less than `ε`. -/
have A : μ (s ∩ Box.Icc I) ≠ ∞ :=
@@ -109,10 +109,10 @@ theorem HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι} {f : (ι
/- Each set `{x | n < ‖f x‖ ≤ n + 1}`, `n : ℕ`, has measure zero. We cover it by an open set of
measure less than `ε / 2 ^ n / (n + 1)`. Then the norm of the integral sum is less than `ε`. -/
refine' hasIntegral_iff.2 fun ε ε0 => _
- lift ε to ℝ≥0 using ε0.lt.le; rw [gt_iff_lt, NNReal.coe_pos] at ε0
+ lift ε to ℝ≥0 using ε0.lt.le; rw [gt_iff_lt, NNReal.coe_pos] at ε0
rcases NNReal.exists_pos_sum_of_countable ε0.ne' ℕ with ⟨δ, δ0, c, hδc, hcε⟩
haveI := Fact.mk (I.measure_coe_lt_top μ)
- change μ.restrict I {x | f x ≠ 0} = 0 at hf
+ change μ.restrict I {x | f x ≠ 0} = 0 at hf
set N : (ι → ℝ) → ℕ := fun x => ⌈‖f x‖⌉₊
have N0 : ∀ {x}, N x = 0 ↔ f x = 0 := by simp
have : ∀ n, ∃ U, N ⁻¹' {n} ⊆ U ∧ IsOpen U ∧ μ.restrict I U < δ n / n := by
@@ -136,14 +136,14 @@ theorem HasIntegral.of_aeEq_zero {l : IntegrationParams} {I : Box ι} {f : (ι
dsimp [integralSum]
have : ∀ J ∈ π.filter fun J => N (π.tag J) = n,
‖(μ ↑J).toReal • f (π.tag J)‖ ≤ (μ J).toReal * n := fun J hJ ↦ by
- rw [TaggedPrepartition.mem_filter] at hJ
+ rw [TaggedPrepartition.mem_filter] at hJ
rw [norm_smul, Real.norm_eq_abs, abs_of_nonneg ENNReal.toReal_nonneg]
exact mul_le_mul_of_nonneg_left (hJ.2 ▸ Nat.le_ceil _) ENNReal.toReal_nonneg
refine' (norm_sum_le_of_le _ this).trans _; clear this
rw [← sum_mul, ← Prepartition.measure_iUnion_toReal]
generalize hm : μ (π.filter fun J => N (π.tag J) = n).iUnion = m
have : m < δ n / n := by
- simp only [Measure.restrict_apply (hUo _).measurableSet] at hμU
+ simp only [Measure.restrict_apply (hUo _).measurableSet] at hμU
refine' hm ▸ (measure_mono _).trans_lt (hμU _)
simp only [Set.subset_def, TaggedPrepartition.mem_iUnion, TaggedPrepartition.mem_filter]
rintro x ⟨J, ⟨hJ, rfl⟩, hx⟩
@@ -227,7 +227,7 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
refine' HasIntegral.of_mul ((μ I).toReal + 1 + 1) fun ε ε0 => _
lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0 ; have ε0' := ENNReal.coe_pos.2 ε0
-- Choose `N` such that the integral of `‖f N x - g x‖` is less than or equal to `ε`.
- obtain ⟨N₀, hN₀⟩ : ∃ N : ℕ, (∫ x in I, ‖f N x - g x‖ ∂μ) ≤ ε := by
+ obtain ⟨N₀, hN₀⟩ : ∃ N : ℕ, ∫ x in I, ‖f N x - g x‖ ∂μ ≤ ε := by
have : Tendsto (fun n => ∫⁻ x in I, ‖f n x - g x‖₊ ∂μ) atTop (𝓝 0) :=
SimpleFunc.tendsto_approxOn_range_L1_nnnorm hg.measurable hgi
refine' (this.eventually (ge_mem_nhds ε0')).exists.imp fun N hN => _
@@ -305,4 +305,3 @@ theorem IntegrableOn.hasBoxIntegral [CompleteSpace E] {f : (ι → ℝ) → E} {
#align measure_theory.integrable_on.has_box_integral MeasureTheory.IntegrableOn.hasBoxIntegral
end MeasureTheory
-
@@ -45,7 +45,7 @@ theorem hasIntegralIndicatorConst (l : IntegrationParams) (hl : l.bRiemann = fal
refine' HasIntegral.of_mul ‖y‖ fun ε ε0 => _
lift ε to ℝ≥0 using ε0.le; rw [NNReal.coe_pos] at ε0
/- First we choose a closed set `F ⊆ s ∩ I.Icc` and an open set `U ⊇ s` such that
- both `(s ∩ I.Icc) \ F` and `U \ s` have measuer less than `ε`. -/
+ both `(s ∩ I.Icc) \ F` and `U \ s` have measure less than `ε`. -/
have A : μ (s ∩ Box.Icc I) ≠ ∞ :=
((measure_mono <| Set.inter_subset_right _ _).trans_lt (I.measure_Icc_lt_top μ)).ne
have B : μ (s ∩ I) ≠ ∞ :=
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file