(Semi)linear maps #
In this file we define
-
LinearMap σ M M₂,M →ₛₗ[σ] M₂: a semilinear map between twoModules. Here,σis aRingHomfromRtoR₂and anf : M →ₛₗ[σ] M₂satisfiesf (c • x) = (σ c) • (f x). We recover plain linear maps by choosingσto beRingHom.id R. This is denoted byM →ₗ[R] M₂. We also add the notationM →ₗ⋆[R] M₂for star-linear maps. -
IsLinearMap R f: predicate saying thatf : M → M₂is a linear map. (Note that this was not generalized to semilinear maps.)
We then provide LinearMap with the following instances:
LinearMap.addCommMonoidandLinearMap.addCommGroup: the elementwise addition structures corresponding to addition in the codomainLinearMap.distribMulActionandLinearMap.module: the elementwise scalar action structures corresponding to applying the action in the codomain.Module.End.semiringandModule.End.ring: the (semi)ring of endomorphisms formed by taking the additive structure above with composition as multiplication.
Implementation notes #
To ensure that composition works smoothly for semilinear maps, we use the typeclasses
RingHomCompTriple, RingHomInvPair and RingHomSurjective from
Mathlib.Algebra.Ring.CompTypeclasses.
Notation #
- Throughout the file, we denote regular linear maps by
fₗ,gₗ, etc, and semilinear maps byf,g, etc.
TODO #
- Parts of this file have not yet been generalized to semilinear maps (i.e.
CompatibleSMul)
Tags #
linear map
A linear map preserves addition.
A linear map preserves scalar multiplication.
A map f between modules over a semiring is linear if it satisfies the two properties
f (x + y) = f x + f y and f (c • x) = c • f x. The predicate IsLinearMap R f asserts this
property. A bundled version is available with LinearMap, and should be favored over
IsLinearMap most of the time.
Instances For
- toFun : M → M₂
- map_add' : ∀ (x y : M), AddHom.toFun s.toAddHom (x + y) = AddHom.toFun s.toAddHom x + AddHom.toFun s.toAddHom y
- map_smul' : ∀ (r : R) (x : M), AddHom.toFun s.toAddHom (r • x) = ↑σ r • AddHom.toFun s.toAddHom x
A linear map preserves scalar multiplication. We prefer the spelling
_root_.map_smulinstead.
A map f between an R-module and an S-module over a ring homomorphism σ : R →+* S
is semilinear if it satisfies the two properties f (x + y) = f x + f y and
f (c • x) = (σ c) • f x. Elements of LinearMap σ M M₂ (available under the notation
M →ₛₗ[σ] M₂) are bundled versions of such maps. For plain linear maps (i.e. for which
σ = RingHom.id R), the notation M →ₗ[R] M₂ is available. An unbundled version of plain linear
maps is available with the predicate IsLinearMap, but it should be avoided most of the time.
Instances For
M →ₛₗ[σ] N is the type of σ-semilinear maps from M to N.
Equations
- One or more equations did not get rendered due to their size.
Instances For
M →ₗ[R] N is the type of R-linear maps from M to N.
Equations
- One or more equations did not get rendered due to their size.
Instances For
M →ₗ⋆[R] N is the type of R-conjugate-linear maps from M to N.
Equations
- One or more equations did not get rendered due to their size.
Instances For
- coe : F → M → M₂
- coe_injective' : Function.Injective FunLike.coe
A semilinear map preserves scalar multiplication up to some ring homomorphism
σ. See also_root_.map_smulfor the case whereσis the identity.
SemilinearMapClass F σ M M₂ asserts F is a type of bundled σ-semilinear maps M → M₂.
See also LinearMapClass F R M M₂ for the case where σ is the identity map on R.
A map f between an R-module and an S-module over a ring homomorphism σ : R →+* S
is semilinear if it satisfies the two properties f (x + y) = f x + f y and
f (c • x) = (σ c) • f x.
Instances
LinearMapClass F R M M₂ asserts F is a type of bundled R-linear maps M → M₂.
This is an abbreviation for SemilinearMapClass F (RingHom.id R) M M₂.
Equations
- LinearMapClass F R M M₂ = SemilinearMapClass F (RingHom.id R) M M₂
Instances For
Equations
- SemilinearMapClass.addMonoidHomClass F = let src := SemilinearMapClass.toAddHomClass; AddMonoidHomClass.mk (_ : ∀ (f : F), ↑f 0 = 0)
Equations
- One or more equations did not get rendered due to their size.
Equations
- LinearMap.semilinearMapClass = SemilinearMapClass.mk (_ : ∀ (self : M →ₛₗ[σ] M₃) (r : R) (x : M), AddHom.toFun self.toAddHom (r • x) = ↑σ r • AddHom.toFun self.toAddHom x)
Equations
- LinearMap.instFunLike = let src := AddHomClass.toFunLike; { coe := FunLike.coe, coe_injective' := (_ : Function.Injective FunLike.coe) }
The DistribMulActionHom underlying a LinearMap.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Copy of a LinearMap with a new toFun equal to the old one. Useful to fix definitional
equalities.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Identity map as a LinearMap
Equations
- One or more equations did not get rendered due to their size.
Instances For
A generalisation of LinearMap.id that constructs the identity function
as a σ-semilinear map for any ring homomorphism σ which we know is the identity.
Equations
- One or more equations did not get rendered due to their size.
Instances For
If two linear maps are equal, they are equal at each point.
Scalar multiplication by
RofMcan be moved through linear maps.
A typeclass for SMul structures which can be moved through a LinearMap.
This typeclass is generated automatically from an IsScalarTower instance, but exists so that
we can also add an instance for AddCommGroup.intModule, allowing z • to be moved even if
R does not support negation.
Instances
convert a linear map to an additive map
Equations
Instances For
If M and M₂ are both R-modules and S-modules and R-module structures
are defined by an action of R on S (formally, we have two scalar towers), then any S-linear
map from M to M₂ is R-linear.
See also LinearMap.map_smul_of_tower.
Equations
Instances For
Equations
- LinearMap.coeIsScalarTower R = { coe := ↑R }
Composition of two linear maps is a linear map
Equations
- One or more equations did not get rendered due to their size.
Instances For
∘ₗ is notation for composition of two linear (not semilinear!) maps into a linear map.
This is useful when Lean is struggling to infer the RingHomCompTriple instance.
Equations
- LinearMap.«term_∘ₗ_» = Lean.ParserDescr.trailingNode `LinearMap.term_∘ₗ_ 80 81 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ∘ₗ ") (Lean.ParserDescr.cat `term 80))
Instances For
The linear map version of Function.Surjective.injective_comp_right
The linear map version of Function.Injective.comp_left
If a function g is a left and right inverse of a linear map f, then g is linear itself.
Equations
- One or more equations did not get rendered due to their size.
Instances For
g : R →+* S is R-linear when the module structure on S is Module.compHom S g .
Equations
Instances For
A DistribMulActionHom between two modules is a linear map.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Convert an IsLinearMap predicate to a LinearMap
Equations
Instances For
Linear endomorphisms of a module, with associated ring structure
Module.End.semiring and algebra structure Module.End.algebra.
Equations
- Module.End R M = (M →ₗ[R] M)
Instances For
Reinterpret an additive homomorphism as an ℕ-linear map.
Equations
Instances For
Reinterpret an additive homomorphism as a ℤ-linear map.
Equations
Instances For
Reinterpret an additive homomorphism as a ℚ-linear map.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Arithmetic on the codomain #
The constant 0 map is linear.
Equations
- LinearMap.instInhabitedLinearMap = { default := 0 }
The sum of two linear maps is linear.
Equations
- One or more equations did not get rendered due to their size.
The type of linear maps is an additive monoid.
Equations
- One or more equations did not get rendered due to their size.
The negation of a linear map is linear.
Equations
- One or more equations did not get rendered due to their size.
The subtraction of two linear maps is linear.
Equations
- One or more equations did not get rendered due to their size.
The type of linear maps is an additive group.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Monoid structure of endomorphisms #
Equations
- LinearMap.instOneEnd = { one := LinearMap.id }
Equations
- LinearMap.instMulEnd = { mul := LinearMap.comp }
Equations
- Module.End.monoid = Monoid.mk (_ : ∀ (f : M →ₗ[R] M), LinearMap.comp LinearMap.id f = f) (_ : ∀ (f : M →ₗ[R] M), LinearMap.comp f LinearMap.id = f) npowRec
Equations
- One or more equations did not get rendered due to their size.
See also Module.End.natCast_def.
See also Module.End.intCast_def.
Action by a module endomorphism. #
The tautological action by Module.End R M (aka M →ₗ[R] M) on M.
This generalizes Function.End.applyMulAction.
LinearMap.applyModule is faithful.
Actions as module endomorphisms #
Each element of the monoid defines a linear map.
This is a stronger version of DistribMulAction.toAddMonoidHom.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Each element of the monoid defines a module endomorphism.
This is a stronger version of DistribMulAction.toAddMonoidEnd.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Each element of the semiring defines a module endomorphism.
This is a stronger version of DistribMulAction.toModuleEnd.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The canonical (semi)ring isomorphism from Rᵐᵒᵖ to Module.End R R induced by the right
multiplication.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The canonical (semi)ring isomorphism from R to Module.End Rᵐᵒᵖ R induced by the left
multiplication.
Equations
- One or more equations did not get rendered due to their size.