Theorem: SimpleGraph.card_interedges_add_card_interedges_compl
File: Mathlib/Combinatorics/SimpleGraph/Density.lean

tactic: rw [← card_product, interedges_def, interedges_def]
state_before: 𝕜 : Type u_1
ι : Type u_2
κ : Type u_3
α : Type u_4
β : Type u_5
G : SimpleGraph α
inst✝¹ : DecidableRel G.Adj
s s₁ s₂ t t₁ t₂ : Finset α
a b : α
inst✝ : DecidableEq α
h : Disjoint s t
⊢ (G.interedges s t).card + (Gᶜ.interedges s t).card = s.card * t.card
state_after: 𝕜 : Type u_1
ι : Type u_2
κ : Type u_3
α : Type u_4
β : Type u_5
G : SimpleGraph α
inst✝¹ : DecidableRel G.Adj
s s₁ s₂ t t₁ t₂ : Finset α
a b : α
inst✝ : DecidableEq α
h : Disjoint s t
⊢ (filter (fun e => G.Adj e.1 e.2) (s ×ˢ t)).card + (filter (fun e => Gᶜ.Adj e.1 e.2) (s ×ˢ t)).card = (s ×ˢ t).card

tactic: have : ((s ×ˢ t).filter fun e ↦ Gᶜ.Adj e.1 e.2) = (s ×ˢ t).filter fun e ↦ ¬G.Adj e.1 e.2 := by
  refine filter_congr fun x hx ↦ ?_
  rw [mem_product] at hx
  rw [compl_adj, and_iff_right (h.forall_ne_finset hx.1 hx.2)]
state_before: 𝕜 : Type u_1
ι : Type u_2
κ : Type u_3
α : Type u_4
β : Type u_5
G : SimpleGraph α
inst✝¹ : DecidableRel G.Adj
s s₁ s₂ t t₁ t₂ : Finset α
a b : α
inst✝ : DecidableEq α
h : Disjoint s t
⊢ (filter (fun e => G.Adj e.1 e.2) (s ×ˢ t)).card + (filter (fun e => Gᶜ.Adj e.1 e.2) (s ×ˢ t)).card = (s ×ˢ t).card
state_after: 𝕜 : Type u_1
ι : Type u_2
κ : Type u_3
α : Type u_4
β : Type u_5
G : SimpleGraph α
inst✝¹ : DecidableRel G.Adj
s s₁ s₂ t t₁ t₂ : Finset α
a b : α
inst✝ : DecidableEq α
h : Disjoint s t
this : filter (fun e => Gᶜ.Adj e.1 e.2) (s ×ˢ t) = filter (fun e => ¬G.Adj e.1 e.2) (s ×ˢ t)
⊢ (filter (fun e => G.Adj e.1 e.2) (s ×ˢ t)).card + (filter (fun e => Gᶜ.Adj e.1 e.2) (s ×ˢ t)).card = (s ×ˢ t).card

tactic: rw [this, ← card_union_of_disjoint, filter_union_filter_neg_eq]
state_before: 𝕜 : Type u_1
ι : Type u_2
κ : Type u_3
α : Type u_4
β : Type u_5
G : SimpleGraph α
inst✝¹ : DecidableRel G.Adj
s s₁ s₂ t t₁ t₂ : Finset α
a b : α
inst✝ : DecidableEq α
h : Disjoint s t
this : filter (fun e => Gᶜ.Adj e.1 e.2) (s ×ˢ t) = filter (fun e => ¬G.Adj e.1 e.2) (s ×ˢ t)
⊢ (filter (fun e => G.Adj e.1 e.2) (s ×ˢ t)).card + (filter (fun e => Gᶜ.Adj e.1 e.2) (s ×ˢ t)).card = (s ×ˢ t).card
state_after: 𝕜 : Type u_1
ι : Type u_2
κ : Type u_3
α : Type u_4
β : Type u_5
G : SimpleGraph α
inst✝¹ : DecidableRel G.Adj
s s₁ s₂ t t₁ t₂ : Finset α
a b : α
inst✝ : DecidableEq α
h : Disjoint s t
this : filter (fun e => Gᶜ.Adj e.1 e.2) (s ×ˢ t) = filter (fun e => ¬G.Adj e.1 e.2) (s ×ˢ t)
⊢ Disjoint (filter (fun e => G.Adj e.1 e.2) (s ×ˢ t)) (filter (fun e => ¬G.Adj e.1 e.2) (s ×ˢ t))

