Theorem: SimpleGraph.odd_card_iff_odd_components
File: Mathlib/Combinatorics/SimpleGraph/Connectivity/WalkCounting.lean

Proof steps:
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
⊢ Odd (Nat.card V) ↔ Odd (Nat.card ↑{c | Odd (Nat.card ↑c.supp)})
state_after: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
⊢ Odd (Fintype.card V) ↔ Odd (Nat.card ↑{c | Odd (Nat.card ↑c.supp)})
tactic: rw [Nat.card_eq_fintype_card]
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
⊢ Odd (Fintype.card V) ↔ Odd (Nat.card ↑{c | Odd (Nat.card ↑c.supp)})
state_after: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
⊢ Odd (Finset.univ.biUnion fun x => x.supp.toFinset).card ↔ Odd (Nat.card ↑{x | Odd (Nat.card ↑x.supp)})
tactic: simp only [← (set_fintype_card_eq_univ_iff _).mpr G.iUnion_connectedComponentSupp,
    ConnectedComponent.mem_supp_iff, Fintype.card_subtype_compl,
    ← Set.toFinset_card, Set.toFinset_iUnion ConnectedComponent.supp]
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
⊢ Odd (Finset.univ.biUnion fun x => x.supp.toFinset).card ↔ Odd (Nat.card ↑{x | Odd (Nat.card ↑x.supp)})
state_after: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
⊢ Odd (∑ u : G.ConnectedComponent, u.supp.toFinset.card) ↔ Odd (Nat.card ↑{x | Odd (Nat.card ↑x.supp)})
tactic: rw [Finset.card_biUnion
    (fun x _ y _ hxy ↦ Set.disjoint_toFinset.mpr (pairwise_disjoint_supp_connectedComponent _ hxy))]
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
⊢ Odd (∑ u : G.ConnectedComponent, u.supp.toFinset.card) ↔ Odd (Nat.card ↑{x | Odd (Nat.card ↑x.supp)})
state_after: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
⊢ Odd (∑ x : G.ConnectedComponent, Nat.card ↑x.supp) ↔ Odd (Nat.card ↑{x | Odd (Nat.card ↑x.supp)})
tactic: simp_rw [Set.toFinset_card, ← Nat.card_eq_fintype_card]
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
⊢ Odd (∑ x : G.ConnectedComponent, Nat.card ↑x.supp) ↔ Odd (Nat.card ↑{x | Odd (Nat.card ↑x.supp)})
state_after: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
⊢ Odd (∑ x : G.ConnectedComponent, Nat.card ↑x.supp) ↔
    Odd (Finset.filter (fun x => x ∈ {x | Odd (Nat.card ↑x.supp)}) Finset.univ).card
tactic: rw [Nat.card_eq_fintype_card, Fintype.card_ofFinset]
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
⊢ Odd (∑ x : G.ConnectedComponent, Nat.card ↑x.supp) ↔
    Odd (Finset.filter (fun x => x ∈ {x | Odd (Nat.card ↑x.supp)}) Finset.univ).card
state_after: no goals
tactic: exact (Finset.odd_sum_iff_odd_card_odd (fun x : G.ConnectedComponent ↦ Nat.card x.supp))