Theorem: strictMonoOn_Iic_of_lt_succ
File: Mathlib/Data/Set/Intervals/Monotone.lean

tactic: intro x hx y hy hxy
state_before: α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
⊢ StrictMonoOn ψ (Iic n)

tactic: obtain ⟨i, rfl⟩ := hxy.le.exists_succ_iterate
state_before: α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
y : α
hy : y ∈ Iic n
hxy : x < y
⊢ ψ x < ψ y

tactic: induction' i with k ih
state_before: case intro
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
i : ℕ
hy : (succ^[i]) x ∈ Iic n
hxy : x < (succ^[i]) x
⊢ ψ x < ψ ((succ^[i]) x)

tactic: cases' k with k
state_before: case intro.succ
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
i : ℕ
hy✝ : (succ^[i]) x ∈ Iic n
hxy✝ : x < (succ^[i]) x
k : ℕ
ih : (succ^[k]) x ∈ Iic n → x < (succ^[k]) x → ψ x < ψ ((succ^[k]) x)
hy : (succ^[Nat.succ k]) x ∈ Iic n
hxy : x < (succ^[Nat.succ k]) x
⊢ ψ x < ψ ((succ^[Nat.succ k]) x)

tactic: rw [Set.mem_Iic] at *
state_before: case intro.succ.succ
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
i : ℕ
hy✝ : (succ^[i]) x ∈ Iic n
hxy✝ : x < (succ^[i]) x
k : ℕ
ih : (succ^[Nat.succ k]) x ∈ Iic n → x < (succ^[Nat.succ k]) x → ψ x < ψ ((succ^[Nat.succ k]) x)
hy : (succ^[Nat.succ (Nat.succ k)]) x ∈ Iic n
hxy : x < (succ^[Nat.succ (Nat.succ k)]) x
⊢ ψ x < ψ ((succ^[Nat.succ (Nat.succ k)]) x)

