Quadratic maps #
This file defines quadratic maps on an R
-module M
, taking values in an R
-module N
.
An N
-valued quadratic map on a module M
over a commutative ring R
is a map Q : M → N
such
that:
QuadraticMap.map_smul
:Q (a • x) = (a * a) • Q x
QuadraticMap.polar_add_left
,QuadraticMap.polar_add_right
,QuadraticMap.polar_smul_left
,QuadraticMap.polar_smul_right
: the mapQuadraticMap.polar Q := fun x y ↦ Q (x + y) - Q x - Q y
is bilinear.
This notion generalizes to commutative semirings using the approach in [IKR16] which
requires that there be a (possibly non-unique) companion bilinear map B
such that
∀ x y, Q (x + y) = Q x + Q y + B x y
. Over a ring, this B
is precisely QuadraticMap.polar Q
.
To build a QuadraticMap
from the polar
axioms, use QuadraticMap.ofPolar
.
Quadratic maps come with a scalar multiplication, (a • Q) x = a • Q x
,
and composition with linear maps f
, Q.comp f x = Q (f x)
.
Main definitions #
QuadraticMap.ofPolar
: a more familiar constructor that works on ringsQuadraticMap.associated
: associated bilinear mapQuadraticMap.PosDef
: positive definite quadratic mapsQuadraticMap.Anisotropic
: anisotropic quadratic mapsQuadraticMap.discr
: discriminant of a quadratic mapQuadraticMap.IsOrtho
: orthogonality of vectors with respect to a quadratic map.
Main statements #
QuadraticMap.associated_left_inverse
,QuadraticMap.associated_rightInverse
: in a commutative ring where 2 has an inverse, there is a correspondence between quadratic maps and symmetric bilinear formsLinearMap.BilinForm.exists_orthogonal_basis
: There exists an orthogonal basis with respect to any nondegenerate, symmetric bilinear mapB
.
Notation #
In this file, the variable R
is used when a CommSemiring
structure is available.
The variable S
is used when R
itself has a •
action.
Implementation notes #
While the definition and many results make sense if we drop commutativity assumptions, the correct definition of a quadratic maps in the noncommutative setting would require substantial refactors from the current version, such that $Q(rm) = rQ(m)r^*$ for some suitable conjugation $r^*$.
The Zulip thread has some further discussion.
References #
- https://en.wikipedia.org/wiki/Quadratic_form
- https://en.wikipedia.org/wiki/Discriminant#Quadratic_forms
Tags #
quadratic map, homogeneous polynomial, quadratic polynomial
Up to a factor 2, Q.polar
is the associated bilinear map for a quadratic map Q
.
Source of this name: https://en.wikipedia.org/wiki/Quadratic_form#Generalization
Equations
- QuadraticMap.polar f x y = f (x + y) - f x - f y
Instances For
Auxiliary lemma to express bilinearity of QuadraticMap.polar
without subtraction.
A quadratic map on a module.
For a more familiar constructor when R
is a ring, see QuadraticMap.ofPolar
.
- toFun : M → N
- exists_companion' : ∃ (B : LinearMap.BilinMap R M N), ∀ (x y : M), self.toFun (x + y) = self.toFun x + self.toFun y + (B x) y
Instances For
A quadratic form on a module.
Equations
- QuadraticForm R M = QuadraticMap R M R
Instances For
Equations
- QuadraticMap.instFunLike = { coe := QuadraticMap.toFun, coe_injective' := ⋯ }
The simp
normal form for a quadratic map is DFunLike.coe
, not toFun
.
Copy of a QuadraticMap
with a new toFun
equal to the old one. Useful to fix definitional
equalities.
Equations
- Q.copy Q' h = { toFun := Q', toFun_smul := ⋯, exists_companion' := ⋯ }
Instances For
QuadraticMap.polar
as a bilinear map
Equations
- Q.polarBilin = LinearMap.mk₂ R (QuadraticMap.polar ⇑Q) ⋯ ⋯ ⋯ ⋯
Instances For
An alternative constructor to QuadraticMap.mk
, for rings where polar
can be used.
Equations
- QuadraticMap.ofPolar toFun toFun_smul polar_add_left polar_smul_left = { toFun := toFun, toFun_smul := toFun_smul, exists_companion' := ⋯ }
Instances For
In a ring the companion bilinear form is unique and equal to QuadraticMap.polar
.
QuadraticMap R M N
inherits the scalar action from any algebra over R
.
This provides an R
-action via Algebra.id
.
Equations
- QuadraticMap.instSMul = { smul := fun (a : S) (Q : QuadraticMap R M N) => { toFun := a • ⇑Q, toFun_smul := ⋯, exists_companion' := ⋯ } }
Equations
- QuadraticMap.instZero = { zero := { toFun := fun (x : M) => 0, toFun_smul := ⋯, exists_companion' := ⋯ } }
Equations
- QuadraticMap.instInhabited = { default := 0 }
Equations
- QuadraticMap.instAdd = { add := fun (Q Q' : QuadraticMap R M N) => { toFun := ⇑Q + ⇑Q', toFun_smul := ⋯, exists_companion' := ⋯ } }
Equations
- QuadraticMap.instAddCommMonoid = Function.Injective.addCommMonoid (fun (f : QuadraticMap R M N) => ⇑f) ⋯ ⋯ ⋯ ⋯
@CoeFn (QuadraticMap R M)
as an AddMonoidHom
.
This API mirrors AddMonoidHom.coeFn
.
Equations
- QuadraticMap.coeFnAddMonoidHom = { toFun := DFunLike.coe, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Evaluation on a particular element of the module M
is an additive map on quadratic maps.
Equations
- QuadraticMap.evalAddMonoidHom m = (Pi.evalAddMonoidHom (fun (a : M) => N) m).comp QuadraticMap.coeFnAddMonoidHom
Instances For
Equations
- QuadraticMap.instDistribMulActionOfSMulCommClass = DistribMulAction.mk ⋯ ⋯
Equations
- QuadraticMap.instNeg = { neg := fun (Q : QuadraticMap R M N) => { toFun := -⇑Q, toFun_smul := ⋯, exists_companion' := ⋯ } }
Equations
- QuadraticMap.instSub = { sub := fun (Q Q' : QuadraticMap R M N) => (Q + -Q').copy (⇑Q - ⇑Q') ⋯ }
Equations
- QuadraticMap.instAddCommGroup = Function.Injective.addCommGroup (fun (f : QuadraticMap R M N) => ⇑f) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
If Q : M → N
is a quadratic map of R
-modules and R
is an S
-algebra,
then the restriction of scalars is a quadratic map of S
-modules.
Equations
- Q.restrictScalars = { toFun := fun (x : M) => Q x, toFun_smul := ⋯, exists_companion' := ⋯ }
Instances For
Compose the quadratic map with a linear function on the right.
Equations
- Q.comp f = { toFun := fun (x : M) => Q (f x), toFun_smul := ⋯, exists_companion' := ⋯ }
Instances For
Compose a quadratic map with a linear function on the left.
Equations
- f.compQuadraticMap Q = { toFun := fun (x : M) => f (Q x), toFun_smul := ⋯, exists_companion' := ⋯ }
Instances For
Compose a quadratic map with a linear function on the left.
Equations
- f.compQuadraticMap' Q = f.compQuadraticMap Q.restrictScalars
Instances For
When N
and P
are equivalent, quadratic maps on M
into N
are equivalent to quadratic
maps on M
into P
.
See LinearMap.BilinMap.congr₂
for the bilinear map version.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The product of linear maps into an R
-algebra is a quadratic map.
Equations
- QuadraticMap.linMulLin f g = { toFun := ⇑f * ⇑g, toFun_smul := ⋯, exists_companion' := ⋯ }
Instances For
sq
is the quadratic map sending the vector x : A
to x * x
Equations
- QuadraticMap.sq = QuadraticMap.linMulLin LinearMap.id LinearMap.id
Instances For
proj i j
is the quadratic map sending the vector x : n → R
to x i * x j
Equations
Instances For
Associated bilinear maps #
If multiplication by 2 is invertible on the target module N
of
QuadraticMap R M N
, then there is a linear bijection QuadraticMap.associated
between quadratic maps Q
over R
from M
to N
and symmetric bilinear maps
B : M →ₗ[R] M →ₗ[R] → N
such that BilinMap.toQuadraticMap B = Q
(see QuadraticMap.associated_rightInverse
). The associated bilinear map is half
Q.polarBilin
(see QuadraticMap.two_nsmul_associated
); this is where the invertibility condition
comes from. We spell the condition as [Invertible (2 : Module.End R N)]
.
Note that this makes the bijection available in more cases than the simpler condition
Invertible (2 : R)
, e.g., when R = ℤ
and N = ℝ
.
A bilinear map gives a quadratic map by applying the argument twice.
Equations
- B.toQuadraticMap = { toFun := fun (x : M) => (B x) x, toFun_smul := ⋯, exists_companion' := ⋯ }
Instances For
LinearMap.BilinMap.toQuadraticMap
as an additive homomorphism
Equations
- LinearMap.BilinMap.toQuadraticMapAddMonoidHom R M = { toFun := LinearMap.BilinMap.toQuadraticMap, map_zero' := ⋯, map_add' := ⋯ }
Instances For
LinearMap.BilinMap.toQuadraticMap
as a linear map
Equations
- LinearMap.BilinMap.toQuadraticMapLinearMap S R M = { toFun := LinearMap.BilinMap.toQuadraticMap, map_add' := ⋯, map_smul' := ⋯ }
Instances For
If 2
is invertible in R
, then it is also invertible in End R M
.
If 2
is invertible in R
, then applying the inverse of 2
in End R M
to an element
of M
is the same as multiplying by the inverse of 2
in R
.
associatedHom
is the map that sends a quadratic map on a module M
over R
to its
associated symmetric bilinear map. As provided here, this has the structure of an S
-linear map
where S
is a commutative ring and R
is an S
-algebra.
Over a commutative ring, use QuadraticMap.associated
, which gives an R
-linear map. Over a
general ring with no nontrivial distinguished commutative subring, use QuadraticMap.associated'
,
which gives an additive homomorphism (or more precisely a ℤ
-linear map.)
Equations
- QuadraticMap.associatedHom S = { toFun := fun (Q : QuadraticMap R M N) => ⅟2 • Q.polarBilin, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Twice the associated bilinear map of Q
is the same as the polar of Q
.
A version of QuadraticMap.associated_isSymm
for general targets
(using flip
because IsSymm
does not apply here).
A version of QuadraticMap.associated_left_inverse
for general targets.
associated'
is the ℤ
-linear map that sends a quadratic form on a module M
over R
to its
associated symmetric bilinear form.
Equations
- QuadraticMap.associated' = QuadraticMap.associatedHom ℤ
Instances For
Symmetric bilinear forms can be lifted to quadratic forms
Symmetric bilinear maps can be lifted to quadratic maps
There exists a non-null vector with respect to any quadratic form Q
whose associated
bilinear form is non-zero, i.e. there exists x
such that Q x ≠ 0
.
Alias of QuadraticMap.exists_quadraticMap_ne_zero
.
There exists a non-null vector with respect to any quadratic form Q
whose associated
bilinear form is non-zero, i.e. there exists x
such that Q x ≠ 0
.
associated
is the linear map that sends a quadratic map over a commutative ring to its
associated symmetric bilinear map.
Equations
- QuadraticMap.associated = QuadraticMap.associatedHom R
Instances For
Orthogonality #
The proposition that two elements of a quadratic map space are orthogonal.
Instances For
Alias of the forward direction of QuadraticMap.isOrtho_comm
.
An anisotropic quadratic map is zero only on zero vectors.
Instances For
The associated bilinear form of an anisotropic quadratic form is nondegenerate.
A positive definite quadratic form is positive on nonzero vectors.
Instances For
Quadratic forms and matrices #
Connect quadratic forms and matrices, in order to explicitly compute with them. The convention is twos out, so there might be a factor 2⁻¹ in the entries of the matrix. The determinant of the matrix is the discriminant of the quadratic form.
M.toQuadraticMap'
is the map fun x ↦ row x * M * col x
as a quadratic form.
Equations
- M.toQuadraticMap' = LinearMap.BilinMap.toQuadraticMap ((Matrix.toLinearMap₂' R) M)
Instances For
A matrix representation of the quadratic form.
Equations
- Q.toMatrix' = (LinearMap.toMatrix₂' R) (QuadraticMap.associated Q)
Instances For
The discriminant of a quadratic form generalizes the discriminant of a quadratic polynomial.
Equations
- Q.discr = Q.toMatrix'.det
Instances For
A bilinear form is separating left if the quadratic form it is associated with is anisotropic.
There exists a non-null vector with respect to any symmetric, nonzero bilinear form B
on a module M
over a ring R
with invertible 2
, i.e. there exists some
x : M
such that B x x ≠ 0
.
Given a symmetric bilinear form B
on some vector space V
over a field K
in which 2
is invertible, there exists an orthogonal basis with respect to B
.
Given a quadratic map Q
and a basis, basisRepr
is the basis representation of Q
.
Equations
- Q.basisRepr v = Q.comp ↑v.equivFun.symm
Instances For
The weighted sum of squares with respect to some weight as a quadratic form.
The weights are applied using •
; typically this definition is used either with S = R
or
[Algebra S R]
, although this is stated more generally.
Equations
- QuadraticMap.weightedSumSquares R w = ∑ i : ι, w i • QuadraticMap.proj i i
Instances For
On an orthogonal basis, the basis representation of Q
is just a sum of squares.