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

tactic: induction' l with hd tl hl generalizing n
state_before: ι : Type ?u.337556
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
l : List α
h : ∀ (a : α), a ∈ l → p a
n : ℕ
hn : n < length (pmap f l h)
⊢ get (pmap f l h) { val := n, isLt := hn } =
    f (get l { val := n, isLt := (_ : n < length l) }) (_ : p (get l { val := n, isLt := (_ : n < length l) }))

tactic: simp only [length, pmap] at hn
state_before: case nil
ι : Type ?u.337556
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
l : List α
h✝ : ∀ (a : α), a ∈ l → p a
n✝ : ℕ
hn✝ : n✝ < length (pmap f l h✝)
h : ∀ (a : α), a ∈ [] → p a
n : ℕ
hn : n < length (pmap f [] h)
⊢ get (pmap f [] h) { val := n, isLt := hn } =
    f (get [] { val := n, isLt := (_ : n < length []) }) (_ : p (get [] { val := n, isLt := (_ : n < length []) }))

tactic: exact absurd hn (not_lt_of_le n.zero_le)
state_before: case nil
ι : Type ?u.337556
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
l : List α
h✝ : ∀ (a : α), a ∈ l → p a
n✝ : ℕ
hn✝ : n✝ < length (pmap f l h✝)
h : ∀ (a : α), a ∈ [] → p a
n : ℕ
hn : n < 0
⊢ get (pmap f [] h) { val := n, isLt := hn } =
    f (get [] { val := n, isLt := (_ : n < length []) }) (_ : p (get [] { val := n, isLt := (_ : n < length []) }))

tactic: cases n
state_before: case cons
ι : Type ?u.337556
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
l : List α
h✝ : ∀ (a : α), a ∈ l → p a
n✝ : ℕ
hn✝ : n✝ < length (pmap f l h✝)
hd : α
tl : List α
hl :
  ∀ (h : ∀ (a : α), a ∈ tl → p a) {n : ℕ} (hn : n < length (pmap f tl h)),
    get (pmap f tl h) { val := n, isLt := hn } =
      f (get tl { val := n, isLt := (_ : n < length tl) }) (_ : p (get tl { val := n, isLt := (_ : n < length tl) }))
h : ∀ (a : α), a ∈ hd :: tl → p a
n : ℕ
hn : n < length (pmap f (hd :: tl) h)
⊢ get (pmap f (hd :: tl) h) { val := n, isLt := hn } =
    f (get (hd :: tl) { val := n, isLt := (_ : n < length (hd :: tl)) })
      (_ : p (get (hd :: tl) { val := n, isLt := (_ : n < length (hd :: tl)) }))

tactic: simp
state_before: case cons.zero
ι : Type ?u.337556
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
l : List α
h✝ : ∀ (a : α), a ∈ l → p a
n : ℕ
hn✝ : n < length (pmap f l h✝)
hd : α
tl : List α
hl :
  ∀ (h : ∀ (a : α), a ∈ tl → p a) {n : ℕ} (hn : n < length (pmap f tl h)),
    get (pmap f tl h) { val := n, isLt := hn } =
      f (get tl { val := n, isLt := (_ : n < length tl) }) (_ : p (get tl { val := n, isLt := (_ : n < length tl) }))
h : ∀ (a : α), a ∈ hd :: tl → p a
hn : zero < length (pmap f (hd :: tl) h)
⊢ get (pmap f (hd :: tl) h) { val := zero, isLt := hn } =
    f (get (hd :: tl) { val := zero, isLt := (_ : zero < length (hd :: tl)) })
      (_ : p (get (hd :: tl) { val := zero, isLt := (_ : zero < length (hd :: tl)) }))

tactic: simp [hl]
state_before: case cons.succ
ι : Type ?u.337556
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
p : α → Prop
f : (a : α) → p a → β
l : List α
h✝ : ∀ (a : α), a ∈ l → p a
n : ℕ
hn✝ : n < length (pmap f l h✝)
hd : α
tl : List α
hl :
  ∀ (h : ∀ (a : α), a ∈ tl → p a) {n : ℕ} (hn : n < length (pmap f tl h)),
    get (pmap f tl h) { val := n, isLt := hn } =
      f (get tl { val := n, isLt := (_ : n < length tl) }) (_ : p (get tl { val := n, isLt := (_ : n < length tl) }))
h : ∀ (a : α), a ∈ hd :: tl → p a
n✝ : ℕ
hn : succ n✝ < length (pmap f (hd :: tl) h)
⊢ get (pmap f (hd :: tl) h) { val := succ n✝, isLt := hn } =
    f (get (hd :: tl) { val := succ n✝, isLt := (_ : succ n✝ < length (hd :: tl)) })
      (_ : p (get (hd :: tl) { val := succ n✝, isLt := (_ : succ n✝ < length (hd :: tl)) }))