Documentation

Mathlib.Analysis.BoxIntegral.Basic

Integrals of Riemann, Henstock-Kurzweil, and McShane #

In this file we define the integral of a function over a box in ℝⁿ. The same definition works for Riemann, Henstock-Kurzweil, and McShane integrals.

As usual, we represent ℝⁿ as the type of functions ι → ℝ for some finite type ι. A rectangular box (l, u] in ℝⁿ is defined to be the set {x : ι → ℝ | ∀ i, l i < x i ∧ x i ≤ u i}, see BoxIntegral.Box.

Let vol be a box-additive function on boxes in ℝⁿ with codomain E →L[ℝ] F. Given a function f : ℝⁿ → E, a box I and a tagged partition π of this box, the integral sum of f over π with respect to the volume vol is the sum of vol J (f (π.tag J)) over all boxes of π. Here π.tag J is the point (tag) in ℝⁿ associated with the box J.

The integral is defined as the limit of integral sums along a filter. Different filters correspond to different integration theories. In order to avoid code duplication, all our definitions and theorems take an argument l : BoxIntegral.IntegrationParams. This is a type that holds three boolean values, and encodes eight filters including those corresponding to Riemann, Henstock-Kurzweil, and McShane integrals.

Following the design of infinite sums (see hasSum and tsum), we define a predicate BoxIntegral.HasIntegral and a function BoxIntegral.integral that returns a vector satisfying the predicate or zero if the function is not integrable.

Then we prove some basic properties of box integrals (linearity, a formula for the integral of a constant). We also prove a version of the Henstock-Sacks inequality (see BoxIntegral.Integrable.dist_integralSum_le_of_memBaseSet and BoxIntegral.Integrable.dist_integralSum_sum_integral_le_of_memBaseSet_of_iUnion_eq), prove integrability of continuous functions, and provide a criterion for integrability w.r.t. a non-Riemann filter (e.g., Henstock-Kurzweil and McShane).

Notation #

Tags #

integral

Integral sum and its basic properties #

def BoxIntegral.integralSum {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} (f : (ι)E) (vol : BoxAdditiveMap ι (E →L[] F) ) (π : TaggedPrepartition I) :
F

The integral sum of f : ℝⁿ → E over a tagged prepartition π w.r.t. box-additive volume vol with codomain E →L[ℝ] F is the sum of vol J (f (π.tag J)) over all boxes of π.

