Polynomial module #
In this file, we define the polynomial module for an R
-module M
, i.e. the R[X]
-module M[X]
.
This is defined as a type alias PolynomialModule R M := ℕ →₀ M
, since there might be different
module structures on ℕ →₀ M
of interest. See the docstring of PolynomialModule
for details.
We also define, given an element a
in an R
-algebra A
and an A
-module M
, an R[X]
-module
Module.AEval R M a
, which is a type synonym of M
with the action of a polynomial f
given by f • m = Polynomial.aeval a f • m
. In particular X • m = a • m
.
In the special case that A = M →ₗ[R] M
and φ : M →ₗ[R] M
, the module Module.AEval R M a
is
abbreviated Module.AEval' φ
. In this module we have X • m = ↑φ m
.
Suppose a
is an element of an R
-algebra A
and M
is an A
-module.
Loosely speaking, Module.AEval R M a
is the R[X]
-module with elements m : M
,
where the action of a polynomial $f$ is given by $f • m = f(a) • m$.
More precisely, Module.AEval R M a
has elements Module.AEval.of R M a m
for m : M
,
and the action of f
is f • (of R M a m) = of R M a ((aeval a f) • m)
.
Equations
- Module.AEval R M x = M
Instances For
Equations
Equations
Equations
Equations
- ⋯ = ⋯
Equations
- Module.AEval.instModulePolynomial a = Module.compHom M (Polynomial.aeval a).toRingHom
The canonical linear equivalence between M
and Module.AEval R M a
as an R
-module.
Equations
- Module.AEval.of R M a = LinearEquiv.refl R M
Instances For
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Construct an R[X]
-linear map out of AEval R M a
from a R
-linear map out of M
.
Equations
- LinearMap.ofAEval a f hf = let __spread.0 := LinearMap.comp f ↑(LinearEquiv.symm (Module.AEval.of R M a)); { toAddHom := __spread.0.toAddHom, map_smul' := ⋯ }
Instances For
We can turn an R[X]
-submodule into an R
-submodule by forgetting the action of X
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
An R
-submodule which is stable under the action of a
can be promoted to an
R[X]
-submodule.
Equations
- Module.AEval.mapSubmodule a hp = { toAddSubmonoid := AddSubmonoid.map (Module.AEval.of R M a) p.toAddSubmonoid, smul_mem' := ⋯ }
Instances For
Given and R
-module M
and a linear map φ : M →ₗ[R] M
, Module.AEval' φ
is loosely speaking
the R[X]
-module with elements m : M
, where the action of a polynomial $f$ is given by
$f • m = f(a) • m$.
More precisely, Module.AEval' φ
has elements Module.AEval'.of φ m
for m : M
,
and the action of f
is f • (of φ m) = of φ ((aeval φ f) • m)
.
Module.AEval'
is defined as a special case of Module.AEval
in which the R
-algebra is
M →ₗ[R] M
. Lemmas involving Module.AEval
may be applied to Module.AEval'
.
Equations
- Module.AEval' φ = Module.AEval R M φ
Instances For
The canonical linear equivalence between M
and Module.AEval' φ
as an R
-module,
where φ : M →ₗ[R] M
.
Equations
- Module.AEval'.of φ = Module.AEval.of R M φ
Instances For
Equations
- ⋯ = ⋯
The R[X]
-module M[X]
for an R
-module M
.
This is isomorphic (as an R
-module) to M[X]
when M
is a ring.
We require all the module instances Module S (PolynomialModule R M)
to factor through R
except
Module R[X] (PolynomialModule R M)
.
In this constraint, we have the following instances for example :
R
acts onPolynomialModule R R[X]
R[X]
acts onPolynomialModule R R[X]
asR[Y]
acting onR[X][Y]
R
acts onPolynomialModule R[X] R[X]
R[X]
acts onPolynomialModule R[X] R[X]
asR[X]
acting onR[X][Y]
R[X][X]
acts onPolynomialModule R[X] R[X]
asR[X][Y]
acting on itself
This is also the reason why R
is included in the alias, or else there will be two different
instances of Module R[X] (PolynomialModule R[X])
.
See https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2315065.20polynomial.20modules for the full discussion.
Equations
- PolynomialModule R M = (ℕ →₀ M)
Instances For
Equations
- instInhabitedPolynomialModule R M = Finsupp.instInhabited
Equations
- instAddCommGroupPolynomialModule R M = Finsupp.instAddCommGroup
This is required to have the IsScalarTower S R M
instance to avoid diamonds.
Equations
- PolynomialModule.instFunLike R = Finsupp.instFunLike
Equations
- PolynomialModule.instCoeFunPolynomialModuleForAllNat R = Finsupp.instCoeFun
The monomial m * x ^ i
. This is defeq to Finsupp.singleAddHom
, and is redefined here
so that it has the desired type signature.
Equations
Instances For
PolynomialModule.single
as a linear map.
Equations
Instances For
Equations
- PolynomialModule.polynomialModule = inferInstanceAs (Module (Polynomial R) (Module.AEval' (Finsupp.lmapDomain M R Nat.succ)))
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
PolynomialModule R R
is isomorphic to R[X]
as an R[X]
module.
Equations
- One or more equations did not get rendered due to their size.
Instances For
PolynomialModule R S
is isomorphic to S[X]
as an R
module.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The image of a polynomial under a linear map.
Equations
Instances For
Evaluate a polynomial p : PolynomialModule R M
at r : R
.
Equations
- PolynomialModule.eval r = { toAddHom := { toFun := fun (p : PolynomialModule R M) => Finsupp.sum p fun (i : ℕ) (m : M) => r ^ i • m, map_add' := ⋯ }, map_smul' := ⋯ }
Instances For
comp p q
is the composition of p : R[X]
and q : M[X]
as q(p(x))
.
Equations
- PolynomialModule.comp p = LinearMap.comp (↑R (PolynomialModule.eval p)) (PolynomialModule.map (Polynomial R) (PolynomialModule.lsingle R 0))