Theorem: List.mem_sublists'
File: Mathlib/Data/List/Sublists.lean

tactic: induction' t with a t IH generalizing s
state_before: α : Type u
β : Type v
γ : Type w
s t : List α
⊢ s ∈ t.sublists' ↔ s <+ t
state_after: case nil
α : Type u
β : Type v
γ : Type w
s : List α
⊢ s ∈ [].sublists' ↔ s <+ []

case cons
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
⊢ s ∈ (a :: t).sublists' ↔ s <+ a :: t

tactic: simp only [sublists'_cons, mem_append, IH, mem_map]
state_before: case cons
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
⊢ s ∈ (a :: t).sublists' ↔ s <+ a :: t
state_after: case cons
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
⊢ (s <+ t ∨ ∃ a_1, a_1 <+ t ∧ a :: a_1 = s) ↔ s <+ a :: t

tactic: constructor <;> intro h
state_before: case cons
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
⊢ (s <+ t ∨ ∃ a_1, a_1 <+ t ∧ a :: a_1 = s) ↔ s <+ a :: t
state_after: case cons.mp
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
h : s <+ t ∨ ∃ a_1, a_1 <+ t ∧ a :: a_1 = s
⊢ s <+ a :: t

case cons.mpr
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
h : s <+ a :: t
⊢ s <+ t ∨ ∃ a_1, a_1 <+ t ∧ a :: a_1 = s

tactic: simp only [sublists'_nil, mem_singleton]
state_before: case nil
α : Type u
β : Type v
γ : Type w
s : List α
⊢ s ∈ [].sublists' ↔ s <+ []
state_after: case nil
α : Type u
β : Type v
γ : Type w
s : List α
⊢ s = [] ↔ s <+ []

tactic: exact ⟨fun h => by rw [h], eq_nil_of_sublist_nil⟩
state_before: case nil
α : Type u
β : Type v
γ : Type w
s : List α
⊢ s = [] ↔ s <+ []
state_after: no goals

tactic: rw [h]
state_before: α : Type u
β : Type v
γ : Type w
s : List α
h : s = []
⊢ s <+ []
state_after: no goals

tactic: rcases h with (h | ⟨s, h, rfl⟩)
state_before: case cons.mp
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
h : s <+ t ∨ ∃ a_1, a_1 <+ t ∧ a :: a_1 = s
⊢ s <+ a :: t
state_after: case cons.mp.inl
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
h : s <+ t
⊢ s <+ a :: t

case cons.mp.inr.intro.intro
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
h : s <+ t
⊢ a :: s <+ a :: t

tactic: exact sublist_cons_of_sublist _ h
state_before: case cons.mp.inl
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
h : s <+ t
⊢ s <+ a :: t
state_after: no goals

tactic: exact h.cons_cons _
state_before: case cons.mp.inr.intro.intro
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
h : s <+ t
⊢ a :: s <+ a :: t
state_after: no goals

tactic: cases' h with _ _ _ h s _ _ h
state_before: case cons.mpr
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
h : s <+ a :: t
⊢ s <+ t ∨ ∃ a_1, a_1 <+ t ∧ a :: a_1 = s
state_after: case cons.mpr.cons
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
h : s <+ t
⊢ s <+ t ∨ ∃ a_1, a_1 <+ t ∧ a :: a_1 = s

case cons.mpr.cons₂
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
h : s <+ t
⊢ a :: s <+ t ∨ ∃ a_1, a_1 <+ t ∧ a :: a_1 = a :: s

tactic: exact Or.inl h
state_before: case cons.mpr.cons
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
h : s <+ t
⊢ s <+ t ∨ ∃ a_1, a_1 <+ t ∧ a :: a_1 = s
state_after: no goals

tactic: exact Or.inr ⟨s, h, rfl⟩
state_before: case cons.mpr.cons₂
α : Type u
β : Type v
γ : Type w
a : α
t : List α
IH : ∀ {s : List α}, s ∈ t.sublists' ↔ s <+ t
s : List α
h : s <+ t
⊢ a :: s <+ t ∨ ∃ a_1, a_1 <+ t ∧ a :: a_1 = a :: s
state_after: no goals