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 : ℕ
⊢ (pmap f l h)[n]? = Option.pmap 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 : ℕ
⊢ (pmap f [] h)[n]? = Option.pmap 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
⊢ (pmap f (hd :: tl) h)[n]? = Option.pmap f (hd :: tl)[n]? ⋯

tactic: simp
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 : ℕ
⊢ (pmap f [] h)[n]? = Option.pmap f [][n]? ⋯
state_after: no goals

tactic: cases' n with 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
⊢ (pmap f (hd :: tl) h)[n]? = Option.pmap 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
⊢ (pmap f (hd :: tl) h)[0]? = Option.pmap 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
⊢ (pmap f (hd :: tl) h)[n + 1]? = Option.pmap f (hd :: tl)[n + 1]? ⋯

tactic: simp only [Option.pmap]
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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
⊢ (pmap f (hd :: tl) h)[0]? = Option.pmap f (hd :: tl)[0]? ⋯
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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
⊢ (pmap f (hd :: tl) h)[0]? =
    match (hd :: tl)[0]?, ⋯ with
    | none, x => none
    | some a, H => some (f a ⋯)

tactic: split <;> simp_all
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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
⊢ (pmap f (hd :: tl) h)[0]? =
    match (hd :: tl)[0]?, ⋯ with
    | none, x => none
    | some a, H => some (f a ⋯)
state_after: no goals

tactic: simp only [hl, pmap, Option.pmap, getElem?_cons_succ]
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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
⊢ (pmap f (hd :: tl) h)[n + 1]? = Option.pmap f (hd :: tl)[n + 1]? ⋯
state_after: 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
⊢ (match tl[n]?, ⋯ with
    | none, x => none
    | some a, H => some (f a ⋯)) =
    match (hd :: tl)[n + 1]?, ⋯ with
    | none, x => none
    | some a, H => some (f a ⋯)

tactic: split <;> rename_i h₁ _ <;> split <;> rename_i h₂ _
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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
⊢ (match tl[n]?, ⋯ with
    | none, x => none
    | some a, H => some (f a ⋯)) =
    match (hd :: tl)[n + 1]?, ⋯ with
    | none, x => none
    | some a, H => some (f a ⋯)
state_after: case cons.succ.h_1.h_1
ι : 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
x✝⁵ : Option α
x✝⁴ : ∀ (a : α), a ∈ x✝⁵ → p a
x✝³ : ∀ (a : α), a ∈ none → p a
h₁ : tl[n]? = none
heq✝¹ : HEq ⋯ x✝³
x✝² : Option α
x✝¹ : ∀ (a : α), a ∈ x✝² → p a
x✝ : ∀ (a : α), a ∈ none → p a
h₂ : (hd :: tl)[n + 1]? = none
heq✝ : HEq ⋯ x✝
⊢ none = none

case cons.succ.h_1.h_2
ι : 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
x✝⁴ : Option α
x✝³ : ∀ (a : α), a ∈ x✝⁴ → p a
x✝² : ∀ (a : α), a ∈ none → p a
h₁ : tl[n]? = none
heq✝¹ : HEq ⋯ x✝²
x✝¹ : Option α
x✝ : ∀ (a : α), a ∈ x✝¹ → p a
a✝ : α
H✝ : ∀ (a : α), a ∈ some a✝ → p a
h₂ : (hd :: tl)[n + 1]? = some a✝
heq✝ : HEq ⋯ H✝
⊢ none = some (f a✝ ⋯)

case cons.succ.h_2.h_1
ι : 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
x✝⁴ : Option α
x✝³ : ∀ (a : α), a ∈ x✝⁴ → p a
a✝ : α
H✝ : ∀ (a : α), a ∈ some a✝ → p a
h₁ : tl[n]? = some a✝
heq✝¹ : HEq ⋯ H✝
x✝² : Option α
x✝¹ : ∀ (a : α), a ∈ x✝² → p a
x✝ : ∀ (a : α), a ∈ none → p a
h₂ : (hd :: tl)[n + 1]? = none
heq✝ : HEq ⋯ x✝
⊢ some (f a✝ ⋯) = none

case cons.succ.h_2.h_2
ι : 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
x✝³ : Option α
x✝² : ∀ (a : α), a ∈ x✝³ → p a
a✝¹ : α
H✝¹ : ∀ (a : α), a ∈ some a✝¹ → p a
h₁ : tl[n]? = some a✝¹
heq✝¹ : HEq ⋯ H✝¹
x✝¹ : Option α
x✝ : ∀ (a : α), a ∈ x✝¹ → p a
a✝ : α
H✝ : ∀ (a : α), a ∈ some a✝ → p a
h₂ : (hd :: tl)[n + 1]? = some a✝
heq✝ : HEq ⋯ H✝
⊢ some (f a✝¹ ⋯) = some (f a✝ ⋯)

