Theorem: List.Nodup.sublist_ext
File: Mathlib/Data/List/Perm.lean

tactic: induction' s₂ with l₂ l a s₂ IH l₂ l a _ IH generalizing l₁
state_before: α : Type uu
β : Type vv
l₁✝ l₂✝ l₁ l₂ l : List α
d : Nodup l
s₁ : l₁ <+ l
s₂ : l₂ <+ l
h : l₁ ~ l₂
⊢ l₁ = l₂

tactic: exact h.eq_nil
state_before: case slnil
α : Type uu
β : Type vv
l₁✝¹ l₂✝ l₁✝ l₂ l : List α
d✝ : Nodup l
s₁✝ : l₁✝ <+ l
h✝ : l₁✝ ~ l₂
l₁ : List α
d : Nodup []
s₁ : l₁ <+ []
h : l₁ ~ []
⊢ l₁ = []

tactic: simp at d
state_before: case cons
α : Type uu
β : Type vv
l₁✝¹ l₂✝¹ l₁✝ l₂✝ l✝ : List α
d✝ : Nodup l✝
s₁✝ : l₁✝ <+ l✝
h✝ : l₁✝ ~ l₂✝
l₂ l : List α
a : α
s₂ : l₂ <+ l
IH : ∀ {l₁ : List α}, Nodup l → l₁ <+ l → l₁ ~ l₂ → l₁ = l₂
l₁ : List α
d : Nodup (a :: l)
s₁ : l₁ <+ a :: l
h : l₁ ~ l₂
⊢ l₁ = l₂

tactic: cases' s₁ with _ _ _ s₁ l₁ _ _ s₁
state_before: case cons
α : Type uu
β : Type vv
l₁✝¹ l₂✝¹ l₁✝ l₂✝ l✝ : List α
d✝ : Nodup l✝
s₁✝ : l₁✝ <+ l✝
h✝ : l₁✝ ~ l₂✝
l₂ l : List α
a : α
s₂ : l₂ <+ l
IH : ∀ {l₁ : List α}, Nodup l → l₁ <+ l → l₁ ~ l₂ → l₁ = l₂
l₁ : List α
s₁ : l₁ <+ a :: l
h : l₁ ~ l₂
d : ¬a ∈ l ∧ Nodup l
⊢ l₁ = l₂

tactic: exact IH d.2 s₁ h
state_before: case cons.cons
α : Type uu
β : Type vv
l₁✝¹ l₂✝¹ l₁✝ l₂✝ l✝ : List α
d✝ : Nodup l✝
s₁✝ : l₁✝ <+ l✝
h✝ : l₁✝ ~ l₂✝
l₂ l : List α
a : α
s₂ : l₂ <+ l
IH : ∀ {l₁ : List α}, Nodup l → l₁ <+ l → l₁ ~ l₂ → l₁ = l₂
l₁ : List α
h : l₁ ~ l₂
d : ¬a ∈ l ∧ Nodup l
s₁ : l₁ <+ l
⊢ l₁ = l₂

tactic: apply d.1.elim
state_before: case cons.cons₂
α : Type uu
β : Type vv
l₁✝¹ l₂✝¹ l₁✝ l₂✝ l✝ : List α
d✝ : Nodup l✝
s₁✝ : l₁✝ <+ l✝
h✝ : l₁✝ ~ l₂✝
l₂ l : List α
a : α
s₂ : l₂ <+ l
IH : ∀ {l₁ : List α}, Nodup l → l₁ <+ l → l₁ ~ l₂ → l₁ = l₂
d : ¬a ∈ l ∧ Nodup l
l₁ : List α
h : a :: l₁ ~ l₂
s₁ : l₁ <+ l
⊢ a :: l₁ = l₂

tactic: exact Subperm.subset ⟨_, h.symm, s₂⟩ (mem_cons_self _ _)
state_before: case cons.cons₂
α : Type uu
β : Type vv
l₁✝¹ l₂✝¹ l₁✝ l₂✝ l✝ : List α
d✝ : Nodup l✝
s₁✝ : l₁✝ <+ l✝
h✝ : l₁✝ ~ l₂✝
l₂ l : List α
a : α
s₂ : l₂ <+ l
IH : ∀ {l₁ : List α}, Nodup l → l₁ <+ l → l₁ ~ l₂ → l₁ = l₂
d : ¬a ∈ l ∧ Nodup l
l₁ : List α
h : a :: l₁ ~ l₂
s₁ : l₁ <+ l
⊢ a ∈ l

