Iterates of monoid and ring homomorphisms #
Iterate of a monoid/ring homomorphism is a monoid/ring homomorphism but it has a wrong type, so Lean
can't apply lemmas like MonoidHom.map_one
to f^[n] 1
. Though it is possible to define
a monoid structure on the endomorphisms, quite often we do not want to convert from
M →* M
to Monoid.End M
and from f^[n]
to f^n
just to apply a simple lemma.
So, we restate standard *Hom.map_*
lemmas under names *Hom.iterate_map_*
.
We also prove formulas for iterates of add/mul left/right.
Tags #
homomorphism, iterate
@[simp]
@[simp]
theorem
AddSemiconjBy.function_semiconj_add_left
{G : Type u_3}
[AddSemigroup G]
{a : G}
{b : G}
{c : G}
(h : AddSemiconjBy a b c)
:
Function.Semiconj (fun x => a + x) (fun x => b + x) fun x => c + x
theorem
SemiconjBy.function_semiconj_mul_left
{G : Type u_3}
[Semigroup G]
{a : G}
{b : G}
{c : G}
(h : SemiconjBy a b c)
:
Function.Semiconj (fun x => a * x) (fun x => b * x) fun x => c * x
theorem
AddCommute.function_commute_add_left
{G : Type u_3}
[AddSemigroup G]
{a : G}
{b : G}
(h : AddCommute a b)
:
Function.Commute (fun x => a + x) fun x => b + x
theorem
Commute.function_commute_mul_left
{G : Type u_3}
[Semigroup G]
{a : G}
{b : G}
(h : Commute a b)
:
Function.Commute (fun x => a * x) fun x => b * x
theorem
AddSemiconjBy.function_semiconj_add_right_swap
{G : Type u_3}
[AddSemigroup G]
{a : G}
{b : G}
{c : G}
(h : AddSemiconjBy a b c)
:
Function.Semiconj (fun x => x + a) (fun x => x + c) fun x => x + b
theorem
SemiconjBy.function_semiconj_mul_right_swap
{G : Type u_3}
[Semigroup G]
{a : G}
{b : G}
{c : G}
(h : SemiconjBy a b c)
:
Function.Semiconj (fun x => x * a) (fun x => x * c) fun x => x * b
theorem
AddCommute.function_commute_add_right
{G : Type u_3}
[AddSemigroup G]
{a : G}
{b : G}
(h : AddCommute a b)
:
Function.Commute (fun x => x + a) fun x => x + b
theorem
Commute.function_commute_mul_right
{G : Type u_3}
[Semigroup G]
{a : G}
{b : G}
(h : Commute a b)
:
Function.Commute (fun x => x * a) fun x => x * b