Documentation

Mathlib.Combinatorics.SimpleGraph.DegreeSum

Degree-sum formula and handshaking lemma #

The degree-sum formula is that the sum of the degrees of the vertices in a finite graph is equal to twice the number of edges. The handshaking lemma, a corollary, is that the number of odd-degree vertices is even.

Main definitions #

Implementation notes #

We give a combinatorial proof by using the facts that (1) the map from darts to vertices is such that each fiber has cardinality the degree of the corresponding vertex and that (2) the map from darts to edges is 2-to-1.

Tags #

simple graphs, sums, degree-sum formula, handshaking lemma

theorem SimpleGraph.dart_fst_fiber {V : Type u} (G : SimpleGraph V) [Fintype V] [DecidableRel G.Adj] [DecidableEq V] (v : V) :
Finset.filter (fun (d : G.Dart) => d.toProd.1 = v) Finset.univ = Finset.image (G.dartOfNeighborSet v) Finset.univ
theorem SimpleGraph.dart_fst_fiber_card_eq_degree {V : Type u} (G : SimpleGraph V) [Fintype V] [DecidableRel G.Adj] [DecidableEq V] (v : V) :
(Finset.filter (fun (d : G.Dart) => d.toProd.1 = v) Finset.univ).card = G.degree v
theorem SimpleGraph.dart_card_eq_sum_degrees {V : Type u} (G : SimpleGraph V) [Fintype V] [DecidableRel G.Adj] :
Fintype.card G.Dart = v : V, G.degree v
theorem SimpleGraph.Dart.edge_fiber {V : Type u} {G : SimpleGraph V} [Fintype V] [DecidableRel G.Adj] [DecidableEq V] (d : G.Dart) :
Finset.filter (fun (d' : G.Dart) => d'.edge = d.edge) Finset.univ = {d, d.symm}
theorem SimpleGraph.dart_edge_fiber_card {V : Type u} (G : SimpleGraph V) [Fintype V] [DecidableRel G.Adj] [DecidableEq V] (e : Sym2 V) (h : e G.edgeSet) :
(Finset.filter (fun (d : G.Dart) => d.edge = e) Finset.univ).card = 2
theorem SimpleGraph.dart_card_eq_twice_card_edges {V : Type u} (G : SimpleGraph V) [Fintype V] [DecidableRel G.Adj] [Fintype (Sym2 V)] :
Fintype.card G.Dart = 2 * G.edgeFinset.card
theorem SimpleGraph.sum_degrees_eq_twice_card_edges {V : Type u} (G : SimpleGraph V) [Fintype V] [DecidableRel G.Adj] [Fintype (Sym2 V)] :
v : V, G.degree v = 2 * G.edgeFinset.card

The degree-sum formula. This is also known as the handshaking lemma, which might more specifically refer to SimpleGraph.even_card_odd_degree_vertices.

theorem SimpleGraph.two_mul_card_edgeFinset {V : Type u} (G : SimpleGraph V) [Fintype V] [DecidableRel G.Adj] [Fintype (Sym2 V)] :
2 * G.edgeFinset.card = (Finset.filter (fun (x : V × V) => match x with | (x, y) => G.Adj x y) Finset.univ).card
theorem SimpleGraph.even_card_odd_degree_vertices {V : Type u} (G : SimpleGraph V) [Fintype V] [DecidableRel G.Adj] :
Even (Finset.filter (fun (v : V) => Odd (G.degree v)) Finset.univ).card

The handshaking lemma. See also SimpleGraph.sum_degrees_eq_twice_card_edges.

theorem SimpleGraph.odd_card_odd_degree_vertices_ne {V : Type u} (G : SimpleGraph V) [Fintype V] [DecidableEq V] [DecidableRel G.Adj] (v : V) (h : Odd (G.degree v)) :
Odd (Finset.filter (fun (w : V) => w v Odd (G.degree w)) Finset.univ).card
theorem SimpleGraph.exists_ne_odd_degree_of_exists_odd_degree {V : Type u} (G : SimpleGraph V) [Fintype V] [DecidableRel G.Adj] (v : V) (h : Odd (G.degree v)) :
∃ (w : V), w v Odd (G.degree w)