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
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 "ᵈᵐᵃ")
Instances For
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 "ᵈᵃᵃ")
Instances For
Equivalence between M
and Mᵈᵐᵃ
.
Equations
Instances For
Equivalence between M
and Mᵈᵐᵃ
.
Equations
Instances For
Copy instances from Mᵐᵒᵖ
#
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
- DomMulAct.instSMulForall = { smul := fun (c : Mᵈᵐᵃ) (f : α → β) (a : α) => f (DomMulAct.mk.symm c • a) }
Equations
- DomAddAct.instVAddForall = { vadd := fun (c : Mᵈᵃᵃ) (f : α → β) (a : α) => f (DomAddAct.mk.symm c +ᵥ a) }
Equations
Equations
- DomMulAct.instSMulMonoidHom = { smul := fun (c : Mᵈᵐᵃ) (f : A →* B) => f.comp (MulDistribMulAction.toMonoidHom A (DomMulAct.mk.symm c)) }
Equations
- DomMulAct.instSMulAddMonoidHom = { smul := fun (c : Mᵈᵐᵃ) (f : A →+ B) => f.comp (DistribSMul.toAddMonoidHom A (DomMulAct.mk.symm c)) }