# Definitions of group actions #

This file defines a hierarchy of group action type-classes on top of the previously defined notation classes SMul and its additive version VAdd:

• MulAction M α and its additive version AddAction G P are typeclasses used for actions of multiplicative and additive monoids and groups; they extend notation classes SMul and VAdd that are defined in Algebra.Group.Defs;
• DistribMulAction M A is a typeclass for an action of a multiplicative monoid on an additive monoid such that a • (b + c) = a • b + a • c and a • 0 = 0.

The hierarchy is extended further by Module, defined elsewhere.

Also provided are typeclasses for faithful and transitive actions, and typeclasses regarding the interaction of different group actions,

## Notation #

• a • b is used as notation for SMul.smul a b.
• a +ᵥ b is used as notation for VAdd.vadd a b.

## Implementation details #

This file should avoid depending on other parts of GroupTheory, to avoid import cycles. More sophisticated lemmas belong in GroupTheory.GroupAction.

## Tags #

group action

### Faithful actions #

class FaithfulVAdd (G : Type u_10) (P : Type u_11) [VAdd G P] :

Typeclass for faithful actions.

• eq_of_vadd_eq_vadd : ∀ {g₁ g₂ : G}, (∀ (p : P), g₁ +ᵥ p = g₂ +ᵥ p)g₁ = g₂

Two elements g₁ and g₂ are equal whenever they act in the same way on all points.

Instances
class FaithfulSMul (M : Type u_10) (α : Type u_11) [SMul M α] :

Typeclass for faithful actions.

• eq_of_smul_eq_smul : ∀ {m₁ m₂ : M}, (∀ (a : α), m₁ a = m₂ a)m₁ = m₂

Two elements m₁ and m₂ are equal whenever they act in the same way on all points.

Instances
theorem vadd_left_injective' {M : Type u_1} {α : Type u_6} [VAdd M α] [] :
Function.Injective fun (x : M) (x_1 : α) => x +ᵥ x_1
theorem smul_left_injective' {M : Type u_1} {α : Type u_6} [SMul M α] [] :
Function.Injective fun (x : M) (x_1 : α) => x x_1

Equations
• = { vadd := fun (x x_1 : α) => x + x_1 }
instance Mul.toSMul (α : Type u_10) [Mul α] :
SMul α α

