Multiplication and division of submodules of an algebra. #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
An interface for multiplication and division of sub-R-modules of an R-algebra A is developed.
Main definitions #
Let R
be a commutative ring (or semiring) and let A
be an R
-algebra.
1 : submodule R A
: the R-submodule R of the R-algebra Ahas_mul (submodule R A)
: multiplication of two sub-R-modules M and N of A is defined to be the smallest submodule containing all the productsm * n
.has_div (submodule R A)
:I / J
is defined to be the submodule consisting of alla : A
such thata • J ⊆ I
It is proved that submodule R A
is a semiring, and also an algebra over set A
.
Additionally, in the pointwise
locale we promote submodule.pointwise_distrib_mul_action
to a
mul_semiring_action
as submodule.pointwise_mul_semiring_action
.
Tags #
multiplication of submodules, division of submodules, submodule semiring
1 : submodule R A
is the submodule R of A.
Equations
- submodule.has_one = {one := linear_map.range (algebra.linear_map R A)}
Multiplication of sub-R-modules of an R-algebra A. The submodule M * N
is the
smallest R-submodule of A
containing the elements m * n
for m ∈ M
and n ∈ N
.
Equations
- submodule.has_mul = {mul := submodule.map₂ (linear_map.mul R A)}
A dependent version of mul_induction_on
.
submodule.has_pointwise_neg
distributes over multiplication.
This is available as an instance in the pointwise
locale.
Equations
- submodule.has_distrib_pointwise_neg = function.injective.has_distrib_neg submodule.to_add_submonoid submodule.has_distrib_pointwise_neg._proof_1 submodule.has_distrib_pointwise_neg._proof_2 submodule.has_distrib_pointwise_neg._proof_3
Sub-R-modules of an R-algebra form an idempotent semiring.
Equations
- submodule.idem_semiring = {add := add_monoid_with_one.add add_monoid_with_one.unary, add_assoc := _, zero := add_monoid_with_one.zero add_monoid_with_one.unary, zero_add := _, add_zero := _, nsmul := add_monoid_with_one.nsmul add_monoid_with_one.unary, nsmul_zero' := _, nsmul_succ' := _, add_comm := _, mul := semigroup.mul (function.injective.semigroup submodule.to_add_submonoid submodule.idem_semiring._proof_7 submodule.idem_semiring._proof_8), left_distrib := _, right_distrib := _, zero_mul := _, mul_zero := _, mul_assoc := _, one := add_monoid_with_one.one add_monoid_with_one.unary, one_mul := _, mul_one := _, nat_cast := add_monoid_with_one.nat_cast add_monoid_with_one.unary, nat_cast_zero := _, nat_cast_succ := _, npow := semiring.npow._default add_monoid_with_one.one semigroup.mul submodule.one_mul submodule.mul_one, npow_zero' := _, npow_succ' := _, sup := lattice.sup (conditionally_complete_lattice.to_lattice (submodule R A)), le := lattice.le (conditionally_complete_lattice.to_lattice (submodule R A)), lt := lattice.lt (conditionally_complete_lattice.to_lattice (submodule R A)), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, add_eq_sup := _, bot := order_bot.bot submodule.order_bot, bot_le := _}
Dependent version of submodule.pow_induction_on_left
.
Dependent version of submodule.pow_induction_on_right
.
To show a property on elements of M ^ n
holds, it suffices to show that it holds for scalars,
is closed under addition, and holds for m * x
where m ∈ M
and it holds for x
To show a property on elements of M ^ n
holds, it suffices to show that it holds for scalars,
is closed under addition, and holds for x * m
where m ∈ M
and it holds for x
submonoid.map
as a monoid_with_zero_hom
, when applied to alg_hom
s.
Equations
- submodule.map_hom f = {to_fun := submodule.map f.to_linear_map, map_zero' := _, map_one' := _, map_mul' := _}
The ring of submodules of the opposite algebra is isomorphic to the opposite ring of submodules.
Equations
- submodule.equiv_opposite = {to_fun := λ (p : submodule R Aᵐᵒᵖ), mul_opposite.op (submodule.comap ↑(mul_opposite.op_linear_equiv R) p), inv_fun := λ (p : (submodule R A)ᵐᵒᵖ), submodule.comap ↑((mul_opposite.op_linear_equiv R).symm) (mul_opposite.unop p), left_inv := _, right_inv := _, map_mul' := _, map_add' := _}
span
is a semiring homomorphism (recall multiplication is pointwise multiplication of subsets
on either side).
Equations
- submodule.span.ring_hom = {to_fun := λ (s : set_semiring A), submodule.span R (⇑set_semiring.down s), map_one' := _, map_mul' := _, map_zero' := _, map_add' := _}
The action on a submodule corresponding to applying the action to every element.
This is available as an instance in the pointwise
locale.
This is a stronger version of submodule.pointwise_distrib_mul_action
.
Equations
Sub-R-modules of an R-algebra A form a semiring.
Equations
- submodule.idem_comm_semiring = {add := idem_semiring.add submodule.idem_semiring, add_assoc := _, zero := idem_semiring.zero submodule.idem_semiring, zero_add := _, add_zero := _, nsmul := idem_semiring.nsmul submodule.idem_semiring, nsmul_zero' := _, nsmul_succ' := _, add_comm := _, mul := idem_semiring.mul submodule.idem_semiring, left_distrib := _, right_distrib := _, zero_mul := _, mul_zero := _, mul_assoc := _, one := idem_semiring.one submodule.idem_semiring, one_mul := _, mul_one := _, nat_cast := idem_semiring.nat_cast submodule.idem_semiring, nat_cast_zero := _, nat_cast_succ := _, npow := idem_semiring.npow submodule.idem_semiring, npow_zero' := _, npow_succ' := _, mul_comm := _, sup := idem_semiring.sup submodule.idem_semiring, le := idem_semiring.le submodule.idem_semiring, lt := idem_semiring.lt submodule.idem_semiring, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, add_eq_sup := _, bot := idem_semiring.bot submodule.idem_semiring, bot_le := _}
R-submodules of the R-algebra A are a module over set A
.
Equations
- submodule.module_set R A = {to_distrib_mul_action := {to_mul_action := {to_has_smul := {smul := λ (s : set_semiring A) (P : submodule R A), submodule.span R (⇑set_semiring.down s) * P}, one_smul := _, mul_smul := _}, smul_zero := _, smul_add := _}, add_smul := _, zero_smul := _}
The elements of I / J
are the x
such that x • J ⊆ I
.
In fact, we define x ∈ I / J
to be ∀ y ∈ J, x * y ∈ I
(see mem_div_iff_forall_mul_mem
),
which is equivalent to x • J ⊆ I
(see mem_div_iff_smul_subset
), but nicer to use in proofs.
This is the general form of the ideal quotient, traditionally written $I : J$.