(Semi)linear equivalences #
In this file we define
LinearEquiv σ M M₂
,M ≃ₛₗ[σ] M₂
: an invertible semilinear map. Here,σ
is aRingHom
fromR
toR₂
and ane : M ≃ₛₗ[σ] M₂
satisfiese (c • x) = (σ c) • (e x)
. The plain linear version, withσ
beingRingHom.id R
, is denoted byM ≃ₗ[R] M₂
, and the star-linear version (withσ
beingstarRingEnd
) is denoted byM ≃ₗ⋆[R] M₂
.
Implementation notes #
To ensure that composition works smoothly for semilinear equivalences, we use the typeclasses
RingHomCompTriple
, RingHomInvPair
and RingHomSurjective
from
Algebra/Ring/CompTypeclasses
.
The group structure on automorphisms, LinearEquiv.automorphismGroup
, is provided elsewhere.
TODO #
- Parts of this file have not yet been generalized to semilinear maps
Tags #
linear equiv, linear equivalences, linear isomorphism, linear isomorphic
A linear equivalence is an invertible linear map.
- toFun : M → M₂
- invFun : M₂ → M
The backwards directed function underlying a linear equivalence.
- left_inv : Function.LeftInverse self.invFun self.toFun
LinearEquiv.invFun
is a left inverse to the linear equivalence's underlying function. - right_inv : Function.RightInverse self.invFun self.toFun
LinearEquiv.invFun
is a right inverse to the linear equivalence's underlying function.
Instances For
The additive equivalence of types underlying a linear equivalence.
Equations
- LinearEquiv.toAddEquiv self = { toEquiv := { toFun := self.toFun, invFun := self.invFun, left_inv := ⋯, right_inv := ⋯ }, map_add' := ⋯ }
Instances For
The notation M ≃ₛₗ[σ] M₂
denotes the type of linear equivalences between M
and M₂
over a
ring homomorphism σ
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The notation M ≃ₗ [R] M₂
denotes the type of linear equivalences between M
and M₂
over
a plain linear map M →ₗ M₂
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The notation M ≃ₗ⋆[R] M₂
denotes the type of star-linear equivalences between M
and M₂
over the ⋆
endomorphism of the underlying starred ring R
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
SemilinearEquivClass F σ M M₂
asserts F
is a type of bundled σ
-semilinear equivs
M → M₂
.
See also LinearEquivClass 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
.
Applying a semilinear equivalence
f
overσ
tor • x
equalsσ r • f x
.
Instances
LinearEquivClass F R M M₂
asserts F
is a type of bundled R
-linear equivs M → M₂
.
This is an abbreviation for SemilinearEquivClass F (RingHom.id R) M M₂
.
Equations
- LinearEquivClass F R M M₂ = SemilinearEquivClass F (RingHom.id R) M M₂
Instances For
Equations
- ⋯ = ⋯
Equations
- LinearEquiv.instCoeLinearEquivLinearMap = { coe := LinearEquiv.toLinearMap }
The equivalence of types underlying a linear equivalence.
Equations
- LinearEquiv.toEquiv f = (LinearEquiv.toAddEquiv f).toEquiv
Instances For
Helper instance for when inference gets stuck on following the normal chain
EquivLike → FunLike
.
TODO: this instance doesn't appear to be necessary: remove it (after benchmarking?)
Equations
- LinearEquiv.instFunLikeLinearEquiv = { coe := DFunLike.coe, coe_injective' := ⋯ }
Equations
- ⋯ = ⋯
The identity map is a linear equivalence.
Equations
- LinearEquiv.refl R M = let __src := LinearMap.id; let __src_1 := Equiv.refl M; { toLinearMap := __src, invFun := __src_1.invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
Linear equivalences are symmetric.
Equations
- One or more equations did not get rendered due to their size.
Instances For
See Note [custom simps projection]
Equations
- LinearEquiv.Simps.apply e = ⇑e
Instances For
See Note [custom simps projection]
Equations
Instances For
Linear equivalences are transitive.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The notation e₁ ≪≫ₗ e₂
denotes the composition of the linear equivalences e₁
and e₂
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Pretty printer defined by notation3
command.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The two paths coercion can take to an AddMonoidHom
are equivalent
Interpret a RingEquiv
f
as an f
-semilinear equiv.
Equations
- RingEquiv.toSemilinearEquiv f = { toLinearMap := { toAddHom := { toFun := ⇑f, map_add' := ⋯ }, map_smul' := ⋯ }, invFun := f.invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
An involutive linear map is a linear equivalence.
Equations
- LinearEquiv.ofInvolutive f hf = let __src := Function.Involutive.toPerm (⇑f) hf; { toLinearMap := f, invFun := __src.invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
If M
and M₂
are both R
-semimodules and S
-semimodules and R
-semimodule structures
are defined by an action of R
on S
(formally, we have two scalar towers), then any S
-linear
equivalence from M
to M₂
is also an R
-linear equivalence.
See also LinearMap.restrictScalars
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Restriction from R
-linear automorphisms of M
to R
-linear endomorphisms of M
,
promoted to a monoid hom.
Equations
Instances For
The tautological action by M ≃ₗ[R] M
on M
.
This generalizes Function.End.applyMulAction
.
Equations
- LinearEquiv.applyDistribMulAction = DistribMulAction.mk ⋯ ⋯
LinearEquiv.applyDistribMulAction
is faithful.
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Any two modules that are subsingletons are isomorphic.
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
- Module.compHom.toLinearEquiv g = { toLinearMap := { toAddHom := { toFun := ⇑g, map_add' := ⋯ }, map_smul' := ⋯ }, invFun := ⇑(RingEquiv.symm g), left_inv := ⋯, right_inv := ⋯ }
Instances For
Each element of the group defines a linear equivalence.
This is a stronger version of DistribMulAction.toAddEquiv
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Each element of the group defines a module automorphism.
This is a stronger version of DistribMulAction.toAddAut
.
Equations
- DistribMulAction.toModuleAut R M = { toOneHom := { toFun := DistribMulAction.toLinearEquiv R M, map_one' := ⋯ }, map_mul' := ⋯ }
Instances For
An additive equivalence whose underlying function preserves smul
is a linear equivalence.
Equations
- AddEquiv.toLinearEquiv e h = { toLinearMap := { toAddHom := { toFun := e.toFun, map_add' := ⋯ }, map_smul' := h }, invFun := e.invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
An additive equivalence between commutative additive monoids is a linear equivalence between ℕ-modules
Equations
Instances For
An additive equivalence between commutative additive groups is a linear equivalence between ℤ-modules
Equations
Instances For
The equivalence between R-linear maps from R
to M
, and points of M
itself.
This says that the forgetful functor from R
-modules to types is representable, by R
.
This is an S
-linear equivalence, under the assumption that S
acts on M
commuting with R
.
When R
is commutative, we can take this to be the usual action with S = R
.
Otherwise, S = ℕ
shows that the equivalence is additive.
See note [bundled maps over different rings].
Equations
- One or more equations did not get rendered due to their size.