Theorem: SimpleGraph.Subgraph.deleteEdges_coe_eq
File: Mathlib/Combinatorics/SimpleGraph/Subgraph.lean

tactic: ext ⟨v, hv⟩ ⟨w, hw⟩
state_before: ι : Sort ?u.244319
V : Type u
W : Type v
G : SimpleGraph V
G' : Subgraph G
s✝ : Set (Sym2 V)
s : Set (Sym2 ↑G'.verts)
⊢ SimpleGraph.deleteEdges (Subgraph.coe G') s = Subgraph.coe (deleteEdges G' (Sym2.map Subtype.val '' s))

tactic: simp only [SimpleGraph.deleteEdges_adj, coe_Adj, deleteEdges_adj, Set.mem_image, not_exists,
  not_and, and_congr_right_iff]
state_before: case Adj.h.mk.h.mk.a
ι : Sort ?u.244319
V : Type u
W : Type v
G : SimpleGraph V
G' : Subgraph G
s✝ : Set (Sym2 V)
s : Set (Sym2 ↑G'.verts)
v : V
hv : v ∈ G'.verts
w : V
hw : w ∈ G'.verts
⊢ SimpleGraph.Adj (SimpleGraph.deleteEdges (Subgraph.coe G') s) { val := v, property := hv }
      { val := w, property := hw } ↔
    SimpleGraph.Adj (Subgraph.coe (deleteEdges G' (Sym2.map Subtype.val '' s))) { val := v, property := hv }
      { val := w, property := hw }

tactic: intro
state_before: case Adj.h.mk.h.mk.a
ι : Sort ?u.244319
V : Type u
W : Type v
G : SimpleGraph V
G' : Subgraph G
s✝ : Set (Sym2 V)
s : Set (Sym2 ↑G'.verts)
v : V
hv : v ∈ G'.verts
w : V
hw : w ∈ G'.verts
⊢ Adj G' v w →
    (¬Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v, property := hv }, { val := w, property := hw }) ∈ s ↔
      ∀ (x : Sym2 ↑G'.verts), x ∈ s → ¬Sym2.map Subtype.val x = Quotient.mk (Sym2.Rel.setoid V) (v, w))

tactic: constructor
state_before: case Adj.h.mk.h.mk.a
ι : Sort ?u.244319
V : Type u
W : Type v
G : SimpleGraph V
G' : Subgraph G
s✝ : Set (Sym2 V)
s : Set (Sym2 ↑G'.verts)
v : V
hv : v ∈ G'.verts
w : V
hw : w ∈ G'.verts
a✝ : Adj G' v w
⊢ ¬Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v, property := hv }, { val := w, property := hw }) ∈ s ↔
    ∀ (x : Sym2 ↑G'.verts), x ∈ s → ¬Sym2.map Subtype.val x = Quotient.mk (Sym2.Rel.setoid V) (v, w)

tactic: intro hs
state_before: case Adj.h.mk.h.mk.a.mp
ι : Sort ?u.244319
V : Type u
W : Type v
G : SimpleGraph V
G' : Subgraph G
s✝ : Set (Sym2 V)
s : Set (Sym2 ↑G'.verts)
v : V
hv : v ∈ G'.verts
w : V
hw : w ∈ G'.verts
a✝ : Adj G' v w
⊢ ¬Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v, property := hv }, { val := w, property := hw }) ∈ s →
    ∀ (x : Sym2 ↑G'.verts), x ∈ s → ¬Sym2.map Subtype.val x = Quotient.mk (Sym2.Rel.setoid V) (v, w)

tactic: refine' Sym2.ind _
state_before: case Adj.h.mk.h.mk.a.mp
ι : Sort ?u.244319
V : Type u
W : Type v
G : SimpleGraph V
G' : Subgraph G
s✝ : Set (Sym2 V)
s : Set (Sym2 ↑G'.verts)
v : V
hv : v ∈ G'.verts
w : V
hw : w ∈ G'.verts
a✝ : Adj G' v w
hs : ¬Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v, property := hv }, { val := w, property := hw }) ∈ s
⊢ ∀ (x : Sym2 ↑G'.verts), x ∈ s → ¬Sym2.map Subtype.val x = Quotient.mk (Sym2.Rel.setoid V) (v, w)

tactic: rintro ⟨v', hv'⟩ ⟨w', hw'⟩
state_before: case Adj.h.mk.h.mk.a.mp
ι : Sort ?u.244319
V : Type u
W : Type v
G : SimpleGraph V
G' : Subgraph G
s✝ : Set (Sym2 V)
s : Set (Sym2 ↑G'.verts)
v : V
hv : v ∈ G'.verts
w : V
hw : w ∈ G'.verts
a✝ : Adj G' v w
hs : ¬Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v, property := hv }, { val := w, property := hw }) ∈ s
⊢ ∀ (x y : ↑G'.verts),
    Quotient.mk (Sym2.Rel.setoid ↑G'.verts) (x, y) ∈ s →
      ¬Sym2.map Subtype.val (Quotient.mk (Sym2.Rel.setoid ↑G'.verts) (x, y)) = Quotient.mk (Sym2.Rel.setoid V) (v, w)

tactic: simp only [Sym2.map_pair_eq, Quotient.eq]
state_before: case Adj.h.mk.h.mk.a.mp.mk.mk
ι : Sort ?u.244319
V : Type u
W : Type v
G : SimpleGraph V
G' : Subgraph G
s✝ : Set (Sym2 V)
s : Set (Sym2 ↑G'.verts)
v : V
hv : v ∈ G'.verts
w : V
hw : w ∈ G'.verts
a✝ : Adj G' v w
hs : ¬Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v, property := hv }, { val := w, property := hw }) ∈ s
v' : V
hv' : v' ∈ G'.verts
w' : V
hw' : w' ∈ G'.verts
⊢ Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v', property := hv' }, { val := w', property := hw' }) ∈ s →
    ¬Sym2.map Subtype.val
          (Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v', property := hv' }, { val := w', property := hw' })) =
        Quotient.mk (Sym2.Rel.setoid V) (v, w)

tactic: contrapose!
state_before: case Adj.h.mk.h.mk.a.mp.mk.mk
ι : Sort ?u.244319
V : Type u
W : Type v
G : SimpleGraph V
G' : Subgraph G
s✝ : Set (Sym2 V)
s : Set (Sym2 ↑G'.verts)
v : V
hv : v ∈ G'.verts
w : V
hw : w ∈ G'.verts
a✝ : Adj G' v w
hs : ¬Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v, property := hv }, { val := w, property := hw }) ∈ s
v' : V
hv' : v' ∈ G'.verts
w' : V
hw' : w' ∈ G'.verts
⊢ Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v', property := hv' }, { val := w', property := hw' }) ∈ s →
    ¬(v', w') ≈ (v, w)

tactic: rintro (_ | _) <;> simpa only [Sym2.eq_swap]
state_before: case Adj.h.mk.h.mk.a.mp.mk.mk
ι : Sort ?u.244319
V : Type u
W : Type v
G : SimpleGraph V
G' : Subgraph G
s✝ : Set (Sym2 V)
s : Set (Sym2 ↑G'.verts)
v : V
hv : v ∈ G'.verts
w : V
hw : w ∈ G'.verts
a✝ : Adj G' v w
hs : ¬Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v, property := hv }, { val := w, property := hw }) ∈ s
v' : V
hv' : v' ∈ G'.verts
w' : V
hw' : w' ∈ G'.verts
⊢ (v', w') ≈ (v, w) →
    ¬Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v', property := hv' }, { val := w', property := hw' }) ∈ s

