Theorem: List.getElem_pmap
File: Mathlib/Data/List/Basic.lean

tactic: induction' l with hd tl hl generalizing n
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
l : List α
h : ∀ (a : α), a ∈ l → p a
n : ℕ
hn : n < (pmap f l h).length
⊢ (pmap f l h)[n] = f l[n] ⋯
state_after: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
h : ∀ (a : α), a ∈ [] → p a
n : ℕ
hn : n < (pmap f [] h).length
⊢ (pmap f [] h)[n] = f [][n] ⋯

case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
hd : α
tl : List α
hl : ∀ (h : ∀ (a : α), a ∈ tl → p a) {n : ℕ} (hn : n < (pmap f tl h).length), (pmap f tl h)[n] = f tl[n] ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
hn : n < (pmap f (hd :: tl) h).length
⊢ (pmap f (hd :: tl) h)[n] = f (hd :: tl)[n] ⋯

tactic: simp only [length, pmap] at hn
state_before: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
h : ∀ (a : α), a ∈ [] → p a
n : ℕ
hn : n < (pmap f [] h).length
⊢ (pmap f [] h)[n] = f [][n] ⋯
state_after: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
h : ∀ (a : α), a ∈ [] → p a
n : ℕ
hn : n < 0
⊢ (pmap f [] h)[n] = f [][n] ⋯

tactic: exact absurd hn (not_lt_of_le n.zero_le)
state_before: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
h : ∀ (a : α), a ∈ [] → p a
n : ℕ
hn : n < 0
⊢ (pmap f [] h)[n] = f [][n] ⋯
state_after: no goals

tactic: cases n
state_before: case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
hd : α
tl : List α
hl : ∀ (h : ∀ (a : α), a ∈ tl → p a) {n : ℕ} (hn : n < (pmap f tl h).length), (pmap f tl h)[n] = f tl[n] ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
hn : n < (pmap f (hd :: tl) h).length
⊢ (pmap f (hd :: tl) h)[n] = f (hd :: tl)[n] ⋯
state_after: case cons.zero
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
hd : α
tl : List α
hl : ∀ (h : ∀ (a : α), a ∈ tl → p a) {n : ℕ} (hn : n < (pmap f tl h).length), (pmap f tl h)[n] = f tl[n] ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
hn : 0 < (pmap f (hd :: tl) h).length
⊢ (pmap f (hd :: tl) h)[0] = f (hd :: tl)[0] ⋯

case cons.succ
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
hd : α
tl : List α
hl : ∀ (h : ∀ (a : α), a ∈ tl → p a) {n : ℕ} (hn : n < (pmap f tl h).length), (pmap f tl h)[n] = f tl[n] ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n✝ : ℕ
hn : n✝ + 1 < (pmap f (hd :: tl) h).length
⊢ (pmap f (hd :: tl) h)[n✝ + 1] = f (hd :: tl)[n✝ + 1] ⋯

tactic: simp
state_before: case cons.zero
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
hd : α
tl : List α
hl : ∀ (h : ∀ (a : α), a ∈ tl → p a) {n : ℕ} (hn : n < (pmap f tl h).length), (pmap f tl h)[n] = f tl[n] ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
hn : 0 < (pmap f (hd :: tl) h).length
⊢ (pmap f (hd :: tl) h)[0] = f (hd :: tl)[0] ⋯
state_after: no goals

tactic: simp [hl]
state_before: case cons.succ
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
hd : α
tl : List α
hl : ∀ (h : ∀ (a : α), a ∈ tl → p a) {n : ℕ} (hn : n < (pmap f tl h).length), (pmap f tl h)[n] = f tl[n] ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n✝ : ℕ
hn : n✝ + 1 < (pmap f (hd :: tl) h).length
⊢ (pmap f (hd :: tl) h)[n✝ + 1] = f (hd :: tl)[n✝ + 1] ⋯
state_after: no goals