(Semi)linear equivalences #
In this file we define
linear_equiv σ M M₂
,M ≃ₛₗ[σ] M₂
: an invertible semilinear map. Here,σ
is aring_hom
fromR
toR₂
and ane : M ≃ₛₗ[σ] M₂
satisfiese (c • x) = (σ c) • (e x)
. The plain linear version, withσ
beingring_hom.id R
, is denoted byM ≃ₗ[R] M₂
, and the star-linear version (withσ
beginstar_ring_aut
) is denoted byM ≃ₗ⋆[R] M₂
.
Implementation notes #
To ensure that composition works smoothly for semilinear equivalences, we use the typeclasses
ring_hom_comp_triple
, ring_hom_inv_pair
and ring_hom_surjective
from
algebra/ring/comp_typeclasses
.
The group structure on automorphisms, linear_equiv.automorphism_group
, 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
- to_fun : M → M₂
- map_add' : ∀ (x y : M), self.to_fun (x + y) = self.to_fun x + self.to_fun y
- map_smul' : ∀ (r : R) (x : M), self.to_fun (r • x) = ⇑σ r • self.to_fun x
- inv_fun : M₂ → M
- left_inv : function.left_inverse self.inv_fun self.to_fun
- right_inv : function.right_inverse self.inv_fun self.to_fun
A linear equivalence is an invertible linear map.
Equations
Equations
- linear_equiv.has_coe_to_fun = {coe := linear_equiv.to_fun _inst_7}
Equations
- linear_equiv.to_equiv = λ (f : M ≃ₛₗ[σ] M₂), f.to_add_equiv.to_equiv
Equations
- linear_equiv.add_monoid_hom_class = {coe := linear_equiv.to_fun _inst_7, coe_injective' := _, map_add := _, map_zero := _}
The identity map is a linear equivalence.
Equations
- linear_equiv.refl R M = {to_fun := linear_map.id.to_fun, map_add' := _, map_smul' := _, inv_fun := (equiv.refl M).inv_fun, left_inv := _, right_inv := _}
Linear equivalences are symmetric.
See Note [custom simps projection]
Equations
Linear equivalences are transitive.
The two paths coercion can take to an add_monoid_hom
are equivalent
Interpret a ring_equiv
f
as an f
-semilinear equiv.
An involutive linear map is a linear equivalence.
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 linear_map.restrict_scalars
.
Equations
- linear_equiv.automorphism_group = {mul := λ (f g : M ≃ₗ[R] M), g.trans f, mul_assoc := _, one := linear_equiv.refl R M _inst_9, one_mul := _, mul_one := _, npow := div_inv_monoid.npow._default (linear_equiv.refl R M) (λ (f g : M ≃ₗ[R] M), g.trans f) linear_equiv.automorphism_group._proof_6 linear_equiv.automorphism_group._proof_7, npow_zero' := _, npow_succ' := _, inv := λ (f : M ≃ₗ[R] M), f.symm, div := div_inv_monoid.div._default (λ (f g : M ≃ₗ[R] M), g.trans f) linear_equiv.automorphism_group._proof_10 (linear_equiv.refl R M) linear_equiv.automorphism_group._proof_11 linear_equiv.automorphism_group._proof_12 (div_inv_monoid.npow._default (linear_equiv.refl R M) (λ (f g : M ≃ₗ[R] M), g.trans f) linear_equiv.automorphism_group._proof_6 linear_equiv.automorphism_group._proof_7) linear_equiv.automorphism_group._proof_13 linear_equiv.automorphism_group._proof_14 (λ (f : M ≃ₗ[R] M), f.symm), div_eq_mul_inv := _, zpow := div_inv_monoid.zpow._default (λ (f g : M ≃ₗ[R] M), g.trans f) linear_equiv.automorphism_group._proof_16 (linear_equiv.refl R M) linear_equiv.automorphism_group._proof_17 linear_equiv.automorphism_group._proof_18 (div_inv_monoid.npow._default (linear_equiv.refl R M) (λ (f g : M ≃ₗ[R] M), g.trans f) linear_equiv.automorphism_group._proof_6 linear_equiv.automorphism_group._proof_7) linear_equiv.automorphism_group._proof_19 linear_equiv.automorphism_group._proof_20 (λ (f : M ≃ₗ[R] M), f.symm), zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, mul_left_inv := _}
Restriction from R
-linear automorphisms of M
to R
-linear endomorphisms of M
,
promoted to a monoid hom.
Equations
The tautological action by M ≃ₗ[R] M
on M
.
This generalizes function.End.apply_mul_action
.
Equations
- linear_equiv.apply_distrib_mul_action = {to_mul_action := {to_has_scalar := {smul := λ (_x : M ≃ₗ[R] M) (_y : M), ⇑_x _y}, one_smul := _, mul_smul := _}, smul_add := _, smul_zero := _}
linear_equiv.apply_distrib_mul_action
is faithful.
g : R ≃+* S
is R
-linear when the module structure on S
is module.comp_hom S g
.
Each element of the group defines a linear equivalence.
This is a stronger version of distrib_mul_action.to_add_equiv
.
Equations
- distrib_mul_action.to_linear_equiv R M s = {to_fun := (distrib_mul_action.to_add_equiv M s).to_fun, map_add' := _, map_smul' := _, inv_fun := (distrib_mul_action.to_add_equiv M s).inv_fun, left_inv := _, right_inv := _}
Each element of the group defines a module automorphism.
This is a stronger version of distrib_mul_action.to_add_aut
.
Equations
- distrib_mul_action.to_module_aut R M = {to_fun := distrib_mul_action.to_linear_equiv R M _inst_6, map_one' := _, map_mul' := _}