Theorem: Order.pred_succ_iterate_of_not_isMax
File: Mathlib/Order/SuccPred/Basic.lean

tactic: induction' n with n hn
state_before: α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n : ℕ
hin : ¬IsMax ((succ^[n - 1]) i)
⊢ (pred^[n]) ((succ^[n]) i) = i

tactic: rw [Nat.succ_sub_succ_eq_sub, Nat.sub_zero] at hin
state_before: case succ
α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n✝ : ℕ
hin✝ : ¬IsMax ((succ^[n✝ - 1]) i)
n : ℕ
hn : ¬IsMax ((succ^[n - 1]) i) → (pred^[n]) ((succ^[n]) i) = i
hin : ¬IsMax ((succ^[Nat.succ n - 1]) i)
⊢ (pred^[Nat.succ n]) ((succ^[Nat.succ n]) i) = i

tactic: rw [Function.iterate_succ, Function.iterate_succ']
state_before: case succ
α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n✝ : ℕ
hin✝ : ¬IsMax ((succ^[n✝ - 1]) i)
n : ℕ
hn : ¬IsMax ((succ^[n - 1]) i) → (pred^[n]) ((succ^[n]) i) = i
hin : ¬IsMax ((succ^[n]) i)
h_not_max : ¬IsMax ((succ^[n - 1]) i)
⊢ (pred^[Nat.succ n]) ((succ^[Nat.succ n]) i) = i

tactic: simp only [Function.comp_apply]
state_before: case succ
α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n✝ : ℕ
hin✝ : ¬IsMax ((succ^[n✝ - 1]) i)
n : ℕ
hn : ¬IsMax ((succ^[n - 1]) i) → (pred^[n]) ((succ^[n]) i) = i
hin : ¬IsMax ((succ^[n]) i)
h_not_max : ¬IsMax ((succ^[n - 1]) i)
⊢ (pred^[n] ∘ pred) ((succ ∘ succ^[n]) i) = i

tactic: rw [pred_succ_of_not_isMax hin]
state_before: case succ
α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n✝ : ℕ
hin✝ : ¬IsMax ((succ^[n✝ - 1]) i)
n : ℕ
hn : ¬IsMax ((succ^[n - 1]) i) → (pred^[n]) ((succ^[n]) i) = i
hin : ¬IsMax ((succ^[n]) i)
h_not_max : ¬IsMax ((succ^[n - 1]) i)
⊢ (pred^[n]) (pred (succ ((succ^[n]) i))) = i

tactic: exact hn h_not_max
state_before: case succ
α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n✝ : ℕ
hin✝ : ¬IsMax ((succ^[n✝ - 1]) i)
n : ℕ
hn : ¬IsMax ((succ^[n - 1]) i) → (pred^[n]) ((succ^[n]) i) = i
hin : ¬IsMax ((succ^[n]) i)
h_not_max : ¬IsMax ((succ^[n - 1]) i)
⊢ (pred^[n]) ((succ^[n]) i) = i

tactic: simp only [Nat.zero_eq, Function.iterate_zero, id.def]
state_before: case zero
α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n : ℕ
hin✝ : ¬IsMax ((succ^[n - 1]) i)
hin : ¬IsMax ((succ^[Nat.zero - 1]) i)
⊢ (pred^[Nat.zero]) ((succ^[Nat.zero]) i) = i

tactic: cases' n with n
state_before: α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n✝ : ℕ
hin✝ : ¬IsMax ((succ^[n✝ - 1]) i)
n : ℕ
hn : ¬IsMax ((succ^[n - 1]) i) → (pred^[n]) ((succ^[n]) i) = i
hin : ¬IsMax ((succ^[n]) i)
⊢ ¬IsMax ((succ^[n - 1]) i)

tactic: rw [Nat.succ_sub_succ_eq_sub, Nat.sub_zero] at hn⊢
state_before: case succ
α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n✝ : ℕ
hin✝ : ¬IsMax ((succ^[n✝ - 1]) i)
n : ℕ
hn : ¬IsMax ((succ^[Nat.succ n - 1]) i) → (pred^[Nat.succ n]) ((succ^[Nat.succ n]) i) = i
hin : ¬IsMax ((succ^[Nat.succ n]) i)
⊢ ¬IsMax ((succ^[Nat.succ n - 1]) i)

tactic: have h_sub_le : (succ^[n]) i ≤ (succ^[n.succ]) i := by
  rw [Function.iterate_succ']
  exact le_succ _
state_before: case succ
α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n✝ : ℕ
hin✝ : ¬IsMax ((succ^[n✝ - 1]) i)
n : ℕ
hn : ¬IsMax ((succ^[n]) i) → (pred^[Nat.succ n]) ((succ^[Nat.succ n]) i) = i
hin : ¬IsMax ((succ^[Nat.succ n]) i)
⊢ ¬IsMax ((succ^[n]) i)

tactic: refine' fun h_max => hin fun j hj => _
state_before: case succ
α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n✝ : ℕ
hin✝ : ¬IsMax ((succ^[n✝ - 1]) i)
n : ℕ
hn : ¬IsMax ((succ^[n]) i) → (pred^[Nat.succ n]) ((succ^[Nat.succ n]) i) = i
hin : ¬IsMax ((succ^[Nat.succ n]) i)
h_sub_le : (succ^[n]) i ≤ (succ^[Nat.succ n]) i
⊢ ¬IsMax ((succ^[n]) i)

tactic: have hj_le : j ≤ (succ^[n]) i := h_max (h_sub_le.trans hj)
state_before: case succ
α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n✝ : ℕ
hin✝ : ¬IsMax ((succ^[n✝ - 1]) i)
n : ℕ
hn : ¬IsMax ((succ^[n]) i) → (pred^[Nat.succ n]) ((succ^[Nat.succ n]) i) = i
hin : ¬IsMax ((succ^[Nat.succ n]) i)
h_sub_le : (succ^[n]) i ≤ (succ^[Nat.succ n]) i
h_max : IsMax ((succ^[n]) i)
j : α
hj : (succ^[Nat.succ n]) i ≤ j
⊢ j ≤ (succ^[Nat.succ n]) i

tactic: exact hj_le.trans h_sub_le
state_before: case succ
α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n✝ : ℕ
hin✝ : ¬IsMax ((succ^[n✝ - 1]) i)
n : ℕ
hn : ¬IsMax ((succ^[n]) i) → (pred^[Nat.succ n]) ((succ^[Nat.succ n]) i) = i
hin : ¬IsMax ((succ^[Nat.succ n]) i)
h_sub_le : (succ^[n]) i ≤ (succ^[Nat.succ n]) i
h_max : IsMax ((succ^[n]) i)
j : α
hj : (succ^[Nat.succ n]) i ≤ j
hj_le : j ≤ (succ^[n]) i
⊢ j ≤ (succ^[Nat.succ n]) i

tactic: simpa using hin
state_before: case zero
α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n : ℕ
hin✝ : ¬IsMax ((succ^[n - 1]) i)
hn : ¬IsMax ((succ^[Nat.zero - 1]) i) → (pred^[Nat.zero]) ((succ^[Nat.zero]) i) = i
hin : ¬IsMax ((succ^[Nat.zero]) i)
⊢ ¬IsMax ((succ^[Nat.zero - 1]) i)

tactic: rw [Function.iterate_succ']
state_before: α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n✝ : ℕ
hin✝ : ¬IsMax ((succ^[n✝ - 1]) i)
n : ℕ
hn : ¬IsMax ((succ^[n]) i) → (pred^[Nat.succ n]) ((succ^[Nat.succ n]) i) = i
hin : ¬IsMax ((succ^[Nat.succ n]) i)
⊢ (succ^[n]) i ≤ (succ^[Nat.succ n]) i

tactic: exact le_succ _
state_before: α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : SuccOrder α
inst✝ : PredOrder α
a b i : α
n✝ : ℕ
hin✝ : ¬IsMax ((succ^[n✝ - 1]) i)
n : ℕ
hn : ¬IsMax ((succ^[n]) i) → (pred^[Nat.succ n]) ((succ^[Nat.succ n]) i) = i
hin : ¬IsMax ((succ^[Nat.succ n]) i)
⊢ (succ^[n]) i ≤ (succ ∘ succ^[n]) i