Type tags for right action on the domain of a function #
By default, M
acts on α → β
if it acts on β
, and the action is given by
(c • f) a = c • (f a)
.
In some cases, it is useful to consider another action: if M
acts on α
on the left, then it acts
on α → β
on the right so that (c • f) a = f (c • a)
. E.g., this action is used to reformulate
the Mean Ergodic Theorem in terms of an operator on (L^2).
Main definitions #
DomMulAct M
(notation:Mᵈᵐᵃ
): type synonym forMᵐᵒᵖ
; ifM
multiplicatively acts onα
, thenMᵈᵐᵃ
acts onα → β
for any typeβ
;DomAddAct M
(notation:Mᵈᵃᵃ
): the additive version.
We also define actions of Mᵈᵐᵃ
on:
α → β
provided thatM
acts onα
;A →* B
provided thatM
acts onA
by aMulDistribMulAction
;A →+ B
provided thatM
acts onA
by aDistribMulAction
.
Implementation details #
Motivation #
Right action can be represented in mathlib
as an action of the opposite group Mᵐᵒᵖ
. However,
this "domain shift" action cannot be an instance because this would create a "diamond"
(a.k.a. ambiguous notation): if M
is a monoid, then how does Mᵐᵒᵖ
act on M → M
? On the one
hand, Mᵐᵒᵖ
acts on M
by c • a = a * c.unop
, thus we have an action
(c • f) a = f a * c.unop
. On the other hand, M
acts on itself by multiplication on the left, so
with this new instance we would have (c • f) a = f (c.unop * a)
. Clearly, these are two different
actions, so both of them cannot be instances in the library.
To overcome this difficulty, we introduce a type synonym DomMulAct M := Mᵐᵒᵖ
(notation:
Mᵈᵐᵃ
). This new type carries the same algebraic structures as Mᵐᵒᵖ
but acts on α → β
by this
new action. So, e.g., Mᵈᵐᵃ
acts on (M → M) → M
by DomMulAct.mk c • F f = F (fun a ↦ c • f a)
while (Mᵈᵐᵃ)ᵈᵐᵃ
(which is isomorphic to M
) acts on (M → M) → M
by
DomMulAct.mk (DomMulAct.mk c) • F f = F (fun a ↦ f (c • a))
.
Action on bundled homomorphisms #
If the action of M
on A
preserves some structure, then Mᵈᵐᵃ
acts on bundled homomorphisms from
A
to any type B
that preserve the same structure. Examples (some of them are not yet in the
library) include:
- a
MulDistribMulAction
generates an action onA →* B
; - a
DistribMulAction
generates an action onA →+ B
; - an action on
α
that commutes with action of some other monoidN
generates an action onα →[N] β
; - a
DistribMulAction
on anR
-module that commutes with scalar multiplications byc : R
generates an action onR
-linear maps from this module; - a continuous action on
X
generates an action onC(X, Y)
; - a measurable action on
X
generates an action on{ f : X → Y // Measurable f }
; - a quasi measure preserving action on
X
generates an action onX →ₘ[μ] Y
; - a measure preserving action generates an isometric action on
MeasureTheory.Lp _ _ _
.
Left action vs right action #
It is common in the literature to consider the left action given by (c • f) a = f (c⁻¹ • a)
instead of the action defined in this file. However, this left action is defined only if c
belongs
to a group, not to a monoid, so we decided to go with the right action.
The left action can be written in terms of DomMulAct
as (DomMulAct.mk c)⁻¹ • f
. As for higher
level dynamics objects (orbits, invariant functions etc), they coincide for the left and for the
right action, so lemmas can be formulated in terms of DomMulAct
.
Keywords #
group action, function, domain
If M
additively acts on α
, then DomAddAct M
acts on α → β
as
well as some bundled maps from α
. This is a type synonym for AddOpposite M
, so this corresponds
to a right action of M
.
Instances For
- DomAddAct.instAddActionAEEqFun
- DomAddAct.instAddActionForall
- DomAddAct.instAddActionSubtypeAEEqFunMemAddAddSubgroupLp
- DomAddAct.instAddCancelCommMonoidOfAddOpposite
- DomAddAct.instAddCancelMonoidOfAddOpposite
- DomAddAct.instAddCommGroupOfAddOpposite
- DomAddAct.instAddCommMonoidOfAddOpposite
- DomAddAct.instAddCommSemigroupOfAddOpposite
- DomAddAct.instAddGroupOfAddOpposite
- DomAddAct.instAddLeftCancelMonoidOfAddOpposite
- DomAddAct.instAddLeftCancelSemigroupOfAddOpposite
- DomAddAct.instAddMonoidOfAddOpposite
- DomAddAct.instAddOfAddOpposite
- DomAddAct.instAddRightCancelMonoidOfAddOpposite
- DomAddAct.instAddRightCancelSemigroupOfAddOpposite
- DomAddAct.instAddSemigroupOfAddOpposite
- DomAddAct.instAddZeroClassOfAddOpposite
- DomAddAct.instCommRingOfAddOpposite
- DomAddAct.instCompactSpace
- DomAddAct.instCompletelyNormalSpace
- DomAddAct.instDiscreteTopology
- DomAddAct.instDivisionAddCommMonoidOfAddOpposite
- DomAddAct.instFaithfulVAddForallOfNontrivial
- DomAddAct.instFirstCountableTopology
- DomAddAct.instInvolutiveNegOfAddOpposite
- DomAddAct.instIsAddCancelOfAddOpposite
- DomAddAct.instIsAddLeftCancelOfAddOpposite
- DomAddAct.instIsAddRightCancelOfAddOpposite
- DomAddAct.instIsometricVAddSubtypeAEEqFunMemAddAddSubgroupLp
- DomAddAct.instLocallyCompactSpace
- DomAddAct.instNegOfAddOpposite
- DomAddAct.instNegZeroClassOfAddOpposite
- DomAddAct.instNonAssocSemiringOfAddOpposite
- DomAddAct.instNonAssocSemiringOfAddOpposite_1
- DomAddAct.instNonUnitalSemiringOfAddOpposite
- DomAddAct.instNormalSpace
- DomAddAct.instR0Space
- DomAddAct.instR1Space
- DomAddAct.instRegularSpace
- DomAddAct.instRingOfAddOpposite
- DomAddAct.instSecondCountableTopology
- DomAddAct.instSemiringOfAddOpposite
- DomAddAct.instSeparableSpace
- DomAddAct.instSubNegAddMonoidOfAddOpposite
- DomAddAct.instSubNegZeroMonoidOfAddOpposite
- DomAddAct.instSubtractionMonoidOfAddOpposite
- DomAddAct.instT0Space
- DomAddAct.instT1Space
- DomAddAct.instT25Space
- DomAddAct.instT2Space
- DomAddAct.instT3Space
- DomAddAct.instT4Space
- DomAddAct.instT5Space
- DomAddAct.instTopologicalSpace
- DomAddAct.instVAddAEEqFun
- DomAddAct.instVAddCommClassAEEqFun_2
- DomAddAct.instVAddCommClassForall
- DomAddAct.instVAddCommClassForall_1
- DomAddAct.instVAddCommClassForall_2
- DomAddAct.instVAddForall
- DomAddAct.instVAddSubtypeAEEqFunMemAddAddSubgroupLp
- DomAddAct.instWeaklyLocallyCompactSpace
- DomAddAct.instZeroOfAddOpposite
- MeasureTheory.Lp.instContinuousVAddDomAddAct
If M
multiplicatively acts on α
, then DomMulAct M
acts on α → β
as well as some
bundled maps from α
. This is a type synonym for MulOpposite M
, so this corresponds to a right
action of M
.
Instances For
- AddMonoidHom.instDomMulActModule
- DomMulAct.instCancelCommMonoidOfMulOpposite
- DomMulAct.instCancelMonoidOfMulOpposite
- DomMulAct.instCommGroupOfMulOpposite
- DomMulAct.instCommMonoidOfMulOpposite
- DomMulAct.instCommRingOfMulOpposite
- DomMulAct.instCommSemigroupOfMulOpposite
- DomMulAct.instCompactSpace
- DomMulAct.instCompletelyNormalSpace
- DomMulAct.instDiscreteTopology
- DomMulAct.instDistribMulActionAEEqFun
- DomMulAct.instDistribMulActionAddMonoidHom
- DomMulAct.instDistribMulActionForallOfMulAction
- DomMulAct.instDistribMulActionSubtypeAEEqFunMemAddSubgroupLp
- DomMulAct.instDistribSMulAEEqFun
- DomMulAct.instDistribSMulForallOfSMul
- DomMulAct.instDistribSMulSubtypeAEEqFunMemAddSubgroupLp
- DomMulAct.instDivInvMonoidOfMulOpposite
- DomMulAct.instDivInvOneMonoidOfMulOpposite
- DomMulAct.instDivisionCommMonoidOfMulOpposite
- DomMulAct.instDivisionMonoidOfMulOpposite
- DomMulAct.instFaithfulSMulForallOfNontrivial
- DomMulAct.instFirstCountableTopology
- DomMulAct.instGroupOfMulOpposite
- DomMulAct.instInvOfMulOpposite
- DomMulAct.instInvOneClassOfMulOpposite
- DomMulAct.instInvolutiveInvOfMulOpposite
- DomMulAct.instIsCancelMulOfMulOpposite
- DomMulAct.instIsLeftCancelMulOfMulOpposite
- DomMulAct.instIsRightCancelMulOfMulOpposite
- DomMulAct.instIsometricSMulSubtypeAEEqFunMemAddSubgroupLp
- DomMulAct.instLeftCancelMonoidOfMulOpposite
- DomMulAct.instLeftCancelSemigroupOfMulOpposite
- DomMulAct.instLocallyCompactSpace
- DomMulAct.instMonoidOfMulOpposite
- DomMulAct.instMulActionAEEqFun
- DomMulAct.instMulActionAddMonoidHomOfDistribMulAction
- DomMulAct.instMulActionDistribMulActionHomIdOfSMulCommClass
- DomMulAct.instMulActionForall
- DomMulAct.instMulActionMonoidHom
- DomMulAct.instMulActionMulActionHomIdOfSMulCommClass
- DomMulAct.instMulActionSubtypeAEEqFunMemAddSubgroupLp
- DomMulAct.instMulDistribMulActionAEEqFun
- DomMulAct.instMulDistribMulActionForallOfMulAction
- DomMulAct.instMulDistribMulActionMonoidHom
- DomMulAct.instMulOfMulOpposite
- DomMulAct.instMulOneClassOfMulOpposite
- DomMulAct.instNonAssocSemiringOfMulOpposite
- DomMulAct.instNonAssocSemiringOfMulOpposite_1
- DomMulAct.instNonUnitalSemiringOfMulOpposite
- DomMulAct.instNormalSpace
- DomMulAct.instOneOfMulOpposite
- DomMulAct.instR0Space
- DomMulAct.instR1Space
- DomMulAct.instRegularSpace
- DomMulAct.instRightCancelMonoidOfMulOpposite
- DomMulAct.instRightCancelSemigroupOfMulOpposite
- DomMulAct.instRingOfMulOpposite
- DomMulAct.instSMulAEEqFun
- DomMulAct.instSMulAddMonoidHom
- DomMulAct.instSMulCommClassAEEqFun
- DomMulAct.instSMulCommClassAEEqFun_1
- DomMulAct.instSMulCommClassAEEqFun_2
- DomMulAct.instSMulCommClassAddMonoidHom
- DomMulAct.instSMulCommClassAddMonoidHom_1
- DomMulAct.instSMulCommClassDistribMulActionHomId
- DomMulAct.instSMulCommClassForall
- DomMulAct.instSMulCommClassForall_1
- DomMulAct.instSMulCommClassForall_2
- DomMulAct.instSMulCommClassMonoidHom
- DomMulAct.instSMulCommClassMulActionHomId
- DomMulAct.instSMulCommClassSubtypeAEEqFunMemAddSubgroupLp
- DomMulAct.instSMulCommClassSubtypeAEEqFunMemAddSubgroupLp_1
- DomMulAct.instSMulCommClassSubtypeAEEqFunMemAddSubgroupLp_2
- DomMulAct.instSMulDistribMulActionHomId
- DomMulAct.instSMulForall
- DomMulAct.instSMulMonoidHom
- DomMulAct.instSMulMulActionHomId
- DomMulAct.instSMulSubtypeAEEqFunMemAddSubgroupLp
- DomMulAct.instSMulZeroClassAEEqFun
- DomMulAct.instSMulZeroClassForallOfSMul
- DomMulAct.instSecondCountableTopology
- DomMulAct.instSemigroupOfMulOpposite
- DomMulAct.instSemiringOfMulOpposite
- DomMulAct.instSeparableSpace
- DomMulAct.instT0Space
- DomMulAct.instT1Space
- DomMulAct.instT25Space
- DomMulAct.instT2Space
- DomMulAct.instT3Space
- DomMulAct.instT4Space
- DomMulAct.instT5Space
- DomMulAct.instTopologicalSpace
- DomMulAct.instWeaklyLocallyCompactSpace
- LinearMap.instDistribMulActionDomMulActOfSMulCommClass
- LinearMap.instModuleDomMulActOfSMulCommClass
- LinearMap.instSMulCommClassDomMulAct
- LinearMap.instSMulDomMulAct
- MeasureTheory.Lp.instContinuousSMulDomMulAct
If M
multiplicatively acts on α
, then DomMulAct M
acts on α → β
as well as some
bundled maps from α
. This is a type synonym for MulOpposite M
, so this corresponds to a right
action of M
.
Equations
- «term_ᵈᵐᵃ» = Lean.ParserDescr.trailingNode `term_ᵈᵐᵃ 1024 1024 (Lean.ParserDescr.symbol "ᵈᵐᵃ")
If M
additively acts on α
, then DomAddAct M
acts on α → β
as
well as some bundled maps from α
. This is a type synonym for AddOpposite M
, so this corresponds
to a right action of M
.
Equations
- «term_ᵈᵃᵃ» = Lean.ParserDescr.trailingNode `term_ᵈᵃᵃ 1024 1024 (Lean.ParserDescr.symbol "ᵈᵃᵃ")
Copy instances from Mᵐᵒᵖ
#
Equations
- DomAddAct.instSubNegAddMonoidOfAddOpposite = inst
Equations
- DomAddAct.instNonAssocSemiringOfAddOpposite = inst
Equations
- DomAddAct.instAddCommGroupOfAddOpposite = inst
Equations
- DomAddAct.instAddCommSemigroupOfAddOpposite = inst
Equations
- DomMulAct.instLeftCancelMonoidOfMulOpposite = inst
Equations
- DomAddAct.instAddLeftCancelSemigroupOfAddOpposite = inst
Equations
- DomAddAct.instAddRightCancelMonoidOfAddOpposite = inst
Equations
- DomMulAct.instCancelMonoidOfMulOpposite = inst
Equations
- DomAddAct.instAddCommMonoidOfAddOpposite = inst
Equations
- DomAddAct.instAddCancelMonoidOfAddOpposite = inst
Equations
- DomMulAct.instNonUnitalSemiringOfMulOpposite = inst
Equations
- DomMulAct.instNonAssocSemiringOfMulOpposite = inst
Equations
- DomMulAct.instRightCancelMonoidOfMulOpposite = inst
Equations
- DomMulAct.instCancelCommMonoidOfMulOpposite = inst
Equations
- DomMulAct.instRightCancelSemigroupOfMulOpposite = inst
Equations
- DomMulAct.instDivInvOneMonoidOfMulOpposite = inst
Equations
- DomAddAct.instAddCancelCommMonoidOfAddOpposite = inst
Equations
- DomMulAct.instDivisionMonoidOfMulOpposite = inst
Equations
- DomMulAct.instInvolutiveInvOfMulOpposite = inst
Equations
- DomAddAct.instNegZeroClassOfAddOpposite = inst
Equations
- DomAddAct.instAddSemigroupOfAddOpposite = inst
Equations
- DomMulAct.instMulOneClassOfMulOpposite = inst
Equations
- DomAddAct.instAddZeroClassOfAddOpposite = inst
Equations
- DomMulAct.instInvOneClassOfMulOpposite = inst
Equations
- DomAddAct.instInvolutiveNegOfAddOpposite = inst
Equations
- DomMulAct.instNonAssocSemiringOfMulOpposite_1 = inst
Equations
- DomAddAct.instNonAssocSemiringOfAddOpposite_1 = inst
Equations
- DomAddAct.instSubNegZeroMonoidOfAddOpposite = inst
Equations
- DomAddAct.instDivisionAddCommMonoidOfAddOpposite = inst
Equations
- DomMulAct.instCommSemigroupOfMulOpposite = inst
Equations
- DomMulAct.instLeftCancelSemigroupOfMulOpposite = inst
Equations
- DomAddAct.instAddRightCancelSemigroupOfAddOpposite = inst
Equations
- DomAddAct.instNonUnitalSemiringOfAddOpposite = inst
Equations
- DomMulAct.instDivisionCommMonoidOfMulOpposite = inst
Equations
- DomMulAct.instCommMonoidOfMulOpposite = inst
Equations
- DomMulAct.instDivInvMonoidOfMulOpposite = inst
Equations
- DomAddAct.instSubtractionMonoidOfAddOpposite = inst
Equations
- DomAddAct.instAddLeftCancelMonoidOfAddOpposite = inst
Equations
- ⋯ = inst
Equations
- ⋯ = inst
Equations
- ⋯ = inst
Equations
- ⋯ = inst
Equations
- ⋯ = inst
Equations
- ⋯ = inst
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- DomMulAct.instSMulZeroClassForallOfSMul = SMulZeroClass.mk ⋯
Equations
- DomMulAct.instDistribSMulForallOfSMul = DistribSMul.mk ⋯
Equations
- DomMulAct.instDistribMulActionForallOfMulAction = DistribMulAction.mk ⋯ ⋯
Equations
- DomMulAct.instMulDistribMulActionForallOfMulAction = MulDistribMulAction.mk ⋯ ⋯
Equations
- DomMulAct.instSMulMonoidHom = { smul := fun (c : Mᵈᵐᵃ) (f : A →* B) => f.comp (MulDistribMulAction.toMonoidHom A (DomMulAct.mk.symm c)) }
Equations
- ⋯ = ⋯
Equations
- DomMulAct.instMulActionMonoidHom = Function.Injective.mulAction DFunLike.coe ⋯ ⋯
Equations
- DomMulAct.instSMulAddMonoidHom = { smul := fun (c : Mᵈᵐᵃ) (f : A →+ B) => f.comp (DistribSMul.toAddMonoidHom A (DomMulAct.mk.symm c)) }
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- DomMulAct.instMulActionAddMonoidHomOfDistribMulAction = Function.Injective.mulAction DFunLike.coe ⋯ ⋯
Equations
- DomMulAct.instDistribMulActionAddMonoidHom = Function.Injective.distribMulAction (AddMonoidHom.coeFn A B) ⋯ ⋯
Equations
- DomMulAct.instMulDistribMulActionMonoidHom = Function.Injective.mulDistribMulAction (MonoidHom.coeFn A B) ⋯ ⋯