Theorem: SimpleGraph.Walk.darts_bypass_subset
File: Mathlib/Combinatorics/SimpleGraph/Connectivity.lean

tactic: simp!
state_before: case nil
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝ : DecidableEq V
u v u✝ : V
⊢ nil.bypass.darts ⊆ nil.darts
state_after: no goals

tactic: simp! only
state_before: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝ : DecidableEq V
u v u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.bypass.darts ⊆ p✝.darts
⊢ (cons h✝ p✝).bypass.darts ⊆ (cons h✝ p✝).darts
state_after: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝ : DecidableEq V
u v u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.bypass.darts ⊆ p✝.darts
⊢ (if hs : u✝ ∈ p✝.bypass.support then p✝.bypass.dropUntil u✝ hs else cons h✝ p✝.bypass).darts ⊆
    { toProd := (u✝, v✝), adj := h✝ } :: p✝.darts

tactic: split_ifs
state_before: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝ : DecidableEq V
u v u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.bypass.darts ⊆ p✝.darts
⊢ (if hs : u✝ ∈ p✝.bypass.support then p✝.bypass.dropUntil u✝ hs else cons h✝ p✝.bypass).darts ⊆
    { toProd := (u✝, v✝), adj := h✝ } :: p✝.darts
state_after: case pos
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝ : DecidableEq V
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.bypass.darts ⊆ p✝.darts
h✝ : u✝ ∈ p✝.bypass.support
⊢ (p✝.bypass.dropUntil u✝ h✝).darts ⊆ { toProd := (u✝, v✝), adj := h✝¹ } :: p✝.darts

case neg
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝ : DecidableEq V
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.bypass.darts ⊆ p✝.darts
h✝ : u✝ ∉ p✝.bypass.support
⊢ (cons h✝¹ p✝.bypass).darts ⊆ { toProd := (u✝, v✝), adj := h✝¹ } :: p✝.darts

tactic: apply List.Subset.trans (darts_dropUntil_subset _ _)
state_before: case pos
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝ : DecidableEq V
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.bypass.darts ⊆ p✝.darts
h✝ : u✝ ∈ p✝.bypass.support
⊢ (p✝.bypass.dropUntil u✝ h✝).darts ⊆ { toProd := (u✝, v✝), adj := h✝¹ } :: p✝.darts
state_after: case pos
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝ : DecidableEq V
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.bypass.darts ⊆ p✝.darts
h✝ : u✝ ∈ p✝.bypass.support
⊢ p✝.bypass.darts ⊆ { toProd := (u✝, v✝), adj := h✝¹ } :: p✝.darts

tactic: apply List.subset_cons_of_subset _ ih
state_before: case pos
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝ : DecidableEq V
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.bypass.darts ⊆ p✝.darts
h✝ : u✝ ∈ p✝.bypass.support
⊢ p✝.bypass.darts ⊆ { toProd := (u✝, v✝), adj := h✝¹ } :: p✝.darts
state_after: no goals

tactic: rw [darts_cons]
state_before: case neg
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝ : DecidableEq V
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.bypass.darts ⊆ p✝.darts
h✝ : u✝ ∉ p✝.bypass.support
⊢ (cons h✝¹ p✝.bypass).darts ⊆ { toProd := (u✝, v✝), adj := h✝¹ } :: p✝.darts
state_after: case neg
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝ : DecidableEq V
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.bypass.darts ⊆ p✝.darts
h✝ : u✝ ∉ p✝.bypass.support
⊢ { toProd := (u✝, v✝), adj := h✝¹ } :: p✝.bypass.darts ⊆ { toProd := (u✝, v✝), adj := h✝¹ } :: p✝.darts

tactic: exact List.cons_subset_cons _ ih
state_before: case neg
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝ : DecidableEq V
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.bypass.darts ⊆ p✝.darts
h✝ : u✝ ∉ p✝.bypass.support
⊢ { toProd := (u✝, v✝), adj := h✝¹ } :: p✝.bypass.darts ⊆ { toProd := (u✝, v✝), adj := h✝¹ } :: p✝.darts
state_after: no goals