Documentation

Archive.RiemannStieltjes

Riemann–Stieltjes and Riemann integrals #

In this file we give some API for intervals (using the type BoxIntegral.Box (Fin 1)), and use this to define the (one-dimensional) Riemann–Stieltjes integral ∫ˢ x in a..b, f x ∂[B; g] from a to b of a function f : ℝ → E against an integrator g : ℝ → F, paired by a continuous bilinear map B : E →L[ℝ] F →L[ℝ] G. It is not required that a < b.

The notation here is deliberately chosen to mimic the notation ∫ x in a..b, f x ∂μ for IntervalIntegral, as well as the notation ∫ᵛ x, f x ∂[B; μ] for MeasureTheory.VectorMeasure.Integral.

The bilinear pairing B covers the three main variants of Stieltjes integration that appear in practice:

The . here can be removed if ContinuousLinearMap is open.

The Riemann integral is the special case F = ℝ, B = (.lsmul ℝ ℝ).flip and g = id, and is denoted ∫ʳ x in a..b, f x.

Key definitions #

These notions are named in analogy with BoxIntegral.Integrable, BoxIntegral.HasIntegral, and BoxIntegral.integral.

Thanks to ICERM for hosting the workshop "Formalization of Analysis" where most of this work was conducted.

Usage #

Some very basic API is provided in this file. More extensive API may be found at https://github.com/leanprover-community/mathlib-at-ICERM26/tree/stieltjes . However, unless one is specifically interested in the Riemann aspect of integration theory, it is recommended that one instead use the more general integration API already in Mathlib, specifically MeasureTheory.Integral.Bochner (for integration against non-negative measures) or MeasureTheory.VectorMeasure (to handle Lebesgue--Stieltjes) type integrals.

Tags #

Stieltjes integral, Riemann–Stieltjes, Riemann integral

One-dimensional intervals #

Ioc intervals can be represented within the BoxIntegral API as objects of type Box (Fin 1). We provide some minimal API for manipulating such intervals.

Note: one could use Equiv.funUnique (Fin 1) ℝ instead of using the maps x ↦ x 0 and x ↦ ![x] to identify Fin 1 → ℝ and , but this does not seem to gain very much.

The left endpoint of a one-dimensional box.

