Theorem: SimpleGraph.deleteFar_iff
File: Mathlib/Combinatorics/SimpleGraph/Finite.lean

tactic: refine ⟨fun h H _ hHG hH ↦ ?_, fun h s hs hG ↦ ?_⟩
state_before: V : Type u_1
G : SimpleGraph V
e : Sym2 V
𝕜 : Type u_2
inst✝³ : OrderedRing 𝕜
inst✝² : Fintype V
inst✝¹ : Fintype (Sym2 V)
inst✝ : Fintype ↑G.edgeSet
p : SimpleGraph V → Prop
r r₁ r₂ : 𝕜
⊢ G.DeleteFar p r ↔
    ∀ ⦃H : SimpleGraph V⦄ [inst : DecidableRel H.Adj], H ≤ G → p H → r ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card
state_after: case refine_1
V : Type u_1
G : SimpleGraph V
e : Sym2 V
𝕜 : Type u_2
inst✝³ : OrderedRing 𝕜
inst✝² : Fintype V
inst✝¹ : Fintype (Sym2 V)
inst✝ : Fintype ↑G.edgeSet
p : SimpleGraph V → Prop
r r₁ r₂ : 𝕜
h : G.DeleteFar p r
H : SimpleGraph V
x✝ : DecidableRel H.Adj
hHG : H ≤ G
hH : p H
⊢ r ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card

case refine_2
V : Type u_1
G : SimpleGraph V
e : Sym2 V
𝕜 : Type u_2
inst✝³ : OrderedRing 𝕜
inst✝² : Fintype V
inst✝¹ : Fintype (Sym2 V)
inst✝ : Fintype ↑G.edgeSet
p : SimpleGraph V → Prop
r r₁ r₂ : 𝕜
h : ∀ ⦃H : SimpleGraph V⦄ [inst : DecidableRel H.Adj], H ≤ G → p H → r ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card
s : Finset (Sym2 V)
hs : s ⊆ G.edgeFinset
hG : p (G.deleteEdges ↑s)
⊢ r ≤ ↑s.card

tactic: have := h (sdiff_subset (t := H.edgeFinset))
state_before: case refine_1
V : Type u_1
G : SimpleGraph V
e : Sym2 V
𝕜 : Type u_2
inst✝³ : OrderedRing 𝕜
inst✝² : Fintype V
inst✝¹ : Fintype (Sym2 V)
inst✝ : Fintype ↑G.edgeSet
p : SimpleGraph V → Prop
r r₁ r₂ : 𝕜
h : G.DeleteFar p r
H : SimpleGraph V
x✝ : DecidableRel H.Adj
hHG : H ≤ G
hH : p H
⊢ r ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card
state_after: case refine_1
V : Type u_1
G : SimpleGraph V
e : Sym2 V
𝕜 : Type u_2
inst✝³ : OrderedRing 𝕜
inst✝² : Fintype V
inst✝¹ : Fintype (Sym2 V)
inst✝ : Fintype ↑G.edgeSet
p : SimpleGraph V → Prop
r r₁ r₂ : 𝕜
h : G.DeleteFar p r
H : SimpleGraph V
x✝ : DecidableRel H.Adj
hHG : H ≤ G
hH : p H
this : p (G.deleteEdges ↑(G.edgeFinset \ H.edgeFinset)) → r ≤ ↑(G.edgeFinset \ H.edgeFinset).card
⊢ r ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card

tactic: simp only [deleteEdges_sdiff_eq_of_le hHG, edgeFinset_mono hHG, card_sdiff,
  card_le_card, coe_sdiff, coe_edgeFinset, Nat.cast_sub] at this
state_before: case refine_1
V : Type u_1
G : SimpleGraph V
e : Sym2 V
𝕜 : Type u_2
inst✝³ : OrderedRing 𝕜
inst✝² : Fintype V
inst✝¹ : Fintype (Sym2 V)
inst✝ : Fintype ↑G.edgeSet
p : SimpleGraph V → Prop
r r₁ r₂ : 𝕜
h : G.DeleteFar p r
H : SimpleGraph V
x✝ : DecidableRel H.Adj
hHG : H ≤ G
hH : p H
this : p (G.deleteEdges ↑(G.edgeFinset \ H.edgeFinset)) → r ≤ ↑(G.edgeFinset \ H.edgeFinset).card
⊢ r ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card
state_after: case refine_1
V : Type u_1
G : SimpleGraph V
e : Sym2 V
𝕜 : Type u_2
inst✝³ : OrderedRing 𝕜
inst✝² : Fintype V
inst✝¹ : Fintype (Sym2 V)
inst✝ : Fintype ↑G.edgeSet
p : SimpleGraph V → Prop
r r₁ r₂ : 𝕜
h : G.DeleteFar p r
H : SimpleGraph V
x✝ : DecidableRel H.Adj
hHG : H ≤ G
hH : p H
this : p H → r ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card
⊢ r ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card

tactic: exact this hH
state_before: case refine_1
V : Type u_1
G : SimpleGraph V
e : Sym2 V
𝕜 : Type u_2
inst✝³ : OrderedRing 𝕜
inst✝² : Fintype V
inst✝¹ : Fintype (Sym2 V)
inst✝ : Fintype ↑G.edgeSet
p : SimpleGraph V → Prop
r r₁ r₂ : 𝕜
h : G.DeleteFar p r
H : SimpleGraph V
x✝ : DecidableRel H.Adj
hHG : H ≤ G
hH : p H
this : p H → r ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card
⊢ r ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card
state_after: no goals

tactic: classical
simpa [card_sdiff hs, edgeFinset_deleteEdges, -Set.toFinset_card, Nat.cast_sub,
  card_le_card hs] using h (G.deleteEdges_le s) hG
state_before: case refine_2
V : Type u_1
G : SimpleGraph V
e : Sym2 V
𝕜 : Type u_2
inst✝³ : OrderedRing 𝕜
inst✝² : Fintype V
inst✝¹ : Fintype (Sym2 V)
inst✝ : Fintype ↑G.edgeSet
p : SimpleGraph V → Prop
r r₁ r₂ : 𝕜
h : ∀ ⦃H : SimpleGraph V⦄ [inst : DecidableRel H.Adj], H ≤ G → p H → r ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card
s : Finset (Sym2 V)
hs : s ⊆ G.edgeFinset
hG : p (G.deleteEdges ↑s)
⊢ r ≤ ↑s.card
state_after: no goals

tactic: simpa [card_sdiff hs, edgeFinset_deleteEdges, -Set.toFinset_card, Nat.cast_sub,
  card_le_card hs] using h (G.deleteEdges_le s) hG
state_before: case refine_2
V : Type u_1
G : SimpleGraph V
e : Sym2 V
𝕜 : Type u_2
inst✝³ : OrderedRing 𝕜
inst✝² : Fintype V
inst✝¹ : Fintype (Sym2 V)
inst✝ : Fintype ↑G.edgeSet
p : SimpleGraph V → Prop
r r₁ r₂ : 𝕜
h : ∀ ⦃H : SimpleGraph V⦄ [inst : DecidableRel H.Adj], H ≤ G → p H → r ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card
s : Finset (Sym2 V)
hs : s ⊆ G.edgeFinset
hG : p (G.deleteEdges ↑s)
⊢ r ≤ ↑s.card
state_after: no goals