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

tactic: induction' p with _ x y w a p' ih
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝ v✝ w x y u v : V
p : G.Walk u v
S : Set V
uS : u ∈ S
vS : v ∉ S
⊢ ∃ d ∈ p.darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
state_after: case nil
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝¹ v✝ w x y u v : V
S : Set V
u✝ : V
uS : u✝ ∈ S
vS : u✝ ∉ S
⊢ ∃ d ∈ nil.darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S

case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝ v✝ w✝ x✝ y✝ u v : V
S : Set V
x y w : V
a : G.Adj x y
p' : G.Walk y w
ih : y ∈ S → w ∉ S → ∃ d ∈ p'.darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
uS : x ∈ S
vS : w ∉ S
⊢ ∃ d ∈ (cons a p').darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S

tactic: cases vS uS
state_before: case nil
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝¹ v✝ w x y u v : V
S : Set V
u✝ : V
uS : u✝ ∈ S
vS : u✝ ∉ S
⊢ ∃ d ∈ nil.darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
state_after: no goals

tactic: by_cases h : y ∈ S
state_before: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝ v✝ w✝ x✝ y✝ u v : V
S : Set V
x y w : V
a : G.Adj x y
p' : G.Walk y w
ih : y ∈ S → w ∉ S → ∃ d ∈ p'.darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
uS : x ∈ S
vS : w ∉ S
⊢ ∃ d ∈ (cons a p').darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
state_after: case pos
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝ v✝ w✝ x✝ y✝ u v : V
S : Set V
x y w : V
a : G.Adj x y
p' : G.Walk y w
ih : y ∈ S → w ∉ S → ∃ d ∈ p'.darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
uS : x ∈ S
vS : w ∉ S
h : y ∈ S
⊢ ∃ d ∈ (cons a p').darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S

case neg
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝ v✝ w✝ x✝ y✝ u v : V
S : Set V
x y w : V
a : G.Adj x y
p' : G.Walk y w
ih : y ∈ S → w ∉ S → ∃ d ∈ p'.darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
uS : x ∈ S
vS : w ∉ S
h : y ∉ S
⊢ ∃ d ∈ (cons a p').darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S

tactic: obtain ⟨d, hd, hcd⟩ := ih h vS
state_before: case pos
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝ v✝ w✝ x✝ y✝ u v : V
S : Set V
x y w : V
a : G.Adj x y
p' : G.Walk y w
ih : y ∈ S → w ∉ S → ∃ d ∈ p'.darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
uS : x ∈ S
vS : w ∉ S
h : y ∈ S
⊢ ∃ d ∈ (cons a p').darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
state_after: case pos.intro.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝ v✝ w✝ x✝ y✝ u v : V
S : Set V
x y w : V
a : G.Adj x y
p' : G.Walk y w
ih : y ∈ S → w ∉ S → ∃ d ∈ p'.darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
uS : x ∈ S
vS : w ∉ S
h : y ∈ S
d : G.Dart
hd : d ∈ p'.darts
hcd : d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
⊢ ∃ d ∈ (cons a p').darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S

tactic: exact ⟨d, List.Mem.tail _ hd, hcd⟩
state_before: case pos.intro.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝ v✝ w✝ x✝ y✝ u v : V
S : Set V
x y w : V
a : G.Adj x y
p' : G.Walk y w
ih : y ∈ S → w ∉ S → ∃ d ∈ p'.darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
uS : x ∈ S
vS : w ∉ S
h : y ∈ S
d : G.Dart
hd : d ∈ p'.darts
hcd : d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
⊢ ∃ d ∈ (cons a p').darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
state_after: no goals

tactic: exact ⟨⟨(x, y), a⟩, List.Mem.head _, uS, h⟩
state_before: case neg
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝ v✝ w✝ x✝ y✝ u v : V
S : Set V
x y w : V
a : G.Adj x y
p' : G.Walk y w
ih : y ∈ S → w ∉ S → ∃ d ∈ p'.darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
uS : x ∈ S
vS : w ∉ S
h : y ∉ S
⊢ ∃ d ∈ (cons a p').darts, d.toProd.1 ∈ S ∧ d.toProd.2 ∉ S
state_after: no goals