# mathlibdocumentation

group_theory.group_action.defs

# Definitions of group actions #

This file defines a hierarchy of group action type-classes:

• has_scalar M α and its additive version has_vadd G P are notation typeclasses for • and +ᵥ, respectively;
• mul_action M α and its additive version add_action G P are typeclasses used for actions of multiplicative and additive monoids and groups;
• distrib_mul_action 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 semimodule, defined elsewhere.

Also provided are type-classes regarding the interaction of different group actions,

• smul_comm_class M N α and its additive version vadd_comm_class M N α;
• is_scalar_tower M N α (no additive version).

## Notation #

• a • b is used as notation for has_scalar.smul a b.
• a +ᵥ b is used as notation for has_vadd.vadd a b.

## Implementation details #

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

## Tags #

group action

@[class]
structure has_vadd (G : Type u_9) (P : Type u_10) :
Type (max u_10 u_9)
• vadd : G → P → P

Type class for the +ᵥ notation.

Instances
@[class]
structure has_scalar (M : Type u_9) (α : Type u_10) :
Type (max u_10 u_9)
• smul : M → α → α

Typeclass for types with a scalar multiplication operation, denoted • (\bu)

Instances
@[class]
structure add_action (G : Type u_9) (P : Type u_10) [add_monoid G] :
Type (max u_10 u_9)
• to_has_vadd : P
• zero_vadd : ∀ (p : P), 0 +ᵥ p = p
• add_vadd : ∀ (g₁ g₂ : G) (p : P), g₁ + g₂ +ᵥ p = g₁ +ᵥ (g₂ +ᵥ p)

Type class for additive monoid actions.

Instances
@[class]
structure mul_action (α : Type u_9) (β : Type u_10) [monoid α] :
Type (max u_10 u_9)
• to_has_scalar : β
• one_smul : ∀ (b : β), 1 b = b
• mul_smul : ∀ (x y : α) (b : β), (x * y) b = x y b

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

Instances
@[class]
structure vadd_comm_class (M : Type u_9) (N : Type u_10) (α : Type u_11) [ α] [ α] :
Prop

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

Instances
@[class]
structure smul_comm_class (M : Type u_9) (N : Type u_10) (α : Type u_11) [ α] [ α] :
Prop
• smul_comm : ∀ (m : M) (n : N) (a : α), m n a = n m a

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

Instances
theorem smul_comm_class.symm (M : Type u_1) (N : Type u_2) (α : Type u_3) [ α] [ α] [ α] :
α

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 vadd_comm_class.symm (M : Type u_1) (N : Type u_2) (α : Type u_3) [ α] [ α] [ α] :
α

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.

@[instance]
def vadd_comm_class_self (M : Type u_1) (α : Type u_2) [ α] :
α
@[instance]
def smul_comm_class_self (M : Type u_1) (α : Type u_2) [comm_monoid M] [ α] :
α
@[class]
structure is_scalar_tower (M : Type u_9) (N : Type u_10) (α : Type u_11) [ N] [ α] [ α] :
Prop
• smul_assoc : ∀ (x : M) (y : N) (z : α), (x y) z = x y z

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

Instances
@[simp]
theorem smul_assoc {α : Type u_6} {M : Type u_1} {N : Type u_2} [ N] [ α] [ α] [ α] (x : M) (y : N) (z : α) :
(x y) z = x y z
theorem smul_smul {M : Type u_1} {α : Type u_6} [monoid M] [ α] (a₁ a₂ : M) (b : α) :
a₁ a₂ b = (a₁ * a₂) b
theorem vadd_vadd {M : Type u_1} {α : Type u_6} [add_monoid M] [ α] (a₁ a₂ : M) (b : α) :
a₁ +ᵥ (a₂ +ᵥ b) = a₁ + a₂ +ᵥ b
@[simp]
theorem one_smul (M : Type u_1) {α : Type u_6} [monoid M] [ α] (b : α) :
1 b = b
@[simp]
theorem zero_vadd (M : Type u_1) {α : Type u_6} [add_monoid M] [ α] (b : α) :
0 +ᵥ b = b
def function.injective.mul_action {M : Type u_1} {α : Type u_6} {β : Type u_7} [monoid M] [ α] [ β] (f : β → α) (hf : function.injective f) (smul : ∀ (c : M) (x : β), f (c x) = c f x) :
β

Pullback a multiplicative action along an injective map respecting •.

Equations
def function.injective.add_action {M : Type u_1} {α : Type u_6} {β : Type u_7} [add_monoid M] [ α] [ β] (f : β → α) (hf : function.injective f) (smul : ∀ (c : M) (x : β), f (c +ᵥ x) = c +ᵥ f x) :
β

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

def function.surjective.add_action {M : Type u_1} {α : Type u_6} {β : Type u_7} [add_monoid M] [ α] [ β] (f : α → β) (hf : function.surjective f) (smul : ∀ (c : M) (x : α), f (c +ᵥ x) = c +ᵥ f x) :
β

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

def function.surjective.mul_action {M : Type u_1} {α : Type u_6} {β : Type u_7} [monoid M] [ α] [ β] (f : α → β) (hf : function.surjective f) (smul : ∀ (c : M) (x : α), f (c x) = c f x) :
β

Pushforward a multiplicative action along a surjective map respecting •.

