Theorem: strictMonoOn_Iic_of_lt_succ
File: Mathlib/Order/Interval/Set/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 < n, ψ m < ψ (succ m)
⊢ StrictMonoOn ψ (Iic n)
state_after: α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
y : α
hy : y ∈ Iic n
hxy : x < y
⊢ ψ x < ψ y

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 < n, ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
y : α
hy : y ∈ Iic n
hxy : x < y
⊢ ψ x < ψ y
state_after: case intro
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ 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: 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 < 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)
state_after: case intro.zero
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
hy : succ^[0] x ∈ Iic n
hxy : x < succ^[0] x
⊢ ψ x < ψ (succ^[0] x)

case intro.succ
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
k : ℕ
ih : succ^[k] x ∈ Iic n → x < succ^[k] x → ψ x < ψ (succ^[k] x)
hy : succ^[k + 1] x ∈ Iic n
hxy : x < succ^[k + 1] x
⊢ ψ x < ψ (succ^[k + 1] 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 < n, ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
k : ℕ
ih : succ^[k] x ∈ Iic n → x < succ^[k] x → ψ x < ψ (succ^[k] x)
hy : succ^[k + 1] x ∈ Iic n
hxy : x < succ^[k + 1] x
⊢ ψ x < ψ (succ^[k + 1] x)
state_after: case intro.succ.zero
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
ih : succ^[0] x ∈ Iic n → x < succ^[0] x → ψ x < ψ (succ^[0] x)
hy : succ^[0 + 1] x ∈ Iic n
hxy : x < succ^[0 + 1] x
⊢ ψ x < ψ (succ^[0 + 1] x)

case intro.succ.succ
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
k : ℕ
ih : succ^[k + 1] x ∈ Iic n → x < succ^[k + 1] x → ψ x < ψ (succ^[k + 1] x)
hy : succ^[k + 1 + 1] x ∈ Iic n
hxy : x < succ^[k + 1 + 1] x
⊢ ψ x < ψ (succ^[k + 1 + 1] 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 < n, ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
k : ℕ
ih : succ^[k + 1] x ∈ Iic n → x < succ^[k + 1] x → ψ x < ψ (succ^[k + 1] x)
hy : succ^[k + 1 + 1] x ∈ Iic n
hxy : x < succ^[k + 1 + 1] x
⊢ ψ x < ψ (succ^[k + 1 + 1] x)
state_after: case intro.succ.succ
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
k : ℕ
ih : succ^[k + 1] x ≤ n → x < succ^[k + 1] x → ψ x < ψ (succ^[k + 1] x)
hy : succ^[k + 1 + 1] x ≤ n
hxy : x < succ^[k + 1 + 1] x
⊢ ψ x < ψ (succ^[k + 1 + 1] 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 < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
k : ℕ
ih : succ^[k + 1] x ≤ n → x < succ^[k + 1] x → ψ x < ψ (succ^[k + 1] x)
hy : succ^[k + 1 + 1] x ≤ n
hxy : x < succ^[k + 1 + 1] x
⊢ ψ x < ψ (succ^[k + 1 + 1] x)
state_after: case intro.succ.succ
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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^[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 < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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)))
state_after: case pos
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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)))

case neg
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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: 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 < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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)))
state_after: case pos
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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)))

case neg
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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: 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 < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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)))
state_after: case neg
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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: 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 < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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)))
state_after: case neg
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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^[k.succ] x) < ψ (succ (succ^[k.succ] 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 < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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^[k.succ] x) < ψ (succ (succ^[k.succ] x))
state_after: case neg
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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^[k.succ] x < succ (succ (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 < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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^[k.succ] x < succ (succ (succ^[k] x))
state_after: no goals

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 < n, ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
hy : succ^[0] x ∈ Iic n
hxy : x < succ^[0] x
⊢ ψ x < ψ (succ^[0] x)
state_after: no goals

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 < n, ψ m < ψ (succ m)
x : α
hx : x ∈ Iic n
ih : succ^[0] x ∈ Iic n → x < succ^[0] x → ψ x < ψ (succ^[0] x)
hy : succ^[0 + 1] x ∈ Iic n
hxy : x < succ^[0 + 1] x
⊢ ψ x < ψ (succ^[0 + 1] x)
state_after: no goals

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 < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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)))
state_after: case pos
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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: 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 < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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))
state_after: no goals

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 < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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)))
state_after: case pos
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : Preorder β
ψ : α → β
inst✝¹ : SuccOrder α
inst✝ : IsSuccArchimedean α
n : α
hψ : ∀ m < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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))

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 < n, ψ m < ψ (succ m)
x : α
hx : x ≤ n
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))
state_after: no goals