tactic: simp_all
state_before: case cons.succ.h_1.h_1
ι : 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
x✝⁵ : Option α
x✝⁴ : ∀ (a : α), a ∈ x✝⁵ → p a
x✝³ : ∀ (a : α), a ∈ none → p a
h₁ : tl[n]? = none
heq✝¹ : HEq ⋯ x✝³
x✝² : Option α
x✝¹ : ∀ (a : α), a ∈ x✝² → p a
x✝ : ∀ (a : α), a ∈ none → p a
h₂ : (hd :: tl)[n + 1]? = none
heq✝ : HEq ⋯ x✝
⊢ none = none
state_after: no goals

tactic: simp at h₂
state_before: case cons.succ.h_1.h_2
ι : 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
x✝⁴ : Option α
x✝³ : ∀ (a : α), a ∈ x✝⁴ → p a
x✝² : ∀ (a : α), a ∈ none → p a
h₁ : tl[n]? = none
heq✝¹ : HEq ⋯ x✝²
x✝¹ : Option α
x✝ : ∀ (a : α), a ∈ x✝¹ → p a
a✝ : α
H✝ : ∀ (a : α), a ∈ some a✝ → p a
h₂ : (hd :: tl)[n + 1]? = some a✝
heq✝ : HEq ⋯ H✝
⊢ none = some (f a✝ ⋯)
state_after: case cons.succ.h_1.h_2
ι : 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
x✝⁴ : Option α
x✝³ : ∀ (a : α), a ∈ x✝⁴ → p a
x✝² : ∀ (a : α), a ∈ none → p a
h₁ : tl[n]? = none
heq✝¹ : HEq ⋯ x✝²
x✝¹ : Option α
x✝ : ∀ (a : α), a ∈ x✝¹ → p a
a✝ : α
H✝ : ∀ (a : α), a ∈ some a✝ → p a
heq✝ : HEq ⋯ H✝
h₂ : tl[n]? = some a✝
⊢ none = some (f a✝ ⋯)

tactic: simp_all
state_before: case cons.succ.h_1.h_2
ι : 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
x✝⁴ : Option α
x✝³ : ∀ (a : α), a ∈ x✝⁴ → p a
x✝² : ∀ (a : α), a ∈ none → p a
h₁ : tl[n]? = none
heq✝¹ : HEq ⋯ x✝²
x✝¹ : Option α
x✝ : ∀ (a : α), a ∈ x✝¹ → p a
a✝ : α
H✝ : ∀ (a : α), a ∈ some a✝ → p a
heq✝ : HEq ⋯ H✝
h₂ : tl[n]? = some a✝
⊢ none = some (f a✝ ⋯)
state_after: no goals

tactic: simp_all
state_before: case cons.succ.h_2.h_1
ι : 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
x✝⁴ : Option α
x✝³ : ∀ (a : α), a ∈ x✝⁴ → p a
a✝ : α
H✝ : ∀ (a : α), a ∈ some a✝ → p a
h₁ : tl[n]? = some a✝
heq✝¹ : HEq ⋯ H✝
x✝² : Option α
x✝¹ : ∀ (a : α), a ∈ x✝² → p a
x✝ : ∀ (a : α), a ∈ none → p a
h₂ : (hd :: tl)[n + 1]? = none
heq✝ : HEq ⋯ x✝
⊢ some (f a✝ ⋯) = none
state_after: no goals

tactic: simp_all
state_before: case cons.succ.h_2.h_2
ι : 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 : ℕ), (pmap f tl h)[n]? = Option.pmap f tl[n]? ⋯
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
x✝³ : Option α
x✝² : ∀ (a : α), a ∈ x✝³ → p a
a✝¹ : α
H✝¹ : ∀ (a : α), a ∈ some a✝¹ → p a
h₁ : tl[n]? = some a✝¹
heq✝¹ : HEq ⋯ H✝¹
x✝¹ : Option α
x✝ : ∀ (a : α), a ∈ x✝¹ → p a
a✝ : α
H✝ : ∀ (a : α), a ∈ some a✝ → p a
h₂ : (hd :: tl)[n + 1]? = some a✝
heq✝ : HEq ⋯ H✝
⊢ some (f a✝¹ ⋯) = some (f a✝ ⋯)
state_after: no goals