case nil
α : Type u_1
β : Type u_2
l l₁ l₂✝ l₃ : List α
a b : α
m n : ℕ
h✝ : l₁ <+: l₂✝
f : α → Option β
l₂ : List α
h : [] <+: l₂
⊢ filterMap f [] <+: filterMap f l₂

case cons
α : Type u_1
β : Type u_2
l l₁ l₂✝ l₃ : List α
a b : α
m n : ℕ
h✝ : l₁ <+: l₂✝
f : α → Option β
hd₁ : α
tl₁ : List α
hl : ∀ {l₂ : List α}, tl₁ <+: l₂ → filterMap f tl₁ <+: filterMap f l₂
l₂ : List α
h : hd₁ :: tl₁ <+: l₂
⊢ filterMap f (hd₁ :: tl₁) <+: filterMap f l₂
α : Type u_1
β : Type u_2
l l₁ l₂ l₃ : List α
a b : α
m n : ℕ
h : l₁ <+: l₂
f : α → Option β
⊢ filterMap f l₁ <+: filterMap f l₂
induction' l₁ with hd₁ tl₁ hl generalizing l₂
no goals
case nil
α : Type u_1
β : Type u_2
l l₁ l₂✝ l₃ : List α
a b : α
m n : ℕ
h✝ : l₁ <+: l₂✝
f : α → Option β
l₂ : List α
h : [] <+: l₂
⊢ filterMap f [] <+: filterMap f l₂
simp only [nil_prefix, filterMap_nil]
case cons.nil
α : Type u_1
β : Type u_2
l l₁ l₂ l₃ : List α
a b : α
m n : ℕ
h✝ : l₁ <+: l₂
f : α → Option β
hd₁ : α
tl₁ : List α
hl : ∀ {l₂ : List α}, tl₁ <+: l₂ → filterMap f tl₁ <+: filterMap f l₂
h : hd₁ :: tl₁ <+: []
⊢ filterMap f (hd₁ :: tl₁) <+: filterMap f []

case cons.cons
α : Type u_1
β : Type u_2
l l₁ l₂ l₃ : List α
a b : α
m n : ℕ
h✝ : l₁ <+: l₂
f : α → Option β
hd₁ : α
tl₁ : List α
hl : ∀ {l₂ : List α}, tl₁ <+: l₂ → filterMap f tl₁ <+: filterMap f l₂
hd₂ : α
tl₂ : List α
h : hd₁ :: tl₁ <+: hd₂ :: tl₂
⊢ filterMap f (hd₁ :: tl₁) <+: filterMap f (hd₂ :: tl₂)
case cons
α : Type u_1
β : Type u_2
l l₁ l₂✝ l₃ : List α
a b : α
m n : ℕ
h✝ : l₁ <+: l₂✝
f : α → Option β
hd₁ : α
tl₁ : List α
hl : ∀ {l₂ : List α}, tl₁ <+: l₂ → filterMap f tl₁ <+: filterMap f l₂
l₂ : List α
h : hd₁ :: tl₁ <+: l₂
⊢ filterMap f (hd₁ :: tl₁) <+: filterMap f l₂
cases' l₂ with hd₂ tl₂
no goals
case cons.nil
α : Type u_1
β : Type u_2
l l₁ l₂ l₃ : List α
a b : α
m n : ℕ
h✝ : l₁ <+: l₂
f : α → Option β
hd₁ : α
tl₁ : List α
hl : ∀ {l₂ : List α}, tl₁ <+: l₂ → filterMap f tl₁ <+: filterMap f l₂
h : hd₁ :: tl₁ <+: []
⊢ filterMap f (hd₁ :: tl₁) <+: filterMap f []
simpa only using eq_nil_of_prefix_nil h
case cons.cons
α : Type u_1
β : Type u_2
l l₁ l₂ l₃ : List α
a b : α
m n : ℕ
h✝ : l₁ <+: l₂
f : α → Option β
hd₁ : α
tl₁ : List α
hl : ∀ {l₂ : List α}, tl₁ <+: l₂ → filterMap f tl₁ <+: filterMap f l₂
hd₂ : α
tl₂ : List α
h : hd₁ = hd₂ ∧ tl₁ <+: tl₂
⊢ filterMap f (hd₁ :: tl₁) <+: filterMap f (hd₂ :: tl₂)
case cons.cons
α : Type u_1
β : Type u_2
l l₁ l₂ l₃ : List α
a b : α
m n : ℕ
h✝ : l₁ <+: l₂
f : α → Option β
hd₁ : α
tl₁ : List α
hl : ∀ {l₂ : List α}, tl₁ <+: l₂ → filterMap f tl₁ <+: filterMap f l₂
hd₂ : α
tl₂ : List α
h : hd₁ :: tl₁ <+: hd₂ :: tl₂
⊢ filterMap f (hd₁ :: tl₁) <+: filterMap f (hd₂ :: tl₂)
rw [cons_prefix_iff] at h
case cons.cons
α : Type u_1
β : Type u_2
l l₁ l₂ l₃ : List α
a b : α
m n : ℕ
h✝ : l₁ <+: l₂
f : α → Option β
hd₁ : α
tl₁ : List α
hl : ∀ {l₂ : List α}, tl₁ <+: l₂ → filterMap f tl₁ <+: filterMap f l₂
hd₂ : α
tl₂ : List α
h : hd₁ = hd₂ ∧ tl₁ <+: tl₂
⊢ filterMap f tl₁ <+: filterMap f tl₂
case cons.cons
α : Type u_1
β : Type u_2
l l₁ l₂ l₃ : List α
a b : α
m n : ℕ
h✝ : l₁ <+: l₂
f : α → Option β
hd₁ : α
tl₁ : List α
hl : ∀ {l₂ : List α}, tl₁ <+: l₂ → filterMap f tl₁ <+: filterMap f l₂
hd₂ : α
tl₂ : List α
h : hd₁ = hd₂ ∧ tl₁ <+: tl₂
⊢ filterMap f (hd₁ :: tl₁) <+: filterMap f (hd₂ :: tl₂)
rw [← @singleton_append _ hd₁ _, ← @singleton_append _ hd₂ _, filterMap_append,
  filterMap_append, h.left, prefix_append_right_inj]
no goals
case cons.cons
α : Type u_1
β : Type u_2
l l₁ l₂ l₃ : List α
a b : α
m n : ℕ
h✝ : l₁ <+: l₂
f : α → Option β
hd₁ : α
tl₁ : List α
hl : ∀ {l₂ : List α}, tl₁ <+: l₂ → filterMap f tl₁ <+: filterMap f l₂
hd₂ : α
tl₂ : List α
h : hd₁ = hd₂ ∧ tl₁ <+: tl₂
⊢ filterMap f tl₁ <+: filterMap f tl₂
exact hl h.right