Documentation

Mathlib.Logic.Function.Iterate

Iterations of a function #

In this file we prove simple properties of Nat.iterate f n a.k.a. f^[n]:

@[simp]
theorem Function.iterate_zero {α : Type u} (f : αα) :
f^[0] = id
theorem Function.iterate_zero_apply {α : Type u} (f : αα) (x : α) :
(f^[0]) x = x
@[simp]
theorem Function.iterate_succ {α : Type u} (f : αα) (n : ) :
theorem Function.iterate_succ_apply {α : Type u} (f : αα) (n : ) (x : α) :
(f^[Nat.succ n]) x = (f^[n]) (f x)
@[simp]
theorem Function.iterate_id {α : Type u} (n : ) :
id^[n] = id
theorem Function.iterate_add {α : Type u} (f : αα) (m : ) (n : ) :
f^[m + n] = f^[m] f^[n]
theorem Function.iterate_add_apply {α : Type u} (f : αα) (m : ) (n : ) (x : α) :
(f^[m + n]) x = (f^[m]) ((f^[n]) x)
@[simp]
theorem Function.iterate_one {α : Type u} (f : αα) :
f^[1] = f
theorem Function.iterate_mul {α : Type u} (f : αα) (m : ) (n : ) :
f^[m * n] = f^[m]^[n]
theorem Function.iterate_fixed {α : Type u} {f : αα} {x : α} (h : f x = x) (n : ) :
(f^[n]) x = x
theorem Function.Injective.iterate {α : Type u} {f : αα} (Hinj : Function.Injective f) (n : ) :
theorem Function.Surjective.iterate {α : Type u} {f : αα} (Hsurj : Function.Surjective f) (n : ) :
theorem Function.Bijective.iterate {α : Type u} {f : αα} (Hbij : Function.Bijective f) (n : ) :
theorem Function.Semiconj.iterate_right {α : Type u} {β : Type v} {f : αβ} {ga : αα} {gb : ββ} (h : Function.Semiconj f ga gb) (n : ) :
theorem Function.Semiconj.iterate_left {α : Type u} {f : αα} {g : αα} (H : ∀ (n : ), Function.Semiconj f (g n) (g (n + 1))) (n : ) (k : ) :
Function.Semiconj (f^[n]) (g k) (g (n + k))
theorem Function.Commute.iterate_right {α : Type u} {f : αα} {g : αα} (h : Function.Commute f g) (n : ) :
theorem Function.Commute.iterate_left {α : Type u} {f : αα} {g : αα} (h : Function.Commute f g) (n : ) :
theorem Function.Commute.iterate_iterate {α : Type u} {f : αα} {g : αα} (h : Function.Commute f g) (m : ) (n : ) :
theorem Function.Commute.iterate_eq_of_map_eq {α : Type u} {f : αα} {g : αα} (h : Function.Commute f g) (n : ) {x : α} (hx : f x = g x) :
(f^[n]) x = (g^[n]) x
theorem Function.Commute.comp_iterate {α : Type u} {f : αα} {g : αα} (h : Function.Commute f g) (n : ) :
(f g)^[n] = f^[n] g^[n]
theorem Function.Commute.iterate_self {α : Type u} (f : αα) (n : ) :
theorem Function.Commute.self_iterate {α : Type u} (f : αα) (n : ) :
theorem Function.Commute.iterate_iterate_self {α : Type u} (f : αα) (m : ) (n : ) :
theorem Function.Semiconj₂.iterate {α : Type u} {f : αα} {op : ααα} (hf : Function.Semiconj₂ f op op) (n : ) :
theorem Function.iterate_succ' {α : Type u} (f : αα) (n : ) :
theorem Function.iterate_succ_apply' {α : Type u} (f : αα) (n : ) (x : α) :
(f^[Nat.succ n]) x = f ((f^[n]) x)
theorem Function.iterate_pred_comp_of_pos {α : Type u} (f : αα) {n : } (hn : 0 < n) :
theorem Function.comp_iterate_pred_of_pos {α : Type u} (f : αα) {n : } (hn : 0 < n) :
def Function.Iterate.rec {α : Type u} (p : αSort u_1) {f : αα} (h : (a : α) → p ap (f a)) {a : α} (ha : p a) (n : ) :
p ((f^[n]) a)

A recursor for the iterate of a function.

Equations
theorem Function.Iterate.rec_zero {α : Type u} (p : αSort u_1) {f : αα} (h : (a : α) → p ap (f a)) {a : α} (ha : p a) :
theorem Function.LeftInverse.iterate {α : Type u} {f : αα} {g : αα} (hg : Function.LeftInverse g f) (n : ) :
theorem Function.RightInverse.iterate {α : Type u} {f : αα} {g : αα} (hg : Function.RightInverse g f) (n : ) :
theorem Function.iterate_comm {α : Type u} (f : αα) (m : ) (n : ) :
theorem Function.iterate_commute {α : Type u} (m : ) (n : ) :
Function.Commute (fun f => f^[m]) fun f => f^[n]
theorem Function.iterate_add_eq_iterate {α : Type u} {f : αα} {m : } {n : } {a : α} (hf : Function.Injective f) :
(f^[m + n]) a = (f^[n]) a (f^[m]) a = a
theorem Function.iterate_cancel_of_add {α : Type u} {f : αα} {m : } {n : } {a : α} (hf : Function.Injective f) :
(f^[m + n]) a = (f^[n]) a(f^[m]) a = a

Alias of the forward direction of Function.iterate_add_eq_iterate.

theorem Function.iterate_cancel {α : Type u} {f : αα} {m : } {n : } {a : α} (hf : Function.Injective f) (ha : (f^[m]) a = (f^[n]) a) :
(f^[m - n]) a = a
theorem List.foldl_const {α : Type u} {β : Type v} (f : αα) (a : α) (l : List β) :
List.foldl (fun b x => f b) a l = (f^[List.length l]) a
theorem List.foldr_const {α : Type u} {β : Type v} (f : ββ) (b : β) (l : List α) :
List.foldr (fun x => f) b l = (f^[List.length l]) b