Currying of multilinear maps #
We register isomorphisms corresponding to currying or uncurrying variables, transforming a
multilinear function f
on n+1
variables into a linear function taking values in multilinear
functions in n
variables, and into a multilinear function in n
variables taking values in linear
functions. These operations are called f.curryLeft
and f.curryRight
respectively
(with inverses f.uncurryLeft
and f.uncurryRight
). These operations induce linear equivalences
between spaces of multilinear functions in n+1
variables and spaces of linear functions into
multilinear functions in n
variables (resp. multilinear functions in n
variables taking values
in linear functions), called respectively multilinearCurryLeftEquiv
and
multilinearCurryRightEquiv
.
Currying #
We associate to a multilinear map in n+1
variables (i.e., based on Fin n.succ
) two
curried functions, named f.curryLeft
(which is a linear map on E 0
taking values
in multilinear maps in n
variables) and f.curryRight
(which is a multilinear map in n
variables taking values in linear maps on E 0
). In both constructions, the variable that is
singled out is 0
, to take advantage of the operations cons
and tail
on Fin n
.
The inverse operations are called uncurryLeft
and uncurryRight
.
We also register linear equiv versions of these correspondences, in
multilinearCurryLeftEquiv
and multilinearCurryRightEquiv
.
Left currying #
Given a linear map f
from M 0
to multilinear maps on n
variables,
construct the corresponding multilinear map on n+1
variables obtained by concatenating
the variables, given by m ↦ f (m 0) (tail m)
Equations
- f.uncurryLeft = { toFun := fun (m : (i : Fin n.succ) → M i) => (f (m 0)) (Fin.tail m), map_update_add' := ⋯, map_update_smul' := ⋯ }
Instances For
Given a multilinear map f
in n+1
variables, split the first variable to obtain
a linear map into multilinear maps in n
variables, given by x ↦ (m ↦ f (cons x m))
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The space of multilinear maps on Π (i : Fin (n+1)), M i
is canonically isomorphic to
the space of linear maps from M 0
to the space of multilinear maps on
Π (i : Fin n), M i.succ
, by separating the first variable. We register this isomorphism as a
linear isomorphism in multilinearCurryLeftEquiv R M M₂
.
The direct and inverse maps are given by f.curryLeft
and f.uncurryLeft
. Use these
unless you need the full framework of linear equivs.
Equations
- multilinearCurryLeftEquiv R M M₂ = { toFun := MultilinearMap.curryLeft, map_add' := ⋯, map_smul' := ⋯, invFun := LinearMap.uncurryLeft, left_inv := ⋯, right_inv := ⋯ }
Instances For
Right currying #
Given a multilinear map f
in n
variables to the space of linear maps from M (last n)
to
M₂
, construct the corresponding multilinear map on n+1
variables obtained by concatenating
the variables, given by m ↦ f (init m) (m (last n))
Equations
Instances For
Given a multilinear map f
in n+1
variables, split the last variable to obtain
a multilinear map in n
variables taking values in linear maps from M (last n)
to M₂
, given by
m ↦ (x ↦ f (snoc m x))
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The space of multilinear maps on Π (i : Fin (n+1)), M i
is canonically isomorphic to
the space of linear maps from the space of multilinear maps on Π (i : Fin n), M (castSucc i)
to
the space of linear maps on M (last n)
, by separating the last variable. We register this
isomorphism as a linear isomorphism in multilinearCurryRightEquiv R M M₂
.
The direct and inverse maps are given by f.curryRight
and f.uncurryRight
. Use these
unless you need the full framework of linear equivs.
Equations
- multilinearCurryRightEquiv R M M₂ = { toFun := MultilinearMap.curryRight, map_add' := ⋯, map_smul' := ⋯, invFun := MultilinearMap.uncurryRight, left_inv := ⋯, right_inv := ⋯ }
Instances For
A multilinear map on ∀ i : ι ⊕ ι', M'
defines a multilinear map on ∀ i : ι, M'
taking values in the space of multilinear maps on ∀ i : ι', M'
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A multilinear map on ∀ i : ι, M'
taking values in the space of multilinear maps
on ∀ i : ι', M'
defines a multilinear map on ∀ i : ι ⊕ ι', M'
.
Equations
Instances For
Linear equivalence between the space of multilinear maps on ∀ i : ι ⊕ ι', M'
and the space
of multilinear maps on ∀ i : ι, M'
taking values in the space of multilinear maps
on ∀ i : ι', M'
.
Equations
- MultilinearMap.currySumEquiv R ι M₂ M' ι' = { toFun := MultilinearMap.currySum, map_add' := ⋯, map_smul' := ⋯, invFun := MultilinearMap.uncurrySum, left_inv := ⋯, right_inv := ⋯ }
Instances For
If s : Finset (Fin n)
is a finite set of cardinality k
and its complement has cardinality
l
, then the space of multilinear maps on fun i : Fin n => M'
is isomorphic to the space of
multilinear maps on fun i : Fin k => M'
taking values in the space of multilinear maps
on fun i : Fin l => M'
.
Equations
- MultilinearMap.curryFinFinset R M₂ M' hk hl = (MultilinearMap.domDomCongrLinearEquiv R R M' M₂ (finSumEquivOfFinset hk hl).symm).trans (MultilinearMap.currySumEquiv R (Fin k) M₂ M' (Fin l))