Modules over a ring
In this file we define
semimodule R M
: an additive commutative monoidM
is asemimodule
over asemiring
R
if forr : R
andx : M
their "scalar multiplicationr • x : M
is defined, and the operation•
satisfies some natural associativity and distributivity axioms similar to those on a ring.module R M
: same assemimodule R M
but assumes thatR
is aring
andM
is an additive commutative group.vector_space k M
: same assemimodule k M
andmodule k M
but assumes thatk
is afield
andM
is an additive commutative group.linear_map R M M₂
,M →ₗ[R] M₂
: a linear map between two R-semimodule
s.is_linear_map R f
: predicate saying thatf : M → M₂
is a linear map.
Implementation notes
vector_space
andmodule
are abbreviations forsemimodule R M
.
Tags
semimodule, module, vector space, linear map
- to_distrib_mul_action : distrib_mul_action R M
- add_smul : ∀ (r s : R) (x : M), (r + s) • x = r • x + s • x
- zero_smul : ∀ (x : M), 0 • x = 0
A semimodule is a generalization of vector spaces to a scalar semiring.
It consists of a scalar semiring R
and an additive monoid of "vectors" M
,
connected by a "scalar multiplication" operation r • x : M
(where r : R
and x : M
) with some natural associativity and
distributivity axioms similar to those on a ring.
Instances
- lie_algebra.to_semimodule
- ordered_semimodule.to_semimodule
- order_dual.semimodule
- derivation.derivation.Rsemimodule
- algebra.to_semimodule
- semiring.to_semimodule
- normed_space.to_semimodule
- add_comm_monoid.nat_semimodule
- punit.semimodule
- pi.semimodule
- pi.semimodule'
- prod.semimodule
- submodule.semimodule
- finsupp.semimodule
- linear_map.semimodule
- submodule.quotient.semimodule
- matrix.semimodule
- tensor_product.semimodule
- semimodule.restrict_scalars.module_orig
- semimodule.restrict_scalars.semimodule
- linear_map.module_extend_scalars
- monoid_algebra.semimodule
- add_monoid_algebra.semimodule
- polynomial.semimodule
- mv_polynomial.semimodule
- submodule.semimodule_set
- submodule.semimodule_submodule
- direct_sum.semimodule
- module.direct_limit.semimodule
- ulift.semimodule
- ulift.semimodule'
- bounded_continuous_function.semimodule
- multilinear_map.semimodule
- multilinear_map.semimodule_ring
- continuous_multilinear_map.semimodule
- continuous_semimodule
- continuous_map_semimodule
- holor.semimodule
- filter.germ.semimodule
- filter.germ.semimodule'
- measure_theory.outer_measure.semimodule
- measure_theory.measure.semimodule
- measure_theory.simple_func.semimodule
- measure_theory.ae_eq_fun.semimodule
- measure_theory.l1.semimodule
- derivation.semimodule
- mv_power_series.semimodule
- power_series.semimodule
Pullback a semimodule
structure along an injective additive monoid homomorphism.
Equations
- function.injective.semimodule R f hf smul = {to_distrib_mul_action := {to_mul_action := {to_has_scalar := {smul := has_scalar.smul _inst_5}, one_smul := _, mul_smul := _}, smul_add := _, smul_zero := _}, add_smul := _, zero_smul := _}
Pushforward a semimodule
structure along a surjective additive monoid homomorphism.
Equations
- function.surjective.semimodule R f hf smul = {to_distrib_mul_action := {to_mul_action := {to_has_scalar := {smul := has_scalar.smul _inst_5}, one_smul := _, mul_smul := _}, smul_add := _, smul_zero := _}, add_smul := _, zero_smul := _}
(•)
as an add_monoid_hom
.
Equations
- smul_add_hom R M = {to_fun := const_smul_hom M semimodule.to_distrib_mul_action, map_zero' := _, map_add' := _}
- to_has_scalar : has_scalar R M
- smul_add : ∀ (r : R) (x y : M), r • (x + y) = r • x + r • y
- add_smul : ∀ (r s : R) (x : M), (r + s) • x = r • x + s • x
- mul_smul : ∀ (r s : R) (x : M), (r * s) • x = r • s • x
- one_smul : ∀ (x : M), 1 • x = x
A structure containing most informations as in a semimodule, except the fields zero_smul
and smul_zero
. As these fields can be deduced from the other ones when M
is an add_comm_group
,
this provides a way to construct a semimodule structure by checking less properties, in
semimodule.of_core
.
Define semimodule
without proving zero_smul
and smul_zero
by using an auxiliary
structure semimodule.core
, when the underlying space is an add_comm_group
.
Equations
- semimodule.of_core H = let _inst : has_scalar R M := H.to_has_scalar in {to_distrib_mul_action := {to_mul_action := {to_has_scalar := H.to_has_scalar, one_smul := _, mul_smul := _}, smul_add := _, smul_zero := _}, add_smul := _, zero_smul := _}
A module is the same as a semimodule, except the scalar semiring is actually
a ring.
This is the traditional generalization of spaces like ℤ^n
, which have a natural
addition operation and a way to multiply them by elements of a ring, but no multiplication
operation between vectors.
Instances
- module.complex_to_real
- add_comm_group.int_module
- Module.is_module
- Module.module_obj
- Module.limit_module
- ideal.module_pi
- bilin_form.to_module
- linear_map.module
- affine_map.module
- continuous_linear_map.module
- bounded_continuous_function.module'
- continuous_linear_map.module_extend_scalars
- formal_multilinear_series.module
- continuous_module'
- continuous_map_module'
- module.dual.inst
- quadratic_form.module
- sesq_form.to_module
To prove two module structures on a fixed add_comm_group
agree,
it suffices to check the scalar multiplications agree.
Equations
- semiring.to_semimodule = {to_distrib_mul_action := {to_mul_action := {to_has_scalar := {smul := has_mul.mul (distrib.to_has_mul R)}, one_smul := _, mul_smul := _}, smul_add := _, smul_zero := _}, add_smul := _, zero_smul := _}
A ring homomorphism f : R →+* M
defines a module structure by r • x = f r * x
.
Equations
- f.to_semimodule = {to_distrib_mul_action := {to_mul_action := {to_has_scalar := {smul := λ (r : R) (x : S), ⇑f r * x}, one_smul := _, mul_smul := _}, smul_add := _, smul_zero := _}, add_smul := _, zero_smul := _}
A map f
between semimodules 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 is_linear_map R f
asserts this
property. A bundled version is available with linear_map
, and should be favored over
is_linear_map
most of the time.
- to_fun : M → M₂
- map_add' : ∀ (x y : M), c.to_fun (x + y) = c.to_fun x + c.to_fun y
- map_smul' : ∀ (c_1 : R) (x : M), c.to_fun (c_1 • x) = c_1 • c.to_fun x
A map f
between semimodules 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
. Elements of linear_map R M M₂
(available under
the notation M →ₗ[R] M₂
) are bundled versions of such maps. An unbundled version is available with
the predicate is_linear_map
, but it should be avoided most of the time.
Equations
- linear_map.has_coe_to_fun = {F := λ (x : M →ₗ[R] M₂), M → M₂, coe := linear_map.to_fun _inst_6}
Identity map as a linear_map
Equations
- _ = _
convert a linear map to an additive map
Composition of two linear maps is a linear map
Equations
Convert an is_linear_map
predicate to a linear_map
Ring of linear endomorphismsms of a module.
A vector space is the same as a module, except the scalar ring is actually
a field. (This adds commutativity of the multiplication and existence of inverses.)
This is the traditional generalization of spaces like ℝ^n
, which have a natural
addition operation and a way to multiply them by real numbers, but no multiplication
operation between vectors.
The natural ℕ-semimodule structure on any add_comm_monoid
.
Equations
- add_comm_monoid.nat_semimodule = {to_distrib_mul_action := {to_mul_action := {to_has_scalar := {smul := nsmul (add_monoid.to_has_zero M)}, one_smul := _, mul_smul := _}, smul_add := _, smul_zero := _}, add_smul := _, zero_smul := _}
The natural ℤ-module structure on any add_comm_group
.
Equations
- add_comm_group.int_module = {to_distrib_mul_action := {to_mul_action := {to_has_scalar := {smul := gsmul (add_comm_group.to_add_group M)}, one_smul := _, mul_smul := _}, smul_add := _, smul_zero := _}, add_smul := _, zero_smul := _}
Equations
Reinterpret an additive homomorphism as a ℤ
-linear map.
Reinterpret an additive homomorphism as a ℚ
-linear map.