Documentation

Mathlib.Analysis.Normed.Lp.WithLp

The WithLp type synonym #

WithLp p V is a copy of V with exactly the same vector space structure, but with the Lp norm instead of any existing norm on V; recall that by default ι → R and R × R are equipped with a norm defined as the supremum of the norms of their components.

This file defines the vector space structure for all types V; the norm structure is built for different specializations of V in downstream files.

Note that this should not be used for infinite products, as in these cases the "right" Lp spaces is not the same as the direct product of the spaces. See the docstring in Mathlib/Analysis/PiLp for more details.

Main definitions #

Implementation notes #

The pattern here is the same one as is used by Lex for order structures; it avoids having a separate synonym for each type (ProdLp, PiLp, etc), and allows all the structure-copying code to be shared.

TODO: is it safe to copy across the topology and uniform space structure too for all reasonable choices of V?

structure WithLp (p : ENNReal) (V : Type u_1) :
Type u_1

A type synonym for the given V, associated with the Lp norm. Note that by default this just forgets the norm structure on V; it is up to downstream users to implement the Lp norm (for instance, on Prod and finite Pi types).

  • toLp :: (
    • ofLp : V

      Converts an element of WithLp p V to an element of V.

  • )
Instances For

    This prevents toLp p x being printed as { ofLp := x } by delabStructureInstance.

    Equations
    Instances For
      def WithLp.equiv (p : ENNReal) (V : Type u_4) :
      WithLp p V V

      WithLp.ofLp and WithLp.toLp as an equivalence.

      Equations
      Instances For
        @[simp]
        theorem WithLp.equiv_symm_apply_ofLp (p : ENNReal) (V : Type u_4) (ofLp : V) :
        ((WithLp.equiv p V).symm ofLp).ofLp = ofLp
        @[simp]
        theorem WithLp.equiv_apply (p : ENNReal) (V : Type u_4) (self : WithLp p V) :
        (WithLp.equiv p V) self = self.ofLp
        @[simp]
        theorem WithLp.equiv_symm_apply (p : ENNReal) (V : Type u_4) :
        (WithLp.equiv p V).symm = toLp p

        WithLp p V inherits various module-adjacent structures from V.

        instance WithLp.instUnique (p : ENNReal) (V : Type u_4) [Unique V] :
        Equations
        instance WithLp.instSMul (p : ENNReal) (K : Type u_1) (V : Type u_4) [SMul K V] :
        SMul K (WithLp p V)
        Equations
        instance WithLp.instVAdd (p : ENNReal) (K : Type u_1) (V : Type u_4) [VAdd K V] :
        VAdd K (WithLp p V)
        Equations
        instance WithLp.instMulAction (p : ENNReal) (K : Type u_1) (V : Type u_4) [Monoid K] [MulAction K V] :
        Equations
        instance WithLp.instAddAction (p : ENNReal) (K : Type u_1) (V : Type u_4) [AddMonoid K] [AddAction K V] :
        Equations
        instance WithLp.instDistribMulAction (p : ENNReal) (K : Type u_1) (V : Type u_4) [Monoid K] [AddCommGroup V] [DistribMulAction K V] :
        Equations
        instance WithLp.instModule (p : ENNReal) (K : Type u_1) (V : Type u_4) [Semiring K] [AddCommGroup V] [Module K V] :
        Module K (WithLp p V)
        Equations
        theorem WithLp.ofLp_toLp (p : ENNReal) {V : Type u_4} (x : V) :
        (toLp p x).ofLp = x
        @[simp]
        theorem WithLp.toLp_ofLp (p : ENNReal) {V : Type u_4} (x : WithLp p V) :
        toLp p x.ofLp = x
        def WithLp.map (p : ENNReal) {V : Type u_4} {V' : Type u_5} (f : VV') (x : WithLp p V) :
        WithLp p V'

        Lift a function to WithLp.

        Equations
        Instances For
          @[simp]
          theorem WithLp.map_id (p : ENNReal) {V : Type u_4} :
          theorem WithLp.map_comp (p : ENNReal) {V : Type u_4} {V' : Type u_5} {V'' : Type u_6} (f : V'V'') (g : VV') :
          def WithLp.congr (p : ENNReal) {V : Type u_4} {V' : Type u_5} (f : V V') :
          WithLp p V WithLp p V'

          Lift an equivalence to WithLp.

          Equations
          Instances For
            @[simp]
            theorem WithLp.coe_congr (p : ENNReal) {V : Type u_4} {V' : Type u_5} (f : V V') :
            (WithLp.congr p f) = WithLp.map p f
            @[simp]
            @[simp]
            theorem WithLp.congr_symm (p : ENNReal) {V : Type u_4} {V' : Type u_5} (f : V V') :
            theorem WithLp.congr_trans (p : ENNReal) {V : Type u_4} {V' : Type u_5} {V'' : Type u_6} (f : V V') (g : V' V'') :
            @[simp]
            theorem WithLp.toLp_zero (p : ENNReal) {V : Type u_4} [AddCommGroup V] :
            toLp p 0 = 0
            @[simp]
            theorem WithLp.ofLp_zero (p : ENNReal) {V : Type u_4} [AddCommGroup V] :
            ofLp 0 = 0
            @[simp]
            theorem WithLp.toLp_add (p : ENNReal) {V : Type u_4} [AddCommGroup V] (x y : V) :
            toLp p (x + y) = toLp p x + toLp p y
            @[simp]
            theorem WithLp.ofLp_add (p : ENNReal) {V : Type u_4} [AddCommGroup V] (x y : WithLp p V) :
            (x + y).ofLp = x.ofLp + y.ofLp
            @[simp]
            theorem WithLp.toLp_sub (p : ENNReal) {V : Type u_4} [AddCommGroup V] (x y : V) :
            toLp p (x - y) = toLp p x - toLp p y
            @[simp]
            theorem WithLp.ofLp_sub (p : ENNReal) {V : Type u_4} [AddCommGroup V] (x y : WithLp p V) :
            (x - y).ofLp = x.ofLp - y.ofLp
            @[simp]
            theorem WithLp.toLp_neg (p : ENNReal) {V : Type u_4} [AddCommGroup V] (x : V) :
            toLp p (-x) = -toLp p x
            @[simp]
            theorem WithLp.ofLp_neg (p : ENNReal) {V : Type u_4} [AddCommGroup V] (x : WithLp p V) :
            (-x).ofLp = -x.ofLp
            @[simp]
            theorem WithLp.toLp_eq_zero (p : ENNReal) {V : Type u_4} [AddCommGroup V] {x : V} :
            toLp p x = 0 x = 0
            @[simp]
            theorem WithLp.ofLp_eq_zero (p : ENNReal) {V : Type u_4} [AddCommGroup V] {x : WithLp p V} :
            x.ofLp = 0 x = 0
            @[simp]
            theorem WithLp.toLp_smul (p : ENNReal) {K : Type u_1} {V : Type u_4} [SMul K V] (c : K) (x : V) :
            toLp p (c x) = c toLp p x
            @[simp]
            theorem WithLp.ofLp_smul (p : ENNReal) {K : Type u_1} {V : Type u_4} [SMul K V] (c : K) (x : WithLp p V) :
            (c x).ofLp = c x.ofLp
            instance WithLp.instIsScalarTower (p : ENNReal) {K : Type u_1} (K' : Type u_2) {V : Type u_4} [SMul K K'] [SMul K V] [SMul K' V] [IsScalarTower K K' V] :
            instance WithLp.instVAddAssocClass (p : ENNReal) {K : Type u_1} (K' : Type u_2) {V : Type u_4} [VAdd K K'] [VAdd K V] [VAdd K' V] [VAddAssocClass K K' V] :
            instance WithLp.instSMulCommClass (p : ENNReal) {K : Type u_1} (K' : Type u_2) {V : Type u_4} [SMul K V] [SMul K' V] [SMulCommClass K K' V] :
            instance WithLp.instVAddCommClass (p : ENNReal) {K : Type u_1} (K' : Type u_2) {V : Type u_4} [VAdd K V] [VAdd K' V] [VAddCommClass K K' V] :
            @[deprecated WithLp.ofLp_zero (since := "2025-06-08")]
            theorem WithLp.equiv_zero (p : ENNReal) {V : Type u_4} [AddCommGroup V] :
            (WithLp.equiv p V) 0 = 0
            @[deprecated WithLp.toLp_zero (since := "2025-06-08")]
            theorem WithLp.equiv_symm_zero (p : ENNReal) {V : Type u_4} [AddCommGroup V] :
            (WithLp.equiv p V).symm 0 = 0
            @[deprecated WithLp.toLp_eq_zero (since := "2025-06-08")]
            theorem WithLp.equiv_symm_eq_zero_iff (p : ENNReal) {V : Type u_4} [AddCommGroup V] {x : V} :
            (WithLp.equiv p V).symm x = 0 x = 0
            @[deprecated WithLp.ofLp_eq_zero (since := "2025-06-08")]
            theorem WithLp.equiv_eq_zero_iff (p : ENNReal) {V : Type u_4} [AddCommGroup V] {x : WithLp p V} :
            (WithLp.equiv p V) x = 0 x = 0
            @[deprecated WithLp.ofLp_add (since := "2025-06-08")]
            theorem WithLp.equiv_add (p : ENNReal) {V : Type u_4} [AddCommGroup V] (x y : WithLp p V) :
            (WithLp.equiv p V) (x + y) = (WithLp.equiv p V) x + (WithLp.equiv p V) y
            @[deprecated WithLp.toLp_add (since := "2025-06-08")]
            theorem WithLp.equiv_symm_add (p : ENNReal) {V : Type u_4} [AddCommGroup V] (x' y' : V) :
            (WithLp.equiv p V).symm (x' + y') = (WithLp.equiv p V).symm x' + (WithLp.equiv p V).symm y'
            @[deprecated WithLp.ofLp_sub (since := "2025-06-08")]
            theorem WithLp.equiv_sub (p : ENNReal) {V : Type u_4} [AddCommGroup V] (x y : WithLp p V) :
            (WithLp.equiv p V) (x - y) = (WithLp.equiv p V) x - (WithLp.equiv p V) y
            @[deprecated WithLp.toLp_sub (since := "2025-06-08")]
            theorem WithLp.equiv_symm_sub (p : ENNReal) {V : Type u_4} [AddCommGroup V] (x' y' : V) :
            (WithLp.equiv p V).symm (x' - y') = (WithLp.equiv p V).symm x' - (WithLp.equiv p V).symm y'
            @[deprecated WithLp.ofLp_neg (since := "2025-06-08")]
            theorem WithLp.equiv_neg (p : ENNReal) {V : Type u_4} [AddCommGroup V] (x : WithLp p V) :
            (WithLp.equiv p V) (-x) = -(WithLp.equiv p V) x
            @[deprecated WithLp.toLp_neg (since := "2025-06-08")]
            theorem WithLp.equiv_symm_neg (p : ENNReal) {V : Type u_4} [AddCommGroup V] (x' : V) :
            (WithLp.equiv p V).symm (-x') = -(WithLp.equiv p V).symm x'
            @[deprecated WithLp.ofLp_smul (since := "2025-06-08")]
            theorem WithLp.equiv_smul (p : ENNReal) {K : Type u_1} {V : Type u_4} [SMul K V] (c : K) (x : WithLp p V) :
            (WithLp.equiv p V) (c x) = c (WithLp.equiv p V) x
            @[deprecated WithLp.toLp_smul (since := "2025-06-08")]
            theorem WithLp.equiv_symm_smul (p : ENNReal) {K : Type u_1} {V : Type u_4} [SMul K V] (c : K) (x' : V) :
            (WithLp.equiv p V).symm (c x') = c (WithLp.equiv p V).symm x'
            def WithLp.addEquiv (p : ENNReal) (V : Type u_4) [AddCommGroup V] :
            WithLp p V ≃+ V

            WithLp.equiv as a group isomorphism.

            Equations
            Instances For
              @[simp]
              theorem WithLp.addEquiv_symm_apply (p : ENNReal) (V : Type u_4) [AddCommGroup V] (ofLp : V) :
              (WithLp.addEquiv p V).symm ofLp = toLp p ofLp
              @[simp]
              theorem WithLp.addEquiv_apply (p : ENNReal) (V : Type u_4) [AddCommGroup V] (self : WithLp p V) :
              (WithLp.addEquiv p V) self = self.ofLp
              @[simp]
              theorem WithLp.ofLp_sum (p : ENNReal) (V : Type u_4) [AddCommGroup V] {ι : Type u_7} (s : Finset ι) (f : ιWithLp p V) :
              (∑ is, f i).ofLp = is, (f i).ofLp
              @[simp]
              theorem WithLp.toLp_sum (p : ENNReal) (V : Type u_4) [AddCommGroup V] {ι : Type u_7} (s : Finset ι) (f : ιV) :
              toLp p (∑ is, f i) = is, toLp p (f i)
              @[simp]
              theorem WithLp.ofLp_listSum (p : ENNReal) (V : Type u_4) [AddCommGroup V] (l : List (WithLp p V)) :
              @[simp]
              theorem WithLp.toLp_listSum (p : ENNReal) (V : Type u_4) [AddCommGroup V] (l : List V) :
              toLp p l.sum = (List.map (toLp p) l).sum
              @[simp]
              theorem WithLp.ofLp_multisetSum (p : ENNReal) (V : Type u_4) [AddCommGroup V] (s : Multiset (WithLp p V)) :
              @[simp]
              theorem WithLp.toLp_multisetSum (p : ENNReal) (V : Type u_4) [AddCommGroup V] (s : Multiset V) :
              def WithLp.linearEquiv (p : ENNReal) (K : Type u_1) (V : Type u_4) [Semiring K] [AddCommGroup V] [Module K V] :

              WithLp.equiv as a linear equivalence.

              Equations
              Instances For
                @[simp]
                theorem WithLp.linearEquiv_symm_apply (p : ENNReal) (K : Type u_1) (V : Type u_4) [Semiring K] [AddCommGroup V] [Module K V] (a✝ : V) :
                @[simp]
                theorem WithLp.linearEquiv_apply (p : ENNReal) (K : Type u_1) (V : Type u_4) [Semiring K] [AddCommGroup V] [Module K V] (a✝ : WithLp p V) :
                (WithLp.linearEquiv p K V) a✝ = (WithLp.addEquiv p V).toFun a✝
                theorem WithLp.coe_linearEquiv (p : ENNReal) (K : Type u_1) (V : Type u_4) [Semiring K] [AddCommGroup V] [Module K V] :
                theorem WithLp.coe_symm_linearEquiv (p : ENNReal) (K : Type u_1) (V : Type u_4) [Semiring K] [AddCommGroup V] [Module K V] :
                instance WithLp.instModuleFinite (p : ENNReal) (K : Type u_1) (V : Type u_4) [Semiring K] [AddCommGroup V] [Module K V] [Module.Finite K V] :
                def LinearMap.withLpMap (p : ENNReal) {K : Type u_1} {K' : Type u_2} {V : Type u_4} {V' : Type u_5} [Semiring K] [Semiring K'] {σ : K →+* K'} [AddCommGroup V] [Module K V] [AddCommGroup V'] [Module K' V'] (f : V →ₛₗ[σ] V') :

                Lift a (semi)linear map to WithLp.

                Equations
                Instances For
                  @[simp]
                  theorem LinearMap.coe_withLpMap (p : ENNReal) {K : Type u_1} {K' : Type u_2} {V : Type u_4} {V' : Type u_5} [Semiring K] [Semiring K'] {σ : K →+* K'} [AddCommGroup V] [Module K V] [AddCommGroup V'] [Module K' V'] (f : V →ₛₗ[σ] V') :
                  (withLpMap p f) = WithLp.map p f
                  @[simp]
                  theorem LinearMap.withLpMap_id (p : ENNReal) {K : Type u_1} {V : Type u_4} [Semiring K] [AddCommGroup V] [Module K V] :
                  @[simp]
                  theorem LinearMap.withLpMap_comp (p : ENNReal) {K : Type u_1} {K' : Type u_2} {K'' : Type u_3} {V : Type u_4} {V' : Type u_5} {V'' : Type u_6} [Semiring K] [Semiring K'] [Semiring K''] {σ : K →+* K'} {τ : K' →+* K''} {ρ : K →+* K''} [RingHomCompTriple σ τ ρ] [AddCommGroup V] [Module K V] [AddCommGroup V'] [Module K' V'] [AddCommGroup V''] [Module K'' V''] (f : V' →ₛₗ[τ] V'') (g : V →ₛₗ[σ] V') :
                  def LinearEquiv.withLpCongr (p : ENNReal) {K : Type u_1} {K' : Type u_2} {V : Type u_4} {V' : Type u_5} [Semiring K] [Semiring K'] {σ : K →+* K'} {σ' : K' →+* K} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] [AddCommGroup V] [Module K V] [AddCommGroup V'] [Module K' V'] (f : V ≃ₛₗ[σ] V') :

                  Lift a (semi)linear equivalence to WithLp.

                  Equations
                  Instances For
                    @[simp]
                    theorem LinearEquiv.coe_withLpCongr (p : ENNReal) {K : Type u_1} {K' : Type u_2} {V : Type u_4} {V' : Type u_5} [Semiring K] [Semiring K'] {σ : K →+* K'} {σ' : K' →+* K} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] [AddCommGroup V] [Module K V] [AddCommGroup V'] [Module K' V'] (f : V ≃ₛₗ[σ] V') :
                    (withLpCongr p f) = WithLp.map p f
                    @[simp]
                    theorem LinearEquiv.withLpCongr_symm (p : ENNReal) {K : Type u_1} {K' : Type u_2} {V : Type u_4} {V' : Type u_5} [Semiring K] [Semiring K'] {σ : K →+* K'} {σ' : K' →+* K} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] [AddCommGroup V] [Module K V] [AddCommGroup V'] [Module K' V'] (f : V ≃ₛₗ[σ] V') :
                    @[simp]
                    theorem LinearEquiv.withLpCongr_refl (p : ENNReal) {K : Type u_1} {V : Type u_4} [Semiring K] [AddCommGroup V] [Module K V] :
                    withLpCongr p (refl K V) = refl K (WithLp p V)
                    theorem LinearEquiv.withLpCongr_trans (p : ENNReal) {K : Type u_1} {K' : Type u_2} {K'' : Type u_3} {V : Type u_4} {V' : Type u_5} {V'' : Type u_6} [Semiring K] [Semiring K'] [Semiring K''] {σ : K →+* K'} {σ' : K' →+* K} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] {τ : K' →+* K''} {τ' : K'' →+* K'} [RingHomInvPair τ τ'] [RingHomInvPair τ' τ] {ρ : K →+* K''} {ρ' : K'' →+* K} [RingHomInvPair ρ ρ'] [RingHomInvPair ρ' ρ] [RingHomCompTriple σ τ ρ] [RingHomCompTriple τ' σ' ρ'] [AddCommGroup V] [Module K V] [AddCommGroup V'] [Module K' V'] [AddCommGroup V''] [Module K'' V''] (f : V ≃ₛₗ[σ] V') (g : V' ≃ₛₗ[τ] V'') :