(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_homfromRtoR₂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