One of the oldest results in spectral graph theory is Kirchoff’s matrix-tree theorem, which connects the number of spanning trees of a graph with the spectrum of its Laplacian. Specifically:

Let GG be a connected graph on nn vertices with (nonnormalized) Laplacian LL. Let LvL_v be a principal submatrix of LL obtained by removing any row and its corresponding column. The number of spanning trees of GG is equal to det(Lv)=i=2nλi\det (L_v) = \prod_{i=2}^n \lambda_i.

While studying for my oral exam, I came up with a proof that elides some of the tricky combinatorics by using basic algebraic topology facts. Here goes:

Choose a base vertex vv of the graph, and let v\partial_v be the boundary matrix of GG with the row corresponding to vv removed. Then Lv=vvTL_v = \partial_v \partial_v^T. The Cauchy-Binet formula gives a way to compute the determinant of such a product. If we sum over subsets SS of n1n-1 edges in GG, we have

det(Lv)=S(mn1)det(vS)det((vS)T)=S(mn1)det(vS)2.\det(L_v) = \sum_{S \in {m \choose {n-1}}} \det( \partial_v|_S) \det((\partial_v|_S)^T) = \sum_{S \in {m \choose {n-1}}} \det(\partial_v|_S)^2.

Suppose that SS is a set of n1n-1 edges that does not form a spanning tree. Then it must contain a cycle, and hence ker(_S)\ker ( \partial |\_S ) is nontrivial, since it is the boundary matrix of a graph with nontrivial H1H_1. As a result, ker(vS)0\ker(\partial_v|_S) \neq 0, and hence det(vS)=0\det(\partial_v|_S) = 0. On the other hand, if SS is a spanning tree, ker(_S)\ker(\partial|\_S) is trivial. Consider the reduced homology of GSG_S, the graph which has the same vertex set as GG but with only the edges in SS, where the distinguished point is vv. Since GSG_S is a tree, H~0(GS)=0\tilde H_0(G_S) = 0. But this implies that the map vS=πGvS:Zn1ZnZn1\partial_v|_S = \pi_{G \setminus v} \circ \partial|_S : \mathbb Z^{n-1} \to \mathbb Z^n \to \mathbb Z^{n-1} is an isomorphism, and hence vS\partial_v\mid_S is invertible over Z\mathbb Z, so that det(vS)=±1\det(\partial_v|_S) = \pm 1. Therefore, det(vS)det((vS)T)=1\det(\partial_v|_S)\det((\partial_v|_S)^T) = 1 whenever the edges in SS form a spanning tree and det(vS)det((vS)T)=0\det(\partial_v|_S)\det((\partial_v|_S)^T) = 0 when they do not, and hence the sum from the Cauchy-Binet formula counts the number of spanning trees.

It’s nice when all of the fiddly bits of an argument can be eliminated by appealing to general facts.