tactic: simp at d
state_before: case cons₂
α : Type uu
β : Type vv
l₁✝¹ l₂✝¹ l₁✝ l₂✝ l✝ : List α
d✝ : Nodup l✝
s₁✝ : l₁✝ <+ l✝
h✝ : l₁✝ ~ l₂✝
l₂ l : List α
a : α
a✝ : l₂ <+ l
IH : ∀ {l₁ : List α}, Nodup l → l₁ <+ l → l₁ ~ l₂ → l₁ = l₂
l₁ : List α
d : Nodup (a :: l)
s₁ : l₁ <+ a :: l
h : l₁ ~ a :: l₂
⊢ l₁ = a :: l₂

tactic: cases' s₁ with _ _ _ s₁ l₁ _ _ s₁
state_before: case cons₂
α : Type uu
β : Type vv
l₁✝¹ l₂✝¹ l₁✝ l₂✝ l✝ : List α
d✝ : Nodup l✝
s₁✝ : l₁✝ <+ l✝
h✝ : l₁✝ ~ l₂✝
l₂ l : List α
a : α
a✝ : l₂ <+ l
IH : ∀ {l₁ : List α}, Nodup l → l₁ <+ l → l₁ ~ l₂ → l₁ = l₂
l₁ : List α
s₁ : l₁ <+ a :: l
h : l₁ ~ a :: l₂
d : ¬a ∈ l ∧ Nodup l
⊢ l₁ = a :: l₂

tactic: apply d.1.elim
state_before: case cons₂.cons
α : Type uu
β : Type vv
l₁✝¹ l₂✝¹ l₁✝ l₂✝ l✝ : List α
d✝ : Nodup l✝
s₁✝ : l₁✝ <+ l✝
h✝ : l₁✝ ~ l₂✝
l₂ l : List α
a : α
a✝ : l₂ <+ l
IH : ∀ {l₁ : List α}, Nodup l → l₁ <+ l → l₁ ~ l₂ → l₁ = l₂
l₁ : List α
h : l₁ ~ a :: l₂
d : ¬a ∈ l ∧ Nodup l
s₁ : l₁ <+ l
⊢ l₁ = a :: l₂

tactic: exact Subperm.subset ⟨_, h, s₁⟩ (mem_cons_self _ _)
state_before: case cons₂.cons
α : Type uu
β : Type vv
l₁✝¹ l₂✝¹ l₁✝ l₂✝ l✝ : List α
d✝ : Nodup l✝
s₁✝ : l₁✝ <+ l✝
h✝ : l₁✝ ~ l₂✝
l₂ l : List α
a : α
a✝ : l₂ <+ l
IH : ∀ {l₁ : List α}, Nodup l → l₁ <+ l → l₁ ~ l₂ → l₁ = l₂
l₁ : List α
h : l₁ ~ a :: l₂
d : ¬a ∈ l ∧ Nodup l
s₁ : l₁ <+ l
⊢ a ∈ l

tactic: rw [IH d.2 s₁ h.cons_inv]
state_before: case cons₂.cons₂
α : Type uu
β : Type vv
l₁✝¹ l₂✝¹ l₁✝ l₂✝ l✝ : List α
d✝ : Nodup l✝
s₁✝ : l₁✝ <+ l✝
h✝ : l₁✝ ~ l₂✝
l₂ l : List α
a : α
a✝ : l₂ <+ l
IH : ∀ {l₁ : List α}, Nodup l → l₁ <+ l → l₁ ~ l₂ → l₁ = l₂
d : ¬a ∈ l ∧ Nodup l
l₁ : List α
h : a :: l₁ ~ a :: l₂
s₁ : l₁ <+ l
⊢ a :: l₁ = a :: l₂

tactic: rw [h]
state_before: α : Type uu
β : Type vv
l₁✝ l₂✝ l₁ l₂ l : List α
d : Nodup l
s₁ : l₁ <+ l
s₂ : l₂ <+ l
h : l₁ = l₂
⊢ l₁ ~ l₂