Localized Module #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
Given a commutative ring R
, a multiplicative subset S ⊆ R
and an R
-module M
, we can localize
M
by S
. This gives us a localization S
-module.
Main definitions #
localized_module.r
: the equivalence relation defining this localization, namely(m, s) ≈ (m', s')
if and only if if there is someu : S
such thatu • s' • m = u • s • m'
.localized_module M S
: the localized module byS
.localized_module.mk
: the canonical map sending(m, s) : M × S ↦ m/s : localized_module M S
localized_module.lift_on
: any well defined functionf : M × S → α
respectingr
descents to a functionlocalized_module M S → α
localized_module.lift_on₂
: any well defined functionf : M × S → M × S → α
respectingr
descents to a functionlocalized_module M S → localized_module M S
localized_module.mk_add_mk
: in the localized modulemk m s + mk m' s' = mk (s' • m + s • m') (s * s')
localized_module.mk_smul_mk
: in the localized module, for anyr : R
,s t : S
,m : M
, we havemk r s • mk m t = mk (r • m) (s * t)
wheremk r s : localization S
is localized ring byS
.localized_module.is_module
:localized_module M S
is alocalization S
-module.
Future work #
- Redefine
localization
for monoids and rings to coincide withlocalized_module
.
The equivalence relation on M × S
where (m1, s1) ≈ (m2, s2)
if and only if
for some (u : S), u * (s2 • m1 - s1 • m2) = 0
Equations
- localized_module.r.setoid S M = {r := localized_module.r S M _inst_3, iseqv := _}
If S
is a multiplicative subset of a ring R
and M
an R
-module, then
we can localize M
by S
.
Equations
- localized_module S M = quotient (localized_module.r.setoid S M)
Instances for localized_module
- localized_module.has_zero
- localized_module.has_add
- localized_module.has_nat_smul
- localized_module.add_comm_monoid
- localized_module.add_comm_group
- localized_module.semiring
- localized_module.comm_semiring
- localized_module.ring
- localized_module.comm_ring
- localized_module.has_smul
- localized_module.is_module
- localized_module.is_module'
- localized_module.algebra
- localized_module.is_scalar_tower
- localized_module.algebra'
The canonical map sending (m, s) ↦ m/s
Equations
- localized_module.mk m s = ⟦(m, s)⟧
If f : M × S → α
respects the equivalence relation localized_module.r
, then
f
descents to a map localized_module M S → α
.
Equations
- x.lift_on f wd = quotient.lift_on x f wd
If f : M × S → M × S → α
respects the equivalence relation localized_module.r
, then
f
descents to a map localized_module M S → localized_module M S → α
.
Equations
- x.lift_on₂ y f wd = quotient.lift_on₂ x y f wd
Equations
Equations
- localized_module.add_comm_monoid = {add := has_add.add localized_module.has_add, add_assoc := _, zero := 0, zero_add := _, add_zero := _, nsmul := has_smul.smul localized_module.has_nat_smul, nsmul_zero' := _, nsmul_succ' := _, add_comm := _}
Equations
- localized_module.add_comm_group = {add := add_comm_monoid.add (show add_comm_monoid (localized_module S M), from localized_module.add_comm_monoid), add_assoc := _, zero := add_comm_monoid.zero (show add_comm_monoid (localized_module S M), from localized_module.add_comm_monoid), zero_add := _, add_zero := _, nsmul := add_comm_monoid.nsmul (show add_comm_monoid (localized_module S M), from localized_module.add_comm_monoid), nsmul_zero' := _, nsmul_succ' := _, neg := λ (p : localized_module S M), p.lift_on (λ (x : M × ↥S), localized_module.mk (-x.fst) x.snd) localized_module.add_comm_group._proof_6, sub := add_group.sub._default add_comm_monoid.add localized_module.add_comm_group._proof_7 add_comm_monoid.zero localized_module.add_comm_group._proof_8 localized_module.add_comm_group._proof_9 add_comm_monoid.nsmul localized_module.add_comm_group._proof_10 localized_module.add_comm_group._proof_11 (λ (p : localized_module S M), p.lift_on (λ (x : M × ↥S), localized_module.mk (-x.fst) x.snd) localized_module.add_comm_group._proof_6), sub_eq_add_neg := _, zsmul := add_group.zsmul._default add_comm_monoid.add localized_module.add_comm_group._proof_13 add_comm_monoid.zero localized_module.add_comm_group._proof_14 localized_module.add_comm_group._proof_15 add_comm_monoid.nsmul localized_module.add_comm_group._proof_16 localized_module.add_comm_group._proof_17 (λ (p : localized_module S M), p.lift_on (λ (x : M × ↥S), localized_module.mk (-x.fst) x.snd) localized_module.add_comm_group._proof_6), zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _}
Equations
- localized_module.semiring = {add := add_comm_monoid.add (show add_comm_monoid (localized_module S A), from localized_module.add_comm_monoid), add_assoc := _, zero := add_comm_monoid.zero (show add_comm_monoid (localized_module S A), from localized_module.add_comm_monoid), zero_add := _, add_zero := _, nsmul := add_comm_monoid.nsmul (show add_comm_monoid (localized_module S A), from localized_module.add_comm_monoid), nsmul_zero' := _, nsmul_succ' := _, add_comm := _, mul := λ (m₁ m₂ : localized_module S A), m₁.lift_on₂ m₂ (λ (x₁ x₂ : A × ↥S), localized_module.mk (x₁.fst * x₂.fst) (x₁.snd * x₂.snd)) localized_module.semiring._proof_7, left_distrib := _, right_distrib := _, zero_mul := _, mul_zero := _, mul_assoc := _, one := localized_module.mk 1 1, one_mul := _, mul_one := _, nat_cast := non_assoc_semiring.nat_cast._default (localized_module.mk 1 1) add_comm_monoid.add localized_module.semiring._proof_15 add_comm_monoid.zero localized_module.semiring._proof_16 localized_module.semiring._proof_17 add_comm_monoid.nsmul localized_module.semiring._proof_18 localized_module.semiring._proof_19, nat_cast_zero := _, nat_cast_succ := _, npow := monoid_with_zero.npow._default (localized_module.mk 1 1) (λ (m₁ m₂ : localized_module S A), m₁.lift_on₂ m₂ (λ (x₁ x₂ : A × ↥S), localized_module.mk (x₁.fst * x₂.fst) (x₁.snd * x₂.snd)) localized_module.semiring._proof_7) localized_module.semiring._proof_22 localized_module.semiring._proof_23, npow_zero' := _, npow_succ' := _}
Equations
- localized_module.comm_semiring = {add := semiring.add (show semiring (localized_module S A), from localized_module.semiring), add_assoc := _, zero := semiring.zero (show semiring (localized_module S A), from localized_module.semiring), zero_add := _, add_zero := _, nsmul := semiring.nsmul (show semiring (localized_module S A), from localized_module.semiring), nsmul_zero' := _, nsmul_succ' := _, add_comm := _, mul := semiring.mul (show semiring (localized_module S A), from localized_module.semiring), left_distrib := _, right_distrib := _, zero_mul := _, mul_zero := _, mul_assoc := _, one := semiring.one (show semiring (localized_module S A), from localized_module.semiring), one_mul := _, mul_one := _, nat_cast := semiring.nat_cast (show semiring (localized_module S A), from localized_module.semiring), nat_cast_zero := _, nat_cast_succ := _, npow := semiring.npow (show semiring (localized_module S A), from localized_module.semiring), npow_zero' := _, npow_succ' := _, mul_comm := _}
Equations
- localized_module.ring = {add := add_comm_group.add (show add_comm_group (localized_module S A), from localized_module.add_comm_group), add_assoc := _, zero := add_comm_group.zero (show add_comm_group (localized_module S A), from localized_module.add_comm_group), zero_add := _, add_zero := _, nsmul := add_comm_group.nsmul (show add_comm_group (localized_module S A), from localized_module.add_comm_group), nsmul_zero' := _, nsmul_succ' := _, neg := add_comm_group.neg (show add_comm_group (localized_module S A), from localized_module.add_comm_group), sub := add_comm_group.sub (show add_comm_group (localized_module S A), from localized_module.add_comm_group), sub_eq_add_neg := _, zsmul := add_comm_group.zsmul (show add_comm_group (localized_module S A), from localized_module.add_comm_group), zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, int_cast := add_comm_group_with_one.int_cast._default (add_comm_group_with_one.nat_cast._default monoid.one add_comm_group.add localized_module.ring._proof_12 add_comm_group.zero localized_module.ring._proof_13 localized_module.ring._proof_14 add_comm_group.nsmul localized_module.ring._proof_15 localized_module.ring._proof_16) add_comm_group.add localized_module.ring._proof_17 add_comm_group.zero localized_module.ring._proof_18 localized_module.ring._proof_19 add_comm_group.nsmul localized_module.ring._proof_20 localized_module.ring._proof_21 monoid.one localized_module.ring._proof_22 localized_module.ring._proof_23 add_comm_group.neg add_comm_group.sub localized_module.ring._proof_24 add_comm_group.zsmul localized_module.ring._proof_25 localized_module.ring._proof_26 localized_module.ring._proof_27 localized_module.ring._proof_28, nat_cast := add_comm_group_with_one.nat_cast._default monoid.one add_comm_group.add localized_module.ring._proof_12 add_comm_group.zero localized_module.ring._proof_13 localized_module.ring._proof_14 add_comm_group.nsmul localized_module.ring._proof_15 localized_module.ring._proof_16, one := monoid.one (show monoid (localized_module S A), from monoid_with_zero.to_monoid (localized_module S A)), nat_cast_zero := _, nat_cast_succ := _, int_cast_of_nat := _, int_cast_neg_succ_of_nat := _, mul := monoid.mul (show monoid (localized_module S A), from monoid_with_zero.to_monoid (localized_module S A)), mul_assoc := _, one_mul := _, mul_one := _, npow := monoid.npow (show monoid (localized_module S A), from monoid_with_zero.to_monoid (localized_module S A)), npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _}
Equations
- localized_module.comm_ring = {add := ring.add (show ring (localized_module S A), from localized_module.ring), add_assoc := _, zero := ring.zero (show ring (localized_module S A), from localized_module.ring), zero_add := _, add_zero := _, nsmul := ring.nsmul (show ring (localized_module S A), from localized_module.ring), nsmul_zero' := _, nsmul_succ' := _, neg := ring.neg (show ring (localized_module S A), from localized_module.ring), sub := ring.sub (show ring (localized_module S A), from localized_module.ring), sub_eq_add_neg := _, zsmul := ring.zsmul (show ring (localized_module S A), from localized_module.ring), zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, int_cast := ring.int_cast (show ring (localized_module S A), from localized_module.ring), nat_cast := ring.nat_cast (show ring (localized_module S A), from localized_module.ring), one := ring.one (show ring (localized_module S A), from localized_module.ring), nat_cast_zero := _, nat_cast_succ := _, int_cast_of_nat := _, int_cast_neg_succ_of_nat := _, mul := ring.mul (show ring (localized_module S A), from localized_module.ring), mul_assoc := _, one_mul := _, mul_one := _, npow := ring.npow (show ring (localized_module S A), from localized_module.ring), npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _, mul_comm := _}
Equations
- localized_module.has_smul = {smul := λ (f : localization S) (x : localized_module S M), f.lift_on (λ (r : R) (s : ↥S), x.lift_on (λ (p : M × ↥S), localized_module.mk (r • p.fst) (s * p.snd)) _) _}
Equations
- localized_module.is_module = {to_distrib_mul_action := {to_mul_action := {to_has_smul := {smul := has_smul.smul localized_module.has_smul}, one_smul := _, mul_smul := _}, smul_zero := _, smul_add := _}, add_smul := _, zero_smul := _}
Equations
- localized_module.is_module' = {to_distrib_mul_action := module.to_distrib_mul_action (module.comp_hom (localized_module S M) (algebra_map R (localization S))), add_smul := _, zero_smul := _}
Equations
- localized_module.algebra = algebra.of_module localized_module.algebra._proof_1 localized_module.algebra._proof_2
Equations
- localized_module.algebra' = {to_has_smul := mul_action.to_has_smul distrib_mul_action.to_mul_action, to_ring_hom := {to_fun := ((algebra_map (localization S) (localized_module S A)).comp (algebra_map R (localization S))).to_fun, map_one' := _, map_mul' := _, map_zero' := _, map_add' := _}, commutes' := _, smul_def' := _}
The function m ↦ m / 1
as an R
-linear map.
Equations
- localized_module.mk_linear_map S M = {to_fun := λ (m : M), localized_module.mk m 1, map_add' := _, map_smul' := _}
Instances for localized_module.mk_linear_map
For any s : S
, there is an R
-linear map given by a/b ↦ a/(b*s)
.
Equations
- localized_module.div_by s = {to_fun := λ (p : localized_module S M), p.lift_on (λ (p : M × ↥S), localized_module.mk p.fst (s * p.snd)) _, map_add' := _, map_smul' := _}
- map_units : ∀ (x : ↥S), is_unit (⇑(algebra_map R (module.End R M')) ↑x)
- surj : ∀ (y : M'), ∃ (x : M × ↥S), x.snd • y = ⇑f x.fst
- eq_iff_exists : ∀ {x₁ x₂ : M}, ⇑f x₁ = ⇑f x₂ ↔ ∃ (c : ↥S), c • x₂ = c • x₁
The characteristic predicate for localized module.
is_localized_module S f
describes that f : M ⟶ M'
is the localization map identifying M'
as
localized_module S M
.
If g
is a linear map M → M''
such that all scalar multiplication by s : S
is invertible, then
there is a linear map localized_module S M → M''
.
If g
is a linear map M → M''
such that all scalar multiplication by s : S
is invertible, then
there is a linear map localized_module S M → M''
.
Equations
- localized_module.lift S g h = {to_fun := localized_module.lift' S g h, map_add' := _, map_smul' := _}
If g
is a linear map M → M''
such that all scalar multiplication by s : S
is invertible, then
lift g m s = s⁻¹ • g m
.
If g
is a linear map M → M''
such that all scalar multiplication by s : S
is invertible, then
there is a linear map lift g ∘ mk_linear_map = g
.
If g
is a linear map M → M''
such that all scalar multiplication by s : S
is invertible and
l
is another linear map localized_module S M ⟶ M''
such that l ∘ mk_linear_map = g
then
l = lift g
If (M', f : M ⟶ M')
satisfies universal property of localized module, there is a canonical map
localized_module S M ⟶ M'
.
If (M', f : M ⟶ M')
satisfies universal property of localized module, there is a canonical map
localized_module S M ⟶ M'
.
Equations
- is_localized_module.from_localized_module S f = {to_fun := is_localized_module.from_localized_module' S f _inst_8, map_add' := _, map_smul' := _}
If (M', f : M ⟶ M')
satisfies universal property of localized module, then M'
is isomorphic to
localized_module S M
as an R
-module.
Equations
- is_localized_module.iso S f = {to_fun := (is_localized_module.from_localized_module S f).to_fun, map_add' := _, map_smul' := _, inv_fun := (equiv.of_bijective ⇑(is_localized_module.from_localized_module S f) _).inv_fun, left_inv := _, right_inv := _}
If M'
is a localized module and g
is a linear map M' → M''
such that all scalar multiplication
by s : S
is invertible, then there is a linear map M' → M''
.
Equations
- is_localized_module.lift S f g h = (localized_module.lift S g h).comp (is_localized_module.iso S f).symm.to_linear_map
Universal property from localized module:
If (M', f : M ⟶ M')
is a localized module then it satisfies the following universal property:
For every R
-module M''
which every s : S
-scalar multiplication is invertible and for every
R
-linear map g : M ⟶ M''
, there is a unique R
-linear map l : M' ⟶ M''
such that
l ∘ f = g
.
M -----f----> M'
| /
|g /
| / l
v /
M''
If (M', f)
and (M'', g)
both satisfy universal property of localized module, then M', M''
are isomorphic as R
-module
Equations
- is_localized_module.linear_equiv S f g = (is_localized_module.iso S f).symm.trans (is_localized_module.iso S g)
mk' f m s
is the fraction m/s
with respect to the localization map f
.