mathlib documentation

group_theory.submonoid.operations

Operations on submonoids #

In this file we define various operations on submonoids and monoid_homs.

Main definitions #

Conversion between multiplicative and additive definitions #

(Commutative) monoid structure on a submonoid #

Group actions by submonoids #

Operations on submonoids #

Monoid homomorphisms between submonoid #

Operations on monoid_homs #

Tags #

submonoid, range, product, map, comap

Conversion to/from additive/multiplicative #

Submonoids of monoid M are isomorphic to additive submonoids of additive M.

Equations

Additive submonoids of an additive monoid additive M are isomorphic to submonoids of M.

Additive submonoids of an additive monoid A are isomorphic to multiplicative submonoids of multiplicative A.

Equations

Submonoids of a monoid multiplicative A are isomorphic to additive submonoids of A.

comap and map #

def submonoid.comap {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) (S : submonoid N) :

The preimage of a submonoid along a monoid homomorphism is a submonoid.

Equations
def add_submonoid.comap {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) (S : add_submonoid N) :

The preimage of an add_submonoid along an add_monoid homomorphism is an add_submonoid.

Equations
@[simp]
theorem submonoid.coe_comap {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (S : submonoid N) (f : M →* N) :
@[simp]
theorem add_submonoid.coe_comap {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (S : add_submonoid N) (f : M →+ N) :
@[simp]
theorem submonoid.mem_comap {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {S : submonoid N} {f : M →* N} {x : M} :
@[simp]
theorem add_submonoid.mem_comap {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {S : add_submonoid N} {f : M →+ N} {x : M} :
theorem add_submonoid.comap_comap {M : Type u_1} {N : Type u_2} {P : Type u_3} [add_zero_class M] [add_zero_class N] [add_zero_class P] (S : add_submonoid P) (g : N →+ P) (f : M →+ N) :
theorem submonoid.comap_comap {M : Type u_1} {N : Type u_2} {P : Type u_3} [mul_one_class M] [mul_one_class N] [mul_one_class P] (S : submonoid P) (g : N →* P) (f : M →* N) :
@[simp]
theorem submonoid.comap_id {P : Type u_3} [mul_one_class P] (S : submonoid P) :
@[simp]
def submonoid.map {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) (S : submonoid M) :

The image of a submonoid along a monoid homomorphism is a submonoid.

Equations
def add_submonoid.map {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) (S : add_submonoid M) :

The image of an add_submonoid along an add_monoid homomorphism is an add_submonoid.

Equations
@[simp]
theorem submonoid.coe_map {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) (S : submonoid M) :
@[simp]
theorem add_submonoid.coe_map {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) (S : add_submonoid M) :
@[simp]
theorem add_submonoid.mem_map {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {f : M →+ N} {S : add_submonoid M} {y : N} :
y add_submonoid.map f S ∃ (x : M) (H : x S), f x = y
@[simp]
theorem submonoid.mem_map {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} {S : submonoid M} {y : N} :
y submonoid.map f S ∃ (x : M) (H : x S), f x = y
theorem submonoid.mem_map_of_mem {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) {S : submonoid M} {x : M} (hx : x S) :
theorem add_submonoid.mem_map_of_mem {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) {S : add_submonoid M} {x : M} (hx : x S) :
theorem add_submonoid.apply_coe_mem_map {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) (S : add_submonoid M) (x : S) :
theorem submonoid.apply_coe_mem_map {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) (S : submonoid M) (x : S) :
theorem submonoid.map_map {M : Type u_1} {N : Type u_2} {P : Type u_3} [mul_one_class M] [mul_one_class N] [mul_one_class P] (S : submonoid M) (g : N →* P) (f : M →* N) :
theorem add_submonoid.map_map {M : Type u_1} {N : Type u_2} {P : Type u_3} [add_zero_class M] [add_zero_class N] [add_zero_class P] (S : add_submonoid M) (g : N →+ P) (f : M →+ N) :
theorem add_submonoid.mem_map_iff_mem {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {f : M →+ N} (hf : function.injective f) {S : add_submonoid M} {x : M} :
theorem submonoid.mem_map_iff_mem {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} (hf : function.injective f) {S : submonoid M} {x : M} :
theorem add_submonoid.map_le_iff_le_comap {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {f : M →+ N} {S : add_submonoid M} {T : add_submonoid N} :
theorem submonoid.map_le_iff_le_comap {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} {S : submonoid M} {T : submonoid N} :
theorem submonoid.gc_map_comap {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) :
theorem submonoid.map_le_of_le_comap {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (S : submonoid M) {T : submonoid N} {f : M →* N} :
theorem add_submonoid.map_le_of_le_comap {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (S : add_submonoid M) {T : add_submonoid N} {f : M →+ N} :
theorem submonoid.le_comap_of_map_le {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (S : submonoid M) {T : submonoid N} {f : M →* N} :
theorem add_submonoid.le_comap_of_map_le {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (S : add_submonoid M) {T : add_submonoid N} {f : M →+ N} :
theorem submonoid.le_comap_map {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (S : submonoid M) {f : M →* N} :
theorem add_submonoid.le_comap_map {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (S : add_submonoid M) {f : M →+ N} :
theorem add_submonoid.map_comap_le {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {S : add_submonoid N} {f : M →+ N} :
theorem submonoid.map_comap_le {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {S : submonoid N} {f : M →* N} :
theorem add_submonoid.monotone_map {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {f : M →+ N} :
theorem submonoid.monotone_map {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} :
theorem add_submonoid.monotone_comap {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {f : M →+ N} :
theorem submonoid.monotone_comap {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} :
@[simp]
theorem submonoid.map_comap_map {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (S : submonoid M) {f : M →* N} :
@[simp]
@[simp]
theorem submonoid.comap_map_comap {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {S : submonoid N} {f : M →* N} :
theorem submonoid.map_sup {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (S T : submonoid M) (f : M →* N) :
theorem add_submonoid.map_sup {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (S T : add_submonoid M) (f : M →+ N) :
theorem submonoid.map_supr {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {ι : Sort u_3} (f : M →* N) (s : ι → submonoid M) :
submonoid.map f (supr s) = ⨆ (i : ι), submonoid.map f (s i)
theorem add_submonoid.map_supr {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {ι : Sort u_3} (f : M →+ N) (s : ι → add_submonoid M) :
add_submonoid.map f (supr s) = ⨆ (i : ι), add_submonoid.map f (s i)
theorem submonoid.comap_inf {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (S T : submonoid N) (f : M →* N) :
theorem add_submonoid.comap_inf {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (S T : add_submonoid N) (f : M →+ N) :
theorem submonoid.comap_infi {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {ι : Sort u_3} (f : M →* N) (s : ι → submonoid N) :
submonoid.comap f (infi s) = ⨅ (i : ι), submonoid.comap f (s i)
theorem add_submonoid.comap_infi {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {ι : Sort u_3} (f : M →+ N) (s : ι → add_submonoid N) :
add_submonoid.comap f (infi s) = ⨅ (i : ι), add_submonoid.comap f (s i)
@[simp]
theorem submonoid.map_bot {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) :
@[simp]
theorem add_submonoid.map_bot {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) :
@[simp]
theorem add_submonoid.comap_top {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) :
@[simp]
theorem submonoid.comap_top {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) :
@[simp]
@[simp]
theorem submonoid.map_id {M : Type u_1} [mul_one_class M] (S : submonoid M) :

map f and comap f form a galois_coinsertion when f is injective.

Equations
def submonoid.gci_map_comap {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} (hf : function.injective f) :

map f and comap f form a galois_coinsertion when f is injective.

Equations
theorem submonoid.comap_map_eq_of_injective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} (hf : function.injective f) (S : submonoid M) :
theorem submonoid.comap_inf_map_of_injective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} (hf : function.injective f) (S T : submonoid M) :
theorem submonoid.comap_infi_map_of_injective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {ι : Type u_4} {f : M →* N} (hf : function.injective f) (S : ι → submonoid M) :
submonoid.comap f (⨅ (i : ι), submonoid.map f (S i)) = infi S
theorem add_submonoid.comap_infi_map_of_injective {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {ι : Type u_4} {f : M →+ N} (hf : function.injective f) (S : ι → add_submonoid M) :
add_submonoid.comap f (⨅ (i : ι), add_submonoid.map f (S i)) = infi S
theorem submonoid.comap_sup_map_of_injective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} (hf : function.injective f) (S T : submonoid M) :
theorem submonoid.comap_supr_map_of_injective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {ι : Type u_4} {f : M →* N} (hf : function.injective f) (S : ι → submonoid M) :
submonoid.comap f (⨆ (i : ι), submonoid.map f (S i)) = supr S
theorem add_submonoid.comap_supr_map_of_injective {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {ι : Type u_4} {f : M →+ N} (hf : function.injective f) (S : ι → add_submonoid M) :
add_submonoid.comap f (⨆ (i : ι), add_submonoid.map f (S i)) = supr S
theorem submonoid.map_le_map_iff_of_injective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} (hf : function.injective f) {S T : submonoid M} :
theorem submonoid.map_strict_mono_of_injective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} (hf : function.injective f) :
def submonoid.gi_map_comap {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} (hf : function.surjective f) :

map f and comap f form a galois_insertion when f is surjective.

Equations

map f and comap f form a galois_insertion when f is surjective.

Equations
theorem submonoid.map_comap_eq_of_surjective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} (hf : function.surjective f) (S : submonoid N) :
theorem submonoid.map_inf_comap_of_surjective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} (hf : function.surjective f) (S T : submonoid N) :
theorem add_submonoid.map_infi_comap_of_surjective {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {ι : Type u_4} {f : M →+ N} (hf : function.surjective f) (S : ι → add_submonoid N) :
add_submonoid.map f (⨅ (i : ι), add_submonoid.comap f (S i)) = infi S
theorem submonoid.map_infi_comap_of_surjective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {ι : Type u_4} {f : M →* N} (hf : function.surjective f) (S : ι → submonoid N) :
submonoid.map f (⨅ (i : ι), submonoid.comap f (S i)) = infi S
theorem submonoid.map_sup_comap_of_surjective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} (hf : function.surjective f) (S T : submonoid N) :
theorem submonoid.map_supr_comap_of_surjective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {ι : Type u_4} {f : M →* N} (hf : function.surjective f) (S : ι → submonoid N) :
submonoid.map f (⨆ (i : ι), submonoid.comap f (S i)) = supr S
theorem add_submonoid.map_supr_comap_of_surjective {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {ι : Type u_4} {f : M →+ N} (hf : function.surjective f) (S : ι → add_submonoid N) :
add_submonoid.map f (⨆ (i : ι), add_submonoid.comap f (S i)) = supr S
theorem submonoid.comap_le_comap_iff_of_surjective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} (hf : function.surjective f) {S T : submonoid N} :
@[protected, instance]
def submonoid.has_mul {M : Type u_1} [mul_one_class M] (S : submonoid M) :

A submonoid of a monoid inherits a multiplication.

Equations
@[protected, instance]
def add_submonoid.has_add {M : Type u_1} [add_zero_class M] (S : add_submonoid M) :

An add_submonoid of an add_monoid inherits an addition.

Equations
@[protected, instance]
def submonoid.has_one {M : Type u_1} [mul_one_class M] (S : submonoid M) :

A submonoid of a monoid inherits a 1.

Equations
@[protected, instance]
def add_submonoid.has_zero {M : Type u_1} [add_zero_class M] (S : add_submonoid M) :

An add_submonoid of an add_monoid inherits a zero.

Equations
@[simp, norm_cast]
theorem submonoid.coe_mul {M : Type u_1} [mul_one_class M] (S : submonoid M) (x y : S) :
x * y = (x) * y
@[simp, norm_cast]
theorem add_submonoid.coe_add {M : Type u_1} [add_zero_class M] (S : add_submonoid M) (x y : S) :
(x + y) = x + y
@[simp, norm_cast]
theorem add_submonoid.coe_zero {M : Type u_1} [add_zero_class M] (S : add_submonoid M) :
0 = 0
@[simp, norm_cast]
theorem submonoid.coe_one {M : Type u_1} [mul_one_class M] (S : submonoid M) :
1 = 1
@[simp]
theorem submonoid.mk_mul_mk {M : Type u_1} [mul_one_class M] (S : submonoid M) (x y : M) (hx : x S) (hy : y S) :
x, hx⟩ * y, hy⟩ = x * y, _⟩
@[simp]
theorem add_submonoid.mk_add_mk {M : Type u_1} [add_zero_class M] (S : add_submonoid M) (x y : M) (hx : x S) (hy : y S) :
x, hx⟩ + y, hy⟩ = x + y, _⟩
theorem submonoid.mul_def {M : Type u_1} [mul_one_class M] (S : submonoid M) (x y : S) :
x * y = (x) * y, _⟩
theorem add_submonoid.add_def {M : Type u_1} [add_zero_class M] (S : add_submonoid M) (x y : S) :
x + y = x + y, _⟩
theorem submonoid.one_def {M : Type u_1} [mul_one_class M] (S : submonoid M) :
1 = 1, _⟩
theorem add_submonoid.zero_def {M : Type u_1} [add_zero_class M] (S : add_submonoid M) :
0 = 0, _⟩
@[protected, instance]

An add_submonoid of an unital additive magma inherits an unital additive magma structure.

Equations
@[protected, instance]

A submonoid of a unital magma inherits a unital magma structure.

Equations
@[protected, instance]
def submonoid.to_monoid {M : Type u_1} [monoid M] (S : submonoid M) :

A submonoid of a monoid inherits a monoid structure.

Equations
@[protected, instance]

An add_submonoid of an add_monoid inherits an add_monoid structure.

Equations
@[protected, instance]
def submonoid.to_comm_monoid {M : Type u_1} [comm_monoid M] (S : submonoid M) :

A submonoid of a comm_monoid is a comm_monoid.

Equations
def add_submonoid.subtype {M : Type u_1} [add_zero_class M] (S : add_submonoid M) :

The natural monoid hom from an add_submonoid of add_monoid M to M.

Equations
def submonoid.subtype {M : Type u_1} [mul_one_class M] (S : submonoid M) :

The natural monoid hom from a submonoid of monoid M to M.

Equations
@[simp]
theorem add_submonoid.coe_subtype {M : Type u_1} [add_zero_class M] (S : add_submonoid M) :
@[simp]
theorem submonoid.coe_subtype {M : Type u_1} [mul_one_class M] (S : submonoid M) :
noncomputable def add_submonoid.equiv_map_of_injective {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (S : add_submonoid M) (f : M →+ N) (hf : function.injective f) :

An additive submonoid is isomorphic to its image under an injective function

Equations
noncomputable def submonoid.equiv_map_of_injective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (S : submonoid M) (f : M →* N) (hf : function.injective f) :

A submonoid is isomorphic to its image under an injective function

Equations
@[simp]
theorem add_submonoid.coe_equiv_map_of_injective_apply {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (S : add_submonoid M) (f : M →+ N) (hf : function.injective f) (x : S) :
@[simp]
theorem submonoid.coe_equiv_map_of_injective_apply {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (S : submonoid M) (f : M →* N) (hf : function.injective f) (x : S) :
theorem add_submonoid.closure_induction' {M : Type u_1} [add_zero_class M] (s : set M) {p : (add_submonoid.closure s) → Prop} (Hs : ∀ (x : M) (h : x s), p x, _⟩) (H1 : p 0) (Hmul : ∀ (x y : (add_submonoid.closure s)), p xp yp (x + y)) (x : (add_submonoid.closure s)) :
p x

An induction principle on elements of the type add_submonoid.closure s. If p holds for 0 and all elements of s, and is preserved under addition, then p holds for all elements of the closure of s.

The difference with add_submonoid.closure_induction is that this acts on the subtype.

theorem submonoid.closure_induction' {M : Type u_1} [mul_one_class M] (s : set M) {p : (submonoid.closure s) → Prop} (Hs : ∀ (x : M) (h : x s), p x, _⟩) (H1 : p 1) (Hmul : ∀ (x y : (submonoid.closure s)), p xp yp (x * y)) (x : (submonoid.closure s)) :
p x

An induction principle on elements of the type submonoid.closure s. If p holds for 1 and all elements of s, and is preserved under multiplication, then p holds for all elements of the closure of s.

The difference with submonoid.closure_induction is that this acts on the subtype.

@[simp]
def submonoid.prod {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (s : submonoid M) (t : submonoid N) :

Given submonoids s, t of monoids M, N respectively, s × t as a submonoid of M × N.

Equations
def add_submonoid.prod {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (s : add_submonoid M) (t : add_submonoid N) :

Given add_submonoids s, t of add_monoids A, B respectively, s × t as an add_submonoid of A × B.

Equations
theorem add_submonoid.coe_prod {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (s : add_submonoid M) (t : add_submonoid N) :
(s.prod t) = s.prod t
theorem submonoid.coe_prod {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (s : submonoid M) (t : submonoid N) :
(s.prod t) = s.prod t
theorem submonoid.mem_prod {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {s : submonoid M} {t : submonoid N} {p : M × N} :
p s.prod t p.fst s p.snd t
theorem add_submonoid.mem_prod {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {s : add_submonoid M} {t : add_submonoid N} {p : M × N} :
p s.prod t p.fst s p.snd t
theorem add_submonoid.prod_mono {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {s₁ s₂ : add_submonoid M} {t₁ t₂ : add_submonoid N} (hs : s₁ s₂) (ht : t₁ t₂) :
s₁.prod t₁ s₂.prod t₂
theorem submonoid.prod_mono {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {s₁ s₂ : submonoid M} {t₁ t₂ : submonoid N} (hs : s₁ s₂) (ht : t₁ t₂) :
s₁.prod t₁ s₂.prod t₂
theorem add_submonoid.prod_top {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (s : add_submonoid M) :
theorem submonoid.prod_top {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (s : submonoid M) :
theorem submonoid.top_prod {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (s : submonoid N) :
theorem add_submonoid.top_prod {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (s : add_submonoid N) :
@[simp]
theorem add_submonoid.top_prod_top {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] :
@[simp]
theorem submonoid.top_prod_top {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] :
theorem add_submonoid.bot_sum_bot {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] :
theorem submonoid.bot_prod_bot {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] :
def submonoid.prod_equiv {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (s : submonoid M) (t : submonoid N) :

The product of submonoids is isomorphic to their product as monoids.

Equations
def add_submonoid.prod_equiv {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (s : add_submonoid M) (t : add_submonoid N) :

The product of additive submonoids is isomorphic to their product as additive monoids

Equations
theorem add_submonoid.map_inl {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (s : add_submonoid M) :
theorem submonoid.map_inl {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (s : submonoid M) :
theorem submonoid.map_inr {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (s : submonoid N) :
theorem add_submonoid.map_inr {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (s : add_submonoid N) :
@[simp]
theorem submonoid.prod_bot_sup_bot_prod {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (s : submonoid M) (t : submonoid N) :
@[simp]
theorem add_submonoid.prod_bot_sup_bot_prod {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (s : add_submonoid M) (t : add_submonoid N) :
theorem add_submonoid.mem_map_equiv {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {f : M ≃+ N} {K : add_submonoid M} {x : N} :
theorem submonoid.mem_map_equiv {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M ≃* N} {K : submonoid M} {x : N} :
def monoid_hom.mrange {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) :

The range of a monoid homomorphism is a submonoid. See Note [range copy pattern].

Equations
def add_monoid_hom.mrange {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) :

The range of an add_monoid_hom is an add_submonoid.

Equations
@[simp]
theorem monoid_hom.coe_mrange {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) :
@[simp]
theorem add_monoid_hom.coe_mrange {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) :
@[simp]
theorem add_monoid_hom.mem_mrange {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {f : M →+ N} {y : N} :
y f.mrange ∃ (x : M), f x = y
@[simp]
theorem monoid_hom.mem_mrange {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {f : M →* N} {y : N} :
y f.mrange ∃ (x : M), f x = y
theorem monoid_hom.mrange_eq_map {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) :
theorem add_monoid_hom.mrange_eq_map {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) :
theorem add_monoid_hom.map_mrange {M : Type u_1} {N : Type u_2} {P : Type u_3} [add_zero_class M] [add_zero_class N] [add_zero_class P] (g : N →+ P) (f : M →+ N) :
theorem monoid_hom.map_mrange {M : Type u_1} {N : Type u_2} {P : Type u_3} [mul_one_class M] [mul_one_class N] [mul_one_class P] (g : N →* P) (f : M →* N) :
theorem monoid_hom.mrange_top_iff_surjective {M : Type u_1} [mul_one_class M] {N : Type u_2} [mul_one_class N] {f : M →* N} :
theorem add_monoid_hom.mrange_top_of_surjective {M : Type u_1} [add_zero_class M] {N : Type u_2} [add_zero_class N] (f : M →+ N) (hf : function.surjective f) :

The range of a surjective add_monoid hom is the whole of the codomain.

theorem monoid_hom.mrange_top_of_surjective {M : Type u_1} [mul_one_class M] {N : Type u_2} [mul_one_class N] (f : M →* N) (hf : function.surjective f) :

The range of a surjective monoid hom is the whole of the codomain.

theorem monoid_hom.mclosure_preimage_le {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) (s : set N) :
theorem add_monoid_hom.map_mclosure {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) (s : set M) :

The image under an add_monoid hom of the add_submonoid generated by a set equals the add_submonoid generated by the image of the set.

theorem monoid_hom.map_mclosure {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) (s : set M) :

The image under a monoid hom of the submonoid generated by a set equals the submonoid generated by the image of the set.

def monoid_hom.mrestrict {M : Type u_1} [mul_one_class M] {N : Type u_2} [mul_one_class N] (f : M →* N) (S : submonoid M) :

Restriction of a monoid hom to a submonoid of the domain.

Equations
def add_monoid_hom.mrestrict {M : Type u_1} [add_zero_class M] {N : Type u_2} [add_zero_class N] (f : M →+ N) (S : add_submonoid M) :

Restriction of an add_monoid hom to an add_submonoid of the domain.

Equations
@[simp]
theorem add_monoid_hom.mrestrict_apply {M : Type u_1} [add_zero_class M] (S : add_submonoid M) {N : Type u_2} [add_zero_class N] (f : M →+ N) (x : S) :
(f.mrestrict S) x = f x
@[simp]
theorem monoid_hom.mrestrict_apply {M : Type u_1} [mul_one_class M] (S : submonoid M) {N : Type u_2} [mul_one_class N] (f : M →* N) (x : S) :
(f.mrestrict S) x = f x
@[simp]
theorem monoid_hom.cod_mrestrict_apply_coe {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) (S : submonoid N) (h : ∀ (x : M), f x S) (n : M) :
((f.cod_mrestrict S h) n) = f n
@[simp]
theorem add_monoid_hom.cod_mrestrict_apply_coe {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) (S : add_submonoid N) (h : ∀ (x : M), f x S) (n : M) :
((f.cod_mrestrict S h) n) = f n
def add_monoid_hom.cod_mrestrict {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) (S : add_submonoid N) (h : ∀ (x : M), f x S) :

Restriction of an add_monoid hom to an add_submonoid of the codomain.

Equations
def monoid_hom.cod_mrestrict {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) (S : submonoid N) (h : ∀ (x : M), f x S) :

Restriction of a monoid hom to a submonoid of the codomain.

Equations
def add_monoid_hom.mrange_restrict {M : Type u_1} [add_zero_class M] {N : Type u_2} [add_zero_class N] (f : M →+ N) :

Restriction of an add_monoid hom to its range interpreted as a submonoid.

Equations
def monoid_hom.mrange_restrict {M : Type u_1} [mul_one_class M] {N : Type u_2} [mul_one_class N] (f : M →* N) :

Restriction of a monoid hom to its range interpreted as a submonoid.

Equations
@[simp]
theorem add_monoid_hom.coe_mrange_restrict {M : Type u_1} [add_zero_class M] {N : Type u_2} [add_zero_class N] (f : M →+ N) (x : M) :
@[simp]
theorem monoid_hom.coe_mrange_restrict {M : Type u_1} [mul_one_class M] {N : Type u_2} [mul_one_class N] (f : M →* N) (x : M) :
def monoid_hom.mker {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) :

The multiplicative kernel of a monoid homomorphism is the submonoid of elements x : G such that f x = 1

Equations
def add_monoid_hom.mker {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) :

The additive kernel of an add_monoid homomorphism is the add_submonoid of elements such that f x = 0

Equations
theorem monoid_hom.mem_mker {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) {x : M} :
x f.mker f x = 1
theorem add_monoid_hom.mem_mker {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) {x : M} :
x f.mker f x = 0
theorem monoid_hom.coe_mker {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) :
(f.mker) = f ⁻¹' {1}
theorem add_monoid_hom.coe_mker {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) :
(f.mker) = f ⁻¹' {0}
@[protected, instance]
def add_monoid_hom.decidable_mem_mker {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] [decidable_eq N] (f : M →+ N) :
decidable_pred (λ (_x : M), _x f.mker)
Equations
@[protected, instance]
def monoid_hom.decidable_mem_mker {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] [decidable_eq N] (f : M →* N) :
decidable_pred (λ (_x : M), _x f.mker)
Equations
theorem add_monoid_hom.comap_mker {M : Type u_1} {N : Type u_2} {P : Type u_3} [add_zero_class M] [add_zero_class N] [add_zero_class P] (g : N →+ P) (f : M →+ N) :
theorem monoid_hom.comap_mker {M : Type u_1} {N : Type u_2} {P : Type u_3} [mul_one_class M] [mul_one_class N] [mul_one_class P] (g : N →* P) (f : M →* N) :
@[simp]
theorem add_monoid_hom.comap_bot' {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) :
@[simp]
theorem monoid_hom.comap_bot' {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) :
theorem monoid_hom.range_restrict_mker {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) :
theorem add_monoid_hom.range_restrict_mker {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) :
@[simp]
theorem add_monoid_hom.mker_zero {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] :
@[simp]
theorem monoid_hom.mker_one {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] :
theorem monoid_hom.prod_map_comap_prod' {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {M' : Type u_3} {N' : Type u_4} [mul_one_class M'] [mul_one_class N'] (f : M →* N) (g : M' →* N') (S : submonoid N) (S' : submonoid N') :
theorem add_monoid_hom.sum_map_comap_sum' {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {M' : Type u_3} {N' : Type u_4} [add_zero_class M'] [add_zero_class N'] (f : M →+ N) (g : M' →+ N') (S : add_submonoid N) (S' : add_submonoid N') :
theorem add_monoid_hom.mker_sum_map {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] {M' : Type u_3} {N' : Type u_4} [add_zero_class M'] [add_zero_class N'] (f : M →+ N) (g : M' →+ N') :
theorem monoid_hom.mker_prod_map {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] {M' : Type u_3} {N' : Type u_4} [mul_one_class M'] [mul_one_class N'] (f : M →* N) (g : M' →* N') :
@[simp]
theorem monoid_hom.submonoid_comap_apply_coe {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) (N' : submonoid N) (x : (submonoid.comap f N')) :
def add_monoid_hom.add_submonoid_comap {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) (N' : add_submonoid N) :

the add_monoid_hom from the preimage of an additive submonoid to itself.

Equations
def monoid_hom.submonoid_comap {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) (N' : submonoid N) :

The monoid_hom from the preimage of a submonoid to itself.

Equations
@[simp]
theorem add_monoid_hom.add_submonoid_comap_apply_coe {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) (N' : add_submonoid N) (x : (add_submonoid.comap f N')) :
def add_monoid_hom.add_submonoid_map {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) (M' : add_submonoid M) :

the add_monoid_hom from an additive submonoid to its image. See add_equiv.add_submonoid_equiv_map for a variant for add_equivs.

Equations
def monoid_hom.submonoid_map {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) (M' : submonoid M) :

The monoid_hom from a submonoid to its image. See mul_equiv.submonoid_equiv_map for a variant for mul_equivs.

Equations
@[simp]
theorem monoid_hom.submonoid_map_apply_coe {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) (M' : submonoid M) (x : M') :
@[simp]
theorem add_monoid_hom.add_submonoid_map_apply_coe {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) (M' : add_submonoid M) (x : M') :
theorem monoid_hom.submonoid_map_surjective {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) (M' : submonoid M) :
theorem submonoid.mrange_inl {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] :
theorem add_submonoid.mrange_inl {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] :
theorem submonoid.mrange_inr {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] :
theorem add_submonoid.mrange_inr {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] :
theorem submonoid.mrange_inl' {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] :
theorem submonoid.mrange_inr' {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] :
@[simp]
theorem submonoid.mrange_fst {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] :
@[simp]
theorem add_submonoid.mrange_fst {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] :
@[simp]
theorem submonoid.mrange_snd {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] :
@[simp]
theorem add_submonoid.mrange_snd {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] :
@[simp]
theorem submonoid.mrange_inl_sup_mrange_inr {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] :
def submonoid.inclusion {M : Type u_1} [mul_one_class M] {S T : submonoid M} (h : S T) :

The monoid hom associated to an inclusion of submonoids.

Equations
def add_submonoid.inclusion {M : Type u_1} [add_zero_class M] {S T : add_submonoid M} (h : S T) :

The add_monoid hom associated to an inclusion of submonoids.

Equations
@[simp]
theorem add_submonoid.range_subtype {M : Type u_1} [add_zero_class M] (s : add_submonoid M) :
@[simp]
theorem submonoid.range_subtype {M : Type u_1} [mul_one_class M] (s : submonoid M) :
theorem add_submonoid.eq_top_iff' {M : Type u_1} [add_zero_class M] (S : add_submonoid M) :
S = ∀ (x : M), x S
theorem submonoid.eq_top_iff' {M : Type u_1} [mul_one_class M] (S : submonoid M) :
S = ∀ (x : M), x S
theorem submonoid.eq_bot_iff_forall {M : Type u_1} [mul_one_class M] (S : submonoid M) :
S = ∀ (x : M), x Sx = 1
theorem add_submonoid.eq_bot_iff_forall {M : Type u_1} [add_zero_class M] (S : add_submonoid M) :
S = ∀ (x : M), x Sx = 0
theorem submonoid.nontrivial_iff_exists_ne_one {M : Type u_1} [mul_one_class M] (S : submonoid M) :
nontrivial S ∃ (x : M) (H : x S), x 1
theorem add_submonoid.nontrivial_iff_exists_ne_zero {M : Type u_1} [add_zero_class M] (S : add_submonoid M) :
nontrivial S ∃ (x : M) (H : x S), x 0
theorem submonoid.bot_or_nontrivial {M : Type u_1} [mul_one_class M] (S : submonoid M) :

A submonoid is either the trivial submonoid or nontrivial.

theorem submonoid.bot_or_exists_ne_one {M : Type u_1} [mul_one_class M] (S : submonoid M) :
S = ∃ (x : M) (H : x S), x 1

A submonoid is either the trivial submonoid or contains a nonzero element.

theorem add_submonoid.bot_or_exists_ne_zero {M : Type u_1} [add_zero_class M] (S : add_submonoid M) :
S = ∃ (x : M) (H : x S), x 0
def mul_equiv.submonoid_congr {M : Type u_1} [mul_one_class M] {S T : submonoid M} (h : S = T) :

Makes the identity isomorphism from a proof that two submonoids of a multiplicative monoid are equal.

Equations
def add_equiv.add_submonoid_congr {M : Type u_1} [add_zero_class M] {S T : add_submonoid M} (h : S = T) :

Makes the identity additive isomorphism from a proof two submonoids of an additive monoid are equal.

Equations
def mul_equiv.of_left_inverse' {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) {g : N → M} (h : function.left_inverse g f) :

A monoid homomorphism f : M →* N with a left-inverse g : N → M defines a multiplicative equivalence between M and f.mrange.

This is a bidirectional version of monoid_hom.mrange_restrict.

Equations
@[simp]
theorem add_equiv.of_left_inverse'_apply {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) {g : N → M} (h : function.left_inverse g f) (ᾰ : M) :
@[simp]
theorem mul_equiv.of_left_inverse'_apply {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) {g : N → M} (h : function.left_inverse g f) (ᾰ : M) :
@[simp]
theorem mul_equiv.of_left_inverse'_symm_apply {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (f : M →* N) {g : N → M} (h : function.left_inverse g f) (ᾰ : (f.mrange)) :
def add_equiv.of_left_inverse' {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) {g : N → M} (h : function.left_inverse g f) :

An additive monoid homomorphism f : M →+ N with a left-inverse g : N → M defines an additive equivalence between M and f.mrange.

This is a bidirectional version of add_monoid_hom.mrange_restrict.

Equations
@[simp]
theorem add_equiv.of_left_inverse'_symm_apply {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (f : M →+ N) {g : N → M} (h : function.left_inverse g f) (ᾰ : (f.mrange)) :

An add_equiv φ between two additive monoids M and N induces an add_equiv between a submonoid S ≤ M and the submonoid φ(S) ≤ N. See add_monoid_hom.add_submonoid_map for a variant for add_monoid_homs.

Equations
@[simp]
theorem add_equiv.add_submonoid_equiv_map_apply_coe {M : Type u_1} {N : Type u_2} [add_zero_class M] [add_zero_class N] (e : M ≃+ N) (S : add_submonoid M) (x : S) :
@[simp]
theorem mul_equiv.submonoid_equiv_map_apply_coe {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (e : M ≃* N) (S : submonoid M) (x : S) :
def mul_equiv.submonoid_equiv_map {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (e : M ≃* N) (S : submonoid M) :

A mul_equiv φ between two monoids M and N induces a mul_equiv between a submonoid S ≤ M and the submonoid φ(S) ≤ N. See monoid_hom.submonoid_map for a variant for monoid_homs.

Equations
@[simp]
theorem mul_equiv.submonoid_equiv_map_symm_apply_coe {M : Type u_1} {N : Type u_2} [mul_one_class M] [mul_one_class N] (e : M ≃* N) (S : submonoid M) (x : (submonoid.map e.to_monoid_hom S)) :

Actions by submonoids #

These instances tranfer the action by an element m : M of a monoid M written as m • a onto the action by an element s : S of a submonoid S : submonoid M such that s • a = (s : M) • a.

These instances work particularly well in conjunction with monoid.to_mul_action, enabling s • m as an alias for ↑s * m.

@[protected, instance]
def submonoid.mul_action {M' : Type u_4} {α : Type u_5} [monoid M'] [mul_action M' α] (S : submonoid M') :

The action by a submonoid is the action by the underlying monoid.

Equations
@[protected, instance]
def add_submonoid.add_action {M' : Type u_4} {α : Type u_5} [add_monoid M'] [add_action M' α] (S : add_submonoid M') :

The additive action by an add_submonoid is the action by the underlying add_monoid.

Equations
theorem submonoid.smul_def {M' : Type u_4} {α : Type u_5} [monoid M'] [mul_action M' α] {S : submonoid M'} (g : S) (m : α) :
g m = g m
theorem add_submonoid.vadd_def {M' : Type u_4} {α : Type u_5} [add_monoid M'] [add_action M' α] {S : add_submonoid M'} (g : S) (m : α) :
g +ᵥ m = g +ᵥ m
@[protected, instance]
def submonoid.distrib_mul_action {M' : Type u_4} {α : Type u_5} [monoid M'] [add_monoid α] [distrib_mul_action M' α] (S : submonoid M') :

The action by a submonoid is the action by the underlying monoid.

Equations
@[protected, instance]
def submonoid.mul_distrib_mul_action {M' : Type u_4} {α : Type u_5} [monoid M'] [monoid α] [mul_distrib_mul_action M' α] (S : submonoid M') :

The action by a submonoid is the action by the underlying monoid.

Equations
@[protected, instance]
def add_submonoid.vadd_comm_class_left {M' : Type u_4} {α : Type u_5} {β : Type u_6} [add_monoid M'] [add_action M' β] [has_vadd α β] [vadd_comm_class M' α β] (S : add_submonoid M') :
@[protected, instance]
def submonoid.smul_comm_class_left {M' : Type u_4} {α : Type u_5} {β : Type u_6} [monoid M'] [mul_action M' β] [has_scalar α β] [smul_comm_class M' α β] (S : submonoid M') :
@[protected, instance]
def add_submonoid.vadd_comm_class_right {M' : Type u_4} {α : Type u_5} {β : Type u_6} [add_monoid M'] [has_vadd α β] [add_action M' β] [vadd_comm_class α M' β] (S : add_submonoid M') :
@[protected, instance]
def submonoid.smul_comm_class_right {M' : Type u_4} {α : Type u_5} {β : Type u_6} [monoid M'] [has_scalar α β] [mul_action M' β] [smul_comm_class α M' β] (S : submonoid M') :
@[protected, instance]
def submonoid.is_scalar_tower {M' : Type u_4} {α : Type u_5} {β : Type u_6} [monoid M'] [has_scalar α β] [mul_action M' α] [mul_action M' β] [is_scalar_tower M' α β] (S : submonoid M') :

Note that this provides is_scalar_tower S M' M' which is needed by smul_mul_assoc.

@[protected, instance]
def submonoid.has_faithful_scalar {M' : Type u_4} {α : Type u_5} [monoid M'] [mul_action M' α] [has_faithful_scalar M' α] (S : submonoid M') :