(Semi)linear equivalences #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
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σ
beingstar_ring_end
) 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.
Instances for linear_equiv
- linear_equiv.has_sizeof_inst
- linear_equiv.linear_map.has_coe
- linear_equiv.has_coe_to_fun
- linear_equiv.semilinear_equiv_class
- linear_equiv.automorphism_group
- linear_equiv.apply_distrib_mul_action
- linear_equiv.apply_has_faithful_smul
- linear_equiv.apply_smul_comm_class
- linear_equiv.apply_smul_comm_class'
- linear_equiv.has_zero
- linear_equiv.unique
- linear_equiv.unique_of_subsingleton
- quadratic_form.isometry.linear_equiv.has_coe
- coe : F → M → M₂
- inv : F → M₂ → M
- left_inv : ∀ (e : F), function.left_inverse (semilinear_equiv_class.inv e) (semilinear_equiv_class.coe e)
- right_inv : ∀ (e : F), function.right_inverse (semilinear_equiv_class.inv e) (semilinear_equiv_class.coe e)
- coe_injective' : ∀ (e g : F), semilinear_equiv_class.coe e = semilinear_equiv_class.coe g → semilinear_equiv_class.inv e = semilinear_equiv_class.inv g → e = g
- map_add : ∀ (f : F) (a b : M), ⇑f (a + b) = ⇑f a + ⇑f b
- map_smulₛₗ : ∀ (f : F) (r : R) (x : M), ⇑f (r • x) = ⇑σ r • ⇑f x
semilinear_equiv_class F σ M M₂
asserts F
is a type of bundled σ
-semilinear equivs
M → M₂
.
See also linear_equiv_class 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 of this typeclass
Instances of other typeclasses for semilinear_equiv_class
- semilinear_equiv_class.has_sizeof_inst
linear_equiv_class F R M M₂
asserts F
is a type of bundled R
-linear equivs M → M₂
.
This is an abbreviation for semilinear_equiv_class F (ring_hom.id R) M M₂
.
Equations
- semilinear_equiv_class.semilinear_map_class F = {coe := semilinear_equiv_class.coe s, coe_injective' := _, map_add := _, map_smulₛₗ := _}
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.semilinear_equiv_class = {coe := linear_equiv.to_fun _inst_7, inv := linear_equiv.inv_fun _inst_7, left_inv := _, right_inv := _, coe_injective' := _, map_add := _, map_smulₛₗ := _}
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_smul := {smul := λ (_x : M ≃ₗ[R] M) (_y : M), ⇑_x _y}, one_smul := _, mul_smul := _}, smul_zero := _, smul_add := _}
linear_equiv.apply_distrib_mul_action
is faithful.
Any two modules that are subsingletons are isomorphic.
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' := _}
An additive equivalence whose underlying function preserves smul
is a linear equivalence.
An additive equivalence between commutative additive monoids is a linear equivalence between ℕ-modules
Equations
An additive equivalence between commutative additive groups is a linear equivalence between ℤ-modules