/- Copyright (c) 2020 Yury G. Kudryashov. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Yury G. Kudryashov ! This file was ported from Lean 3 source module order.iterate ! leanprover-community/mathlib commit 2258b40dacd2942571c8ce136215350c702dc78f ! Please do not edit these lines, except to modify the commit id ! if you have ported upstream changes. -/ import Mathlib.Logic.Function.Iterate import Mathlib.Order.Monotone.Basic /-! # Inequalities on iterates In this file we prove some inequalities comparing `f^[n] x` and `g^[n] x` where `f` and `g` are two self-maps that commute with each other. Current selection of inequalities is motivated by formalization of the rotation number of a circle homeomorphism. -/ open Function namespace Monotone variable [PreorderΞ±] {Ξ±: ?m.24f :f: Ξ± β Ξ±Ξ± βΞ±: ?m.483Ξ±} {Ξ±: ?m.2396xx: β β Ξ±y :y: β β Ξ±β ββ: TypeΞ±} /-! ### Comparison of two sequences If $f$ is a monotone function, then $β k, x_{k+1} β€ f(x_k)$ implies that $x_k$ grows slower than $f^k(x_0)$, and similarly for the reversed inequalities. If $x_k$ and $y_k$ are two sequences such that $x_{k+1} β€ f(x_k)$ and $y_{k+1} β₯ f(y_k)$ for all $k < n$, then $x_0 β€ y_0$ implies $x_n β€ y_n$, see `Monotone.seq_le_seq`. If some of the inequalities in this lemma are strict, then we have $x_n < y_n$. The rest of the lemmas in this section formalize this fact for different inequalities made strict. -/ theoremΞ±: ?m.4seq_le_seq (hf : Monotonehf: Monotone ff) (f: Ξ± β Ξ±n :n: ββ) (β: Typehβ :hβ: x 0 β€ y 0xx: β β Ξ±0 β€0: ?m.78yy: β β Ξ±0) (hx : β0: ?m.89k <k: ?m.104n,n: βx (x: β β Ξ±k +k: ?m.1041) β€1: ?m.120f (f: Ξ± β Ξ±xx: β β Ξ±k)) (hy : βk: ?m.104k <k: ?m.181n,n: βf (f: Ξ± β Ξ±yy: β β Ξ±k) β€k: ?m.181y (y: β β Ξ±k +k: ?m.1811)) :1: ?m.194xx: β β Ξ±n β€n: βyy: β β Ξ±n :=n: βGoals accomplished! πΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
n: β
hβ: x 0 β€ y 0
hxβ: β (k : β), k < n β x (k + 1) β€ f (x k)
hyβ: β (k : β), k < n β f (y k) β€ y (k + 1)
hx: β (k : β), k < Nat.zero β x (k + 1) β€ f (x k)
hy: β (k : β), k < Nat.zero β f (y k) β€ y (k + 1)
zeroΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) β€ f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: (β (k : β), k < n β x (k + 1) β€ f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n β€ y n
hx: β (k : β), k < Nat.succ n β x (k + 1) β€ f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
n: β
hβ: x 0 β€ y 0
hxβ: β (k : β), k < n β x (k + 1) β€ f (x k)
hyβ: β (k : β), k < n β f (y k) β€ y (k + 1)
hx: β (k : β), k < Nat.zero β x (k + 1) β€ f (x k)
hy: β (k : β), k < Nat.zero β f (y k) β€ y (k + 1)
zeroΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
n: β
hβ: x 0 β€ y 0
hxβ: β (k : β), k < n β x (k + 1) β€ f (x k)
hyβ: β (k : β), k < n β f (y k) β€ y (k + 1)
hx: β (k : β), k < Nat.zero β x (k + 1) β€ f (x k)
hy: β (k : β), k < Nat.zero β f (y k) β€ y (k + 1)
zeroΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) β€ f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: (β (k : β), k < n β x (k + 1) β€ f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n β€ y n
hx: β (k : β), k < Nat.succ n β x (k + 1) β€ f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succGoals accomplished! πΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) β€ f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: (β (k : β), k < n β x (k + 1) β€ f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n β€ y n
hx: β (k : β), k < Nat.succ n β x (k + 1) β€ f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) β€ f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: (β (k : β), k < n β x (k + 1) β€ f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n β€ y n
hx: β (k : β), k < Nat.succ n β x (k + 1) β€ f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) β€ f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: (β (k : β), k < n β x (k + 1) β€ f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n β€ y n
hx: β (k : β), k < Nat.succ n β x (k + 1) β€ f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succ.refine'_1Ξ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) β€ f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: (β (k : β), k < n β x (k + 1) β€ f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n β€ y n
hx: β (k : β), k < Nat.succ n β x (k + 1) β€ f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succ.refine'_2Ξ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) β€ f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: (β (k : β), k < n β x (k + 1) β€ f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n β€ y n
hx: β (k : β), k < Nat.succ n β x (k + 1) β€ f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) β€ f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: (β (k : β), k < n β x (k + 1) β€ f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n β€ y n
hx: β (k : β), k < Nat.succ n β x (k + 1) β€ f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succ.refine'_2Ξ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) β€ f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: (β (k : β), k < n β x (k + 1) β€ f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n β€ y n
hx: β (k : β), k < Nat.succ n β x (k + 1) β€ f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succ#align monotone.seq_le_seq Monotone.seq_le_seq theoremGoals accomplished! πseq_pos_lt_seq_of_lt_of_le (hf : Monotonehf: Monotone ff) {f: Ξ± β Ξ±n :n: ββ} (β: Typehn :hn: 0 < n0 <0: ?m.537n) (n: βhβ :hβ: x 0 β€ y 0xx: β β Ξ±0 β€0: ?m.574yy: β β Ξ±0) (hx : β0: ?m.577k <k: ?m.592n,n: βx (x: β β Ξ±k +k: ?m.5921) <1: ?m.605f (f: Ξ± β Ξ±xx: β β Ξ±k)) (hy : βk: ?m.592k <k: ?m.673n,n: βf (f: Ξ± β Ξ±yy: β β Ξ±k) β€k: ?m.673y (y: β β Ξ±k +k: ?m.6731)) :1: ?m.686xx: β β Ξ±n <n: βyy: β β Ξ±n :=n: βGoals accomplished! πΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
n: β
hnβ: 0 < n
hβ: x 0 β€ y 0
hxβ: β (k : β), k < n β x (k + 1) < f (x k)
hyβ: β (k : β), k < n β f (y k) β€ y (k + 1)
hn: 0 < Nat.zero
hx: β (k : β), k < Nat.zero β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.zero β f (y k) β€ y (k + 1)
zeroΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hnβ: 0 < nβ
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) < f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: 0 < n β (β (k : β), k < n β x (k + 1) < f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n < y n
hn: 0 < Nat.succ n
hx: β (k : β), k < Nat.succ n β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
n: β
hnβ: 0 < n
hβ: x 0 β€ y 0
hxβ: β (k : β), k < n β x (k + 1) < f (x k)
hyβ: β (k : β), k < n β f (y k) β€ y (k + 1)
hn: 0 < Nat.zero
hx: β (k : β), k < Nat.zero β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.zero β f (y k) β€ y (k + 1)
zeroΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
n: β
hnβ: 0 < n
hβ: x 0 β€ y 0
hxβ: β (k : β), k < n β x (k + 1) < f (x k)
hyβ: β (k : β), k < n β f (y k) β€ y (k + 1)
hn: 0 < Nat.zero
hx: β (k : β), k < Nat.zero β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.zero β f (y k) β€ y (k + 1)
zeroΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hnβ: 0 < nβ
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) < f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: 0 < n β (β (k : β), k < n β x (k + 1) < f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n < y n
hn: 0 < Nat.succ n
hx: β (k : β), k < Nat.succ n β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succGoals accomplished! πΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hnβ: 0 < nβ
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) < f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: 0 < n β (β (k : β), k < n β x (k + 1) < f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n < y n
hn: 0 < Nat.succ n
hx: β (k : β), k < Nat.succ n β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succx n β€ y nΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hnβ: 0 < nβ
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) < f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: 0 < n β (β (k : β), k < n β x (k + 1) < f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n < y n
hn: 0 < Nat.succ n
hx: β (k : β), k < Nat.succ n β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succx n β€ y nΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
n: β
hnβ: 0 < n
hβ: x 0 β€ y 0
hxβ: β (k : β), k < n β x (k + 1) < f (x k)
hyβ: β (k : β), k < n β f (y k) β€ y (k + 1)
ihn: 0 < Nat.zero β (β (k : β), k < Nat.zero β x (k + 1) < f (x k)) β (β (k : β), k < Nat.zero β f (y k) β€ y (k + 1)) β x Nat.zero < y Nat.zero
hn: 0 < Nat.succ Nat.zero
hx: β (k : β), k < Nat.succ Nat.zero β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ Nat.zero β f (y k) β€ y (k + 1)
succ.zeroGoals accomplished! πΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hnβ: 0 < nβ
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) < f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: 0 < n β (β (k : β), k < n β x (k + 1) < f (x k)) β (β (k : β), k < n β f (y k) β€ y (k + 1)) β x n < y n
hn: 0 < Nat.succ n
hx: β (k : β), k < Nat.succ n β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)
succx n β€ y nΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hnβ: 0 < nβ
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) < f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: 0 < Nat.succ n β (β (k : β), k < Nat.succ n β x (k + 1) < f (x k)) β (β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)) β x (Nat.succ n) < y (Nat.succ n)
hn: 0 < Nat.succ (Nat.succ n)
hx: β (k : β), k < Nat.succ (Nat.succ n) β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ (Nat.succ n) β f (y k) β€ y (k + 1)
succ.succΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hnβ: 0 < nβ
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) < f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: 0 < Nat.succ n β (β (k : β), k < Nat.succ n β x (k + 1) < f (x k)) β (β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)) β x (Nat.succ n) < y (Nat.succ n)
hn: 0 < Nat.succ (Nat.succ n)
hx: β (k : β), k < Nat.succ (Nat.succ n) β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ (Nat.succ n) β f (y k) β€ y (k + 1)
k: β
hk: k < Nat.succ n
succ.succ.refine'_1Ξ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hnβ: 0 < nβ
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) < f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: 0 < Nat.succ n β (β (k : β), k < Nat.succ n β x (k + 1) < f (x k)) β (β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)) β x (Nat.succ n) < y (Nat.succ n)
hn: 0 < Nat.succ (Nat.succ n)
hx: β (k : β), k < Nat.succ (Nat.succ n) β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ (Nat.succ n) β f (y k) β€ y (k + 1)
k: β
hk: k < Nat.succ n
succ.succ.refine'_2Ξ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hnβ: 0 < nβ
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) < f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: 0 < Nat.succ n β (β (k : β), k < Nat.succ n β x (k + 1) < f (x k)) β (β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)) β x (Nat.succ n) < y (Nat.succ n)
hn: 0 < Nat.succ (Nat.succ n)
hx: β (k : β), k < Nat.succ (Nat.succ n) β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ (Nat.succ n) β f (y k) β€ y (k + 1)
succ.succΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hnβ: 0 < nβ
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) < f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: 0 < Nat.succ n β (β (k : β), k < Nat.succ n β x (k + 1) < f (x k)) β (β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)) β x (Nat.succ n) < y (Nat.succ n)
hn: 0 < Nat.succ (Nat.succ n)
hx: β (k : β), k < Nat.succ (Nat.succ n) β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ (Nat.succ n) β f (y k) β€ y (k + 1)
k: β
hk: k < Nat.succ n
succ.succ.refine'_1Ξ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hnβ: 0 < nβ
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) < f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: 0 < Nat.succ n β (β (k : β), k < Nat.succ n β x (k + 1) < f (x k)) β (β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)) β x (Nat.succ n) < y (Nat.succ n)
hn: 0 < Nat.succ (Nat.succ n)
hx: β (k : β), k < Nat.succ (Nat.succ n) β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ (Nat.succ n) β f (y k) β€ y (k + 1)
k: β
hk: k < Nat.succ n
succ.succ.refine'_2Ξ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
nβ: β
hnβ: 0 < nβ
hβ: x 0 β€ y 0
hxβ: β (k : β), k < nβ β x (k + 1) < f (x k)
hyβ: β (k : β), k < nβ β f (y k) β€ y (k + 1)
n: β
ihn: 0 < Nat.succ n β (β (k : β), k < Nat.succ n β x (k + 1) < f (x k)) β (β (k : β), k < Nat.succ n β f (y k) β€ y (k + 1)) β x (Nat.succ n) < y (Nat.succ n)
hn: 0 < Nat.succ (Nat.succ n)
hx: β (k : β), k < Nat.succ (Nat.succ n) β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ (Nat.succ n) β f (y k) β€ y (k + 1)
succ.succ#align monotone.seq_pos_lt_seq_of_lt_of_le Monotone.seq_pos_lt_seq_of_lt_of_le theoremGoals accomplished! πseq_pos_lt_seq_of_le_of_lt (hf : Monotonehf: Monotone ff) {f: Ξ± β Ξ±n :n: ββ} (β: Typehn :hn: 0 < n0 <0: ?m.1264n) (n: βhβ :hβ: x 0 β€ y 0xx: β β Ξ±0 β€0: ?m.1301yy: β β Ξ±0) (hx : β0: ?m.1304k <k: ?m.1319n,n: βx (x: β β Ξ±k +k: ?m.13191) β€1: ?m.1332f (f: Ξ± β Ξ±xx: β β Ξ±k)) (hy : βk: ?m.1319k <k: ?m.1393n,n: βf (f: Ξ± β Ξ±yy: β β Ξ±k) <k: ?m.1393y (y: β β Ξ±k +k: ?m.13931)) :1: ?m.1406xx: β β Ξ±n <n: βyy: β β Ξ±n :=n: βhf.dual.seq_pos_lt_seq_of_lt_of_lehf: Monotone fhnhn: 0 < nhβ hy hx #align monotone.seq_pos_lt_seq_of_le_of_lt Monotone.seq_pos_lt_seq_of_le_of_lt theoremhβ: x 0 β€ y 0seq_lt_seq_of_lt_of_le (hf : Monotonehf: Monotone ff) (f: Ξ± β Ξ±n :n: ββ) (β: Typehβ :hβ: x 0 < y 0xx: β β Ξ±0 <0: ?m.1635yy: β β Ξ±0) (hx : β0: ?m.1646k <k: ?m.1661n,n: βx (x: β β Ξ±k +k: ?m.16611) <1: ?m.1677f (f: Ξ± β Ξ±xx: β β Ξ±k)) (hy : βk: ?m.1661k <k: ?m.1738n,n: βf (f: Ξ± β Ξ±yy: β β Ξ±k) β€k: ?m.1738y (y: β β Ξ±k +k: ?m.17381)) :1: ?m.1751xx: β β Ξ±n <n: βyy: β β Ξ±n :=n: βGoals accomplished! πΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
hβ: x 0 < y 0
hx: β (k : β), k < Nat.zero β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.zero β f (y k) β€ y (k + 1)
zeroΞ±: Type u_1
instβ: Preorder Ξ±
f: Ξ± β Ξ±
x, y: β β Ξ±
hf: Monotone f
hβ: x 0 < y 0
nβ: β
hx: β (k : β), k < Nat.succ nβ β x (k + 1) < f (x k)
hy: β (k : β), k < Nat.succ nβ β f (y k) β€ y (k + 1)
succ#align monotone.seq_lt_seq_of_lt_of_le Monotone.seq_lt_seq_of_lt_of_le theoremGoals accomplished! πseq_lt_seq_of_le_of_lt (hf : Monotonehf: Monotone ff) (f: Ξ± β Ξ±n :n: ββ) (β: Typehβ :hβ: x 0 < y 0xx: β β Ξ±0 <0: ?m.2077yy: β β Ξ±0) (hx : β0: ?m.2088k <k: ?m.2103n,n: βx (x: β β Ξ±k +k: ?m.21031) β€1: ?m.2119f (f: Ξ± β Ξ±xx: β β Ξ±k)) (hy : βk: ?m.2103k <k: ?m.2187n,n: βf (f: Ξ± β Ξ±yy: β β Ξ±k) <k: ?m.2187y (y: β β Ξ±k +k: ?m.21871)) :1: ?m.2200xx: β β Ξ±n <n: βyy: β β Ξ±n :=n: βhf.dual.seq_lt_seq_of_lt_of_lehf: Monotone fnn: βhβ hy hx #align monotone.seq_lt_seq_of_le_of_lt Monotone.seq_lt_seq_of_le_of_lt /-! ### Iterates of two functions In this section we compare the iterates of a monotone function `f : Ξ± β Ξ±` to iterates of any function `g : Ξ² β Ξ²`. If `h : Ξ² β Ξ±` satisfies `h β g β€ f β h`, then `h (g^[n] x)` grows slower than `f^[n] (h x)`, and similarly for the reversed inequality. Then we specialize these two lemmas to the case `Ξ² = Ξ±`, `h = id`. -/ variable {hβ: x 0 < y 0g :g: Ξ² β Ξ²Ξ² βΞ²: ?m.2383Ξ²} {Ξ²: ?m.2383h :h: Ξ² β Ξ±Ξ² βΞ²: ?m.2383Ξ±} open Function theoremΞ±: ?m.2363le_iterate_comp_of_le (hf : Monotonehf: Monotone ff) (H :f: Ξ± β Ξ±h βh: Ξ² β Ξ±g β€g: Ξ² β Ξ²f βf: Ξ± β Ξ±h) (h: Ξ² β Ξ±n :n: ββ) :β: Typeh βh: Ξ² β Ξ±g^[g: Ξ² β Ξ²n] β€n: βf^[f: Ξ± β Ξ±n] βn: βh := funh: Ξ² β Ξ±x =>x: ?m.2625Goals accomplished! πΞ±: Type u_1
Ξ²: Type u_2
instβ: Preorder Ξ±
f: Ξ± β Ξ±
xβ, y: β β Ξ±
g: Ξ² β Ξ²
h: Ξ² β Ξ±
hf: Monotone f
H: h β g β€ f β h
n: β
x: Ξ²
hβΞ±: Type u_1
Ξ²: Type u_2
instβ: Preorder Ξ±
f: Ξ± β Ξ±
xβ, y: β β Ξ±
g: Ξ² β Ξ²
h: Ξ² β Ξ±
hf: Monotone f
H: h β g β€ f β h
n: β
x: Ξ²
hxΞ±: Type u_1
Ξ²: Type u_2
instβ: Preorder Ξ±
f: Ξ± β Ξ±
xβ, y: β β Ξ±
g: Ξ² β Ξ²
h: Ξ² β Ξ±
hf: Monotone f
H: h β g β€ f β h
n: β
x: Ξ²
hyΞ±: Type u_1
Ξ²: Type u_2
instβ: Preorder Ξ±
f: Ξ± β Ξ±
xβ, y: β β Ξ±
g: Ξ² β Ξ²
h: Ξ² β Ξ±
hf: Monotone f
H: h β g β€ f β h
n: β
x: Ξ²
hβΞ±: Type u_1
Ξ²: Type u_2
instβ: Preorder Ξ±
f: Ξ± β Ξ±
xβ, y: β β Ξ±
g: Ξ² β Ξ²
h: Ξ² β Ξ±
hf: Monotone f
H: h β g β€ f β h
n: β
x: Ξ²
hxΞ±: Type u_1
Ξ²: Type u_2
instβ: Preorder Ξ±
f: Ξ± β Ξ±
xβ, y: β β Ξ±
g: Ξ² β Ξ²
h: Ξ² β Ξ±
hf: Monotone f
H: h β g β€ f β h
n: β
x: Ξ²
hyΞ±: Type u_1
Ξ²: Type u_2
instβ: Preorder Ξ±
f: Ξ± β Ξ±
xβ, y: β β Ξ±
g: Ξ² β Ξ²
h: Ξ² β Ξ±
hf: Monotone f
H: h β g β€ f β h
n: β
x: Ξ²
hβΞ±: Type u_1
Ξ²: Type u_2
instβ: Preorder Ξ±
f: Ξ± β Ξ±
xβ, y: β β Ξ±
g: Ξ² β Ξ²
h: Ξ² β Ξ±
hf: Monotone f
H: h β g β€ f β h
n: β
x: Ξ²
kβ: β
aβ: kβ < n
hxΞ±: Type u_1
Ξ²: Type u_2
instβ: Preorder Ξ±
f: Ξ± β Ξ±
xβ, y: β β Ξ±
g: Ξ² β Ξ²
h: Ξ² β Ξ±
hf: Monotone f
H: h β g β€ f β h
n: β
x: Ξ²
kβ: β
aβ: kβ < n
hy#align monotone.le_iterate_comp_of_le Monotone.le_iterate_comp_of_le theoremGoals accomplished! πiterate_comp_le_of_le (hf : Monotonehf: Monotone ff) (H :f: Ξ± β Ξ±f βf: Ξ± β Ξ±h β€h: Ξ² β Ξ±h βh: Ξ² β Ξ±g) (g: Ξ² β Ξ²n :n: ββ) :β: Typef^[f: Ξ± β Ξ±n] βn: βh β€h: Ξ² β Ξ±h βh: Ξ² β Ξ±g^[g: Ξ² β Ξ²n] :=n: βhf.dual.le_iterate_comp_of_le Hhf: Monotone fn #align monotone.iterate_comp_le_of_le Monotone.iterate_comp_le_of_le /-- If `f β€ g` and `f` is monotone, then `f^[n] β€ g^[n]`. -/ theorem iterate_le_of_le {n: βg :g: Ξ± β Ξ±Ξ± βΞ±: ?m.3913Ξ±} (Ξ±: ?m.3913hf : Monotonehf: Monotone ff) (f: Ξ± β Ξ±h :h: f β€ gf β€f: Ξ± β Ξ±g) (g: Ξ± β Ξ±n :n: ββ) :β: Typef^[f: Ξ± β Ξ±n] β€n: βg^[g: Ξ± β Ξ±n] :=n: βhf.iterate_comp_le_of_lehf: Monotone fhh: f β€ gn #align monotone.iterate_le_of_le Monotone.iterate_le_of_le /-- If `f β€ g` and `g` is monotone, then `f^[n] β€ g^[n]`. -/ theorem le_iterate_of_le {n: βg :g: Ξ± β Ξ±Ξ± βΞ±: ?m.4158Ξ±} (Ξ±: ?m.4158hg : Monotonehg: Monotone gg) (g: Ξ± β Ξ±h :h: f β€ gf β€f: Ξ± β Ξ±g) (g: Ξ± β Ξ±n :n: ββ) :β: Typef^[f: Ξ± β Ξ±n] β€n: βg^[g: Ξ± β Ξ±n] :=n: βhg.dual.iterate_le_of_lehg: Monotone ghh: f β€ gn #align monotone.le_iterate_of_le Monotone.le_iterate_of_le end Monotone /-! ### Comparison of iterations and the identity function If $f(x) β€ x$ for all $x$ (we express this as `f β€ id` in the code), then the same is true for any iterate of $f$, and similarly for the reversed inequality. -/ namespace Function section Preorder variable [Preordern: βΞ±] {Ξ±: ?m.4727f :f: Ξ± β Ξ±Ξ± βΞ±: ?m.4409Ξ±} /-- If $x β€ f x$ for all $x$ (we write this as `id β€ f`), then the same is true for any iterate `f^[n]` of `f`. -/ theorem id_le_iterate_of_id_le (Ξ±: ?m.4727h :h: id β€ fid β€id: {Ξ± : Sort ?u.4420} β Ξ± β Ξ±f) (f: Ξ± β Ξ±n :n: ββ) :β: Typeid β€id: {Ξ± : Sort ?u.4497} β Ξ± β Ξ±f^[f: Ξ± β Ξ±n] :=n: βGoals accomplished! π#align function.id_le_iterate_of_id_le Function.id_le_iterate_of_id_le theorem iterate_le_id_of_le_id (Goals accomplished! πh :h: f β€ idf β€f: Ξ± β Ξ±id) (id: {Ξ± : Sort ?u.4739} β Ξ± β Ξ±n :n: ββ) :β: Typef^[f: Ξ± β Ξ±n] β€n: βid := @id_le_iterate_of_id_leid: {Ξ± : Sort ?u.4822} β Ξ± β Ξ±Ξ±α΅α΅ _Ξ±: ?m.4727ff: Ξ± β Ξ±hh: f β€ idn #align function.iterate_le_id_of_le_id Function.iterate_le_id_of_le_id theorem monotone_iterate_of_id_le (n: βh :h: id β€ fid β€id: {Ξ± : Sort ?u.4939} β Ξ± β Ξ±f) : Monotone funf: Ξ± β Ξ±m =>m: ?m.5038f^[f: Ξ± β Ξ±m] := monotone_nat_of_le_succ $ funm: ?m.5038nn: ?m.5120x =>x: ?m.5123Goals accomplished! π#align function.monotone_iterate_of_id_le Function.monotone_iterate_of_id_le theorem antitone_iterate_of_le_id (Goals accomplished! πh :h: f β€ idf β€f: Ξ± β Ξ±id) : Antitone funid: {Ξ± : Sort ?u.5272} β Ξ± β Ξ±m =>m: ?m.5371f^[f: Ξ± β Ξ±m] := funm: ?m.5371mm: ?m.5427nn: ?m.5430hmn => @monotone_iterate_of_id_lehmn: ?m.5433Ξ±α΅α΅ _Ξ±: ?m.5260ff: Ξ± β Ξ±hh: f β€ idmm: ?m.5427nn: ?m.5430hmn #align function.antitone_iterate_of_le_id Function.antitone_iterate_of_le_id end Preorder /-! ### Iterates of commuting functions If `f` and `g` are monotone and commute, then `f x β€ g x` implies `f^[n] x β€ g^[n] x`, see `Function.Commute.iterate_le_of_map_le`. We also prove two strict inequality versions of this lemma, as well as `iff` versions. -/ namespace Commute section Preorder variable [Preorderhmn: ?m.5433Ξ±] {Ξ±: ?m.5515ff: Ξ± β Ξ±g :g: Ξ± β Ξ±Ξ± βΞ±: ?m.5515Ξ±} theoremΞ±: ?m.5515iterate_le_of_map_le (h : Commuteh: Commute f gff: Ξ± β Ξ±g) (g: Ξ± β Ξ±hf : Monotonehf: Monotone ff) (f: Ξ± β Ξ±hg : Monotonehg: Monotone gg) {g: Ξ± β Ξ±x} (x: ?m.5616hx :hx: f x β€ g xff: Ξ± β Ξ±x β€x: ?m.5616gg: Ξ± β Ξ±x) (x: ?m.5616n :n: ββ) : (β: Typef^[f: Ξ± β Ξ±n])n: βx β€ (x: ?m.5616g^[g: Ξ± β Ξ±n])n: βx :=x: ?m.5616Goals accomplished! πΞ±: Type u_1
instβ: Preorder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: Monotone g
x: Ξ±
hx: f x β€ g x
n: β
hβΞ±: Type u_1
instβ: Preorder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: Monotone g
x: Ξ±
hx: f x β€ g x
n: β
hxΞ±: Type u_1
instβ: Preorder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: Monotone g
x: Ξ±
hx: f x β€ g x
n: β
hyΞ±: Type u_1
instβ: Preorder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: Monotone g
x: Ξ±
hx: f x β€ g x
n: β
hβΞ±: Type u_1
instβ: Preorder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: Monotone g
x: Ξ±
hx: f x β€ g x
n: β
hxΞ±: Type u_1
instβ: Preorder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: Monotone g
x: Ξ±
hx: f x β€ g x
n: β
hyGoals accomplished! πGoals accomplished! πGoals accomplished! π#align function.commute.iterate_le_of_map_le Function.Commute.iterate_le_of_map_le theoremGoals accomplished! πiterate_pos_lt_of_map_lt (h : Commuteh: Commute f gff: Ξ± β Ξ±g) (g: Ξ± β Ξ±hf : Monotonehf: Monotone ff) (f: Ξ± β Ξ±hg : StrictMonohg: StrictMono gg) {g: Ξ± β Ξ±x} (x: Ξ±hx :hx: f x < g xff: Ξ± β Ξ±x <x: ?m.6161gg: Ξ± β Ξ±x) {x: ?m.6161n} (n: βhn :hn: 0 < n0 <0: ?m.6182n) : (n: ?m.6177f^[f: Ξ± β Ξ±n])n: ?m.6177x < (x: ?m.6161g^[g: Ξ± β Ξ±n])n: ?m.6177x :=x: ?m.6161Goals accomplished! πΞ±: Type u_1
instβ: Preorder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
hx: f x < g x
n: β
hn: 0 < n
hβΞ±: Type u_1
instβ: Preorder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
hx: f x < g x
n: β
hn: 0 < n
hxΞ±: Type u_1
instβ: Preorder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
hx: f x < g x
n: β
hn: 0 < n
hyΞ±: Type u_1
instβ: Preorder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
hx: f x < g x
n: β
hn: 0 < n
hβΞ±: Type u_1
instβ: Preorder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
hx: f x < g x
n: β
hn: 0 < n
hxΞ±: Type u_1
instβ: Preorder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
hx: f x < g x
n: β
hn: 0 < n
hyGoals accomplished! πGoals accomplished! π#align function.commute.iterate_pos_lt_of_map_lt Function.Commute.iterate_pos_lt_of_map_lt theoremGoals accomplished! πiterate_pos_lt_of_map_lt' (h : Commuteh: Commute f gff: Ξ± β Ξ±g) (g: Ξ± β Ξ±hf : StrictMonohf: StrictMono ff) (f: Ξ± β Ξ±hg : Monotonehg: Monotone gg) {g: Ξ± β Ξ±x} (x: Ξ±hx :hx: f x < g xff: Ξ± β Ξ±x <x: ?m.6793gg: Ξ± β Ξ±x) {x: ?m.6793n} (n: βhn :hn: 0 < n0 <0: ?m.6814n) : (n: ?m.6809f^[f: Ξ± β Ξ±n])n: ?m.6809x < (x: ?m.6793g^[g: Ξ± β Ξ±n])n: ?m.6809x := @iterate_pos_lt_of_map_ltx: ?m.6793Ξ±α΅α΅ _Ξ±: ?m.6708gg: Ξ± β Ξ±ff: Ξ± β Ξ±h.symmh: Commute f ghg.dualhg: Monotone ghf.hf: StrictMono fdualdual: β {Ξ± : Type ?u.6973} {Ξ² : Type ?u.6972} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] {f : Ξ± β Ξ²}, StrictMono f β StrictMono (βOrderDual.toDual β f β βOrderDual.ofDual)xx: Ξ±hxhx: f x < g xnn: βhn #align function.commute.iterate_pos_lt_of_map_lt' Function.Commute.iterate_pos_lt_of_map_lt' end Preorder variable [LinearOrderhn: 0 < nΞ±] {Ξ±: ?m.7047ff: Ξ± β Ξ±g :g: Ξ± β Ξ±Ξ± βΞ±: ?m.7031Ξ±} theoremΞ±: ?m.7031iterate_pos_lt_iff_map_lt (h : Commuteh: Commute f gff: Ξ± β Ξ±g) (g: Ξ± β Ξ±hf : Monotonehf: Monotone ff) (f: Ξ± β Ξ±hg : StrictMonohg: StrictMono gg) {g: Ξ± β Ξ±xx: Ξ±n} (n: ?m.7161hn :hn: 0 < n0 <0: ?m.7166n) : (n: ?m.7161f^[f: Ξ± β Ξ±n])n: ?m.7161x < (x: ?m.7158g^[g: Ξ± β Ξ±n])n: ?m.7161x βx: ?m.7158ff: Ξ± β Ξ±x <x: ?m.7158gg: Ξ± β Ξ±x :=x: ?m.7158Goals accomplished! πΞ±: Type u_1
instβ: LinearOrder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
n: β
hn: 0 < n
H: f x < g x
inlΞ±: Type u_1
instβ: LinearOrder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
n: β
hn: 0 < n
H: f x = g x
inr.inlΞ±: Type u_1
instβ: LinearOrder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
n: β
hn: 0 < n
H: g x < f x
inr.inrΞ±: Type u_1
instβ: LinearOrder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
n: β
hn: 0 < n
H: f x < g x
inlΞ±: Type u_1
instβ: LinearOrder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
n: β
hn: 0 < n
H: f x = g x
inr.inlΞ±: Type u_1
instβ: LinearOrder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
n: β
hn: 0 < n
H: g x < f x
inr.inrGoals accomplished! πΞ±: Type u_1
instβ: LinearOrder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
n: β
hn: 0 < n
H: f x = g x
inr.inlΞ±: Type u_1
instβ: LinearOrder Ξ±
f, g: Ξ± β Ξ±
h: Commute f g
hf: Monotone f
hg: StrictMono g
x: Ξ±
n: β
hn: 0 < n
H: g x < f x
inr.inrGoals accomplished! π#align function.commute.iterate_pos_lt_iff_map_lt Function.Commute.iterate_pos_lt_iff_map_lt theoremGoals accomplished! πiterate_pos_lt_iff_map_lt' (h : Commuteh: Commute f gff: Ξ± β Ξ±g) (g: Ξ± β Ξ±hf : StrictMonohf: StrictMono ff) (f: Ξ± β Ξ±hg : Monotonehg: Monotone gg) {g: Ξ± β Ξ±xx: ?m.8010n} (n: ?m.8013hn :hn: 0 < n0 <0: ?m.8018n) : (n: ?m.8013f^[f: Ξ± β Ξ±n])n: ?m.8013x < (x: ?m.8010g^[g: Ξ± β Ξ±n])n: ?m.8013x βx: ?m.8010ff: Ξ± β Ξ±x <x: ?m.8010gg: Ξ± β Ξ±x := @iterate_pos_lt_iff_map_ltx: ?m.8010Ξ±α΅α΅ _ _ _Ξ±: ?m.7899h.symmh: Commute f ghg.dualhg: Monotone ghf.hf: StrictMono fdualdual: β {Ξ± : Type ?u.8223} {Ξ² : Type ?u.8222} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] {f : Ξ± β Ξ²}, StrictMono f β StrictMono (βOrderDual.toDual β f β βOrderDual.ofDual)xx: Ξ±nn: βhn #align function.commute.iterate_pos_lt_iff_map_lt' Function.Commute.iterate_pos_lt_iff_map_lt' theoremhn: 0 < niterate_pos_le_iff_map_le: