case mp
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
⊢ Reachable (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w →
    ∃ p, ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p

case mpr
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
⊢ (∃ p, ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p) →
    Reachable (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
⊢ Reachable (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w ↔
    ∃ p, ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p
constructor
case mp.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w
⊢ ∃ p, ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p
case mp
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
⊢ Reachable (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w →
    ∃ p, ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p
rintro ⟨p⟩
case mp.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w
⊢ ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈
      Walk.edges
        (Walk.map (Hom.mapSpanningSubgraphs (_ : G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)} ≤ G)) p)
case mp.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w
⊢ ∃ p, ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p
use p.map (Hom.mapSpanningSubgraphs (by simp))
case mp.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w
⊢ ¬∃ a, a ∈ Walk.edges p ∧ a = Quotient.mk (Sym2.Rel.setoid V) (v, w)
case mp.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w
⊢ ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈
      Walk.edges
        (Walk.map (Hom.mapSpanningSubgraphs (_ : G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)} ≤ G)) p)
simp_rw [Walk.edges_map, List.mem_map, Hom.mapSpanningSubgraphs_apply, Sym2.map_id', id.def]
case mp.intro.intro.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w
h : Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p
⊢ False
case mp.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w
⊢ ¬∃ a, a ∈ Walk.edges p ∧ a = Quotient.mk (Sym2.Rel.setoid V) (v, w)
rintro ⟨e, h, rfl⟩
no goals
case mp.intro.intro.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w
h : Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p
⊢ False
simpa using p.edges_subset_edgeSet h
no goals
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w
⊢ G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)} ≤ G
simp
case mpr.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk G v w
h : ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p
⊢ Reachable (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w
case mpr
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
⊢ (∃ p, ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p) →
    Reachable (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w
rintro ⟨p, h⟩
case mpr.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk G v w
h : ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p
e : Sym2 V
ep : e ∈ Walk.edges p
⊢ e ∈ edgeSet (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)})
case mpr.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk G v w
h : ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p
⊢ Reachable (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)}) v w
refine ⟨p.transfer _ fun e ep => ?_⟩
case mpr.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk G v w
h : ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p
e : Sym2 V
ep : e ∈ Walk.edges p
⊢ e ∈ edgeSet G ∧ ¬e = Quotient.mk (Sym2.Rel.setoid V) (v, w)
case mpr.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk G v w
h : ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p
e : Sym2 V
ep : e ∈ Walk.edges p
⊢ e ∈ edgeSet (G \ fromEdgeSet {Quotient.mk (Sym2.Rel.setoid V) (v, w)})
simp only [edgeSet_sdiff, edgeSet_fromEdgeSet, edgeSet_sdiff_sdiff_isDiag, Set.mem_diff,
  Set.mem_singleton_iff]
no goals
case mpr.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
v w : V
p : Walk G v w
h : ¬Quotient.mk (Sym2.Rel.setoid V) (v, w) ∈ Walk.edges p
e : Sym2 V
ep : e ∈ Walk.edges p
⊢ e ∈ edgeSet G ∧ ¬e = Quotient.mk (Sym2.Rel.setoid V) (v, w)
exact ⟨p.edges_subset_edgeSet ep, fun h' => h (h' ▸ ep)⟩