tactic: intro h' hs
state_before: case Adj.h.mk.h.mk.a.mpr
ι : Sort ?u.244319
V : Type u
W : Type v
G : SimpleGraph V
G' : Subgraph G
s✝ : Set (Sym2 V)
s : Set (Sym2 ↑G'.verts)
v : V
hv : v ∈ G'.verts
w : V
hw : w ∈ G'.verts
a✝ : Adj G' v w
⊢ (∀ (x : Sym2 ↑G'.verts), x ∈ s → ¬Sym2.map Subtype.val x = Quotient.mk (Sym2.Rel.setoid V) (v, w)) →
    ¬Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v, property := hv }, { val := w, property := hw }) ∈ s

tactic: exact h' _ hs rfl
state_before: case Adj.h.mk.h.mk.a.mpr
ι : Sort ?u.244319
V : Type u
W : Type v
G : SimpleGraph V
G' : Subgraph G
s✝ : Set (Sym2 V)
s : Set (Sym2 ↑G'.verts)
v : V
hv : v ∈ G'.verts
w : V
hw : w ∈ G'.verts
a✝ : Adj G' v w
h' : ∀ (x : Sym2 ↑G'.verts), x ∈ s → ¬Sym2.map Subtype.val x = Quotient.mk (Sym2.Rel.setoid V) (v, w)
hs : Quotient.mk (Sym2.Rel.setoid ↑G'.verts) ({ val := v, property := hv }, { val := w, property := hw }) ∈ s
⊢ False