Equations
theorem ite_smul {M : Type u_1} {α : Type u_6} [monoid M] [ α] (p : Prop) [decidable p] (a₁ a₂ : M) (b : α) :
ite p a₁ a₂ b = ite p (a₁ b) (a₂ b)
theorem ite_vadd {M : Type u_1} {α : Type u_6} [add_monoid M] [ α] (p : Prop) [decidable p] (a₁ a₂ : M) (b : α) :
ite p a₁ a₂ +ᵥ b = ite p (a₁ +ᵥ b) (a₂ +ᵥ b)
theorem smul_ite {M : Type u_1} {α : Type u_6} [monoid M] [ α] (p : Prop) [decidable p] (a : M) (b₁ b₂ : α) :
a ite p b₁ b₂ = ite p (a b₁) (a b₂)
theorem vadd_ite {M : Type u_1} {α : Type u_6} [add_monoid M] [ α] (p : Prop) [decidable p] (a : M) (b₁ b₂ : α) :
a +ᵥ ite p b₁ b₂ = ite p (a +ᵥ b₁) (a +ᵥ b₂)
@[instance]
def monoid.to_mul_action (M : Type u_1) [monoid M] :
M

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

This is promoted to a semimodule by semiring.to_semimodule.

Equations
@[instance]
def add_monoid.to_add_action (M : Type u_1) [add_monoid M] :
M

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

This is promoted to an add_torsor by add_group_is_add_torsor.

@[simp]
theorem vadd_eq_add (M : Type u_1) [add_monoid M] {a a' : M} :
a +ᵥ a' = a + a'
@[simp]
theorem smul_eq_mul (M : Type u_1) [monoid M] {a a' : M} :
a a' = a * a'
@[instance]
def is_scalar_tower.left (M : Type u_1) {α : Type u_6} [monoid M] [ α] :
α
def mul_action.to_fun (M : Type u_1) (α : Type u_6) [monoid M] [ α] :
α M → α

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

Equations
def add_action.to_fun (M : Type u_1) (α : Type u_6) [add_monoid M] [ α] :
α M → α

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

@[simp]
theorem mul_action.to_fun_apply {M : Type u_1} {α : Type u_6} [monoid M] [ α] (x : M) (y : α) :
α) y x = x y
@[simp]
theorem add_action.to_fun_apply {M : Type u_1} {α : Type u_6} [add_monoid M] [ α] (x : M) (y : α) :
α) y x = x +ᵥ y
def mul_action.comp_hom {M : Type u_1} {N : Type u_2} (α : Type u_6) [monoid M] [ α] [monoid N] (g : N →* M) :
α

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

Equations
def add_action.comp_hom {M : Type u_1} {N : Type u_2} (α : Type u_6) [add_monoid M] [ α] [add_monoid N] (g : N →+ M) :
α

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

@[simp]
theorem smul_one_smul {α : Type u_6} {M : Type u_1} (N : Type u_2) [monoid N] [ N] [ α] [ α] [ α] (x : M) (y : α) :
(x 1) y = x y
@[class]
structure distrib_mul_action (M : Type u_9) (A : Type u_10) [monoid M] [add_monoid A] :
Type (max u_10 u_9)
• to_mul_action : A
• smul_add : ∀ (r : M) (x y : A), r (x + y) = r x + r y
• smul_zero : ∀ (r : M), r 0 = 0

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

Instances
@[simp]
theorem smul_add {M : Type u_1} {A : Type u_4} [monoid M] [add_monoid A] [ A] (a : M) (b₁ b₂ : A) :
a (b₁ + b₂) = a b₁ + a b₂
@[simp]
theorem smul_zero {M : Type u_1} {A : Type u_4} [monoid M] [add_monoid A] [ A] (a : M) :
a 0 = 0
def function.injective.distrib_mul_action {M : Type u_1} {A : Type u_4} {B : Type u_5} [monoid M] [add_monoid A] [ A] [add_monoid B] [ B] (f : B →+ A) (hf : function.injective f) (smul : ∀ (c : M) (x : B), f (c x) = c f x) :

Pullback a distributive multiplicative action along an injective additive monoid homomorphism.

Equations
def function.surjective.distrib_mul_action {M : Type u_1} {A : Type u_4} {B : Type u_5} [monoid M] [add_monoid A] [ A] [add_monoid B] [ B] (f : A →+ B) (hf : function.surjective f) (smul : ∀ (c : M) (x : A), f (c x) = c f x) :

Pushforward a distributive multiplicative action along a surjective additive monoid homomorphism.

Equations
def distrib_mul_action.comp_hom {M : Type u_1} {N : Type u_2} (A : Type u_4) [monoid M] [add_monoid A] [ A] [monoid N] (f : N →* M) :

Compose a distrib_mul_action with a monoid_hom, with action f r' • m

Equations
def const_smul_hom {M : Type u_1} (A : Type u_4) [monoid M] [add_monoid A] [ A] (r : M) :
A →+ A

Scalar multiplication by r as an add_monoid_hom.

Equations
@[simp]
theorem const_smul_hom_apply {M : Type u_1} {A : Type u_4} [monoid M] [add_monoid A] [ A] (r : M) (x : A) :
r) x = r x
@[simp]
theorem smul_neg {M : Type u_1} {A : Type u_4} [monoid M] [add_group A] [ A] (r : M) (x : A) :
r -x = -(r x)
theorem smul_sub {M : Type u_1} {A : Type u_4} [monoid M] [add_group A] [ A] (r : M) (x y : A) :
r (x - y) = r x - r y