Theorem: Monotone.seq_pos_lt_seq_of_lt_of_le
File: Mathlib/Order/Iterate.lean

tactic: induction' n with n ihn
state_before: α : 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)
⊢ x n < y n

tactic: suffices x n ≤ y n from (hx n n.lt_succ_self).trans_le ((hf this).trans $ hy n n.lt_succ_self)
state_before: case 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 < 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)
⊢ x (Nat.succ n) < y (Nat.succ n)

tactic: cases n with
| zero => exact h₀
| succ n =>
  refine' (ihn n.zero_lt_succ (fun k hk => hx _ _) fun k hk => hy _ _).le <;>
  exact hk.trans n.succ.lt_succ_self
state_before: case 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 < 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)
⊢ x n ≤ y n

tactic: exact hn.false.elim
state_before: case 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)
⊢ x Nat.zero < y Nat.zero

tactic: exact h₀
state_before: case succ.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)
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)
⊢ x Nat.zero ≤ y Nat.zero

tactic: refine' (ihn n.zero_lt_succ (fun k hk => hx _ _) fun k hk => hy _ _).le <;>
exact hk.trans n.succ.lt_succ_self
state_before: case 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)
⊢ x (Nat.succ n) ≤ y (Nat.succ n)