tactic: exact disjoint_filter.2 fun _ _ ↦ Classical.not_not.2
state_before: 𝕜 : Type u_1
ι : Type u_2
κ : Type u_3
α : Type u_4
β : Type u_5
G : SimpleGraph α
inst✝¹ : DecidableRel G.Adj
s s₁ s₂ t t₁ t₂ : Finset α
a b : α
inst✝ : DecidableEq α
h : Disjoint s t
this : filter (fun e => Gᶜ.Adj e.1 e.2) (s ×ˢ t) = filter (fun e => ¬G.Adj e.1 e.2) (s ×ˢ t)
⊢ Disjoint (filter (fun e => G.Adj e.1 e.2) (s ×ˢ t)) (filter (fun e => ¬G.Adj e.1 e.2) (s ×ˢ t))
state_after: no goals

tactic: refine filter_congr fun x hx ↦ ?_
state_before: 𝕜 : Type u_1
ι : Type u_2
κ : Type u_3
α : Type u_4
β : Type u_5
G : SimpleGraph α
inst✝¹ : DecidableRel G.Adj
s s₁ s₂ t t₁ t₂ : Finset α
a b : α
inst✝ : DecidableEq α
h : Disjoint s t
⊢ filter (fun e => Gᶜ.Adj e.1 e.2) (s ×ˢ t) = filter (fun e => ¬G.Adj e.1 e.2) (s ×ˢ t)
state_after: 𝕜 : Type u_1
ι : Type u_2
κ : Type u_3
α : Type u_4
β : Type u_5
G : SimpleGraph α
inst✝¹ : DecidableRel G.Adj
s s₁ s₂ t t₁ t₂ : Finset α
a b : α
inst✝ : DecidableEq α
h : Disjoint s t
x : α × α
hx : x ∈ s ×ˢ t
⊢ Gᶜ.Adj x.1 x.2 ↔ ¬G.Adj x.1 x.2

tactic: rw [mem_product] at hx
state_before: 𝕜 : Type u_1
ι : Type u_2
κ : Type u_3
α : Type u_4
β : Type u_5
G : SimpleGraph α
inst✝¹ : DecidableRel G.Adj
s s₁ s₂ t t₁ t₂ : Finset α
a b : α
inst✝ : DecidableEq α
h : Disjoint s t
x : α × α
hx : x ∈ s ×ˢ t
⊢ Gᶜ.Adj x.1 x.2 ↔ ¬G.Adj x.1 x.2
state_after: 𝕜 : Type u_1
ι : Type u_2
κ : Type u_3
α : Type u_4
β : Type u_5
G : SimpleGraph α
inst✝¹ : DecidableRel G.Adj
s s₁ s₂ t t₁ t₂ : Finset α
a b : α
inst✝ : DecidableEq α
h : Disjoint s t
x : α × α
hx : x.1 ∈ s ∧ x.2 ∈ t
⊢ Gᶜ.Adj x.1 x.2 ↔ ¬G.Adj x.1 x.2

tactic: rw [compl_adj, and_iff_right (h.forall_ne_finset hx.1 hx.2)]
state_before: 𝕜 : Type u_1
ι : Type u_2
κ : Type u_3
α : Type u_4
β : Type u_5
G : SimpleGraph α
inst✝¹ : DecidableRel G.Adj
s s₁ s₂ t t₁ t₂ : Finset α
a b : α
inst✝ : DecidableEq α
h : Disjoint s t
x : α × α
hx : x.1 ∈ s ∧ x.2 ∈ t
⊢ Gᶜ.Adj x.1 x.2 ↔ ¬G.Adj x.1 x.2
state_after: no goals