Operator norm on the space of continuous multilinear maps #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
When f
is a continuous multilinear map in finitely many variables, we define its norm ‖f‖
as the
smallest number such that ‖f m‖ ≤ ‖f‖ * ∏ i, ‖m i‖
for all m
.
We show that it is indeed a norm, and prove its basic properties.
Main results #
Let f
be a multilinear map in finitely many variables.
exists_bound_of_continuous
asserts that, iff
is continuous, then there existsC > 0
with‖f m‖ ≤ C * ∏ i, ‖m i‖
for allm
.continuous_of_bound
, conversely, asserts that this bound implies continuity.mk_continuous
constructs the associated continuous multilinear map.
Let f
be a continuous multilinear map in finitely many variables.
‖f‖
is its norm, i.e., the smallest number such that‖f m‖ ≤ ‖f‖ * ∏ i, ‖m i‖
for allm
.le_op_norm f m
asserts the fundamental inequality‖f m‖ ≤ ‖f‖ * ∏ i, ‖m i‖
.norm_image_sub_le f m₁ m₂
gives a control of the differencef m₁ - f m₂
in terms of‖f‖
and‖m₁ - m₂‖
.
We also register isomorphisms corresponding to currying or uncurrying variables, transforming a
continuous multilinear function f
in n+1
variables into a continuous linear function taking
values in continuous multilinear functions in n
variables, and also into a continuous multilinear
function in n
variables taking values in continuous linear functions. These operations are called
f.curry_left
and f.curry_right
respectively (with inverses f.uncurry_left
and
f.uncurry_right
). They induce continuous linear equivalences between spaces of
continuous multilinear functions in n+1
variables and spaces of continuous linear functions into
continuous multilinear functions in n
variables (resp. continuous multilinear functions in n
variables taking values in continuous linear functions), called respectively
continuous_multilinear_curry_left_equiv
and continuous_multilinear_curry_right_equiv
.
Implementation notes #
We mostly follow the API (and the proofs) of operator_norm.lean
, with the additional complexity
that we should deal with multilinear maps in several variables. The currying/uncurrying
constructions are based on those in multilinear.lean
.
From the mathematical point of view, all the results follow from the results on operator norm in
one variable, by applying them to one variable after the other through currying. However, this
is only well defined when there is an order on the variables (for instance on fin n
) although
the final result is independent of the order. While everything could be done following this
approach, it turns out that direct proofs are easier and more efficient.
Type variables #
We use the following type variables in this file:
𝕜
: anontrivially_normed_field
;ι
,ι'
: finite index types with decidable equality;E
,E₁
: families of normed vector spaces over𝕜
indexed byi : ι
;E'
: a family of normed vector spaces over𝕜
indexed byi' : ι'
;Ei
: a family of normed vector spaces over𝕜
indexed byi : fin (nat.succ n)
;G
,G'
: normed vector spaces over𝕜
.
Continuity properties of multilinear maps #
We relate continuity of multilinear maps to the inequality ‖f m‖ ≤ C * ∏ i, ‖m i‖
, in
both directions. Along the way, we prove useful bounds on the difference ‖f m₁ - f m₂‖
.
If a multilinear map in finitely many variables on normed spaces satisfies the inequality
‖f m‖ ≤ C * ∏ i, ‖m i‖
on a shell ε i / ‖c i‖ < ‖m i‖ < ε i
for some positive numbers ε i
and elements c i : 𝕜
, 1 < ‖c i‖
, then it satisfies this inequality for all m
.
If a multilinear map in finitely many variables on normed spaces is continuous, then it
satisfies the inequality ‖f m‖ ≤ C * ∏ i, ‖m i‖
, for some C
which can be chosen to be
positive.
If f
satisfies a boundedness property around 0
, one can deduce a bound on f m₁ - f m₂
using the multilinearity. Here, we give a precise but hard to use version. See
norm_image_sub_le_of_bound
for a less precise but more usable version. The bound reads
‖f m - f m'‖ ≤ C * ‖m 1 - m' 1‖ * max ‖m 2‖ ‖m' 2‖ * max ‖m 3‖ ‖m' 3‖ * ... * max ‖m n‖ ‖m' n‖ + ...
,
where the other terms in the sum are the same products where 1
is replaced by any i
.
If f
satisfies a boundedness property around 0
, one can deduce a bound on f m₁ - f m₂
using the multilinearity. Here, we give a usable but not very precise version. See
norm_image_sub_le_of_bound'
for a more precise but less usable version. The bound is
‖f m - f m'‖ ≤ C * card ι * ‖m - m'‖ * (max ‖m‖ ‖m'‖) ^ (card ι - 1)
.
If a multilinear map satisfies an inequality ‖f m‖ ≤ C * ∏ i, ‖m i‖
, then it is
continuous.
Constructing a continuous multilinear map from a multilinear map satisfying a boundedness condition.
Equations
- f.mk_continuous C H = {to_multilinear_map := {to_fun := f.to_fun, map_add' := _, map_smul' := _}, cont := _}
Given a multilinear map in n
variables, if one restricts it to k
variables putting z
on
the other coordinates, then the resulting restricted function satisfies an inequality
‖f.restr v‖ ≤ C * ‖z‖^(n-k) * Π ‖v i‖
if the original function satisfies ‖f v‖ ≤ C * Π ‖v i‖
.
Continuous multilinear maps #
We define the norm ‖f‖
of a continuous multilinear map f
in finitely many variables as the
smallest number such that ‖f m‖ ≤ ‖f‖ * ∏ i, ‖m i‖
for all m
. We show that this
defines a normed space structure on continuous_multilinear_map 𝕜 E G
.
The operator norm of a continuous multilinear map is the inf of all its bounds.
Equations
An alias of continuous_multilinear_map.has_op_norm
with non-dependent types to help typeclass
search.
The fundamental property of the operator norm of a continuous multilinear map:
‖f m‖
is bounded by ‖f‖
times the product of the ‖m i‖
.
The image of the unit ball under a continuous multilinear map is bounded.
If one controls the norm of every f x
, then one controls the norm of f
.
The operator norm satisfies the triangle inequality.
A continuous linear map is zero iff its norm vanishes.
Continuous multilinear maps themselves form a normed space with respect to the operator norm.
Equations
An alias of continuous_multilinear_map.normed_add_comm_group
with non-dependent types to help
typeclass search.
Equations
An alias of continuous_multilinear_map.normed_space
with non-dependent types to help typeclass
search.
The fundamental property of the operator norm of a continuous multilinear map:
‖f m‖
is bounded by ‖f‖
times the product of the ‖m i‖
, nnnorm
version.
continuous_multilinear_map.prod
as a linear_isometry_equiv
.
Equations
- continuous_multilinear_map.prodL 𝕜 E G G' = {to_linear_equiv := {to_fun := λ (f : continuous_multilinear_map 𝕜 E G × continuous_multilinear_map 𝕜 E G'), f.fst.prod f.snd, map_add' := _, map_smul' := _, inv_fun := λ (f : continuous_multilinear_map 𝕜 E (G × G')), ((continuous_linear_map.fst 𝕜 G G').comp_continuous_multilinear_map f, (continuous_linear_map.snd 𝕜 G G').comp_continuous_multilinear_map f), left_inv := _, right_inv := _}, norm_map' := _}
continuous_multilinear_map.pi
as a linear_isometry_equiv
.
Equations
- continuous_multilinear_map.piₗᵢ 𝕜 E = {to_linear_equiv := {to_fun := continuous_multilinear_map.pi_equiv.to_fun, map_add' := _, map_smul' := _, inv_fun := continuous_multilinear_map.pi_equiv.inv_fun, left_inv := _, right_inv := _}, norm_map' := _}
continuous_multilinear_map.restrict_scalars
as a linear_isometry
.
Equations
- continuous_multilinear_map.restrict_scalarsₗᵢ 𝕜' = {to_linear_map := {to_fun := continuous_multilinear_map.restrict_scalars 𝕜' _inst_19, map_add' := _, map_smul' := _}, norm_map' := _}
continuous_multilinear_map.restrict_scalars
as a continuous_linear_map
.
The difference f m₁ - f m₂
is controlled in terms of ‖f‖
and ‖m₁ - m₂‖
, precise version.
For a less precise but more usable version, see norm_image_sub_le
. The bound reads
‖f m - f m'‖ ≤ ‖f‖ * ‖m 1 - m' 1‖ * max ‖m 2‖ ‖m' 2‖ * max ‖m 3‖ ‖m' 3‖ * ... * max ‖m n‖ ‖m' n‖ + ...
,
where the other terms in the sum are the same products where 1
is replaced by any i
.
The difference f m₁ - f m₂
is controlled in terms of ‖f‖
and ‖m₁ - m₂‖
, less precise
version. For a more precise but less usable version, see norm_image_sub_le'
.
The bound is ‖f m - f m'‖ ≤ ‖f‖ * card ι * ‖m - m'‖ * (max ‖m‖ ‖m'‖) ^ (card ι - 1)
.
Applying a multilinear map to a vector is continuous in both coordinates.
If the target space is complete, the space of continuous multilinear maps with its norm is also
complete. The proof is essentially the same as for the space of continuous linear maps (modulo the
addition of finset.prod
where needed. The duplication could be avoided by deducing the linear
case from the multilinear case via a currying isomorphism. However, this would mess up imports,
and it is more satisfactory to have the simplest case as a standalone proof.
If a continuous multilinear map is constructed from a multilinear map via the constructor
mk_continuous
, then its norm is bounded by the bound given to the constructor if it is
nonnegative.
If a continuous multilinear map is constructed from a multilinear map via the constructor
mk_continuous
, then its norm is bounded by the bound given to the constructor if it is
nonnegative.
Given a continuous multilinear map f
on n
variables (parameterized by fin n
) and a subset
s
of k
of these variables, one gets a new continuous multilinear map on fin k
by varying
these variables, and fixing the other ones equal to a given value z
. It is denoted by
f.restr s hk z
, where hk
is a proof that the cardinality of s
is k
. The implicit
identification between fin k
and s
that we use is the canonical (increasing) bijection.
The canonical continuous multilinear map on 𝕜^ι
, associating to m
the product of all the
m i
(multiplied by a fixed reference element z
in the target module)
Equations
- continuous_multilinear_map.mk_pi_field 𝕜 ι z = (multilinear_map.mk_pi_ring 𝕜 ι z).mk_continuous ‖z‖ _
Continuous multilinear maps on 𝕜^n
with values in G
are in bijection with G
, as such a
continuous multilinear map is completely determined by its value on the constant vector made of
ones. We register this bijection as a linear isometry in
continuous_multilinear_map.pi_field_equiv
.
Equations
- continuous_multilinear_map.pi_field_equiv 𝕜 ι G = {to_linear_equiv := {to_fun := λ (z : G), continuous_multilinear_map.mk_pi_field 𝕜 ι z, map_add' := _, map_smul' := _, inv_fun := λ (f : continuous_multilinear_map 𝕜 (λ (i : ι), 𝕜) G), ⇑f (λ (i : ι), 1), left_inv := _, right_inv := _}, norm_map' := _}
continuous_linear_map.comp_continuous_multilinear_map
as a bundled continuous bilinear map.
Equations
continuous_linear_map.comp_continuous_multilinear_map
as a bundled
continuous linear equiv.
Equations
- continuous_linear_equiv.comp_continuous_multilinear_mapL E g = {to_linear_equiv := {to_fun := (⇑(continuous_linear_map.comp_continuous_multilinear_mapL 𝕜 E G G') g.to_continuous_linear_map).to_linear_map.to_fun, map_add' := _, map_smul' := _, inv_fun := ⇑(⇑(continuous_linear_map.comp_continuous_multilinear_mapL 𝕜 E G' G) g.symm.to_continuous_linear_map), left_inv := _, right_inv := _}, continuous_to_fun := _, continuous_inv_fun := _}
Flip arguments in f : G →L[𝕜] continuous_multilinear_map 𝕜 E G'
to get
continuous_multilinear_map 𝕜 E (G →L[𝕜] G')
Given a map f : G →ₗ[𝕜] multilinear_map 𝕜 E G'
and an estimate
H : ∀ x m, ‖f x m‖ ≤ C * ‖x‖ * ∏ i, ‖m i‖
, construct a continuous linear
map from G
to continuous_multilinear_map 𝕜 E G'
.
In order to lift, e.g., a map f : (multilinear_map 𝕜 E G) →ₗ[𝕜] multilinear_map 𝕜 E' G'
to a map (continuous_multilinear_map 𝕜 E G) →L[𝕜] continuous_multilinear_map 𝕜 E' G'
,
one can apply this construction to f.comp continuous_multilinear_map.to_multilinear_map_linear
which is a linear map from continuous_multilinear_map 𝕜 E G
to multilinear_map 𝕜 E' G'
.
Equations
- multilinear_map.mk_continuous_linear f C H = {to_fun := λ (x : G), (⇑f x).mk_continuous (C * ‖x‖) _, map_add' := _, map_smul' := _}.mk_continuous (linear_order.max C 0) _
Given a map f : multilinear_map 𝕜 E (multilinear_map 𝕜 E' G)
and an estimate
H : ∀ m m', ‖f m m'‖ ≤ C * ∏ i, ‖m i‖ * ∏ i, ‖m' i‖
, upgrade all multilinear_map
s in the type to
continuous_multilinear_map
s.
Equations
- f.mk_continuous_multilinear C H = {to_fun := λ (m : Π (i : ι), E i), (⇑f m).mk_continuous (C * finset.univ.prod (λ (i : ι), ‖m i‖)) _, map_add' := _, map_smul' := _}.mk_continuous (linear_order.max C 0) _
continuous_multilinear_map.comp_continuous_linear_map
as a bundled continuous linear map.
This implementation fixes f : Π i, E i →L[𝕜] E₁ i
.
TODO: Actually, the map is multilinear in f
but an attempt to formalize this failed because of
issues with class instances.
Equations
- continuous_multilinear_map.comp_continuous_linear_mapL f = {to_fun := λ (g : continuous_multilinear_map 𝕜 E₁ G), g.comp_continuous_linear_map f, map_add' := _, map_smul' := _}.mk_continuous (finset.univ.prod (λ (i : ι), ‖f i‖)) _
continuous_multilinear_map.comp_continuous_linear_map
as a bundled continuous linear equiv,
given f : Π i, E i ≃L[𝕜] E₁ i
.
Equations
- continuous_multilinear_map.comp_continuous_linear_map_equivL G f = {to_linear_equiv := {to_fun := (continuous_multilinear_map.comp_continuous_linear_mapL (λ (i : ι), ↑(f i))).to_linear_map.to_fun, map_add' := _, map_smul' := _, inv_fun := ⇑(continuous_multilinear_map.comp_continuous_linear_mapL (λ (i : ι), ↑((f i).symm))), left_inv := _, right_inv := _}, continuous_to_fun := _, continuous_inv_fun := _}
Currying #
We associate to a continuous multilinear map in n+1
variables (i.e., based on fin n.succ
) two
curried functions, named f.curry_left
(which is a continuous linear map on E 0
taking values
in continuous multilinear maps in n
variables) and f.curry_right
(which is a continuous
multilinear map in n
variables taking values in continuous linear maps on E (last n)
).
The inverse operations are called uncurry_left
and uncurry_right
.
We also register continuous linear equiv versions of these correspondences, in
continuous_multilinear_curry_left_equiv
and continuous_multilinear_curry_right_equiv
.
Left currying #
Given a continuous linear map f
from E 0
to continuous multilinear maps on n
variables,
construct the corresponding continuous multilinear map on n+1
variables obtained by concatenating
the variables, given by m ↦ f (m 0) (tail m)
Given a continuous multilinear map f
in n+1
variables, split the first variable to obtain
a continuous linear map into continuous multilinear maps in n
variables, given by
x ↦ (m ↦ f (cons x m))
.
Equations
- f.curry_left = {to_fun := λ (x : Ei 0), (⇑(f.to_multilinear_map.curry_left) x).mk_continuous (‖f‖ * ‖x‖) _, map_add' := _, map_smul' := _}.mk_continuous ‖f‖ _
The space of continuous multilinear maps on Π(i : fin (n+1)), E i
is canonically isomorphic to
the space of continuous linear maps from E 0
to the space of continuous multilinear maps on
Π(i : fin n), E i.succ
, by separating the first variable. We register this isomorphism in
continuous_multilinear_curry_left_equiv 𝕜 E E₂
. The algebraic version (without topology) is given
in multilinear_curry_left_equiv 𝕜 E E₂
.
The direct and inverse maps are given by f.uncurry_left
and f.curry_left
. Use these
unless you need the full framework of linear isometric equivs.
Equations
- continuous_multilinear_curry_left_equiv 𝕜 Ei G = linear_isometry_equiv.of_bounds {to_fun := continuous_linear_map.uncurry_left _inst_13, map_add' := _, map_smul' := _, inv_fun := continuous_multilinear_map.curry_left _inst_13, left_inv := _, right_inv := _} _ _
Right currying #
Given a continuous linear map f
from continuous multilinear maps on n
variables to
continuous linear maps on E 0
, construct the corresponding continuous multilinear map on n+1
variables obtained by concatenating the variables, given by m ↦ f (init m) (m (last n))
.
Equations
- f.uncurry_right = let f' : multilinear_map 𝕜 (λ (i : fin n), Ei (⇑fin.cast_succ i)) (Ei (fin.last n) →ₗ[𝕜] G) := {to_fun := λ (m : Π (i : fin n), Ei (⇑fin.cast_succ i)), (⇑f m).to_linear_map, map_add' := _, map_smul' := _} in f'.uncurry_right.mk_continuous ‖f‖ _
Given a continuous multilinear map f
in n+1
variables, split the last variable to obtain
a continuous multilinear map in n
variables into continuous linear maps, given by
m ↦ (x ↦ f (snoc m x))
.
Equations
- f.curry_right = let f' : multilinear_map 𝕜 (λ (i : fin n), Ei (⇑fin.cast_succ i)) (Ei (fin.last n) →L[𝕜] G) := {to_fun := λ (m : Π (i : fin n), Ei (⇑fin.cast_succ i)), (⇑(f.to_multilinear_map.curry_right) m).mk_continuous (‖f‖ * finset.univ.prod (λ (i : fin n), ‖m i‖)) _, map_add' := _, map_smul' := _} in f'.mk_continuous ‖f‖ _
The space of continuous multilinear maps on Π(i : fin (n+1)), Ei i
is canonically isomorphic to
the space of continuous multilinear maps on Π(i : fin n), Ei i.cast_succ
with values in the space
of continuous linear maps on Ei (last n)
, by separating the last variable. We register this
isomorphism as a continuous linear equiv in continuous_multilinear_curry_right_equiv 𝕜 Ei G
.
The algebraic version (without topology) is given in multilinear_curry_right_equiv 𝕜 Ei G
.
The direct and inverse maps are given by f.uncurry_right
and f.curry_right
. Use these
unless you need the full framework of linear isometric equivs.
Equations
- continuous_multilinear_curry_right_equiv 𝕜 Ei G = linear_isometry_equiv.of_bounds {to_fun := continuous_multilinear_map.uncurry_right _inst_13, map_add' := _, map_smul' := _, inv_fun := continuous_multilinear_map.curry_right _inst_13, left_inv := _, right_inv := _} _ _
The space of continuous multilinear maps on Π(i : fin (n+1)), G
is canonically isomorphic to
the space of continuous multilinear maps on Π(i : fin n), G
with values in the space
of continuous linear maps on G
, by separating the last variable. We register this
isomorphism as a continuous linear equiv in continuous_multilinear_curry_right_equiv' 𝕜 n G G'
.
For a version allowing dependent types, see continuous_multilinear_curry_right_equiv
. When there
are no dependent types, use the primed version as it helps Lean a lot for unification.
The direct and inverse maps are given by f.uncurry_right
and f.curry_right
. Use these
unless you need the full framework of linear isometric equivs.
Equations
- continuous_multilinear_curry_right_equiv' 𝕜 n G G' = continuous_multilinear_curry_right_equiv 𝕜 (λ (i : fin n.succ), G) G'
Currying with 0
variables #
The space of multilinear maps with 0
variables is trivial: such a multilinear map is just an
arbitrary constant (note that multilinear maps in 0
variables need not map 0
to 0
!).
Therefore, the space of continuous multilinear maps on (fin 0) → G
with values in E₂
is
isomorphic (and even isometric) to E₂
. As this is the zeroth step in the construction of iterated
derivatives, we register this isomorphism.
Associating to a continuous multilinear map in 0
variables the unique value it takes.
Associating to an element x
of a vector space E₂
the continuous multilinear map in 0
variables taking the (unique) value x
Equations
- continuous_multilinear_map.curry0 𝕜 G x = continuous_multilinear_map.const_of_is_empty 𝕜 (λ (i : fin 0), G) x
The continuous linear isomorphism between elements of a normed space, and continuous multilinear
maps in 0
variables with values in this normed space.
The direct and inverse maps are uncurry0
and curry0
. Use these unless you need the full
framework of linear isometric equivs.
Equations
- continuous_multilinear_curry_fin0 𝕜 G G' = {to_linear_equiv := {to_fun := λ (f : continuous_multilinear_map 𝕜 (λ (i : fin 0), G) G'), f.uncurry0, map_add' := _, map_smul' := _, inv_fun := λ (f : G'), continuous_multilinear_map.curry0 𝕜 G f, left_inv := _, right_inv := _}, norm_map' := _}
With 1 variable #
Continuous multilinear maps from G^1
to G'
are isomorphic with continuous linear maps from
G
to G'
.
Equations
- continuous_multilinear_curry_fin1 𝕜 G G' = (continuous_multilinear_curry_right_equiv 𝕜 (λ (i : fin 1), G) G').symm.trans (continuous_multilinear_curry_fin0 𝕜 G (G →L[𝕜] G'))
An equivalence of the index set defines a linear isometric equivalence between the spaces of multilinear maps.
Equations
- continuous_multilinear_map.dom_dom_congrₗᵢ 𝕜 G G' σ = {to_linear_equiv := {to_fun := (continuous_multilinear_map.dom_dom_congr_equiv σ).to_fun, map_add' := _, map_smul' := _, inv_fun := (continuous_multilinear_map.dom_dom_congr_equiv σ).inv_fun, left_inv := _, right_inv := _}, norm_map' := _}
A continuous multilinear map with variables indexed by ι ⊕ ι'
defines a continuous multilinear
map with variables indexed by ι
taking values in the space of continuous multilinear maps with
variables indexed by ι'
.
Equations
A continuous multilinear map with variables indexed by ι
taking values in the space of
continuous multilinear maps with variables indexed by ι'
defines a continuous multilinear map with
variables indexed by ι ⊕ ι'
.
Linear isometric equivalence between the space of continuous multilinear maps with variables
indexed by ι ⊕ ι'
and the space of continuous multilinear maps with variables indexed by ι
taking values in the space of continuous multilinear maps with variables indexed by ι'
.
The forward and inverse functions are continuous_multilinear_map.curry_sum
and continuous_multilinear_map.uncurry_sum
. Use this definition only if you need
some properties of linear_isometry_equiv
.
Equations
- continuous_multilinear_map.curry_sum_equiv 𝕜 ι ι' G G' = linear_isometry_equiv.of_bounds {to_fun := continuous_multilinear_map.curry_sum _inst_15, map_add' := _, map_smul' := _, inv_fun := continuous_multilinear_map.uncurry_sum _inst_15, left_inv := _, right_inv := _} _ _
If s : finset (fin n)
is a finite set of cardinality k
and its complement has cardinality
l
, then the space of continuous multilinear maps G [×n]→L[𝕜] G'
of n
variables is isomorphic
to the space of continuous multilinear maps G [×k]→L[𝕜] G [×l]→L[𝕜] G'
of k
variables taking
values in the space of continuous multilinear maps of l
variables.
Equations
- continuous_multilinear_map.curry_fin_finset 𝕜 G G' hk hl = (continuous_multilinear_map.dom_dom_congrₗᵢ 𝕜 G G' (fin_sum_equiv_of_finset hk hl).symm).trans (continuous_multilinear_map.curry_sum_equiv 𝕜 (fin k) (fin l) G G')