α✝ : Type u_1
a : α✝
l : List α✝
p : α✝ → Bool
al : a ∈ l
pa : p a = true
w✝ : α✝
l₁ l₂ : List α✝
left✝¹ : ∀ (b : α✝), b ∈ l₁ → ¬p b = true
left✝ : p w✝ = true
e₁ : l = l₁ ++ w✝ :: l₂
e₂ : eraseP p l = l₁ ++ l₂
⊢ length (eraseP p l) = pred (length l)
α✝ : Type u_1
a : α✝
l : List α✝
p : α✝ → Bool
al : a ∈ l
pa : p a = true
⊢ length (eraseP p l) = pred (length l)
let ⟨_, l₁, l₂, _, _, e₁, e₂⟩ := exists_of_eraseP al pa
α✝ : Type u_1
a : α✝
l : List α✝
p : α✝ → Bool
al : a ∈ l
pa : p a = true
w✝ : α✝
l₁ l₂ : List α✝
left✝¹ : ∀ (b : α✝), b ∈ l₁ → ¬p b = true
left✝ : p w✝ = true
e₁ : l = l₁ ++ w✝ :: l₂
e₂ : eraseP p l = l₁ ++ l₂
⊢ length (l₁ ++ l₂) = pred (length l)
α✝ : Type u_1
a : α✝
l : List α✝
p : α✝ → Bool
al : a ∈ l
pa : p a = true
w✝ : α✝
l₁ l₂ : List α✝
left✝¹ : ∀ (b : α✝), b ∈ l₁ → ¬p b = true
left✝ : p w✝ = true
e₁ : l = l₁ ++ w✝ :: l₂
e₂ : eraseP p l = l₁ ++ l₂
⊢ length (eraseP p l) = pred (length l)
rw [e₂]
α✝ : Type u_1
a : α✝
l : List α✝
p : α✝ → Bool
al : a ∈ l
pa : p a = true
w✝ : α✝
l₁ l₂ : List α✝
left✝¹ : ∀ (b : α✝), b ∈ l₁ → ¬p b = true
left✝ : p w✝ = true
e₁ : l = l₁ ++ w✝ :: l₂
e₂ : eraseP p l = l₁ ++ l₂
⊢ length l₁ + length l₂ = pred (length l₁ + succ (length l₂))
α✝ : Type u_1
a : α✝
l : List α✝
p : α✝ → Bool
al : a ∈ l
pa : p a = true
w✝ : α✝
l₁ l₂ : List α✝
left✝¹ : ∀ (b : α✝), b ∈ l₁ → ¬p b = true
left✝ : p w✝ = true
e₁ : l = l₁ ++ w✝ :: l₂
e₂ : eraseP p l = l₁ ++ l₂
⊢ length (l₁ ++ l₂) = pred (length l)
simp [length_append, e₁]
no goals
α✝ : Type u_1
a : α✝
l : List α✝
p : α✝ → Bool
al : a ∈ l
pa : p a = true
w✝ : α✝
l₁ l₂ : List α✝
left✝¹ : ∀ (b : α✝), b ∈ l₁ → ¬p b = true
left✝ : p w✝ = true
e₁ : l = l₁ ++ w✝ :: l₂
e₂ : eraseP p l = l₁ ++ l₂
⊢ length l₁ + length l₂ = pred (length l₁ + succ (length l₂))
rfl