Theorem: List.insertNth_of_length_lt
File: Mathlib/Data/List/InsertNth.lean

tactic: induction' l with hd tl IH generalizing n
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a : α
l : List α
x : α
n : ℕ
h : l.length < n
⊢ insertNth n x l = l
state_after: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x : α
n : ℕ
h : [].length < n
⊢ insertNth n x [] = []

case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x hd : α
tl : List α
IH : ∀ (n : ℕ), tl.length < n → insertNth n x tl = tl
n : ℕ
h : (hd :: tl).length < n
⊢ insertNth n x (hd :: tl) = hd :: tl

tactic: cases n
state_before: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x : α
n : ℕ
h : [].length < n
⊢ insertNth n x [] = []
state_after: case nil.zero
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x : α
h : [].length < 0
⊢ insertNth 0 x [] = []

case nil.succ
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x : α
n✝ : ℕ
h : [].length < n✝ + 1
⊢ insertNth (n✝ + 1) x [] = []

tactic: simp at h
state_before: case nil.zero
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x : α
h : [].length < 0
⊢ insertNth 0 x [] = []
state_after: no goals

tactic: simp
state_before: case nil.succ
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x : α
n✝ : ℕ
h : [].length < n✝ + 1
⊢ insertNth (n✝ + 1) x [] = []
state_after: no goals

tactic: cases n
state_before: case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x hd : α
tl : List α
IH : ∀ (n : ℕ), tl.length < n → insertNth n x tl = tl
n : ℕ
h : (hd :: tl).length < n
⊢ insertNth n x (hd :: tl) = hd :: tl
state_after: case cons.zero
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x hd : α
tl : List α
IH : ∀ (n : ℕ), tl.length < n → insertNth n x tl = tl
h : (hd :: tl).length < 0
⊢ insertNth 0 x (hd :: tl) = hd :: tl

case cons.succ
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x hd : α
tl : List α
IH : ∀ (n : ℕ), tl.length < n → insertNth n x tl = tl
n✝ : ℕ
h : (hd :: tl).length < n✝ + 1
⊢ insertNth (n✝ + 1) x (hd :: tl) = hd :: tl

tactic: simp at h
state_before: case cons.zero
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x hd : α
tl : List α
IH : ∀ (n : ℕ), tl.length < n → insertNth n x tl = tl
h : (hd :: tl).length < 0
⊢ insertNth 0 x (hd :: tl) = hd :: tl
state_after: no goals

tactic: simp only [Nat.succ_lt_succ_iff, length] at h
state_before: case cons.succ
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x hd : α
tl : List α
IH : ∀ (n : ℕ), tl.length < n → insertNth n x tl = tl
n✝ : ℕ
h : (hd :: tl).length < n✝ + 1
⊢ insertNth (n✝ + 1) x (hd :: tl) = hd :: tl
state_after: case cons.succ
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x hd : α
tl : List α
IH : ∀ (n : ℕ), tl.length < n → insertNth n x tl = tl
n✝ : ℕ
h : tl.length < n✝
⊢ insertNth (n✝ + 1) x (hd :: tl) = hd :: tl

tactic: simpa using IH _ h
state_before: case cons.succ
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a x hd : α
tl : List α
IH : ∀ (n : ℕ), tl.length < n → insertNth n x tl = tl
n✝ : ℕ
h : tl.length < n✝
⊢ insertNth (n✝ + 1) x (hd :: tl) = hd :: tl
state_after: no goals