tactic: simp only [Function.iterate_succ', Function.comp_apply] at ih hxy hy⊢
state_before: case intro.succ.succ
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ≤ n
i : ℕ
hy✝ : (succ^[i]) x ≤ n
hxy✝ : x < (succ^[i]) x
k : ℕ
ih : (succ^[Nat.succ k]) x ≤ n → x < (succ^[Nat.succ k]) x → ψ x < ψ ((succ^[Nat.succ k]) x)
hy : (succ^[Nat.succ (Nat.succ k)]) x ≤ n
hxy : x < (succ^[Nat.succ (Nat.succ k)]) x
⊢ ψ x < ψ ((succ^[Nat.succ (Nat.succ k)]) x)

tactic: by_cases hmax : IsMax ((succ^[k]) x)
state_before: case intro.succ.succ
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ≤ n
i : ℕ
hy✝ : (succ^[i]) x ≤ n
hxy✝ : x < (succ^[i]) x
k : ℕ
ih : succ ((succ^[k]) x) ≤ n → x < succ ((succ^[k]) x) → ψ x < ψ (succ ((succ^[k]) x))
hxy : x < succ (succ ((succ^[k]) x))
hy : succ (succ ((succ^[k]) x)) ≤ n
⊢ ψ x < ψ (succ (succ ((succ^[k]) x)))

tactic: by_cases hmax' : IsMax (succ ((succ^[k]) x))
state_before: case neg
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ≤ n
i : ℕ
hy✝ : (succ^[i]) x ≤ n
hxy✝ : x < (succ^[i]) x
k : ℕ
ih : succ ((succ^[k]) x) ≤ n → x < succ ((succ^[k]) x) → ψ x < ψ (succ ((succ^[k]) x))
hxy : x < succ (succ ((succ^[k]) x))
hy : succ (succ ((succ^[k]) x)) ≤ n
hmax : ¬IsMax ((succ^[k]) x)
⊢ ψ x < ψ (succ (succ ((succ^[k]) x)))

tactic: refine'
  lt_trans
    (ih (le_trans (le_succ _) hy)
      (lt_of_le_of_lt (le_succ_iterate k _) (lt_succ_iff_not_isMax.2 hmax)))
    _
state_before: case neg
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ≤ n
i : ℕ
hy✝ : (succ^[i]) x ≤ n
hxy✝ : x < (succ^[i]) x
k : ℕ
ih : succ ((succ^[k]) x) ≤ n → x < succ ((succ^[k]) x) → ψ x < ψ (succ ((succ^[k]) x))
hxy : x < succ (succ ((succ^[k]) x))
hy : succ (succ ((succ^[k]) x)) ≤ n
hmax : ¬IsMax ((succ^[k]) x)
hmax' : ¬IsMax (succ ((succ^[k]) x))
⊢ ψ x < ψ (succ (succ ((succ^[k]) x)))

tactic: rw [← Function.comp_apply (f := succ), ← Function.iterate_succ']
state_before: case neg
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ≤ n
i : ℕ
hy✝ : (succ^[i]) x ≤ n
hxy✝ : x < (succ^[i]) x
k : ℕ
ih : succ ((succ^[k]) x) ≤ n → x < succ ((succ^[k]) x) → ψ x < ψ (succ ((succ^[k]) x))
hxy : x < succ (succ ((succ^[k]) x))
hy : succ (succ ((succ^[k]) x)) ≤ n
hmax : ¬IsMax ((succ^[k]) x)
hmax' : ¬IsMax (succ ((succ^[k]) x))
⊢ ψ (succ ((succ^[k]) x)) < ψ (succ (succ ((succ^[k]) x)))

tactic: refine' hψ _ (lt_of_lt_of_le _ hy)
state_before: case neg
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ≤ n
i : ℕ
hy✝ : (succ^[i]) x ≤ n
hxy✝ : x < (succ^[i]) x
k : ℕ
ih : succ ((succ^[k]) x) ≤ n → x < succ ((succ^[k]) x) → ψ x < ψ (succ ((succ^[k]) x))
hxy : x < succ (succ ((succ^[k]) x))
hy : succ (succ ((succ^[k]) x)) ≤ n
hmax : ¬IsMax ((succ^[k]) x)
hmax' : ¬IsMax (succ ((succ^[k]) x))
⊢ ψ ((succ^[Nat.succ k]) x) < ψ (succ ((succ^[Nat.succ k]) x))

tactic: rwa [Function.iterate_succ', Function.comp_apply, lt_succ_iff_not_isMax]
state_before: case neg
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ≤ n
i : ℕ
hy✝ : (succ^[i]) x ≤ n
hxy✝ : x < (succ^[i]) x
k : ℕ
ih : succ ((succ^[k]) x) ≤ n → x < succ ((succ^[k]) x) → ψ x < ψ (succ ((succ^[k]) x))
hxy : x < succ (succ ((succ^[k]) x))
hy : succ (succ ((succ^[k]) x)) ≤ n
hmax : ¬IsMax ((succ^[k]) x)
hmax' : ¬IsMax (succ ((succ^[k]) x))
⊢ (succ^[Nat.succ k]) x < succ (succ ((succ^[k]) x))

tactic: simp at hxy
state_before: case intro.zero
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
i : ℕ
hy✝ : (succ^[i]) x ∈ Iic n
hxy✝ : x < (succ^[i]) x
hy : (succ^[Nat.zero]) x ∈ Iic n
hxy : x < (succ^[Nat.zero]) x
⊢ ψ x < ψ ((succ^[Nat.zero]) x)

tactic: exact hψ _ (lt_of_lt_of_le hxy hy)
state_before: case intro.succ.zero
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
i : ℕ
hy✝ : (succ^[i]) x ∈ Iic n
hxy✝ : x < (succ^[i]) x
ih : (succ^[Nat.zero]) x ∈ Iic n → x < (succ^[Nat.zero]) x → ψ x < ψ ((succ^[Nat.zero]) x)
hy : (succ^[Nat.succ Nat.zero]) x ∈ Iic n
hxy : x < (succ^[Nat.succ Nat.zero]) x
⊢ ψ x < ψ ((succ^[Nat.succ Nat.zero]) x)

tactic: rw [succ_eq_iff_isMax.2 hmax] at hxy ⊢
state_before: case pos
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ≤ n
i : ℕ
hy✝ : (succ^[i]) x ≤ n
hxy✝ : x < (succ^[i]) x
k : ℕ
ih : succ ((succ^[k]) x) ≤ n → x < succ ((succ^[k]) x) → ψ x < ψ (succ ((succ^[k]) x))
hxy : x < succ (succ ((succ^[k]) x))
hy : succ (succ ((succ^[k]) x)) ≤ n
hmax : IsMax ((succ^[k]) x)
⊢ ψ x < ψ (succ (succ ((succ^[k]) x)))

tactic: exact ih (le_trans (le_succ _) hy) hxy
state_before: case pos
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ≤ n
i : ℕ
hy✝ : (succ^[i]) x ≤ n
hxy✝ : x < (succ^[i]) x
k : ℕ
ih : succ ((succ^[k]) x) ≤ n → x < succ ((succ^[k]) x) → ψ x < ψ (succ ((succ^[k]) x))
hxy : x < succ ((succ^[k]) x)
hy : succ (succ ((succ^[k]) x)) ≤ n
hmax : IsMax ((succ^[k]) x)
⊢ ψ x < ψ (succ ((succ^[k]) x))

tactic: rw [succ_eq_iff_isMax.2 hmax'] at hxy ⊢
state_before: case pos
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ≤ n
i : ℕ
hy✝ : (succ^[i]) x ≤ n
hxy✝ : x < (succ^[i]) x
k : ℕ
ih : succ ((succ^[k]) x) ≤ n → x < succ ((succ^[k]) x) → ψ x < ψ (succ ((succ^[k]) x))
hxy : x < succ (succ ((succ^[k]) x))
hy : succ (succ ((succ^[k]) x)) ≤ n
hmax : ¬IsMax ((succ^[k]) x)
hmax' : IsMax (succ ((succ^[k]) x))
⊢ ψ x < ψ (succ (succ ((succ^[k]) x)))

tactic: exact ih (le_trans (le_succ _) hy) hxy
state_before: case pos
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ (m : α), m < n → ψ m < ψ (succ m)
x : α
hx : x ≤ n
i : ℕ
hy✝ : (succ^[i]) x ≤ n
hxy✝ : x < (succ^[i]) x
k : ℕ
ih : succ ((succ^[k]) x) ≤ n → x < succ ((succ^[k]) x) → ψ x < ψ (succ ((succ^[k]) x))
hxy : x < succ ((succ^[k]) x)
hy : succ (succ ((succ^[k]) x)) ≤ n
hmax : ¬IsMax ((succ^[k]) x)
hmax' : IsMax (succ ((succ^[k]) x))
⊢ ψ x < ψ (succ ((succ^[k]) x))