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
:
SMulZeroClass
is a typeclass for an action that preserves zeroDistribSMul M A
is a typeclass for an action on an additive monoid (AddZeroClass
) that preserves addition and zeroDistribMulAction M A
is a typeclass for an action of a multiplicative monoid on an additive monoid such thata • (b + c) = a • b + a • c
anda • 0 = 0
.
The hierarchy is extended further by Module
, defined elsewhere.
Notation #
a • b
is used as notation forSMul.smul 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
Pullback a zero-preserving scalar multiplication along an injective zero-preserving map. See note [reducible non-instances].
Equations
- Function.Injective.smulZeroClass f hf smul = { smul := fun (x1 : M) (x2 : B) => x1 • x2, smul_zero := ⋯ }
Instances For
Pushforward a zero-preserving scalar multiplication along a zero-preserving map. See note [reducible non-instances].
Equations
- f.smulZeroClass smul = { toSMul := inst✝, smul_zero := ⋯ }
Instances For
Push forward the multiplication of R
on M
along a compatible surjective map f : R → S
.
See also Function.Surjective.distribMulActionLeft
.
Equations
- Function.Surjective.smulZeroClassLeft f hf hsmul = { smul := fun (x1 : S) (x2 : M) => x1 • x2, smul_zero := ⋯ }
Instances For
Compose a SMulZeroClass
with a function, with scalar multiplication f r' • m
.
See note [reducible non-instances].
Equations
- SMulZeroClass.compFun A f = { smul := SMul.comp.smul f, smul_zero := ⋯ }
Instances For
Each element of the scalars defines a zero-preserving map.
Equations
- SMulZeroClass.toZeroHom A x = { toFun := fun (x_1 : A) => x • x_1, map_zero' := ⋯ }
Instances For
SMulWithZero
is a class consisting of a Type M₀
with 0 ∈ M₀
and a scalar multiplication
of M₀
on a Type A
with 0
, such that the equality r • m = 0
holds if at least one among r
or m
equals 0
.
- smul : M₀ → A → A
Scalar multiplication by the scalar
0
is0
.
Instances
Equations
- MulZeroClass.toSMulWithZero M₀ = { smul := fun (x1 x2 : M₀) => x1 * x2, smul_zero := ⋯, zero_smul := ⋯ }
Like MulZeroClass.toSMulWithZero
, but multiplies on the right.
Pullback a SMulWithZero
structure along an injective zero-preserving homomorphism.
Equations
- Function.Injective.smulWithZero f hf smul = { smul := fun (x1 : M₀) (x2 : A') => x1 • x2, smul_zero := ⋯, zero_smul := ⋯ }
Instances For
Pushforward a SMulWithZero
structure along a surjective zero-preserving homomorphism.
Equations
- Function.Surjective.smulWithZero f hf smul = { smul := fun (x1 : M₀) (x2 : A') => x1 • x2, smul_zero := ⋯, zero_smul := ⋯ }
Instances For
Compose a SMulWithZero
with a ZeroHom
, with action f r' • m
Equations
- SMulWithZero.compHom A f = { smul := fun (x1 : M₀') (x2 : A) => f x1 • x2, smul_zero := ⋯, zero_smul := ⋯ }
Instances For
Equations
- AddMonoid.natSMulWithZero = { toSMul := AddMonoid.toNatSMul, smul_zero := ⋯, zero_smul := ⋯ }
Equations
- AddGroup.intSMulWithZero = { toSMul := SubNegMonoid.toZSMul, smul_zero := ⋯, zero_smul := ⋯ }
An action of a monoid with zero M₀
on a Type A
, also with 0
, extends MulAction
and
is compatible with 0
(both in M₀
and in A
), with 1 ∈ M₀
, and with associativity of
multiplication on the monoid A
.
- smul : M₀ → A → A
Scalar multiplication by any element send
0
to0
.Scalar multiplication by the scalar
0
is0
.
Instances
Equations
- MulActionWithZero.toSMulWithZero M₀ A = { toSMul := m.toSMul, smul_zero := ⋯, zero_smul := ⋯ }
See also Semiring.toModule
Equations
- MonoidWithZero.toMulActionWithZero M₀ = { toSMul := (MulZeroClass.toSMulWithZero M₀).toSMul, one_smul := ⋯, mul_smul := ⋯, smul_zero := ⋯, zero_smul := ⋯ }
Like MonoidWithZero.toMulActionWithZero
, but multiplies on the right. See also
Semiring.toOppositeModule
Equations
- MonoidWithZero.toOppositeMulActionWithZero M₀ = { toSMul := (MulZeroClass.toOppositeSMulWithZero M₀).toSMul, one_smul := ⋯, mul_smul := ⋯, smul_zero := ⋯, zero_smul := ⋯ }
Pullback a MulActionWithZero
structure along an injective zero-preserving homomorphism.
Equations
- Function.Injective.mulActionWithZero f hf smul = { toMulAction := Function.Injective.mulAction (⇑f) hf smul, smul_zero := ⋯, zero_smul := ⋯ }
Instances For
Pushforward a MulActionWithZero
structure along a surjective zero-preserving homomorphism.
Equations
- Function.Surjective.mulActionWithZero f hf smul = { toMulAction := Function.Surjective.mulAction (⇑f) hf smul, smul_zero := ⋯, zero_smul := ⋯ }
Instances For
Compose a MulActionWithZero
with a MonoidWithZeroHom
, with action f r' • m
Equations
- MulActionWithZero.compHom A f = { toSMul := (SMulWithZero.compHom A ↑f).toSMul, one_smul := ⋯, mul_smul := ⋯, smul_zero := ⋯, zero_smul := ⋯ }
Instances For
Typeclass for scalar multiplication that preserves 0
and +
on the right.
This is exactly DistribMulAction
without the MulAction
part.
- smul : M → A → A
Scalar multiplication distributes across addition
Instances
Pullback a distributive scalar multiplication along an injective additive monoid homomorphism. See note [reducible non-instances].
Equations
- Function.Injective.distribSMul f hf smul = { toSMulZeroClass := Function.Injective.smulZeroClass (↑f) hf smul, smul_add := ⋯ }
Instances For
Pushforward a distributive scalar multiplication along a surjective additive monoid homomorphism. See note [reducible non-instances].
Equations
- Function.Surjective.distribSMul f hf smul = { toSMulZeroClass := (↑f).smulZeroClass smul, smul_add := ⋯ }
Instances For
Push forward the multiplication of R
on M
along a compatible surjective map f : R → S
.
See also Function.Surjective.distribMulActionLeft
.
Equations
- Function.Surjective.distribSMulLeft f hf hsmul = { toSMulZeroClass := Function.Surjective.smulZeroClassLeft f hf hsmul, smul_add := ⋯ }
Instances For
Compose a DistribSMul
with a function, with scalar multiplication f r' • m
.
See note [reducible non-instances].
Equations
- DistribSMul.compFun A f = { toSMulZeroClass := SMulZeroClass.compFun A f, smul_add := ⋯ }
Instances For
Each element of the scalars defines an additive monoid homomorphism.
Equations
- DistribSMul.toAddMonoidHom A x = { toFun := fun (x_1 : A) => x • x_1, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Typeclass for multiplicative actions on additive structures.
For example, if G
is a group (with group law written as multiplication) and A
is an
abelian group (with group law written as addition), then to give A
a G
-module
structure (for example, to use the theory of group cohomology) is to say [DistribMulAction G A]
.
Note in that we do not use the Module
typeclass for G
-modules, as the Module
typeclass
is for modules over a ring rather than a group.
Mathematically, DistribMulAction G A
is equivalent to giving A
the structure of
a ℤ[G]
-module.
- smul : M → A → A
Multiplying
0
by a scalar gives0
Scalar multiplication distributes across addition
Instances
Equations
- DistribMulAction.toDistribSMul = { toSMul := inst✝.toSMul, smul_zero := ⋯, smul_add := ⋯ }
We make sure that the definition of DistribMulAction.toDistribSMul
was done correctly,
and the two paths from DistribMulAction
to SMul
are indeed definitionally equal.
Pullback a distributive multiplicative action along an injective additive monoid homomorphism. See note [reducible non-instances].
Equations
- Function.Injective.distribMulAction f hf smul = { toSMul := (Function.Injective.distribSMul f hf smul).toSMul, one_smul := ⋯, mul_smul := ⋯, smul_zero := ⋯, smul_add := ⋯ }
Instances For
Pushforward a distributive multiplicative action along a surjective additive monoid homomorphism. See note [reducible non-instances].
Equations
- Function.Surjective.distribMulAction f hf smul = { toSMul := (Function.Surjective.distribSMul f hf smul).toSMul, one_smul := ⋯, mul_smul := ⋯, smul_zero := ⋯, smul_add := ⋯ }
Instances For
Each element of the monoid defines an additive monoid homomorphism.
Equations
Instances For
Each element of the monoid defines an additive monoid homomorphism.
Equations
- DistribMulAction.toAddMonoidEnd M A = { toFun := DistribMulAction.toAddMonoidHom A, map_one' := ⋯, map_mul' := ⋯ }