Equations
• = { smul := fun (x x_1 : α) => x * x_1 }
@[simp]
a +ᵥ a' = a + a'
@[simp]
theorem smul_eq_mul (α : Type u_10) [Mul α] {a : α} {a' : α} :
a a' = a * a'
class AddAction (G : Type u_10) (P : Type u_11) [] extends :
Type (max u_10 u_11)

Type class for additive monoid actions.

• zero_vadd : ∀ (p : P), 0 +ᵥ p = p

Zero is a neutral element for +ᵥ

• add_vadd : ∀ (g₁ g₂ : G) (p : P), g₁ + g₂ +ᵥ p = g₁ +ᵥ (g₂ +ᵥ p)

Associativity of + and +ᵥ

Instances
theorem AddAction.ext_iff {G : Type u_10} {P : Type u_11} :
theorem MulAction.ext {α : Type u_10} {β : Type u_11} :
∀ {inst : } (x y : ), SMul.smul = SMul.smulx = y
theorem AddAction.ext {G : Type u_10} {P : Type u_11} :
theorem MulAction.ext_iff {α : Type u_10} {β : Type u_11} :
∀ {inst : } (x y : ), x = y SMul.smul = SMul.smul
class MulAction (α : Type u_10) (β : Type u_11) [] extends :
Type (max u_10 u_11)

Typeclass for multiplicative actions by monoids. This generalizes group actions.

• smul : αββ
• one_smul : ∀ (b : β), 1 b = b

One is the neutral element for

• mul_smul : ∀ (x y : α) (b : β), (x * y) b = x y b

Associativity of and *

Instances

### (Pre)transitive action #

M acts pretransitively on α if for any x y there is g such that g • x = y (or g +ᵥ x = y for an additive action). A transitive action should furthermore have α nonempty.

In this section we define typeclasses MulAction.IsPretransitive and AddAction.IsPretransitive and provide MulAction.exists_smul_eq/AddAction.exists_vadd_eq, MulAction.surjective_smul/AddAction.surjective_vadd as public interface to access this property. We do not provide typeclasses *Action.IsTransitive; users should assume [MulAction.IsPretransitive M α] [Nonempty α] instead.

class AddAction.IsPretransitive (M : Type u_10) (α : Type u_11) [VAdd M α] :

M acts pretransitively on α if for any x y there is g such that g +ᵥ x = y. A transitive action should furthermore have α nonempty.

• exists_vadd_eq : ∀ (x y : α), ∃ (g : M), g +ᵥ x = y

There is g such that g +ᵥ x = y.

Instances
class MulAction.IsPretransitive (M : Type u_10) (α : Type u_11) [SMul M α] :

M acts pretransitively on α if for any x y there is g such that g • x = y. A transitive action should furthermore have α nonempty.

• exists_smul_eq : ∀ (x y : α), ∃ (g : M), g x = y

There is g such that g • x = y.

Instances
theorem AddAction.exists_vadd_eq (M : Type u_1) {α : Type u_6} [VAdd M α] (x : α) (y : α) :
∃ (m : M), m +ᵥ x = y
theorem MulAction.exists_smul_eq (M : Type u_1) {α : Type u_6} [SMul M α] (x : α) (y : α) :
∃ (m : M), m x = y
theorem AddAction.surjective_vadd (M : Type u_1) {α : Type u_6} [VAdd M α] (x : α) :
Function.Surjective fun (c : M) => c +ᵥ x
theorem MulAction.surjective_smul (M : Type u_1) {α : Type u_6} [SMul M α] (x : α) :
Function.Surjective fun (c : M) => c x
instance AddAction.Regular.isPretransitive {G : Type u_3} [] :

The regular action of a group on itself is transitive.

Equations
• (_ : ) = (_ : )
instance MulAction.Regular.isPretransitive {G : Type u_3} [] :

The regular action of a group on itself is transitive.

Equations
• (_ : ) = (_ : )

### Scalar tower and commuting actions #

class VAddCommClass (M : Type u_10) (N : Type u_11) (α : Type u_12) [VAdd M α] [VAdd N α] :

A typeclass mixin saying that two additive actions on the same space commute.

• vadd_comm : ∀ (m : M) (n : N) (a : α), m +ᵥ (n +ᵥ a) = n +ᵥ (m +ᵥ a)

+ᵥ is left commutative

Instances
class SMulCommClass (M : Type u_10) (N : Type u_11) (α : Type u_12) [SMul M α] [SMul N α] :

A typeclass mixin saying that two multiplicative actions on the same space commute.

• smul_comm : ∀ (m : M) (n : N) (a : α), m n a = n m a

is left commutative

Instances
theorem VAddCommClass.symm (M : Type u_10) (N : Type u_11) (α : Type u_12) [VAdd M α] [VAdd N α] [] :

Commutativity of additive actions is a symmetric relation. This lemma can't be an instance because this would cause a loop in the instance search graph.

theorem SMulCommClass.symm (M : Type u_10) (N : Type u_11) (α : Type u_12) [SMul M α] [SMul N α] [] :

Commutativity of actions is a symmetric relation. This lemma can't be an instance because this would cause a loop in the instance search graph.

theorem Function.Injective.smulCommClass {M : Type u_1} {N : Type u_2} {α : Type u_6} {β : Type u_7} [SMul M α] [SMul N α] [SMul M β] [SMul N β] [] {f : αβ} (hf : ) (h₁ : ∀ (c : M) (x : α), f (c x) = c f x) (h₂ : ∀ (c : N) (x : α), f (c x) = c f x) :
theorem Function.Surjective.smulCommClass {M : Type u_1} {N : Type u_2} {α : Type u_6} {β : Type u_7} [SMul M α] [SMul N α] [SMul M β] [SMul N β] [] {f : αβ} (hf : ) (h₁ : ∀ (c : M) (x : α), f (c x) = c f x) (h₂ : ∀ (c : N) (x : α), f (c x) = c f x) :
instance vaddCommClass_self (M : Type u_10) (α : Type u_11) [] [] :
Equations
• (_ : ) = (_ : )
instance smulCommClass_self (M : Type u_10) (α : Type u_11) [] [] :
Equations
• (_ : ) = (_ : )
class VAddAssocClass (M : Type u_10) (N : Type u_11) (α : Type u_12) [VAdd M N] [VAdd N α] [VAdd M α] :

An instance of VAddAssocClass M N α states that the additive action of M on α is determined by the additive actions of M on N and N on α.

• vadd_assoc : ∀ (x : M) (y : N) (z : α), x +ᵥ y +ᵥ z = x +ᵥ (y +ᵥ z)

Associativity of +ᵥ

Instances
class IsScalarTower (M : Type u_10) (N : Type u_11) (α : Type u_12) [SMul M N] [SMul N α] [SMul M α] :

An instance of IsScalarTower M N α states that the multiplicative action of M on α is determined by the multiplicative actions of M on N and N on α.

• smul_assoc : ∀ (x : M) (y : N) (z : α), (x y) z = x y z

Associativity of

Instances
@[simp]
theorem vadd_assoc {α : Type u_6} {M : Type u_10} {N : Type u_11} [VAdd M N] [VAdd N α] [VAdd M α] [] (x : M) (y : N) (z : α) :
x +ᵥ y +ᵥ z = x +ᵥ (y +ᵥ z)
@[simp]
theorem smul_assoc {α : Type u_6} {M : Type u_10} {N : Type u_11} [SMul M N] [SMul N α] [SMul M α] [] (x : M) (y : N) (z : α) :
(x y) z = x y z
instance AddSemigroup.isScalarTower {α : Type u_6} [] :
Equations
• (_ : ) = (_ : )
instance Semigroup.isScalarTower {α : Type u_6} [] :
Equations
• (_ : ) = (_ : )
class IsCentralVAdd (M : Type u_10) (α : Type u_11) [VAdd M α] [VAdd Mᵃᵒᵖ α] :

A typeclass indicating that the right (aka AddOpposite) and left actions by M on α are equal, that is that M acts centrally on α. This can be thought of as a version of commutativity for +ᵥ.

• op_vadd_eq_vadd : ∀ (m : M) (a : α), = m +ᵥ a

The right and left actions of M on α are equal.

Instances
class IsCentralScalar (M : Type u_10) (α : Type u_11) [SMul M α] [SMul Mᵐᵒᵖ α] :

A typeclass indicating that the right (aka MulOpposite) and left actions by M on α are equal, that is that M acts centrally on α. This can be thought of as a version of commutativity for .

• op_smul_eq_smul : ∀ (m : M) (a : α), = m a

The right and left actions of M on α are equal.

Instances
= m +ᵥ a
theorem IsCentralScalar.unop_smul_eq_smul {M : Type u_10} {α : Type u_11} [SMul M α] [SMul Mᵐᵒᵖ α] [] (m : Mᵐᵒᵖ) (a : α) :
= m a
instance VAddCommClass.op_left {M : Type u_1} {N : Type u_2} {α : Type u_6} [VAdd M α] [VAdd Mᵃᵒᵖ α] [] [VAdd N α] [] :
Equations
• (_ : ) = (_ : )
instance SMulCommClass.op_left {M : Type u_1} {N : Type u_2} {α : Type u_6} [SMul M α] [SMul Mᵐᵒᵖ α] [] [SMul N α] [] :
Equations
• (_ : ) = (_ : )
instance VAddCommClass.op_right {M : Type u_1} {N : Type u_2} {α : Type u_6} [VAdd M α] [VAdd N α] [VAdd Nᵃᵒᵖ α] [] [] :
Equations
• (_ : ) = (_ : )
instance SMulCommClass.op_right {M : Type u_1} {N : Type u_2} {α : Type u_6} [SMul M α] [SMul N α] [SMul Nᵐᵒᵖ α] [] [] :
Equations
• (_ : ) = (_ : )
Equations
• (_ : ) = (_ : )
instance IsScalarTower.op_left {M : Type u_1} {N : Type u_2} {α : Type u_6} [SMul M α] [SMul Mᵐᵒᵖ α] [] [SMul M N] [SMul Mᵐᵒᵖ N] [] [SMul N α] [] :
Equations
• (_ : ) = (_ : )
instance VAddAssocClass.op_right {M : Type u_1} {N : Type u_2} {α : Type u_6} [VAdd M α] [VAdd M N] [VAdd N α] [VAdd Nᵃᵒᵖ α] [] [] :
Equations
• (_ : ) = (_ : )
instance IsScalarTower.op_right {M : Type u_1} {N : Type u_2} {α : Type u_6} [SMul M α] [SMul M N] [SMul N α] [SMul Nᵐᵒᵖ α] [] [] :
Equations
• (_ : ) = (_ : )
def VAdd.comp.vadd {M : Type u_1} {N : Type u_2} {α : Type u_6} [VAdd M α] (g : NM) (n : N) (a : α) :
α

Equations
Instances For
def SMul.comp.smul {M : Type u_1} {N : Type u_2} {α : Type u_6} [SMul M α] (g : NM) (n : N) (a : α) :
α

Auxiliary definition for SMul.comp, MulAction.compHom, DistribMulAction.compHom, Module.compHom, etc.

Equations
Instances For
@[reducible]
def VAdd.comp {M : Type u_1} {N : Type u_2} (α : Type u_6) [VAdd M α] (g : NM) :

An additive action of M on α and a function N → M induces an additive action of N on α

Equations
• = { vadd := }
Instances For
@[reducible]
def SMul.comp {M : Type u_1} {N : Type u_2} (α : Type u_6) [SMul M α] (g : NM) :
SMul N α

An action of M on α and a function N → M induces an action of N on α.

See note [reducible non-instances]. Since this is reducible, we make sure to go via SMul.comp.smul to prevent typeclass inference unfolding too far.

Equations
• = { smul := }
Instances For
theorem VAdd.comp.isScalarTower {M : Type u_1} {N : Type u_2} {α : Type u_6} {β : Type u_7} [VAdd M α] [VAdd M β] [VAdd α β] [] (g : NM) :

Given a tower of additive actions M → α → β, if we use SMul.comp to pull back both of M's actions by a map g : N → M, then we obtain a new tower of scalar actions N → α → β.

This cannot be an instance because it can cause infinite loops whenever the SMul arguments are still metavariables.

theorem SMul.comp.isScalarTower {M : Type u_1} {N : Type u_2} {α : Type u_6} {β : Type u_7} [SMul M α] [SMul M β] [SMul α β] [] (g : NM) :

Given a tower of scalar actions M → α → β, if we use SMul.comp to pull back both of M's actions by a map g : N → M, then we obtain a new tower of scalar actions N → α → β.

This cannot be an instance because it can cause infinite loops whenever the SMul arguments are still metavariables.

theorem VAdd.comp.vaddCommClass {M : Type u_1} {N : Type u_2} {α : Type u_6} {β : Type u_7} [VAdd M α] [VAdd β α] [] (g : NM) :

This cannot be an instance because it can cause infinite loops whenever the VAdd arguments are still metavariables.

theorem SMul.comp.smulCommClass {M : Type u_1} {N : Type u_2} {α : Type u_6} {β : Type u_7} [SMul M α] [SMul β α] [] (g : NM) :

This cannot be an instance because it can cause infinite loops whenever the SMul arguments are still metavariables.

theorem VAdd.comp.vaddCommClass' {M : Type u_1} {N : Type u_2} {α : Type u_6} {β : Type u_7} [VAdd M α] [VAdd β α] [] (g : NM) :

This cannot be an instance because it can cause infinite loops whenever the VAdd arguments are still metavariables.

theorem SMul.comp.smulCommClass' {M : Type u_1} {N : Type u_2} {α : Type u_6} {β : Type u_7} [SMul M α] [SMul β α] [] (g : NM) :

This cannot be an instance because it can cause infinite loops whenever the SMul arguments are still metavariables.

theorem add_vadd_comm {α : Type u_6} {β : Type u_7} [Add β] [VAdd α β] [] (s : α) (x : β) (y : β) :
x + (s +ᵥ y) = s +ᵥ (x + y)
theorem mul_smul_comm {α : Type u_6} {β : Type u_7} [Mul β] [SMul α β] [] (s : α) (x : β) (y : β) :
x * s y = s (x * y)

Note that the SMulCommClass α β β typeclass argument is usually satisfied by Algebra α β.

theorem vadd_add_assoc {α : Type u_6} {β : Type u_7} [Add β] [VAdd α β] [] (r : α) (x : β) (y : β) :
r +ᵥ x + y = r +ᵥ (x + y)
theorem smul_mul_assoc {α : Type u_6} {β : Type u_7} [Mul β] [SMul α β] [] (r : α) (x : β) (y : β) :
r x * y = r (x * y)

Note that the IsScalarTower α β β typeclass argument is usually satisfied by Algebra α β.

theorem vadd_sub_assoc {α : Type u_6} {β : Type u_7} [] [VAdd α β] [] (r : α) (x : β) (y : β) :
r +ᵥ x - y = r +ᵥ (x - y)
theorem smul_div_assoc {α : Type u_6} {β : Type u_7} [] [SMul α β] [] (r : α) (x : β) (y : β) :
r x / y = r (x / y)

Note that the IsScalarTower α β β typeclass argument is usually satisfied by Algebra α β.

theorem vadd_vadd_vadd_comm {α : Type u_6} {β : Type u_7} {γ : Type u_8} {δ : Type u_9} [VAdd α β] [VAdd α γ] [VAdd β δ] [VAdd α δ] [VAdd γ δ] [] [] [] (a : α) (b : β) (c : γ) (d : δ) :
a +ᵥ b +ᵥ (c +ᵥ d) = a +ᵥ c +ᵥ (b +ᵥ d)
theorem smul_smul_smul_comm {α : Type u_6} {β : Type u_7} {γ : Type u_8} {δ : Type u_9} [SMul α β] [SMul α γ] [SMul β δ] [SMul α δ] [SMul γ δ] [] [] [] (a : α) (b : β) (c : γ) (d : δ) :
(a b) c d = (a c) b d
theorem AddCommute.vadd_right {M : Type u_1} {α : Type u_6} [VAdd M α] [Add α] [] [] {a : α} {b : α} (h : ) (r : M) :
theorem Commute.smul_right {M : Type u_1} {α : Type u_6} [SMul M α] [Mul α] [] [] {a : α} {b : α} (h : Commute a b) (r : M) :
Commute a (r b)
theorem AddCommute.vadd_left {M : Type u_1} {α : Type u_6} [VAdd M α] [Add α] [] [] {a : α} {b : α} (h : ) (r : M) :
theorem Commute.smul_left {M : Type u_1} {α : Type u_6} [SMul M α] [Mul α] [] [] {a : α} {b : α} (h : Commute a b) (r : M) :
Commute (r a) b
theorem vadd_vadd {M : Type u_1} {α : Type u_6} [] [] (a₁ : M) (a₂ : M) (b : α) :
a₁ +ᵥ (a₂ +ᵥ b) = a₁ + a₂ +ᵥ b
theorem smul_smul {M : Type u_1} {α : Type u_6} [] [] (a₁ : M) (a₂ : M) (b : α) :
a₁ a₂ b = (a₁ * a₂) b
@[simp]
theorem zero_vadd (M : Type u_1) {α : Type u_6} [] [] (b : α) :
0 +ᵥ b = b
@[simp]
theorem one_smul (M : Type u_1) {α : Type u_6} [] [] (b : α) :
1 b = b
theorem zero_vadd_eq_id (M : Type u_1) {α : Type u_6} [] [] :
(fun (x : α) => 0 +ᵥ x) = id

theorem one_smul_eq_id (M : Type u_1) {α : Type u_6} [] [] :
(fun (x : α) => 1 x) = id

SMul version of one_mul_eq_id

theorem comp_vadd_left (M : Type u_1) {α : Type u_6} [] [] (a₁ : M) (a₂ : M) :
((fun (x : α) => a₁ +ᵥ x) fun (x : α) => a₂ +ᵥ x) = fun (x : α) => a₁ + a₂ +ᵥ x

theorem comp_smul_left (M : Type u_1) {α : Type u_6} [] [] (a₁ : M) (a₂ : M) :
((fun (x : α) => a₁ x) fun (x : α) => a₂ x) = fun (x : α) => (a₁ * a₂) x

SMul version of comp_mul_left

@[reducible]
def Function.Injective.addAction {M : Type u_1} {α : Type u_6} {β : Type u_7} [] [] [VAdd M β] (f : βα) (hf : ) (smul : ∀ (c : M) (x : β), f (c +ᵥ x) = c +ᵥ f x) :

Pullback an additive action along an injective map respecting +ᵥ.

Equations
Instances For
theorem Function.Injective.addAction.proof_1 {M : Type u_2} {α : Type u_3} {β : Type u_1} [] [] [VAdd M β] (f : βα) (hf : ) (smul : ∀ (c : M) (x : β), f (c +ᵥ x) = c +ᵥ f x) (x : β) :
0 +ᵥ x = x
theorem Function.Injective.addAction.proof_2 {M : Type u_2} {α : Type u_3} {β : Type u_1} [] [] [VAdd M β] (f : βα) (hf : ) (smul : ∀ (c : M) (x : β), f (c +ᵥ x) = c +ᵥ f x) (c₁ : M) (c₂ : M) (x : β) :
c₁ + c₂ +ᵥ x = c₁ +ᵥ (c₂ +ᵥ x)
@[reducible]
def Function.Injective.mulAction {M : Type u_1} {α : Type u_6} {β : Type u_7} [] [] [SMul M β] (f : βα) (hf : ) (smul : ∀ (c : M) (x : β), f (c x) = c f x) :

Pullback a multiplicative action along an injective map respecting . See note [reducible non-instances].

Equations
Instances For
theorem Function.Surjective.addAction.proof_1 {M : Type u_2} {α : Type u_3} {β : Type u_1} [] [] [VAdd M β] (f : αβ) (hf : ) (smul : ∀ (c : M) (x : α), f (c +ᵥ x) = c +ᵥ f x) (y : β) :
0 +ᵥ y = y
@[reducible]
def Function.Surjective.addAction {M : Type u_1} {α : Type u_6} {β : Type u_7} [] [] [VAdd M β] (f : αβ) (hf : ) (smul : ∀ (c : M) (x : α), f (c +ᵥ x) = c +ᵥ f x) :

Pushforward an additive action along a surjective map respecting +ᵥ.

Equations
Instances For
theorem Function.Surjective.addAction.proof_2 {M : Type u_2} {α : Type u_3} {β : Type u_1} [] [] [VAdd M β] (f : αβ) (hf : ) (smul : ∀ (c : M) (x : α), f (c +ᵥ x) = c +ᵥ f x) (c₁ : M) (c₂ : M) (y : β) :
c₁ + c₂ +ᵥ y = c₁ +ᵥ (c₂ +ᵥ y)
@[reducible]
def Function.Surjective.mulAction {M : Type u_1} {α : Type u_6} {β : Type u_7} [] [] [SMul M β] (f : αβ) (hf : ) (smul : ∀ (c : M) (x : α), f (c x) = c f x) :

Pushforward a multiplicative action along a surjective map respecting . See note [reducible non-instances].

Equations
Instances For
theorem Function.Surjective.addActionLeft.proof_2 {R : Type u_3} {S : Type u_2} {M : Type u_1} [] [] [] [VAdd S M] (f : R →+ S) (hf : ) (hsmul : ∀ (c : R) (x : M), f c +ᵥ x = c +ᵥ x) (y₁ : S) (y₂ : S) (b : M) :
y₁ + y₂ +ᵥ b = y₁ +ᵥ (y₂ +ᵥ b)
@[reducible]
def Function.Surjective.addActionLeft {R : Type u_10} {S : Type u_11} {M : Type u_12} [] [] [] [VAdd S M] (f : R →+ S) (hf : ) (hsmul : ∀ (c : R) (x : M), f c +ᵥ x = c +ᵥ x) :

Push forward the action of R on M along a compatible surjective map f : R →+ S.

Equations
Instances For
theorem Function.Surjective.addActionLeft.proof_1 {R : Type u_3} {S : Type u_2} {M : Type u_1} [] [] [] [VAdd S M] (f : R →+ S) (hsmul : ∀ (c : R) (x : M), f c +ᵥ x = c +ᵥ x) (b : M) :
0 +ᵥ b = b
@[reducible]
def Function.Surjective.mulActionLeft {R : Type u_10} {S : Type u_11} {M : Type u_12} [] [] [] [SMul S M] (f : R →* S) (hf : ) (hsmul : ∀ (c : R) (x : M), f c x = c x) :

Push forward the action of R on M along a compatible surjective map f : R →* S.

Equations
Instances For

The regular action of a monoid on itself by left addition.

Equations
0 + a = a
theorem AddMonoid.toAddAction.proof_2 (M : Type u_1) [] (a : M) (b : M) (c : M) :
a + b + c = a + (b + c)
instance Monoid.toMulAction (M : Type u_1) [] :

The regular action of a monoid on itself by left multiplication.

This is promoted to a module by Semiring.toModule.

Equations
instance VAddAssocClass.left (M : Type u_1) {α : Type u_6} [] [] :
Equations
• (_ : ) = (_ : )
instance IsScalarTower.left (M : Type u_1) {α : Type u_6} [] [] :
Equations
• (_ : ) = (_ : )
theorem vadd_add_vadd {M : Type u_1} {α : Type u_6} [] [] [Add α] (r : M) (s : M) (x : α) (y : α) [] [] :
r +ᵥ x + (s +ᵥ y) = r + s +ᵥ (x + y)
theorem smul_mul_smul {M : Type u_1} {α : Type u_6} [] [] [Mul α] (r : M) (s : M) (x : α) (y : α) [] [] :
r x * s y = (r * s) (x * y)

Note that the IsScalarTower M α α and SMulCommClass M α α typeclass arguments are usually satisfied by Algebra M α.

theorem smul_pow {M : Type u_1} {N : Type u_2} [] [] [] [] [] (r : M) (x : N) (n : ) :
(r x) ^ n = r ^ n x ^ n
theorem AddAction.toFun.proof_1 (M : Type u_1) (α : Type u_2) [] [] (y₁ : α) (y₂ : α) (H : (fun (y : α) (x : M) => x +ᵥ y) y₁ = (fun (y : α) (x : M) => x +ᵥ y) y₂) :
y₁ = y₂
def AddAction.toFun (M : Type u_1) (α : Type u_6) [] [] :
α Mα

Embedding of α into functions M → α induced by an additive action of M on α.

Equations
• = { toFun := fun (y : α) (x : M) => x +ᵥ y, inj' := (_ : ∀ (y₁ y₂ : α), (fun (y : α) (x : M) => x +ᵥ y) y₁ = (fun (y : α) (x : M) => x +ᵥ y) y₂y₁ = y₂) }
Instances For
def MulAction.toFun (M : Type u_1) (α : Type u_6) [] [] :
α Mα

Embedding of α into functions M → α induced by a multiplicative action of M on α.

Equations
• = { toFun := fun (y : α) (x : M) => x y, inj' := (_ : ∀ (y₁ y₂ : α), (fun (y : α) (x : M) => x y) y₁ = (fun (y : α) (x : M) => x y) y₂y₁ = y₂) }
Instances For
@[simp]
theorem AddAction.toFun_apply {M : Type u_1} {α : Type u_6} [] [] (x : M) (y : α) :
() y x = x +ᵥ y
@[simp]
theorem MulAction.toFun_apply {M : Type u_1} {α : Type u_6} [] [] (x : M) (y : α) :
() y x = x y
@[reducible]
def AddAction.compHom {M : Type u_1} {N : Type u_2} (α : Type u_6) [] [] [] (g : N →+ M) :

An additive action of M on α and an additive monoid homomorphism N → M induce an additive action of N on α.

See note [reducible non-instances].

Equations
Instances For
theorem AddAction.compHom.proof_1 {M : Type u_3} {N : Type u_2} (α : Type u_1) [] [] [] (g : N →+ M) :
∀ (x : α), 0 +ᵥ x = x
theorem AddAction.compHom.proof_2 {M : Type u_3} {N : Type u_2} (α : Type u_1) [] [] [] (g : N →+ M) :
∀ (x x_1 : N) (x_2 : α), x + x_1 +ᵥ x_2 = x +ᵥ (x_1 +ᵥ x_2)
@[reducible]
def MulAction.compHom {M : Type u_1} {N : Type u_2} (α : Type u_6) [] [] [] (g : N →* M) :

A multiplicative action of M on α and a monoid homomorphism N → M induce a multiplicative action of N on α.

See note [reducible non-instances].

Equations
Instances For
theorem AddAction.compHom_vadd_def {E : Type u_10} {F : Type u_11} {G : Type u_12} [] [] [] (f : E →+ F) (a : E) (x : G) :
a +ᵥ x = f a +ᵥ x
theorem MulAction.compHom_smul_def {E : Type u_10} {F : Type u_11} {G : Type u_12} [] [] [] (f : E →* F) (a : E) (x : G) :
a x = f a x
theorem AddAction.isPretransitive_compHom {E : Type u_10} {F : Type u_11} {G : Type u_12} [] [] [] {f : E →+ F} (hf : ) :
theorem MulAction.isPretransitive_compHom {E : Type u_10} {F : Type u_11} {G : Type u_12} [] [] [] {f : E →* F} (hf : ) :

If an action is transitive, then composing this action with a surjective homomorphism gives again a transitive action.

theorem AddAction.IsPretransitive.of_vadd_eq {M : Type u_10} {N : Type u_11} {α : Type u_12} [VAdd M α] [VAdd N α] (f : MN) (hf : ∀ {c : M} {x : α}, f c +ᵥ x = c +ᵥ x) :
theorem MulAction.IsPretransitive.of_smul_eq {M : Type u_10} {N : Type u_11} {α : Type u_12} [SMul M α] [SMul N α] (f : MN) (hf : ∀ {c : M} {x : α}, f c x = c x) :
theorem AddAction.IsPretransitive.of_compHom {M : Type u_10} {N : Type u_11} {α : Type u_12} [] [] [] (f : M →+ N) [h : ] :
theorem MulAction.IsPretransitive.of_compHom {M : Type u_10} {N : Type u_11} {α : Type u_12} [] [] [] (f : M →* N) [h : ] :
theorem vadd_zero_vadd {α : Type u_6} {M : Type u_10} (N : Type u_11) [] [VAdd M N] [] [VAdd M α] [] (x : M) (y : α) :
x +ᵥ 0 +ᵥ y = x +ᵥ y
theorem smul_one_smul {α : Type u_6} {M : Type u_10} (N : Type u_11) [] [SMul M N] [] [SMul M α] [] (x : M) (y : α) :
(x 1) y = x y
theorem AddAction.IsPretransitive.of_isScalarTower (M : Type u_10) {N : Type u_11} {α : Type u_12} [] [VAdd M N] [] [VAdd M α] [] :
theorem MulAction.IsPretransitive.of_isScalarTower (M : Type u_10) {N : Type u_11} {α : Type u_12} [] [SMul M N] [] [SMul M α] [] :
@[simp]
theorem vadd_zero_add {M : Type u_10} {N : Type u_11} [] [VAdd M N] [] (x : M) (y : N) :
x +ᵥ 0 + y = x +ᵥ y
@[simp]
theorem smul_one_mul {M : Type u_10} {N : Type u_11} [] [SMul M N] [] (x : M) (y : N) :
x 1 * y = x y
@[simp]
theorem add_vadd_zero {M : Type u_10} {N : Type u_11} [] [VAdd M N] [] (x : M) (y : N) :
y + (x +ᵥ 0) = x +ᵥ y
@[simp]
theorem mul_smul_one {M : Type u_10} {N : Type u_11} [] [SMul M N] [] (x : M) (y : N) :
y * x 1 = x y
theorem VAddAssocClass.of_vadd_zero_add {M : Type u_10} {N : Type u_11} [] [VAdd M N] (h : ∀ (x : M) (y : N), x +ᵥ 0 + y = x +ᵥ y) :
theorem IsScalarTower.of_smul_one_mul {M : Type u_10} {N : Type u_11} [] [SMul M N] (h : ∀ (x : M) (y : N), x 1 * y = x y) :
theorem VAddCommClass.of_add_vadd_zero {M : Type u_10} {N : Type u_11} [] [VAdd M N] (H : ∀ (x : M) (y : N), y + (x +ᵥ 0) = x +ᵥ y) :
theorem SMulCommClass.of_mul_smul_one {M : Type u_10} {N : Type u_11} [] [SMul M N] (H : ∀ (x : M) (y : N), y * x 1 = x y) :
def AddMonoidHom.vaddZeroHom {M : Type u_10} {N : Type u_11} [] [] [] [] :
M →+ N

If the additive action of M on N is compatible with addition on N, then fun x => x +ᵥ 0 is an additive monoid homomorphism from M to N.

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem AddMonoidHom.vaddZeroHom.proof_1 {M : Type u_2} {N : Type u_1} [] [] [] :
0 +ᵥ 0 = 0
theorem AddMonoidHom.vaddZeroHom.proof_2 {M : Type u_2} {N : Type u_1} [] [] [] [] (x : M) (y : M) :
{ toFun := fun (x : M) => x +ᵥ 0, map_zero' := (_ : 0 +ᵥ 0 = 0) }.toFun (x + y) = { toFun := fun (x : M) => x +ᵥ 0, map_zero' := (_ : 0 +ᵥ 0 = 0) }.toFun x + { toFun := fun (x : M) => x +ᵥ 0, map_zero' := (_ : 0 +ᵥ 0 = 0) }.toFun y
@[simp]
theorem MonoidHom.smulOneHom_apply {M : Type u_10} {N : Type u_11} [] [] [] [] (x : M) :
MonoidHom.smulOneHom x = x 1
@[simp]
theorem AddMonoidHom.vaddZeroHom_apply {M : Type u_10} {N : Type u_11} [] [] [] [] (x : M) :
def MonoidHom.smulOneHom {M : Type u_10} {N : Type u_11} [] [] [] [] :
M →* N

If the multiplicative action of M on N is compatible with multiplication on N, then fun x => x • 1 is a monoid homomorphism from M to N.

Equations
• One or more equations did not get rendered due to their size.
Instances For
abbrev addMonoidHomEquivAddActionIsScalarTower.match_1 (M : Type u_1) (N : Type u_2) [] [] (motive : { _inst : // }Sort u_3) :
(x : { _inst : // }) → ((val : ) → (property : ) → motive { val := val, property := property })motive x
Equations
Instances For
theorem addMonoidHomEquivAddActionIsScalarTower.proof_3 (M : Type u_1) (N : Type u_2) [] [] :
∀ (x : { _inst : // }), (fun (f : M →+ N) => { val := , property := (_ : ) }) ((fun (x : { _inst : // }) => addMonoidHomEquivAddActionIsScalarTower.match_1 M N (fun (x : { _inst : // }) => M →+ N) x fun (val : ) (property : ) => AddMonoidHom.vaddZeroHom) x) = x
def addMonoidHomEquivAddActionIsScalarTower (M : Type u_10) (N : Type u_11) [] [] :
(M →+ N) { _inst : // }

A monoid homomorphism between two additive monoids M and N can be equivalently specified by an additive action of M on N that is compatible with the addition on N.

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem addMonoidHomEquivAddActionIsScalarTower.proof_1 (M : Type u_2) (N : Type u_1) [] [] (f : M →+ N) :
theorem addMonoidHomEquivAddActionIsScalarTower.proof_2 (M : Type u_2) (N : Type u_1) [] [] (f : M →+ N) :
(fun (x : { _inst : // }) => addMonoidHomEquivAddActionIsScalarTower.match_1 M N (fun (x : { _inst : // }) => M →+ N) x fun (val : ) (property : ) => AddMonoidHom.vaddZeroHom) ((fun (f : M →+ N) => { val := , property := (_ : ) }) f) = f
abbrev addMonoidHomEquivAddActionIsScalarTower.match_2 (M : Type u_1) (N : Type u_2) [] [] (motive : { _inst : // }Prop) :
∀ (x : { _inst : // }), (∀ (val : ) (property : ), motive { val := val, property := property })motive x
Equations
• (_ : motive x) = (_ : motive x)
Instances For
def monoidHomEquivMulActionIsScalarTower (M : Type u_10) (N : Type u_11) [] [] :
(M →* N) { _inst : // }

A monoid homomorphism between two monoids M and N can be equivalently specified by a multiplicative action of M on N that is compatible with the multiplication on N.

Equations
• One or more equations did not get rendered due to their size.
Instances For
class SMulZeroClass (M : Type u_10) (A : Type u_11) [Zero A] extends :
Type (max u_10 u_11)

Typeclass for scalar multiplication that preserves 0 on the right.

• smul : MAA
• smul_zero : ∀ (a : M), a 0 = 0

Multiplying 0 by a scalar gives 0

Instances
@[simp]
theorem smul_zero {M : Type u_1} {A : Type u_4} [Zero A] [] (a : M) :
a 0 = 0
theorem smul_ite_zero {M : Type u_1} {A : Type u_4} [Zero A] [] (p : Prop) [] (a : M) (b : A) :
(a if p then b else 0) = if p then a b else 0
theorem smul_eq_zero_of_right {M : Type u_1} {A : Type u_4} [Zero A] [] (a : M) {b : A} (h : b = 0) :
a b = 0
theorem right_ne_zero_of_smul {M : Type u_1} {A : Type u_4} [Zero A] [] {a : M} {b : A} :
a b 0b 0
@[reducible]
def Function.Injective.smulZeroClass {M : Type u_1} {A : Type u_4} {B : Type u_5} [Zero A] [] [Zero B] [SMul M B] (f : ZeroHom B A) (hf : ) (smul : ∀ (c : M) (x : B), f (c x) = c f x) :

Pullback a zero-preserving scalar multiplication along an injective zero-preserving map. See note [reducible non-instances].

Equations
Instances For
@[reducible]
def ZeroHom.smulZeroClass {M : Type u_1} {A : Type u_4} {B : Type u_5} [Zero A] [] [Zero B] [SMul M B] (f : ZeroHom A B) (smul : ∀ (c : M) (x : A), f (c x) = c f x) :

Pushforward a zero-preserving scalar multiplication along a zero-preserving map. See note [reducible non-instances].

Equations
Instances For
@[reducible]
def Function.Surjective.smulZeroClassLeft {R : Type u_10} {S : Type u_11} {M : Type u_12} [Zero M] [] [SMul S M] (f : RS) (hf : ) (hsmul : ∀ (c : R) (x : M), f c x = c x) :

Push forward the multiplication of R on M along a compatible surjective map f : R → S.

Equations
Instances For
@[reducible]
def SMulZeroClass.compFun {M : Type u_1} {N : Type u_2} (A : Type u_4) [Zero A] [] (f : NM) :

Compose a SMulZeroClass with a function, with scalar multiplication f r' • m. See note [reducible non-instances].

Equations
Instances For
@[simp]
theorem SMulZeroClass.toZeroHom_apply {M : Type u_1} (A : Type u_4) [Zero A] [] (x : M) :
∀ (x_1 : A), () x_1 = x x_1
def SMulZeroClass.toZeroHom {M : Type u_1} (A : Type u_4) [Zero A] [] (x : M) :

Each element of the scalars defines a zero-preserving map.

Equations
• = { toFun := fun (x_1 : A) => x x_1, map_zero' := (_ : x 0 = 0) }
Instances For
theorem DistribSMul.ext_iff {M : Type u_10} {A : Type u_11} :
∀ {inst : } (x y : ), x = y SMul.smul = SMul.smul
theorem DistribSMul.ext {M : Type u_10} {A : Type u_11} :
∀ {inst : } (x y : ), SMul.smul = SMul.smulx = y
class DistribSMul (M : Type u_10) (A : Type u_11) [] extends :
Type (max u_10 u_11)

Typeclass for scalar multiplication that preserves 0 and + on the right.

This is exactly DistribMulAction without the MulAction part.

• smul : MAA
• smul_zero : ∀ (a : M), a 0 = 0
• smul_add : ∀ (a : M) (x y : A), a (x + y) = a x + a y

Instances
theorem smul_add {M : Type u_1} {A : Type u_4} [] [] (a : M) (b₁ : A) (b₂ : A) :
a (b₁ + b₂) = a b₁ + a b₂
instance AddMonoidHom.smulZeroClass {M : Type u_1} {A : Type u_4} {B : Type u_5} [] [] [] :
Equations
@[reducible]
def Function.Injective.distribSMul {M : Type u_1} {A : Type u_4} {B : Type u_5} [] [] [] [SMul M B] (f : B →+ A) (hf : ) (smul : ∀ (c : M) (x : B), f (c x) = c f x) :

Pullback a distributive scalar multiplication along an injective additive monoid homomorphism. See note [reducible non-instances].

Equations
Instances For
@[reducible]
def Function.Surjective.distribSMul {M : Type u_1} {A : Type u_4} {B : Type u_5} [] [] [] [SMul M B] (f : A →+ B) (hf : ) (smul : ∀ (c : M) (x : A), f (c x) = c f x) :

Pushforward a distributive scalar multiplication along a surjective additive monoid homomorphism. See note [reducible non-instances].

Equations
Instances For
@[reducible]
def Function.Surjective.distribSMulLeft {R : Type u_10} {S : Type u_11} {M : Type u_12} [] [] [SMul S M] (f : RS) (hf : ) (hsmul : ∀ (c : R) (x : M), f c x = c x) :

Push forward the multiplication of R on M along a compatible surjective map f : R → S.

Equations
Instances For
@[reducible]
def DistribSMul.compFun {M : Type u_1} {N : Type u_2} (A : Type u_4) [] [] (f : NM) :

Compose a DistribSMul with a function, with scalar multiplication f r' • m. See note [reducible non-instances].

Equations
Instances For
@[simp]
theorem DistribSMul.toAddMonoidHom_apply {M : Type u_1} (A : Type u_4) [] [] (x : M) :
∀ (x_1 : A), x_1 = (fun (x : M) (x_2 : A) => x x_2) x x_1
def DistribSMul.toAddMonoidHom {M : Type u_1} (A : Type u_4) [] [] (x : M) :
A →+ A

Each element of the scalars defines an additive monoid homomorphism.

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem DistribMulAction.ext {M : Type u_10} {A : Type u_11} :
∀ {inst : } {inst_1 : } (x y : ), SMul.smul = SMul.smulx = y
theorem DistribMulAction.ext_iff {M : Type u_10} {A : Type u_11} :
∀ {inst : } {inst_1 : } (x y : ), x = y SMul.smul = SMul.smul
class DistribMulAction (M : Type u_10) (A : Type u_11) [] [] extends :
Type (max u_10 u_11)

Typeclass for multiplicative actions on additive structures. This generalizes group modules.

• smul : MAA
• one_smul : ∀ (b : A), 1 b = b
• mul_smul : ∀ (x y : M) (b : A), (x * y) b = x y b
• smul_zero : ∀ (a : M), a 0 = 0

Multiplying 0 by a scalar gives 0

• smul_add : ∀ (a : M) (x y : A), a (x + y) = a x + a y

Instances
instance DistribMulAction.toDistribSMul {M : Type u_1} {A : Type u_4} [] [] [] :
Equations

Since Lean 3 does not have definitional eta for structures, we have to make sure that the definition of DistribMulAction.toDistribSMul was done correctly, and the two paths from DistribMulAction to SMul are indeed definitionally equal.

@[reducible]
def Function.Injective.distribMulAction {M : Type u_1} {A : Type u_4} {B : Type u_5} [] [] [] [] [SMul M B] (f : B →+ A) (hf : ) (smul : ∀ (c : M) (x : B), f (c x) = c f x) :

Pullback a distributive multiplicative action along an injective additive monoid homomorphism. See note [reducible non-instances].

Equations
• One or more equations did not get rendered due to their size.
Instances For
@[reducible]
def Function.Surjective.distribMulAction {M : Type u_1} {A : Type u_4} {B : Type u_5} [] [] [] [] [SMul M B] (f : A →+ B) (hf : ) (smul : ∀ (c : M) (x : A), f (c x) = c f x) :

Pushforward a distributive multiplicative action along a surjective additive monoid homomorphism. See note [reducible non-instances].

Equations
• One or more equations did not get rendered due to their size.
Instances For
@[reducible]
def Function.Surjective.distribMulActionLeft {R : Type u_10} {S : Type u_11} {M : Type u_12} [] [] [] [] [SMul S M] (f : R →* S) (hf : ) (hsmul : ∀ (c : R) (x : M), f c x = c x) :

Push forward the action of R on M along a compatible surjective map f : R →* S.

Equations
• One or more equations did not get rendered due to their size.
Instances For
@[reducible]
def DistribMulAction.compHom {M : Type u_1} {N : Type u_2} (A : Type u_4) [] [] [] [] (f : N →* M) :

Compose a DistribMulAction with a MonoidHom, with action f r' • m. See note [reducible non-instances].

Equations
• One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem DistribMulAction.toAddMonoidHom_apply {M : Type u_1} (A : Type u_4) [] [] [] (x : M) :
∀ (x_1 : A), x_1 = x x_1
def DistribMulAction.toAddMonoidHom {M : Type u_1} (A : Type u_4) [] [] [] (x : M) :
A →+ A

Each element of the monoid defines an additive monoid homomorphism.

Equations
Instances For
@[simp]
theorem DistribMulAction.toAddMonoidEnd_apply (M : Type u_1) (A : Type u_4) [] [] [] (x : M) :
def DistribMulAction.toAddMonoidEnd (M : Type u_1) (A : Type u_4) [] [] [] :

Each element of the monoid defines an additive monoid homomorphism.

Equations
• One or more equations did not get rendered due to their size.
Instances For
instance AddMonoid.nat_smulCommClass (M : Type u_1) (A : Type u_4) [] [] [] :
Equations
• (_ : ) = (_ : )
instance AddMonoid.nat_smulCommClass' (M : Type u_1) (A : Type u_4) [] [] [] :
Equations
• (_ : ) = (_ : )
instance AddGroup.int_smulCommClass {M : Type u_1} {A : Type u_4} [] [] [] :
Equations
• (_ : ) = (_ : )
instance AddGroup.int_smulCommClass' {M : Type u_1} {A : Type u_4} [] [] [] :
Equations
• (_ : ) = (_ : )
@[simp]
theorem smul_neg {M : Type u_1} {A : Type u_4} [] [] [] (r : M) (x : A) :
r -x = -(r x)
theorem smul_sub {M : Type u_1} {A : Type u_4} [] [] [] (r : M) (x : A) (y : A) :
r (x - y) = r x - r y
theorem MulDistribMulAction.ext {M : Type u_10} {A : Type u_11} :
∀ {inst : } {inst_1 : } (x y : ), SMul.smul = SMul.smulx = y
theorem MulDistribMulAction.ext_iff {M : Type u_10} {A : Type u_11} :
∀ {inst : } {inst_1 : } (x y : ), x = y SMul.smul = SMul.smul
class MulDistribMulAction (M : Type u_10) (A : Type u_11) [] [] extends :
Type (max u_10 u_11)

Typeclass for multiplicative actions on multiplicative structures. This generalizes conjugation actions.

• smul : MAA
• one_smul : ∀ (b : A), 1 b = b
• mul_smul : ∀ (x y : M) (b : A), (x * y) b = x y b
• smul_mul : ∀ (r : M) (x y : A), r (x * y) = r x * r y

Distributivity of across *

• smul_one : ∀ (r : M), r 1 = 1

Multiplying 1 by a scalar gives 1

Instances
theorem smul_mul' {M : Type u_1} {A : Type u_4} [] [] [] (a : M) (b₁ : A) (b₂ : A) :
a (b₁ * b₂) = a b₁ * a b₂
@[reducible]
def Function.Injective.mulDistribMulAction {M : Type u_1} {A : Type u_4} {B : Type u_5} [] [] [] [] [SMul M B] (f : B →* A) (hf : ) (smul : ∀ (c : M) (x : B), f (c x) = c f x) :

Pullback a multiplicative distributive multiplicative action along an injective monoid homomorphism. See note [reducible non-instances].

Equations
• One or more equations did not get rendered due to their size.
Instances For
@[reducible]
def Function.Surjective.mulDistribMulAction {M : Type u_1} {A : Type u_4} {B : Type u_5} [] [] [] [] [SMul M B] (f : A →* B) (hf : ) (smul : ∀ (c : M) (x : A), f (c x) = c f x) :

Pushforward a multiplicative distributive multiplicative action along a surjective monoid homomorphism. See note [reducible non-instances].

Equations
• One or more equations did not get rendered due to their size.
Instances For
@[reducible]
def MulDistribMulAction.compHom {M : Type u_1} {N : Type u_2} (A : Type u_4) [] [] [] [] (f : N →* M) :

Compose a MulDistribMulAction with a MonoidHom, with action f r' • m. See note [reducible non-instances].

Equations
Instances For
def MulDistribMulAction.toMonoidHom {M : Type u_1} (A : Type u_4) [] [] [] (r : M) :
A →* A

Scalar multiplication by r as a MonoidHom.

Equations
• = { toOneHom := { toFun := fun (x : A) => r x, map_one' := (_ : r 1 = 1) }, map_mul' := (_ : ∀ (b₁ b₂ : A), r (b₁ * b₂) = r b₁ * r b₂) }
Instances For
@[simp]
theorem MulDistribMulAction.toMonoidHom_apply {M : Type u_1} {A : Type u_4} [] [] [] (r : M) (x : A) :
= r x
@[simp]
theorem smul_pow' {M : Type u_1} {A : Type u_4} [] [] [] (r : M) (x : A) (n : ) :
r x ^ n = (r x) ^ n
@[simp]
theorem MulDistribMulAction.toMonoidEnd_apply (M : Type u_1) (A : Type u_4) [] [] [] (r : M) :
def MulDistribMulAction.toMonoidEnd (M : Type u_1) (A : Type u_4) [] [] [] :
M →*

Each element of the monoid defines a monoid homomorphism.

Equations
• One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem smul_inv' {M : Type u_1} {A : Type u_4} [] [] [] (r : M) (x : A) :
r x⁻¹ = (r x)⁻¹
theorem smul_div' {M : Type u_1} {A : Type u_4} [] [] [] (r : M) (x : A) (y : A) :
r (x / y) = r x / r y
def Function.End (α : Type u_6) :
Type u_6

The monoid of endomorphisms.

Note that this is generalized by CategoryTheory.End to categories other than Type u.

Equations
• = (αα)
Instances For
instance instMonoidEnd (α : Type u_6) :
Equations
• = Monoid.mk (_ : ∀ (f : ), 1 * f = 1 * f) (_ : ∀ (f : ), f * 1 = f * 1) npowRec
instance instInhabitedEnd (α : Type u_6) :
Equations
• = { default := 1 }
instance Function.End.applyMulAction {α : Type u_6} :

The tautological action by Function.End α on α.

This is generalized to bundled endomorphisms by:

Equations
• Function.End.applyMulAction = MulAction.mk (_ : ∀ (x : α), 1 x = 1 x) (_ : ∀ (x x_1 : ) (x_2 : α), (x * x_1) x_2 = (x * x_1) x_2)
@[simp]
theorem Function.End.smul_def {α : Type u_6} (f : ) (a : α) :
f a = f a
theorem Function.End.mul_def {α : Type u_6} (f : ) (g : ) :
f * g = f g
theorem Function.End.one_def {α : Type u_6} :
1 = id

Function.End.applyMulAction is faithful.

Equations
• (_ : ) = (_ : )
instance AddMonoid.End.applyDistribMulAction {α : Type u_6} [] :

The tautological action by AddMonoid.End α on α.

This generalizes Function.End.applyMulAction.

Equations
@[simp]
theorem AddMonoid.End.smul_def {α : Type u_6} [] (f : ) (a : α) :
f a = f a
instance AddMonoid.End.applyFaithfulSMul {α : Type u_6} [] :

Equations
• (_ : ) = (_ : )
def MulAction.toEndHom {M : Type u_1} {α : Type u_6} [] [] :

The monoid hom representing a monoid action.

When M is a group, see MulAction.toPermHom.

Equations
• One or more equations did not get rendered due to their size.
Instances For
@[reducible]
def MulAction.ofEndHom {M : Type u_1} {α : Type u_6} [] (f : ) :

The monoid action induced by a monoid hom to Function.End α

See note [reducible non-instances].

Equations
Instances For

instance Additive.vadd {α : Type u_6} {β : Type u_7} [SMul α β] :
Equations
instance Multiplicative.smul {α : Type u_6} {β : Type u_7} [VAdd α β] :
SMul () β
Equations
• Multiplicative.smul = { smul := fun (a : ) (x : β) => Multiplicative.toAdd a +ᵥ x }
@[simp]
theorem toMul_smul {α : Type u_6} {β : Type u_7} [SMul α β] (a : ) (b : β) :
Additive.toMul a b = a +ᵥ b
@[simp]
theorem ofMul_vadd {α : Type u_6} {β : Type u_7} [SMul α β] (a : α) (b : β) :
Additive.ofMul a +ᵥ b = a b
@[simp]
theorem toAdd_vadd {α : Type u_6} {β : Type u_7} [VAdd α β] (a : ) (b : β) :
Multiplicative.toAdd a +ᵥ b = a b
@[simp]
theorem ofAdd_smul {α : Type u_6} {β : Type u_7} [VAdd α β] (a : α) (b : β) :
Multiplicative.ofAdd a b = a +ᵥ b
instance Additive.addAction {α : Type u_6} {β : Type u_7} [] [] :
Equations
instance Multiplicative.mulAction {α : Type u_6} {β : Type u_7} [] [] :
Equations
instance Additive.addAction_isPretransitive {α : Type u_6} {β : Type u_7} [] [] :
Equations
• (_ : ) = (_ : )
instance Multiplicative.mulAction_isPretransitive {α : Type u_6} {β : Type u_7} [] [] :
Equations
• (_ : ) = (_ : )
instance Additive.vaddCommClass {α : Type u_6} {β : Type u_7} {γ : Type u_8} [SMul α γ] [SMul β γ] [] :
Equations
instance Multiplicative.smulCommClass {α : Type u_6} {β : Type u_7} {γ : Type u_8} [VAdd α γ] [VAdd β γ] [] :
Equations
• (_ : ) = (_ : )
instance AddAction.functionEnd {α : Type u_6} :

Equations
def AddAction.toEndHom {M : Type u_1} {α : Type u_6} [] [] :
M →+

When M is a group, see AddAction.toPermHom.

Equations
Instances For
@[reducible]
def AddAction.ofEndHom {M : Type u_1} {α : Type u_6} [] (f : M →+ ) :

See note [reducible non-instances].

Equations
Instances For