Theorem: Nat.strong_decreasing_induction
File: Mathlib/Order/Interval/Finset/Nat.lean

tactic: apply Nat.decreasing_induction_of_not_bddAbove (P := fun n ↦ ∀ m ≥ n, P m) _ _ n n le_rfl
state_before: a b c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
base : ∃ n, ∀ m > n, P m
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n : ℕ
⊢ P n
state_after: a b c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
base : ∃ n, ∀ m > n, P m
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n : ℕ
⊢ ∀ (n : ℕ), (fun n => ∀ m ≥ n, P m) (n + 1) → (fun n => ∀ m ≥ n, P m) n

a b c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
base : ∃ n, ∀ m > n, P m
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n : ℕ
⊢ ¬BddAbove {x | (fun n => ∀ m ≥ n, P m) x}

tactic: intro n ih m hm
state_before: a b c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
base : ∃ n, ∀ m > n, P m
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n : ℕ
⊢ ∀ (n : ℕ), (fun n => ∀ m ≥ n, P m) (n + 1) → (fun n => ∀ m ≥ n, P m) n
state_after: a b c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
base : ∃ n, ∀ m > n, P m
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n✝ n : ℕ
ih : ∀ m ≥ n + 1, P m
m : ℕ
hm : m ≥ n
⊢ P m

tactic: rcases hm.eq_or_lt with rfl | hm
state_before: a b c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
base : ∃ n, ∀ m > n, P m
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n✝ n : ℕ
ih : ∀ m ≥ n + 1, P m
m : ℕ
hm : m ≥ n
⊢ P m
state_after: case inl
a b c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
base : ∃ n, ∀ m > n, P m
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n✝ n : ℕ
ih : ∀ m ≥ n + 1, P m
hm : n ≥ n
⊢ P n

case inr
a b c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
base : ∃ n, ∀ m > n, P m
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n✝ n : ℕ
ih : ∀ m ≥ n + 1, P m
m : ℕ
hm✝ : m ≥ n
hm : n < m
⊢ P m

tactic: exact step n ih
state_before: case inl
a b c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
base : ∃ n, ∀ m > n, P m
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n✝ n : ℕ
ih : ∀ m ≥ n + 1, P m
hm : n ≥ n
⊢ P n
state_after: no goals

tactic: exact ih m hm
state_before: case inr
a b c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
base : ∃ n, ∀ m > n, P m
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n✝ n : ℕ
ih : ∀ m ≥ n + 1, P m
m : ℕ
hm✝ : m ≥ n
hm : n < m
⊢ P m
state_after: no goals

tactic: rintro ⟨b, hb⟩
state_before: a b c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
base : ∃ n, ∀ m > n, P m
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n : ℕ
⊢ ¬BddAbove {x | (fun n => ∀ m ≥ n, P m) x}
state_after: case intro
a b✝ c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
base : ∃ n, ∀ m > n, P m
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n b : ℕ
hb : b ∈ upperBounds {x | (fun n => ∀ m ≥ n, P m) x}
⊢ False

tactic: rcases base with ⟨n, hn⟩
state_before: case intro
a b✝ c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
base : ∃ n, ∀ m > n, P m
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n b : ℕ
hb : b ∈ upperBounds {x | (fun n => ∀ m ≥ n, P m) x}
⊢ False
state_after: case intro.intro
a b✝ c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n✝ b : ℕ
hb : b ∈ upperBounds {x | (fun n => ∀ m ≥ n, P m) x}
n : ℕ
hn : ∀ m > n, P m
⊢ False

tactic: specialize @hb (n + b + 1) (fun m hm ↦ hn _ _)
state_before: case intro.intro
a b✝ c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n✝ b : ℕ
hb : b ∈ upperBounds {x | (fun n => ∀ m ≥ n, P m) x}
n : ℕ
hn : ∀ m > n, P m
⊢ False
state_after: case intro.intro
a b✝ c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n✝ b : ℕ
hb : b ∈ upperBounds {x | (fun n => ∀ m ≥ n, P m) x}
n : ℕ
hn : ∀ m > n, P m
m : ℕ
hm : m ≥ n + b + 1
⊢ m > n

case intro.intro
a b✝ c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n✝ b n : ℕ
hn : ∀ m > n, P m
hb : n + b + 1 ≤ b
⊢ False

tactic: all_goals omega
state_before: case intro.intro
a b✝ c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n✝ b : ℕ
hb : b ∈ upperBounds {x | (fun n => ∀ m ≥ n, P m) x}
n : ℕ
hn : ∀ m > n, P m
m : ℕ
hm : m ≥ n + b + 1
⊢ m > n

case intro.intro
a b✝ c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n✝ b n : ℕ
hn : ∀ m > n, P m
hb : n + b + 1 ≤ b
⊢ False
state_after: no goals

tactic: omega
state_before: case intro.intro
a b✝ c : ℕ
P : ℕ → Prop
h : ∀ (n : ℕ), P (n + 1) → P n
step : ∀ (n : ℕ), (∀ m > n, P m) → P n
n✝ b n : ℕ
hn : ∀ m > n, P m
hb : n + b + 1 ≤ b
⊢ False
state_after: no goals