case mp
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
⊢ l₁ <:+ a :: l₂ → l₁ = a :: l₂ ∨ l₁ <:+ l₂

case mpr
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
⊢ l₁ = a :: l₂ ∨ l₁ <:+ l₂ → l₁ <:+ a :: l₂
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
⊢ l₁ <:+ a :: l₂ ↔ l₁ = a :: l₂ ∨ l₁ <:+ l₂
constructor
case mp.intro.nil
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
hl₃ : [] ++ l₁ = a :: l₂
⊢ l₁ = a :: l₂ ∨ l₁ <:+ l₂

case mp.intro.cons
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
head✝ : α✝
tail✝ : List α✝
hl₃ : head✝ :: tail✝ ++ l₁ = a :: l₂
⊢ l₁ = a :: l₂ ∨ l₁ <:+ l₂
case mp
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
⊢ l₁ <:+ a :: l₂ → l₁ = a :: l₂ ∨ l₁ <:+ l₂
rintro ⟨⟨hd, tl⟩, hl₃⟩
no goals
case mp.intro.nil
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
hl₃ : [] ++ l₁ = a :: l₂
⊢ l₁ = a :: l₂ ∨ l₁ <:+ l₂
exact Or.inl hl₃
case mp.intro.cons
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
head✝ : α✝
tail✝ : List α✝
hl₃ : head✝ :: (tail✝ ++ l₁) = a :: l₂
⊢ l₁ = a :: l₂ ∨ l₁ <:+ l₂
case mp.intro.cons
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
head✝ : α✝
tail✝ : List α✝
hl₃ : head✝ :: tail✝ ++ l₁ = a :: l₂
⊢ l₁ = a :: l₂ ∨ l₁ <:+ l₂
simp only [cons_append] at hl₃
case mp.intro.cons
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
head✝ : α✝
tail✝ : List α✝
head_eq✝ : head✝ = a
hl₄ : tail✝ ++ l₁ = l₂
⊢ l₁ = a :: l₂ ∨ l₁ <:+ l₂
case mp.intro.cons
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
head✝ : α✝
tail✝ : List α✝
hl₃ : head✝ :: (tail✝ ++ l₁) = a :: l₂
⊢ l₁ = a :: l₂ ∨ l₁ <:+ l₂
injection hl₃ with _ hl₄
no goals
case mp.intro.cons
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
head✝ : α✝
tail✝ : List α✝
head_eq✝ : head✝ = a
hl₄ : tail✝ ++ l₁ = l₂
⊢ l₁ = a :: l₂ ∨ l₁ <:+ l₂
exact Or.inr ⟨_, hl₄⟩
case mpr.inl
α✝ : Type u_1
a : α✝
l₂ : List α✝
⊢ a :: l₂ <:+ a :: l₂

case mpr.inr
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
hl₁ : l₁ <:+ l₂
⊢ l₁ <:+ a :: l₂
case mpr
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
⊢ l₁ = a :: l₂ ∨ l₁ <:+ l₂ → l₁ <:+ a :: l₂
rintro (rfl | hl₁)
no goals
case mpr.inl
α✝ : Type u_1
a : α✝
l₂ : List α✝
⊢ a :: l₂ <:+ a :: l₂
exact (a :: l₂).suffix_refl
no goals
case mpr.inr
α✝ : Type u_1
l₁ : List α✝
a : α✝
l₂ : List α✝
hl₁ : l₁ <:+ l₂
⊢ l₁ <:+ a :: l₂
exact hl₁.trans (l₂.suffix_cons _)