Basics on bilinear maps #
This file provides basics on bilinear maps. The most general form considered are maps that are
semilinear in both arguments. They are of type M →ₛₗ[ρ₁₂] N →ₛₗ[σ₁₂] P, where M and N
are modules over R and S respectively, P is a module over both R₂ and S₂ with
commuting actions, and ρ₁₂ : R →+* R₂ and σ₁₂ : S →+* S₂.
Main declarations #
LinearMap.mk₂: a constructor for bilinear maps, taking an unbundled function together with proof witnesses of bilinearityLinearMap.flip: turns a bilinear mapM × N → PintoN × M → PLinearMap.lflip: given a linear map fromMtoN →ₗ[R] P, i.e., a bilinear mapM → N → P, change the order of variables and get a linear map fromNtoM →ₗ[R] P.LinearMap.lcomp: composition of a given linear mapM → Nwith a linear mapN → Pas a linear map fromNₗ →ₗ[R] PₗtoM →ₗ[R] PₗLinearMap.llcomp: composition of linear maps as a bilinear map from(M →ₗ[R] N) × (N →ₗ[R] P)toM →ₗ[R] PLinearMap.compl₂: composition of a linear mapQ → Nand a bilinear mapM → N → Pto form a bilinear mapM → Q → P.LinearMap.compr₂: composition of a linear mapP → Qand a bilinear mapM → N → Pto form a bilinear mapM → N → Q.LinearMap.lsmul: scalar multiplication as a bilinear mapR × M → M
Tags #
bilinear
Create a bilinear map from a function that is semilinear in each component.
See mk₂' and mk₂ for the linear case.
Equations
Instances For
Create a bilinear map from a function that is linear in each component.
See mk₂ for the special case where both arguments come from modules over the same ring.
Equations
- LinearMap.mk₂' R S f H1 H2 H3 H4 = LinearMap.mk₂'ₛₗ (RingHom.id R) (RingHom.id S) f H1 H2 H3 H4
Instances For
Given a linear map from M to linear maps from N to P, i.e., a bilinear map from M × N to
P, change the order of variables and get a linear map from N to linear maps from M to P.
Equations
- f.flip = LinearMap.mk₂'ₛₗ σ₁₂ ρ₁₂ (fun (n : N) (m : M) => (f m) n) ⋯ ⋯ ⋯ ⋯
Instances For
Composing a semilinear map M → N and a semilinear map N → P to form a semilinear map
M → P is itself a linear map.
Equations
- LinearMap.lcompₛₗ R₅ P σ₂₃ f = (LinearMap.id.flip ∘ₛₗ f).flip
Instances For
Composing a linear map Q → N and a bilinear map M → N → P to
form a bilinear map M → Q → P.
Equations
- h.compl₂ g = { toFun := fun (a : M) => (LinearMap.lcompₛₗ R₅ P σ₂₃ g) (h a), map_add' := ⋯, map_smul' := ⋯ }
Instances For
Composing a given linear map M → N with a linear map N → P as a linear map from
Nₗ →ₗ[R] Pₗ to M →ₗ[R] Pₗ.
Equations
- LinearMap.lcomp S N f = LinearMap.lcompₛₗ S N (RingHom.id R) f
Instances For
Restricting a bilinear map in the second entry
Equations
- f.domRestrict₂ q = { toFun := fun (m : M) => (f m).domRestrict q, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Restricting a bilinear map in both components
Equations
- f.domRestrict₁₂ p q = (f.domRestrict p).domRestrict₂ q
Instances For
If B : M → N → Pₗ is R-S bilinear and R' and S' are compatible scalar multiplications,
then the restriction of scalars is a R'-S' bilinear map.
Equations
- LinearMap.restrictScalars₁₂ R' S' B = LinearMap.mk₂' R' S' (fun (x1 : M) (x2 : N) => (B x1) x2) ⋯ ⋯ ⋯ ⋯
Instances For
LinearMap.flip as an isomorphism of modules.
Equations
- LinearMap.lflip = { toFun := LinearMap.flip, map_add' := ⋯, map_smul' := ⋯, invFun := LinearMap.flip, left_inv := ⋯, right_inv := ⋯ }
Instances For
Create a bilinear map from a function that is linear in each component.
This is a shorthand for mk₂' for the common case when R = S.
Equations
- LinearMap.mk₂ R f H1 H2 H3 H4 = LinearMap.mk₂' R R f H1 H2 H3 H4
Instances For
Composing linear maps Q → M and Q' → N with a bilinear map M → N → P to
form a bilinear map Q → Q' → P.
Instances For
Composing a linear map P → Q and a bilinear map M → N → P to
form a bilinear map M → N → Q.
See LinearMap.compr₂ₛₗ for a version of this which does not support towers of scalars but which
does support semi-linear maps.
Instances For
A version of Function.Injective.comp for composition of a bilinear map with a linear map.
A version of Function.Surjective.comp for composition of a bilinear map with a linear map.
A version of Function.Surjective.comp for composition of a bilinear map with a linear map.
A version of Function.Bijective.comp for composition of a bilinear map with a linear map.
Composing linear maps as a bilinear map from (M →ₛₗ[σ₁₂] N) × (N →ₛₗ[σ₂₃] P)
to M →ₛₗ[σ₁₃] P.
Equations
- LinearMap.llcomp R₃ M N P = { toFun := LinearMap.lcompₛₗ R₃ P σ₂₃, map_add' := ⋯, map_smul' := ⋯ }.flip
Instances For
Composing a linear map P →ₛₗ[σ₃₄] Q and a bilinear map M →ₛₗ[σ₁₃] N →ₛₗ[σ₂₃] P to
form a bilinear map M →ₛₗ[σ₁₄] N →ₛₗ[σ₂₄] Q.
See LinearMap.compr₂ for a version of this definition, which does not support semi-linear maps but
which does support towers of scalars.
Equations
- f.compr₂ₛₗ g = (LinearMap.llcomp R₄ N P Q) g ∘ₛₗ f
Instances For
A version of Function.Injective.comp for composition of a bilinear map with a linear map.
A version of Function.Surjective.comp for composition of a bilinear map with a linear map.
A version of Function.Surjective.comp for composition of a bilinear map with a linear map.
A version of Function.Bijective.comp for composition of a bilinear map with a linear map.
An auxiliary lemma for proving associativity, turning an equality in terms of bilinear maps into
an equality of linear maps so that we can use ext.
Scalar multiplication as a bilinear map R → M → M.
Equations
- LinearMap.lsmul R M = LinearMap.mk₂ R (fun (x1 : R) (x2 : M) => x1 • x2) ⋯ ⋯ ⋯ ⋯
Instances For
A shorthand for the type of R-bilinear Nₗ-valued maps on M.
Instances For
For convenience, a shorthand for the type of bilinear forms from M to R.
Equations
- LinearMap.BilinForm R M = LinearMap.BilinMap R M R
Instances For
Restrict the scalars and range of a linear map.
Equations
- i.restrictScalarsRange k hk f hf = (↑S f ∘ₗ i).codLift k hk hf
Instances For
Restrict the scalars, domains, and range of a bilinear map.
Equations
- i.restrictScalarsRange₂ j k hk B hB = ((LinearMap.restrictScalarsₗ S R N P S ∘ₗ ↑S B).compl₁₂ i j).codRestrict₂ k hk hB
Instances For
Bundled statement of bilinearity for a function.
The bundled type E →ₗ[R] F →ₗ[R] G should be preferred in cases where that can be used.
IsBilinearMap can be useful to have IsBilinearMap (myFunction ..) as a hypothesis to a
declaration.
Instances For
Make a bilinear map from a function and a bundled statement of bilinearity.
Equations
- hf.toLinearMap = LinearMap.mk₂ R f ⋯ ⋯ ⋯ ⋯