Quotients by submodules #
- If
pis a submodule ofM,M ⧸ pis the quotient ofMwith respect top: that is, elements ofMare identified if their difference is inp. This is itself a module.
Main definitions #
Submodule.Quotient.mk: a function sending an element ofMtoM ⧸ pSubmodule.Quotient.module:M ⧸ pis a moduleSubmodule.Quotient.mkQ: a linear map sending an element ofMtoM ⧸ pSubmodule.quotEquivOfEq: ifpandp'are equal, their quotients are equivalent
def Submodule.quotientRel {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
Setoid M
The equivalence relation associated to a submodule p, defined by x ≈ y iff -x + y ∈ p.
Note this is equivalent to y - x ∈ p, but defined this way to be defeq to the AddSubgroup
version, where commutativity can't be assumed.
Equations
Instances For
theorem Submodule.quotientRel_def {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {x y : M} :
@[instance_reducible]
instance Submodule.hasQuotient {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] :
HasQuotient M (Submodule R M)
The quotient of a module M by a submodule p ⊆ M.
Equations
- Submodule.hasQuotient = { Quotient := fun (p : Submodule R M) => Quotient p.quotientRel }
def Submodule.Quotient.mk {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {p : Submodule R M} :
M → M ⧸ p
Map associating to an element of M the corresponding element of M/p,
when p is a submodule of M.
Equations
Instances For
theorem Submodule.Quotient.mk'_eq_mk' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {p : Submodule R M} (x : M) :
theorem Submodule.Quotient.mk''_eq_mk {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {p : Submodule R M} (x : M) :
theorem Submodule.Quotient.quot_mk_eq_mk {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {p : Submodule R M} (x : M) :
theorem Submodule.Quotient.quotientAddGroupMk_eq_mk {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {p : Submodule R M} (x : M) :
@[instance_reducible]
instance Submodule.Quotient.instZeroQuotient {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
Equations
- Submodule.Quotient.instZeroQuotient p = { zero := Quotient.mk'' 0 }
@[instance_reducible]
instance Submodule.Quotient.instInhabitedQuotient {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
Equations
- Submodule.Quotient.instInhabitedQuotient p = { default := 0 }
@[simp]
theorem Submodule.Quotient.mk_zero {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
@[instance_reducible]
instance Submodule.Quotient.instSMul' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [SMul S R] [SMul S M] [IsScalarTower S R M] (P : Submodule R M) :
Equations
- Submodule.Quotient.instSMul' P = { smul := fun (a : S) => Quotient.map' (fun (x : M) => a • x) ⋯ }
@[instance_reducible]
instance Submodule.Quotient.instSMul {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (P : Submodule R M) :
Shortcut to help the elaborator in the common case.
Equations
instance Submodule.Quotient.smulCommClass {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [SMul S R] [SMul S M] [IsScalarTower S R M] (P : Submodule R M) (T : Type u_4) [SMul T R] [SMul T M] [IsScalarTower T R M] [SMulCommClass S T M] :
SMulCommClass S T (M ⧸ P)
instance Submodule.Quotient.isScalarTower {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [SMul S R] [SMul S M] [IsScalarTower S R M] (P : Submodule R M) (T : Type u_4) [SMul T R] [SMul T M] [IsScalarTower T R M] [SMul S T] [IsScalarTower S T M] :
IsScalarTower S T (M ⧸ P)
instance Submodule.Quotient.isCentralScalar {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [SMul S R] [SMul S M] [IsScalarTower S R M] (P : Submodule R M) [SMul Sᵐᵒᵖ R] [SMul Sᵐᵒᵖ M] [IsScalarTower Sᵐᵒᵖ R M] [IsCentralScalar S M] :
IsCentralScalar S (M ⧸ P)
@[instance_reducible]
instance Submodule.Quotient.addMonoid {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
Equations
- One or more equations did not get rendered due to their size.
@[instance_reducible]
instance Submodule.Quotient.addCommMonoid {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
AddCommMonoid (M ⧸ p)
Equations
- Submodule.Quotient.addCommMonoid p = { toAddMonoid := Submodule.Quotient.addMonoid p, add_comm := ⋯ }
@[instance_reducible]
instance Submodule.Quotient.addCommGroup {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
AddCommGroup (M ⧸ p)
Equations
- One or more equations did not get rendered due to their size.
@[simp]
theorem Submodule.Quotient.mk_out {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {p : Submodule R M} (m : M ⧸ p) :
@[instance_reducible]
instance Submodule.Quotient.mulAction' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [Monoid S] [SMul S R] [MulAction S M] [IsScalarTower S R M] (P : Submodule R M) :
Equations
- Submodule.Quotient.mulAction' P = { toSMul := Submodule.Quotient.instSMul' P, mul_smul := ⋯, one_smul := ⋯ }
@[instance_reducible]
instance Submodule.Quotient.mulAction {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (P : Submodule R M) :
Equations
@[instance_reducible]
instance Submodule.Quotient.smulZeroClass' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [SMul S R] [SMulZeroClass S M] [IsScalarTower S R M] (P : Submodule R M) :
SMulZeroClass S (M ⧸ P)
Equations
- Submodule.Quotient.smulZeroClass' P = { toFun := Submodule.Quotient.mk, map_zero' := ⋯ }.smulZeroClass ⋯
@[instance_reducible]
instance Submodule.Quotient.smulZeroClass {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (P : Submodule R M) :
SMulZeroClass R (M ⧸ P)
@[instance_reducible]
instance Submodule.Quotient.distribSMul' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [SMul S R] [DistribSMul S M] [IsScalarTower S R M] (P : Submodule R M) :
DistribSMul S (M ⧸ P)
Equations
- Submodule.Quotient.distribSMul' P = { toSMulZeroClass := Submodule.Quotient.smulZeroClass' P, smul_add := ⋯ }
@[instance_reducible]
instance Submodule.Quotient.distribSMul {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (P : Submodule R M) :
DistribSMul R (M ⧸ P)
@[instance_reducible]
instance Submodule.Quotient.distribMulAction' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [Monoid S] [SMul S R] [DistribMulAction S M] [IsScalarTower S R M] (P : Submodule R M) :
DistribMulAction S (M ⧸ P)
Equations
- Submodule.Quotient.distribMulAction' P = { toMulAction := Submodule.Quotient.mulAction' P, smul_zero := ⋯, smul_add := ⋯ }
@[instance_reducible]
instance Submodule.Quotient.distribMulAction {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (P : Submodule R M) :
DistribMulAction R (M ⧸ P)
@[instance_reducible]
instance Submodule.Quotient.module' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [Semiring S] [SMul S R] [Module S M] [IsScalarTower S R M] (P : Submodule R M) :
Equations
- Submodule.Quotient.module' P = { toDistribMulAction := Submodule.Quotient.distribMulAction' P, add_smul := ⋯, zero_smul := ⋯ }
@[instance_reducible]
instance Submodule.Quotient.module {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (P : Submodule R M) :
Equations
theorem Submodule.Quotient.mk_surjective {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
instance Submodule.Quotient.instSmallQuotient {R : Type u_3} {M : Type u_4} [Ring R] [AddCommGroup M] [Module R M] {N : Submodule R M} [Small.{u, u_4} M] :
Small.{u, u_4} (M ⧸ N)
theorem Submodule.quot_hom_ext {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {M₂ : Type u_3} [AddCommGroup M₂] [Module R M₂] (f g : M ⧸ p →ₗ[R] M₂) (h : ∀ (x : M), f (Quotient.mk x) = g (Quotient.mk x)) :
def Submodule.mkQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
The map from a module M to the quotient of M by a submodule p as a linear map.
Equations
- p.mkQ = { toFun := Submodule.Quotient.mk, map_add' := ⋯, map_smul' := ⋯ }
Instances For
@[simp]
theorem Submodule.mkQ_apply {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (x : M) :
theorem Submodule.mkQ_surjective {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
theorem Submodule.linearMap_qext {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} ⦃f g : M ⧸ p →ₛₗ[τ₁₂] M₂⦄ (h : f ∘ₛₗ p.mkQ = g ∘ₛₗ p.mkQ) :
Two LinearMaps from a quotient module are equal if their compositions with
submodule.mkQ are equal.
See note [partially-applied ext lemmas].
def Submodule.quotEquivOfEq {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p p' : Submodule R M) (h : p = p') :
Quotienting by equal submodules gives linearly equivalent quotients.
Equations
- p.quotEquivOfEq p' h = { toFun := (Quotient.congr (Equiv.refl M) ⋯).toFun, map_add' := ⋯, map_smul' := ⋯, invFun := (Quotient.congr (Equiv.refl M) ⋯).invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
@[simp]
theorem Submodule.quotEquivOfEq_mk {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p p' : Submodule R M) (h : p = p') (x : M) :