Equations
Instances For
    theorem BoxIntegral.integralSum_biUnionTagged {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} (f : (ι)E) (vol : BoxAdditiveMap ι (E →L[] F) ) (π : Prepartition I) (πi : (J : Box ι) → TaggedPrepartition J) :
    integralSum f vol (π.biUnionTagged πi) = Jπ.boxes, integralSum f vol (πi J)
    theorem BoxIntegral.integralSum_biUnion_partition {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} (f : (ι)E) (vol : BoxAdditiveMap ι (E →L[] F) ) (π : TaggedPrepartition I) (πi : (J : Box ι) → Prepartition J) (hπi : Jπ, (πi J).IsPartition) :
    integralSum f vol (π.biUnionPrepartition πi) = integralSum f vol π
    theorem BoxIntegral.integralSum_inf_partition {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} (f : (ι)E) (vol : BoxAdditiveMap ι (E →L[] F) ) (π : TaggedPrepartition I) {π' : Prepartition I} (h : π'.IsPartition) :
    integralSum f vol (π.infPrepartition π') = integralSum f vol π
    theorem BoxIntegral.integralSum_fiberwise {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} {α : Type u_1} (g : Box ια) (f : (ι)E) (vol : BoxAdditiveMap ι (E →L[] F) ) (π : TaggedPrepartition I) :
    yFinset.image g π.boxes, integralSum f vol (π.filter fun (x : Box ι) => g x = y) = integralSum f vol π
    theorem BoxIntegral.integralSum_sub_partitions {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} (f : (ι)E) (vol : BoxAdditiveMap ι (E →L[] F) ) {π₁ π₂ : TaggedPrepartition I} (h₁ : π₁.IsPartition) (h₂ : π₂.IsPartition) :
    integralSum f vol π₁ - integralSum f vol π₂ = J(π₁.toPrepartition π₂.toPrepartition).boxes, ((vol J) (f ((π₁.infPrepartition π₂.toPrepartition).tag J)) - (vol J) (f ((π₂.infPrepartition π₁.toPrepartition).tag J)))
    @[simp]
    theorem BoxIntegral.integralSum_disjUnion {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} (f : (ι)E) (vol : BoxAdditiveMap ι (E →L[] F) ) {π₁ π₂ : TaggedPrepartition I} (h : Disjoint π₁.iUnion π₂.iUnion) :
    integralSum f vol (π₁.disjUnion π₂ h) = integralSum f vol π₁ + integralSum f vol π₂
    @[simp]
    theorem BoxIntegral.integralSum_add {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} (f g : (ι)E) (vol : BoxAdditiveMap ι (E →L[] F) ) (π : TaggedPrepartition I) :
    integralSum (f + g) vol π = integralSum f vol π + integralSum g vol π
    @[simp]
    theorem BoxIntegral.integralSum_neg {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} (f : (ι)E) (vol : BoxAdditiveMap ι (E →L[] F) ) (π : TaggedPrepartition I) :
    integralSum (-f) vol π = -integralSum f vol π
    @[simp]
    theorem BoxIntegral.integralSum_smul {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} (c : ) (f : (ι)E) (vol : BoxAdditiveMap ι (E →L[] F) ) (π : TaggedPrepartition I) :
    integralSum (c f) vol π = c integralSum f vol π

    Basic integrability theory #

    def BoxIntegral.HasIntegral {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [Fintype ι] (I : Box ι) (l : IntegrationParams) (f : (ι)E) (vol : BoxAdditiveMap ι (E →L[] F) ) (y : F) :

    The predicate HasIntegral I l f vol y says that y is the integral of f over I along l w.r.t. volume vol. This means that integral sums of f tend to 𝓝 y along BoxIntegral.IntegrationParams.toFilteriUnion I ⊤.

    Equations
    Instances For
      def BoxIntegral.Integrable {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [Fintype ι] (I : Box ι) (l : IntegrationParams) (f : (ι)E) (vol : BoxAdditiveMap ι (E →L[] F) ) :

      A function is integrable if there exists a vector that satisfies the HasIntegral predicate.

      Equations
      Instances For
        def BoxIntegral.integral {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [Fintype ι] (I : Box ι) (l : IntegrationParams) (f : (ι)E) (vol : BoxAdditiveMap ι (E →L[] F) ) :
        F

        The integral of a function f over a box I along a filter l w.r.t. a volume vol. Returns zero on non-integrable functions.

        Equations
        Instances For
          theorem BoxIntegral.HasIntegral.tendsto {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {y : F} (h : HasIntegral I l f vol y) :

          Reinterpret BoxIntegral.HasIntegral as Filter.Tendsto, e.g., dot-notation theorems that are shadowed in the BoxIntegral.HasIntegral namespace.

          theorem BoxIntegral.hasIntegral_iff {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {y : F} :
          HasIntegral I l f vol y ε > 0, ∃ (r : NNReal(ι)(Set.Ioi 0)), (∀ (c : NNReal), l.RCond (r c)) ∀ (c : NNReal) (π : TaggedPrepartition I), l.MemBaseSet I c (r c) ππ.IsPartitiondist (integralSum f vol π) y ε

          The ε-δ definition of BoxIntegral.HasIntegral.

          theorem BoxIntegral.HasIntegral.of_mul {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {y : F} (a : ) (h : ∀ (ε : ), 0 < ε∃ (r : NNReal(ι)(Set.Ioi 0)), (∀ (c : NNReal), l.RCond (r c)) ∀ (c : NNReal) (π : TaggedPrepartition I), l.MemBaseSet I c (r c) ππ.IsPartitiondist (integralSum f vol π) y a * ε) :
          HasIntegral I l f vol y

          Quite often it is more natural to prove an estimate of the form a * ε, not ε in the RHS of BoxIntegral.hasIntegral_iff, so we provide this auxiliary lemma.

          theorem BoxIntegral.integrable_iff_cauchy_basis {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } [CompleteSpace F] :
          Integrable I l f vol ε > 0, ∃ (r : NNReal(ι)(Set.Ioi 0)), (∀ (c : NNReal), l.RCond (r c)) ∀ (c₁ c₂ : NNReal) (π₁ π₂ : TaggedPrepartition I), l.MemBaseSet I c₁ (r c₁) π₁π₁.IsPartitionl.MemBaseSet I c₂ (r c₂) π₂π₂.IsPartitiondist (integralSum f vol π₁) (integralSum f vol π₂) ε

          In a complete space, a function is integrable if and only if its integral sums form a Cauchy net. Here we restate this fact in terms of ∀ ε > 0, ∃ r, ....

          theorem BoxIntegral.HasIntegral.mono {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {y : F} {l₁ l₂ : IntegrationParams} (h : HasIntegral I l₁ f vol y) (hl : l₂ l₁) :
          HasIntegral I l₂ f vol y
          theorem BoxIntegral.Integrable.hasIntegral {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (h : Integrable I l f vol) :
          HasIntegral I l f vol (integral I l f vol)
          theorem BoxIntegral.Integrable.mono {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {l' : IntegrationParams} (h : Integrable I l f vol) (hle : l' l) :
          Integrable I l' f vol
          theorem BoxIntegral.HasIntegral.unique {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {y y' : F} (h : HasIntegral I l f vol y) (h' : HasIntegral I l f vol y') :
          y = y'
          theorem BoxIntegral.HasIntegral.integrable {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {y : F} (h : HasIntegral I l f vol y) :
          Integrable I l f vol
          theorem BoxIntegral.HasIntegral.integral_eq {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {y : F} (h : HasIntegral I l f vol y) :
          integral I l f vol = y
          theorem BoxIntegral.HasIntegral.add {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f g : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {y y' : F} (h : HasIntegral I l f vol y) (h' : HasIntegral I l g vol y') :
          HasIntegral I l (f + g) vol (y + y')
          theorem BoxIntegral.Integrable.add {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f g : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (hf : Integrable I l f vol) (hg : Integrable I l g vol) :
          Integrable I l (f + g) vol
          theorem BoxIntegral.integral_add {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f g : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (hf : Integrable I l f vol) (hg : Integrable I l g vol) :
          integral I l (f + g) vol = integral I l f vol + integral I l g vol
          theorem BoxIntegral.HasIntegral.neg {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {y : F} (hf : HasIntegral I l f vol y) :
          HasIntegral I l (-f) vol (-y)
          theorem BoxIntegral.Integrable.neg {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (hf : Integrable I l f vol) :
          Integrable I l (-f) vol
          theorem BoxIntegral.Integrable.of_neg {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (hf : Integrable I l (-f) vol) :
          Integrable I l f vol
          @[simp]
          theorem BoxIntegral.integrable_neg {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } :
          Integrable I l (-f) vol Integrable I l f vol
          @[simp]
          theorem BoxIntegral.integral_neg {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } :
          integral I l (-f) vol = -integral I l f vol
          theorem BoxIntegral.HasIntegral.sub {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f g : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {y y' : F} (h : HasIntegral I l f vol y) (h' : HasIntegral I l g vol y') :
          HasIntegral I l (f - g) vol (y - y')
          theorem BoxIntegral.Integrable.sub {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f g : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (hf : Integrable I l f vol) (hg : Integrable I l g vol) :
          Integrable I l (f - g) vol
          theorem BoxIntegral.integral_sub {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f g : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (hf : Integrable I l f vol) (hg : Integrable I l g vol) :
          integral I l (f - g) vol = integral I l f vol - integral I l g vol
          theorem BoxIntegral.hasIntegral_const {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {vol : BoxAdditiveMap ι (E →L[] F) } (c : E) :
          HasIntegral I l (fun (x : ι) => c) vol ((vol I) c)
          @[simp]
          theorem BoxIntegral.integral_const {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {vol : BoxAdditiveMap ι (E →L[] F) } (c : E) :
          integral I l (fun (x : ι) => c) vol = (vol I) c
          theorem BoxIntegral.integrable_const {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {vol : BoxAdditiveMap ι (E →L[] F) } (c : E) :
          Integrable I l (fun (x : ι) => c) vol
          theorem BoxIntegral.hasIntegral_zero {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {vol : BoxAdditiveMap ι (E →L[] F) } :
          HasIntegral I l (fun (x : ι) => 0) vol 0
          theorem BoxIntegral.integrable_zero {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {vol : BoxAdditiveMap ι (E →L[] F) } :
          Integrable I l (fun (x : ι) => 0) vol
          theorem BoxIntegral.integral_zero {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {vol : BoxAdditiveMap ι (E →L[] F) } :
          integral I l (fun (x : ι) => 0) vol = 0
          theorem BoxIntegral.HasIntegral.sum {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {vol : BoxAdditiveMap ι (E →L[] F) } {α : Type u_1} {s : Finset α} {f : α(ι)E} {g : αF} (h : is, HasIntegral I l (f i) vol (g i)) :
          HasIntegral I l (fun (x : ι) => is, f i x) vol (∑ is, g i)
          theorem BoxIntegral.HasIntegral.smul {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {y : F} (hf : HasIntegral I l f vol y) (c : ) :
          HasIntegral I l (c f) vol (c y)
          theorem BoxIntegral.Integrable.smul {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (hf : Integrable I l f vol) (c : ) :
          Integrable I l (c f) vol
          theorem BoxIntegral.Integrable.of_smul {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {c : } (hf : Integrable I l (c f) vol) (hc : c 0) :
          Integrable I l f vol
          @[simp]
          theorem BoxIntegral.integral_smul {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (c : ) :
          integral I l (fun (x : ι) => c f x) vol = c integral I l f vol
          theorem BoxIntegral.integral_nonneg {ι : Type u} {I : Box ι} [Fintype ι] {l : IntegrationParams} {g : (ι)} (hg : xBox.Icc I, 0 g x) (μ : MeasureTheory.Measure (ι)) [MeasureTheory.IsLocallyFiniteMeasure μ] :
          0 integral I l g μ.toBoxAdditive.toSMul

          The integral of a nonnegative function w.r.t. a volume generated by a locally-finite measure is nonnegative.

          theorem BoxIntegral.norm_integral_le_of_norm_le {ι : Type u} {E : Type v} [NormedAddCommGroup E] [NormedSpace E] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {g : (ι)} (hle : xBox.Icc I, f x g x) (μ : MeasureTheory.Measure (ι)) [MeasureTheory.IsLocallyFiniteMeasure μ] (hg : Integrable I l g μ.toBoxAdditive.toSMul) :
          integral I l f μ.toBoxAdditive.toSMul integral I l g μ.toBoxAdditive.toSMul

          If ‖f x‖ ≤ g x on [l, u] and g is integrable, then the norm of the integral of f is less than or equal to the integral of g.

          theorem BoxIntegral.norm_integral_le_of_le_const {ι : Type u} {E : Type v} [NormedAddCommGroup E] [NormedSpace E] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {c : } (hc : xBox.Icc I, f x c) (μ : MeasureTheory.Measure (ι)) [MeasureTheory.IsLocallyFiniteMeasure μ] :
          integral I l f μ.toBoxAdditive.toSMul (μ I).toReal * c

          Henstock-Sacks inequality and integrability on subboxes #

          Henstock-Sacks inequality for Henstock-Kurzweil integral says the following. Let f be a function integrable on a box I; let r : ℝⁿ → (0, ∞) be a function such that for any tagged partition of I subordinate to r, the integral sum over this partition is ε-close to the integral. Then for any tagged prepartition (i.e. a finite collections of pairwise disjoint subboxes of I with tagged points) π, the integral sum over π differs from the integral of f over the part of I covered by π by at most ε. The actual statement in the library is a bit more complicated to make it work for any BoxIntegral.IntegrationParams. We formalize several versions of this inequality in BoxIntegral.Integrable.dist_integralSum_le_of_memBaseSet, BoxIntegral.Integrable.dist_integralSum_sum_integral_le_of_memBaseSet_of_iUnion_eq, and BoxIntegral.Integrable.dist_integralSum_sum_integral_le_of_memBaseSet.

          Instead of using predicate assumptions on r, we define BoxIntegral.Integrable.convergenceR (h : integrable I l f vol) (ε : ℝ) (c : ℝ≥0) : ℝⁿ → (0, ∞) to be a function r such that

          The proof is mostly based on Russel A. Gordon, The integrals of Lebesgue, Denjoy, Perron, and Henstock.

          def BoxIntegral.Integrable.convergenceR {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (h : Integrable I l f vol) (ε : ) :
          NNReal(ι)(Set.Ioi 0)

          If ε > 0, then BoxIntegral.Integrable.convergenceR is a function r : ℝ≥0 → ℝⁿ → (0, ∞) such that for every c : ℝ≥0, for every tagged partition π subordinate to r (and satisfying additional distortion estimates if BoxIntegral.IntegrationParams.bDistortion l = true), the corresponding integral sum is ε-close to the integral.

          If BoxIntegral.IntegrationParams.bRiemann = true, then r c x does not depend on x. If ε ≤ 0, then we use r c x = 1.

          Equations
          Instances For
            theorem BoxIntegral.Integrable.convergenceR_cond {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (h : Integrable I l f vol) (ε : ) (c : NNReal) :
            l.RCond (h.convergenceR ε c)
            theorem BoxIntegral.Integrable.dist_integralSum_integral_le_of_memBaseSet {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} {π : TaggedPrepartition I} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {c : NNReal} {ε : } (h : Integrable I l f vol) (h₀ : 0 < ε) (hπ : l.MemBaseSet I c (h.convergenceR ε c) π) (hπp : π.IsPartition) :
            dist (integralSum f vol π) (integral I l f vol) ε
            theorem BoxIntegral.Integrable.dist_integralSum_le_of_memBaseSet {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {c₁ c₂ : NNReal} {ε₁ ε₂ : } {π₁ π₂ : TaggedPrepartition I} (h : Integrable I l f vol) (hpos₁ : 0 < ε₁) (hpos₂ : 0 < ε₂) (h₁ : l.MemBaseSet I c₁ (h.convergenceR ε₁ c₁) π₁) (h₂ : l.MemBaseSet I c₂ (h.convergenceR ε₂ c₂) π₂) (HU : π₁.iUnion = π₂.iUnion) :
            dist (integralSum f vol π₁) (integralSum f vol π₂) ε₁ + ε₂

            Henstock-Sacks inequality. Let r₁ r₂ : ℝⁿ → (0, ∞) be a function such that for any tagged partition of I subordinate to rₖ, k=1,2, the integral sum of f over this partition differs from the integral of f by at most εₖ. Then for any two tagged prepartition π₁ π₂ subordinate to r₁ and r₂ respectively and covering the same part of I, the integral sums of f over these prepartitions differ from each other by at most ε₁ + ε₂.

            The actual statement

            See also BoxIntegral.Integrable.dist_integralSum_sum_integral_le_of_memBaseSet_of_iUnion_eq and BoxIntegral.Integrable.dist_integralSum_sum_integral_le_of_memBaseSet.

            theorem BoxIntegral.Integrable.tendsto_integralSum_toFilter_prod_self_inf_iUnion_eq_uniformity {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (h : Integrable I l f vol) :
            Filter.Tendsto (fun (π : TaggedPrepartition I × TaggedPrepartition I) => (integralSum f vol π.1, integralSum f vol π.2)) (l.toFilter I ×ˢ l.toFilter I Filter.principal {π : TaggedPrepartition I × TaggedPrepartition I | π.1.iUnion = π.2.iUnion}) (uniformity F)

            If f is integrable on I along l, then for two sufficiently fine tagged prepartitions (in the sense of the filter BoxIntegral.IntegrationParams.toFilter l I) such that they cover the same part of I, the integral sums of f over π₁ and π₂ are very close to each other.

            If f is integrable on a box I along l, then for any fixed subset s of I that can be represented as a finite union of boxes, the integral sums of f over tagged prepartitions that cover exactly s form a Cauchy “sequence” along l.

            theorem BoxIntegral.Integrable.to_subbox_aux {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I J : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } [CompleteSpace F] (h : Integrable I l f vol) (hJ : J I) :
            theorem BoxIntegral.Integrable.to_subbox {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I J : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } [CompleteSpace F] (h : Integrable I l f vol) (hJ : J I) :
            Integrable J l f vol

            If f is integrable on a box I, then it is integrable on any subbox of I.

            If f is integrable on a box I, then integral sums of f over tagged prepartitions that cover exactly a subbox J ≤ I tend to the integral of f over J along l.

            theorem BoxIntegral.Integrable.dist_integralSum_sum_integral_le_of_memBaseSet_of_iUnion_eq {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} {π : TaggedPrepartition I} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {c : NNReal} {ε : } [CompleteSpace F] (h : Integrable I l f vol) (h0 : 0 < ε) (hπ : l.MemBaseSet I c (h.convergenceR ε c) π) {π₀ : Prepartition I} (hU : π.iUnion = π₀.iUnion) :
            dist (integralSum f vol π) (∑ Jπ₀.boxes, integral J l f vol) ε

            Henstock-Sacks inequality. Let r : ℝⁿ → (0, ∞) be a function such that for any tagged partition of I subordinate to r, the integral sum of f over this partition differs from the integral of f by at most ε. Then for any tagged prepartition π subordinate to r, the integral sum of f over this prepartition differs from the integral of f over the part of I covered by π by at most ε.

            The actual statement

            theorem BoxIntegral.Integrable.dist_integralSum_sum_integral_le_of_memBaseSet {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} {π : TaggedPrepartition I} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } {c : NNReal} {ε : } [CompleteSpace F] (h : Integrable I l f vol) (h0 : 0 < ε) (hπ : l.MemBaseSet I c (h.convergenceR ε c) π) :
            dist (integralSum f vol π) (∑ Jπ.boxes, integral J l f vol) ε

            Henstock-Sacks inequality. Let r : ℝⁿ → (0, ∞) be a function such that for any tagged partition of I subordinate to r, the integral sum of f over this partition differs from the integral of f by at most ε. Then for any tagged prepartition π subordinate to r, the integral sum of f over this prepartition differs from the integral of f over the part of I covered by π by at most ε.

            The actual statement

            theorem BoxIntegral.Integrable.tendsto_integralSum_sum_integral {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } [CompleteSpace F] (h : Integrable I l f vol) (π₀ : Prepartition I) :
            Filter.Tendsto (integralSum f vol) (IntegrationParams.toFilteriUnion I π₀) (nhds (∑ Jπ₀.boxes, integral J l f vol))

            Integral sum of f over a tagged prepartition π such that π.Union = π₀.Union tends to the sum of integrals of f over the boxes of π₀.

            theorem BoxIntegral.Integrable.sum_integral_congr {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } [CompleteSpace F] (h : Integrable I l f vol) {π₁ π₂ : Prepartition I} (hU : π₁.iUnion = π₂.iUnion) :
            Jπ₁.boxes, integral J l f vol = Jπ₂.boxes, integral J l f vol

            If f is integrable on I, then fun J ↦ integral J l f vol is box-additive on subboxes of I: if π₁, π₂ are two prepartitions of I covering the same part of I, the sum of integrals of f over the boxes of π₁ is equal to the sum of integrals of f over the boxes of π₂.

            See also BoxIntegral.Integrable.toBoxAdditive for a bundled version.

            def BoxIntegral.Integrable.toBoxAdditive {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } [CompleteSpace F] (h : Integrable I l f vol) :
            BoxAdditiveMap ι F I

            If f is integrable on I, then fun J ↦ integral J l f vol is box-additive on subboxes of I: if π₁, π₂ are two prepartitions of I covering the same part of I, the sum of integrals of f over the boxes of π₁ is equal to the sum of integrals of f over the boxes of π₂.

            See also BoxIntegral.Integrable.sum_integral_congr for an unbundled version.

            Equations
            Instances For
              @[simp]
              theorem BoxIntegral.Integrable.toBoxAdditive_apply {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } [CompleteSpace F] (h : Integrable I l f vol) (J : Box ι) :
              h.toBoxAdditive J = integral J l f vol

              Integrability conditions #

              theorem BoxIntegral.integrable_of_bounded_and_ae_continuousWithinAt {ι : Type u} {E : Type v} [NormedAddCommGroup E] [NormedSpace E] [Fintype ι] (l : IntegrationParams) [CompleteSpace E] {I : Box ι} {f : (ι)E} (hb : ∃ (C : ), xBox.Icc I, f x C) (μ : MeasureTheory.Measure (ι)) [MeasureTheory.IsLocallyFiniteMeasure μ] (hc : ∀ᵐ (x : ι) μ.restrict (Box.Icc I), ContinuousWithinAt f (Box.Icc I) x) :
              Integrable I l f μ.toBoxAdditive.toSMul

              A function that is bounded and a.e. continuous on a box I is integrable on I.

              theorem BoxIntegral.integrable_of_bounded_and_ae_continuous {ι : Type u} {E : Type v} [NormedAddCommGroup E] [NormedSpace E] [Fintype ι] (l : IntegrationParams) [CompleteSpace E] {I : Box ι} {f : (ι)E} (hb : ∃ (C : ), xBox.Icc I, f x C) (μ : MeasureTheory.Measure (ι)) [MeasureTheory.IsLocallyFiniteMeasure μ] (hc : ∀ᵐ (x : ι) μ, ContinuousAt f x) :
              Integrable I l f μ.toBoxAdditive.toSMul

              A function that is bounded on a box I and a.e. continuous is integrable on I.

              This is a version of integrable_of_bounded_and_ae_continuousWithinAt with a stronger continuity assumption so that the user does not need to specialize the continuity assumption to each box on which the theorem is to be applied.

              theorem BoxIntegral.integrable_of_continuousOn {ι : Type u} {E : Type v} [NormedAddCommGroup E] [NormedSpace E] [Fintype ι] (l : IntegrationParams) [CompleteSpace E] {I : Box ι} {f : (ι)E} (hc : ContinuousOn f (Box.Icc I)) (μ : MeasureTheory.Measure (ι)) [MeasureTheory.IsLocallyFiniteMeasure μ] :
              Integrable I l f μ.toBoxAdditive.toSMul

              A continuous function is box-integrable with respect to any locally finite measure.

              This is true for any volume with bounded variation.

              theorem BoxIntegral.HasIntegral.of_bRiemann_eq_false_of_forall_isLittleO {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (hl : l.bRiemann = false) (B : BoxAdditiveMap ι I) (hB0 : ∀ (J : Box ι), 0 B J) (g : BoxAdditiveMap ι F I) (s : Set (ι)) (hs : s.Countable) (hlH : s.Nonemptyl.bHenstock = true) (H₁ : ∀ (c : NNReal), xBox.Icc I s, ε > 0, δ > 0, JI, Box.Icc J Metric.closedBall x δx Box.Icc J(l.bDistortion = trueJ.distortion c)dist ((vol J) (f x)) (g J) ε) (H₂ : ∀ (c : NNReal), xBox.Icc I \ s, ε > 0, δ > 0, JI, Box.Icc J Metric.closedBall x δ(l.bHenstock = truex Box.Icc J)(l.bDistortion = trueJ.distortion c)dist ((vol J) (f x)) (g J) ε * B J) :
              HasIntegral I l f vol (g I)

              This is an auxiliary lemma used to prove two statements at once. Use one of the next two lemmas instead.

              theorem BoxIntegral.HasIntegral.of_le_Henstock_of_forall_isLittleO {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {l : IntegrationParams} {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (hl : l IntegrationParams.Henstock) (B : BoxAdditiveMap ι I) (hB0 : ∀ (J : Box ι), 0 B J) (g : BoxAdditiveMap ι F I) (s : Set (ι)) (hs : s.Countable) (H₁ : ∀ (c : NNReal), xBox.Icc I s, ε > 0, δ > 0, JI, Box.Icc J Metric.closedBall x δx Box.Icc J(l.bDistortion = trueJ.distortion c)dist ((vol J) (f x)) (g J) ε) (H₂ : ∀ (c : NNReal), xBox.Icc I \ s, ε > 0, δ > 0, JI, Box.Icc J Metric.closedBall x δx Box.Icc J(l.bDistortion = trueJ.distortion c)dist ((vol J) (f x)) (g J) ε * B J) :
              HasIntegral I l f vol (g I)

              A function f has Henstock (or ) integral over I is equal to the value of a box-additive function g on I provided that vol J (f x) is sufficiently close to g J for sufficiently small boxes J ∋ x. This lemma is useful to prove, e.g., to prove the Divergence theorem for integral along .

              Let l be either BoxIntegral.IntegrationParams.Henstock or . Let g a box-additive function on subboxes of I. Suppose that there exists a nonnegative box-additive function B and a countable set s with the following property.

              For every c : ℝ≥0, a point x ∈ I.Icc, and a positive ε there exists δ > 0 such that for any box J ≤ I such that

              • x ∈ J.Icc ⊆ Metric.closedBall x δ;
              • if l.bDistortion (i.e., l = ⊥), then the distortion of J is less than or equal to c,

              the distance between the term vol J (f x) of an integral sum corresponding to J and g J is less than or equal to ε if x ∈ s and is less than or equal to ε * B J otherwise.

              Then f is integrable on I along l with integral g I.

              theorem BoxIntegral.HasIntegral.mcShane_of_forall_isLittleO {ι : Type u} {E : Type v} {F : Type w} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] {I : Box ι} [Fintype ι] {f : (ι)E} {vol : BoxAdditiveMap ι (E →L[] F) } (B : BoxAdditiveMap ι I) (hB0 : ∀ (J : Box ι), 0 B J) (g : BoxAdditiveMap ι F I) (H : NNRealxBox.Icc I, ε > 0, δ > 0, JI, Box.Icc J Metric.closedBall x δdist ((vol J) (f x)) (g J) ε * B J) :

              Suppose that there exists a nonnegative box-additive function B with the following property.

              For every c : ℝ≥0, a point x ∈ I.Icc, and a positive ε there exists δ > 0 such that for any box J ≤ I such that

              • J.Icc ⊆ Metric.closedBall x δ;
              • if l.bDistortion (i.e., l = ⊥), then the distortion of J is less than or equal to c,

              the distance between the term vol J (f x) of an integral sum corresponding to J and g J is less than or equal to ε * B J.

              Then f is McShane integrable on I with integral g I.