Equations
Instances For

    The right endpoint of a one-dimensional box.

    Equations
    Instances For
      @[simp]
      noncomputable def BoxIntegral.interval {a b : } (hab : a < b) :
      Box (Fin 1)

      One-dimensional Ioc interval as a Box (Fin 1)

      Equations
      Instances For
        @[simp]
        theorem BoxIntegral.interval_lower {a b : } (hab : a < b) :
        @[simp]
        theorem BoxIntegral.interval_upper {a b : } (hab : a < b) :
        @[simp]
        theorem BoxIntegral.Icc_interval {a b : } (hab : a < b) :
        Box.Icc (interval hab) = {x : Fin 1 | x 0 Set.Icc a b}

        The increment of a function on as a box-additive map #

        Underlying construction for increment: sends g : ℝ → M to the box-additive map on Box (Fin 1) defined by J ↦ g J.upper₁ - g J.lower₁.

        Equations
        Instances For

          The box-additive increment sending a function g : ℝ → M to the box-additive map on Box (Fin 1) defined by J ↦ g J.upper₁ - g J.lower₁, bundled as an AddMonoidHom.

          Equations
          Instances For
            @[simp]
            theorem BoxIntegral.BoxAdditiveMap.increment_apply {M : Type u_1} [AddCommGroup M] (g : M) (J : Box (Fin 1)) :
            (increment g) J = g J.upper₁ - g J.lower₁
            @[simp]
            theorem BoxIntegral.BoxAdditiveMap.increment_smul {M : Type u_1} [AddCommGroup M] {R : Type u_2} [Monoid R] [DistribMulAction R M] (c : R) (g : M) :

            The increment of ContinuousLinearMap.lsmul ℝ ℝ : ℝ → (E →L[ℝ] E) equals the Lebesgue volume box-additive map on Box (Fin 1).

            Definition of the Riemann--Stieltjes integral #

            def RiemannStieltjes.HasStieltjesIntegralOrdered {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] (a b : ) (B : E →L[] F →L[] G) (f : E) (g : F) (L : G) (hab : a < b) :

            The (Riemann--)Stieltjes integral predicate of a function f : ℝ → E and g : ℝ → F having its Riemann--Stieltjes sums converge to a limit L : G, given a bilinear map B : E → F → G and endpoints a, b takes values in G. Initially defined under the implicit assumption that a < b.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              def RiemannStieltjes.HasStieltjesIntegral {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] (a b : ) (B : E →L[] F →L[] G) (f : E) (g : F) (L : G) :

              Extension of HasStieltjesIntegralOrdered to cover the cases a = b and a > b.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                def RiemannStieltjes.StieltjesIntegrable {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] (a b : ) (B : E →L[] F →L[] G) (f : E) (g : F) :

                StieltjesIntegrable a b B f g asserts that the Riemann–Stieltjes integral of f against g paired by B from a to b exists, i.e. some L satisfies HasStieltjesIntegral a b B f g L.

                Equations
                Instances For
                  noncomputable def RiemannStieltjes.stieltjesIntegral {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] (a b : ) (B : E →L[] F →L[] G) (f : E) (g : F) :
                  G

                  The Riemann–Stieltjes integral of f against g paired by B from a to b. Returns the junk value 0 if no such integral exists. The integral remains meaningful outside of the case a < b.

                  Equations
                  Instances For

                    Notation ∫ˢ x in a..b, f x ∂[B; g] for the Riemann–Stieltjes integral of f against the integrator g, paired by the bilinear map B. Mirrors the vector-measure integral notation ∫ᵛ x, f x ∂[B; μ], and parallels ∫ x in a..b, f x ∂μ for intervalIntegral.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For

                      The special case of ∫ˢ x in a..b, f x ∂[B; g] with f real-valued, g vector-valued, and B = ContinuousLinearMap.lsmul ℝ ℝ.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For

                        The special case of ∫ˢ x in a..b, f x ∂[B; g] with f vector-valued, g real-valued, and B = (ContinuousLinearMap.lsmul ℝ ℝ).flip.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For

                          The Riemann integral #

                          def RiemannStieltjes.HasRiemannIntegral {E : Type u_1} [NormedAddCommGroup E] [NormedSpace E] (a b : ) (f : E) (L : E) :

                          HasRiemannIntegral a b f L is defined to equal HasStieltjesIntegral a b (lsmul ℝ ℝ).flip f id L. Use unfold HasRiemannIntegral or similar to access the Stieltjes integral API.

                          Equations
                          Instances For

                            RiemannIntegrable a b f is defined to equal StieltjesIntegrable a b (lsmul ℝ ℝ).flip f id. Use unfold RiemannIntegrable or similar to access the Stieltjes integral API.

                            Equations
                            Instances For
                              noncomputable def RiemannStieltjes.riemannIntegral {E : Type u_1} [NormedAddCommGroup E] [NormedSpace E] (a b : ) (f : E) :
                              E

                              riemannIntegral a b f, with notation ∫ʳ x in a..b, f x, is defined to equal ∫ˢ x in a..b, f x ∂<•id. Use unfold riemannIntegral or similar to access the Stieltjes integral API. One could relate riemannIntegral to intervalIntegral under suitable hypotheses on f; see https://github.com/leanprover-community/mathlib-at-ICERM26/blob/stieltjes/Mathlib/Analysis/BoxIntegral/Stieltjes/Measure.lean

                              Equations
                              Instances For

                                riemannIntegral a b f, with notation ∫ʳ x in a..b, f x, is defined to equal ∫ˢ x in a..b, f x ∂<•id. Use unfold riemannIntegral or similar to access the Stieltjes integral API. One could relate riemannIntegral to intervalIntegral under suitable hypotheses on f; see https://github.com/leanprover-community/mathlib-at-ICERM26/blob/stieltjes/Mathlib/Analysis/BoxIntegral/Stieltjes/Measure.lean

                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For

                                  Simple properties #

                                  @[simp]
                                  theorem RiemannStieltjes.HasStieltjesIntegral.of_eq_iff_zero {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a : } {B : E →L[] F →L[] G} {f : E} {g : F} {L : G} :
                                  HasStieltjesIntegral a a B f g L L = 0
                                  theorem RiemannStieltjes.HasStieltjesIntegral.of_lt {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B : E →L[] F →L[] G} {f : E} {g : F} {L : G} (hab : a < b) :
                                  @[simp]
                                  theorem RiemannStieltjes.HasStieltjesIntegral.of_gt {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B : E →L[] F →L[] G} {f : E} {g : F} {L : G} (hba : b < a) :
                                  theorem RiemannStieltjes.HasStieltjesIntegral.symm_iff {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B : E →L[] F →L[] G} {f : E} {g : F} {L : G} :
                                  theorem RiemannStieltjes.HasStieltjesIntegral.symm {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B : E →L[] F →L[] G} {f : E} {g : F} {L : G} (h : HasStieltjesIntegral a b B f g L) :
                                  HasStieltjesIntegral b a B f g (-L)
                                  @[simp]
                                  theorem RiemannStieltjes.StieltjesIntegrable.of_eq {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a : } {B : E →L[] F →L[] G} {f : E} {g : F} :
                                  theorem RiemannStieltjes.StieltjesIntegrable.symm {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B : E →L[] F →L[] G} {f : E} {g : F} (h : StieltjesIntegrable a b B f g) :
                                  theorem RiemannStieltjes.HasStieltjesIntegral.unique {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B : E →L[] F →L[] G} {f : E} {g : F} {L₁ L₂ : G} (h₁ : HasStieltjesIntegral a b B f g L₁) (h₂ : HasStieltjesIntegral a b B f g L₂) :
                                  L₁ = L₂

                                  Uniqueness: the Riemann–Stieltjes integral, when it exists, is unique.

                                  theorem RiemannStieltjes.HasStieltjesIntegral.stieltjesIntegrable {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B : E →L[] F →L[] G} {f : E} {g : F} {L : G} (h : HasStieltjesIntegral a b B f g L) :

                                  The existence of a Riemann–Stieltjes integral implies StieltjesIntegrable.

                                  theorem RiemannStieltjes.StieltjesIntegrable.hasStieltjesIntegral {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B : E →L[] F →L[] G} {f : E} {g : F} (h : StieltjesIntegrable a b B f g) :
                                  HasStieltjesIntegral a b B f g (stieltjesIntegral a b B (fun (x : ) => f x) g)
                                  theorem RiemannStieltjes.HasStieltjesIntegral.stieltjesIntegral_eq {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B : E →L[] F →L[] G} {f : E} {g : F} {L : G} (h : HasStieltjesIntegral a b B f g L) :
                                  stieltjesIntegral a b B (fun (x : ) => f x) g = L

                                  If HasStieltjesIntegral a b B f g L, then ∫ˢ x in a..b, f x ∂[B; g] = L.

                                  theorem RiemannStieltjes.StieltjesIntegrable.hasStieltjesIntegral_iff {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B : E →L[] F →L[] G} {f : E} {g : F} (h : StieltjesIntegrable a b B f g) (L : G) :
                                  HasStieltjesIntegral a b B f g L stieltjesIntegral a b B (fun (x : ) => f x) g = L
                                  @[simp]
                                  theorem RiemannStieltjes.stieltjesIntegral.integral_same {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a : } {B : E →L[] F →L[] G} {f : E} {g : F} :
                                  stieltjesIntegral a a B (fun (x : ) => f x) g = 0
                                  @[simp]
                                  theorem RiemannStieltjes.stieltjesIntegral.integral_undef {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B : E →L[] F →L[] G} {f : E} {g : F} (h : ¬StieltjesIntegrable a b B f g) :
                                  stieltjesIntegral a b B (fun (x : ) => f x) g = 0
                                  theorem RiemannStieltjes.stieltjesIntegral.integral_symm {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B : E →L[] F →L[] G} {f : E} {g : F} :
                                  stieltjesIntegral b a B (fun (x : ) => f x) g = -stieltjesIntegral a b B (fun (x : ) => f x) g
                                  theorem RiemannStieltjes.hasStieltjesIntegral'_congr {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B B' : E →L[] F →L[] G} {f₁ f₂ : E} {g₁ g₂ : F} {L : G} (hab : a < b) (hBB' : B = B') (hf : Set.EqOn f₁ f₂ (Set.Icc a b)) (hg : Set.EqOn g₁ g₂ (Set.Icc a b)) :
                                  HasStieltjesIntegralOrdered a b B f₁ g₁ L hab HasStieltjesIntegralOrdered a b B' f₂ g₂ L hab
                                  theorem RiemannStieltjes.hasStieltjesIntegral_congr {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B B' : E →L[] F →L[] G} {f₁ f₂ : E} {g₁ g₂ : F} {L : G} (hBB' : B = B') (hf : Set.EqOn f₁ f₂ (Set.uIcc a b)) (hg : Set.EqOn g₁ g₂ (Set.uIcc a b)) :
                                  HasStieltjesIntegral a b B f₁ g₁ L HasStieltjesIntegral a b B' f₂ g₂ L
                                  theorem RiemannStieltjes.stieltjesIntegrable_congr {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B B' : E →L[] F →L[] G} {f₁ f₂ : E} {g₁ g₂ : F} (hBB' : B = B') (hf : Set.EqOn f₁ f₂ (Set.uIcc a b)) (hg : Set.EqOn g₁ g₂ (Set.uIcc a b)) :
                                  StieltjesIntegrable a b B f₁ g₁ StieltjesIntegrable a b B' f₂ g₂
                                  theorem RiemannStieltjes.stieltjesIntegral_congr {E : Type u_1} {F : Type u_2} {G : Type u_3} [NormedAddCommGroup E] [NormedSpace E] [NormedAddCommGroup F] [NormedSpace F] [NormedAddCommGroup G] [NormedSpace G] {a b : } {B B' : E →L[] F →L[] G} {f₁ f₂ : E} {g₁ g₂ : F} (hBB' : B = B') (hf : Set.EqOn f₁ f₂ (Set.uIcc a b)) (hg : Set.EqOn g₁ g₂ (Set.uIcc a b)) :
                                  stieltjesIntegral a b B (fun (x : ) => f₁ x) g₁ = stieltjesIntegral a b B' (fun (x : ) => f₂ x) g₂

                                  The Riemann integral #

                                  theorem RiemannStieltjes.RiemannIntegrable_def {E : Type u_1} [NormedAddCommGroup E] [NormedSpace E] {a b : } {f : E} :
                                  RiemannIntegrable a b f ∃ (L : E), HasRiemannIntegral a b f L
                                  theorem RiemannStieltjes.HasRiemannIntegral.symm {E : Type u_1} [NormedAddCommGroup E] [NormedSpace E] {a b : } {f : E} {L : E} (h : HasRiemannIntegral a b f L) :
                                  @[simp]
                                  @[simp]
                                  theorem RiemannStieltjes.riemannIntegral.integral_same {E : Type u_1} [NormedAddCommGroup E] [NormedSpace E] {a : } {f : E} :
                                  (riemannIntegral a a fun (x : ) => f x) = 0
                                  theorem RiemannStieltjes.HasRiemannIntegral.unique {E : Type u_1} [NormedAddCommGroup E] [NormedSpace E] {a b : } {f : E} {L₁ L₂ : E} (h₁ : HasRiemannIntegral a b f L₁) (h₂ : HasRiemannIntegral a b f L₂) :
                                  L₁ = L₂
                                  theorem RiemannStieltjes.HasRiemannIntegral.riemannIntegral_eq {E : Type u_1} [NormedAddCommGroup E] [NormedSpace E] {a b : } {f : E} {L : E} (h : HasRiemannIntegral a b f L) :
                                  (riemannIntegral a b fun (x : ) => f x) = L
                                  theorem RiemannStieltjes.RiemannIntegrable.hasRiemannIntegral_iff {E : Type u_1} [NormedAddCommGroup E] [NormedSpace E] {a b : } {f : E} (h : RiemannIntegrable a b f) (L : E) :
                                  HasRiemannIntegral a b f L (riemannIntegral a b fun (x : ) => f x) = L
                                  theorem RiemannStieltjes.hasRiemannIntegral_congr {E : Type u_1} [NormedAddCommGroup E] [NormedSpace E] {a b : } {f₁ f₂ : E} {L : E} (hf : Set.EqOn f₁ f₂ (Set.uIcc a b)) :
                                  theorem RiemannStieltjes.riemannIntegrable_congr {E : Type u_1} [NormedAddCommGroup E] [NormedSpace E] {a b : } {f₁ f₂ : E} (hf : Set.EqOn f₁ f₂ (Set.uIcc a b)) :
                                  @[simp]
                                  theorem RiemannStieltjes.riemannIntegral.integral_undef {E : Type u_1} [NormedAddCommGroup E] [NormedSpace E] {a b : } {f : E} (h : ¬RiemannIntegrable a b f) :
                                  (riemannIntegral a b fun (x : ) => f x) = 0
                                  theorem RiemannStieltjes.riemannIntegral.integral_symm {E : Type u_1} [NormedAddCommGroup E] [NormedSpace E] {a b : } {f : E} :
                                  (riemannIntegral b a fun (x : ) => f x) = -riemannIntegral a b fun (x : ) => f x