メインコンテンツへスキップ

外積代数と行列木定理

箱星
著者
箱星
のんびり暮らしたい。
目次

この記事は木 Advent Calendar 2025 の 13 日目の記事です。

「木材と人材」というタイトルで何か書く予定でしたが、急遽予定を変更してお届けします。

外積代数
#

今月 10 日、外積代数 in 競プロという記事が公開されました。見たことがないテクニックで興味深い記事でした。

これを見て、そういえば外積代数を使う組合せ論の論文があったなあ、ということを思い出したのでその論文を読みました。その内容を軽く紹介していきます。

まずは外積代数を復習します。ベクトル空間 VV の基底 {e1,,en}\{e_1,\ldots,e_n\} を考えます。外積代数 (V)\bigwedge(V)ei1ei2eike_{i_1}\wedge e_{i_2}\wedge\cdots \wedge e_{i_k} (1i1<<ikn1\le i_1<\cdots<i_k\le n) を基底とするベクトル空間です。このウェッジ \wedge

  • vv=0v\wedge v=0
  • vw=wvv\wedge w=-w\wedge v

などの性質をみたします。外積代数はグラスマン代数とも呼ばれるようです。

以下、ウェッジを省略して vw=vwv\wedge w=vw のように書きます。総積も \prod を用います。さらに eie_i の代わりに ψ1,,ψn\psi_1,\ldots,\psi_n および ψˉ1,,ψˉn\bar{\psi}_1,\ldots,\bar{\psi}_n を用います。これらは関係式

  • ψiψj=ψjψi\psi_i\psi_j=-\psi_j\psi_i
  • ψˉiψjˉ=ψˉjψˉi\bar{\psi}_i\bar{\psi_j}=-\bar{\psi}_j\bar{\psi}_i
  • ψiψˉj=ψˉjψi\psi_i\bar{\psi}_j=\bar{\psi}_j\psi_i

をみたすとします。特に ψi2=ψˉi2=0\psi_i^2=\bar{\psi}_i^2=0 です。物理学のフェルミオンと関係するそうですが、物理学はわかりません。

外積代数と行列式
#

nn 次正方行列 A=(Aij)A=(A_{ij}) に対して

i,j=1n(1+ψˉiψjAij)=I,J[n]ψˉIψJdet(AI,J) \prod_{i,j=1}^n(1+\bar{\psi}_i\psi_jA_{ij})=\sum_{I,J\subset [n]}\bar{\psi}_I\psi_J\det(A_{I,J})

が成り立ちます。ここで ψˉI\bar{\psi}_IiIi\in I に関する ψˉi\bar{\psi}_i の積(昇順)、ψJ\psi_JjJj\in J に関する ψj\psi_j の積(昇順)で、AI,JA_{I,J} は行を II、列を JJ とした小行列です。

AA の行列式だけでなく、小行列式も一挙に現れるところがポイントです。

外積代数と行列木定理
#

グラフ GG のラプラシアン L=DAL=D-A2 日目の記事でも解説したのでここでは解説しません。

定理 (行列木定理)

  1. グラフ GG の全域木の個数は、ラプラシアン LL の任意の余因子と等しい。
  2. det(tIn+L)\det(tI_n+L)tt の多項式であり、一次の係数を c1c_1 とおく。このとき、全域木の個数は 1nc1\frac{1}{n}c_1 に等しい。
  3. LL の固有値を λ1,,λn\lambda_1,\ldots,\lambda_n とする。ただし λ1=0\lambda_1=0 とする。このとき、全域木の個数は 1nλ2λ3λn\frac{1}{n}\lambda_2\lambda_3\cdots \lambda_n に等しい。

jj を固定したとき

i=1n(1+ψˉiψjAij)=i=1n(1+(ψˉiψˉj)ψjAij+ψˉjψjAij)=i=1n(1+(ψˉiψˉj)ψjAij)i=1n(1+ψˉjψjAij)=i[n]{j}(1(ψˉjψˉi)ψjAij)(1+ψˉjψji=1nAij) \begin{align*} \prod_{i=1}^n(1+\bar{\psi}_i\psi_jA_{ij}) &= \prod_{i=1}^n(1+(\bar{\psi}_i-\bar{\psi}_j)\psi_jA_{ij}+\bar{\psi}_j\psi_jA_{ij}) \\ &= \prod_{i=1}^n(1+(\bar{\psi}_i-\bar{\psi}_j)\psi_jA_{ij})\prod_{i=1}^n(1+\bar{\psi}_j\psi_jA_{ij}) \\ &= \prod_{i\in [n]\setminus\{j\}}(1-(\bar{\psi}_j-\bar{\psi}_i)\psi_jA_{ij})\cdot \left(1+\bar{\psi}_j\psi_j\sum_{i=1}^n A_{ij}\right) \end{align*}

となります。ここで ψj2=0\psi_j^2=0 を使いました。

Bj=iAijB_j=\sum_i A_{ij} とおき

w(i,j)={AijijBji=j w(i,j)=\begin{cases} -A_{ij} & i\ne j \\ B_j & i=j \end{cases} Ψ(i,j)={(ψˉjψˉi)ψjijψˉjψji=j \Psi(i,j)=\begin{cases} (\bar{\psi}_j-\bar{\psi}_i)\psi_j & i\ne j \\ \bar{\psi}_j\psi_j & i=j \end{cases}

とおきます。すると

i,j=1n(1+ψˉiψjAij)=i,j=1n(1+Ψ(i,j)w(i,j)) \prod_{i,j=1}^n(1+\bar{\psi}_i\psi_jA_{ij})=\prod_{i,j=1}^n(1+\Psi(i,j)w(i,j))

が得られます。

(i,j)(i,j) の重みを w(i,j)w(i,j) とした有向グラフ GG を考えます。GG にはループもあります。

辺集合 HH に対して、w(H),Ψ(H)w(H), \Psi(H)HH に含まれる辺 (i,j)(i,j) について w(i,j),Ψ(i,j)w(i,j), \Psi(i,j) の積をとったものとします。なお Ψ(i,j)Ψ(i,j)=Ψ(i,j)Ψ(i,j)\Psi(i,j)\Psi(i',j')=\Psi(i',j')\Psi(i,j) なので積の順番は考えなくてよいです。(ψ\psiψˉ\bar{\psi} で符号が打ち消しあう)

このとき、右辺を展開することで

i,j=1n(1+ψˉiψjAij)=HE(G)Ψ(H)w(H) \prod_{i,j=1}^n(1+\bar{\psi}_i\psi_jA_{ij})=\sum_{H\subset E(G)}\Psi(H)w(H)

となるので

I,J[n]ψˉIψJdet(AI,J)=HE(G)Ψ(H)w(H) \sum_{I,J\subset [n]}\bar{\psi}_I\psi_J\det(A_{I,J})=\sum_{H\subset E(G)}\Psi(H)w(H)

が成り立ちます。

終点が等しい 2 辺 (i1,j),(i2,j)(i_1,j),(i_2,j) について、Ψ(i1,j)Ψ(i2,j)\Psi(i_1,j)\Psi(i_2,j)ψj2=0\psi_j^2=0 を含むので 0 です。よって HH として入次数が 1 以下のもののみを考えればよいです。

入次数が 1 以下のグラフの連結成分は、次の 3 種類です。

  • 木型:根付き木であって辺が根から遠ざかる向きなもの。2 頂点以上。
  • ループ型:木タイプのグラフの根にループを加えたもの。1 頂点でもよい。
  • サイクル型:サイクルを含むもの。

まずサイクル型を考えましょう。12k11\to 2\to\cdots\to k\to 1 (k2k\ge 2) というサイクルがあるとします。このとき

Ψ(1,2)Ψ(2,3)Ψ(k1,k)Ψ(k,1)=(ψˉ2ψˉ1)ψ2(ψˉ3ψˉ2)ψ3(ψˉkψˉk1)ψk(ψˉ1ψˉk)ψ1=(ψˉ2ψˉ3ψˉkψˉ1+(1)kψˉ1ψˉ2ψˉk)ψ2ψ3ψkψ1=((1)k1+(1)k)ψˉ1ψˉ2ψˉkψ2ψ3ψkψ1=0 \begin{align*} & \Psi(1,2)\Psi(2,3)\cdots\Psi(k-1,k)\Psi(k,1) \\ &= (\bar{\psi}_2-\bar{\psi}_1)\psi_2(\bar{\psi}_3-\bar{\psi}_2)\psi_3\cdots(\bar{\psi}_k-\bar{\psi}_{k-1})\psi_k(\bar{\psi}_1-\bar{\psi}_k)\psi_1 \\ &= (\bar{\psi}_2\bar{\psi}_3\cdots \bar{\psi}_k\bar{\psi}_1+(-1)^k\bar{\psi}_1\bar{\psi}_2\cdots \bar{\psi}_k)\psi_2\psi_3\cdots \psi_k\psi_1 \\ &= ((-1)^{k-1}+(-1)^k)\bar{\psi}_1\bar{\psi}_2\cdots \bar{\psi}_k\psi_2\psi_3\cdots \psi_k\psi_1 \\ &= 0 \end{align*}

となるので、サイクル型は考えなくてよいことになります。

木型は、根を rr とするとき ψr\psi_r が現れないので、det(A)\det(A) のみを考える場合は無視してよいです。

最後にループ型ですが、Ψ(H)=ψˉV(H)ψV(H)\Psi(H)=\bar{\psi}_{V(H)}\psi_{V(H)} となることがわかります。

さて、行列木定理に戻ります。A=LA=L とし、(n,n)(n,n) 余因子 det(A[n1],[n1])\det(A_{[n-1],[n-1]}) を考えます。

HEΨ(H)w(H) \sum_{H\subset E}\Psi(H)w(H)

における ψˉ1ψˉn1ψ1ψn1\bar{\psi}_1\cdots \bar{\psi}_{n-1}\psi_1\cdots \psi_{n-1} の係数を求めることになります。Bj=0B_j=0 よりループのないグラフを考えることになるので、HH は木型のみを考えればよいです。ψn\psi_n がないので HH は頂点 nn が根であり辺の向きは根から遠ざかる向きです。全域木 1 つごとに係数が 1 増えることがわかります。よって行列木定理の 1 が証明できました。

2 も証明しましょう。A=tIn+LA=tI_n+L とおくと、元のグラフの各頂点に重み tt のループを加えたものを考えることになります。ψˉ1ψˉnψ1ψn\bar{\psi}_1\cdots \bar{\psi}_n\psi_1\cdots \psi_n の係数が det(A)\det(A) なので、今回はループ型のグラフのみを考えればよいです。det(A)\det(A) の一次の係数は連結成分がループ型の部分グラフであって連結成分が 1 つのもの、すなわち根を指定した全域木の個数となります。根の選び方が nn 通りなので、全域木の個数は nn で割った値となります。これで行列木定理の 2 が証明できました。

より一般に tkt^k の係数は連結成分が kk 個の森と対応することがわかります。

おまけ
#

数え上げと行列式といえば、行列木定理の他に LGV 公式を思い浮かべる人も多いでしょう。なんと LGV 公式も外積代数から導出できるようです。

外積代数、奥が深そうですね。競技プログラミングの世界に新たな知見をもたらして、いずれは典型になるかもしれません。

参考文献
#

  • Curtin, Eugene; Lee, Junu; Lu, Andrew; Sun, Sophia. A modified Grassmann algebra approach to theorems on permanents and determinants. Linear Algebra Appl. 581, 20-35 (2019).
  • Abdesselam, Abdelmalek. The Grassmann-Berezin calculus and theorems of the matrix-tree type. Adv. Appl. Math. 33, No. 1, 51-70 (2004).
  • Carrozza, S.; Tanasa, A. Pfaffians and nonintersecting paths in graphs with cycles: Grassmann algebra methods. Adv. Appl. Math. 93, 108-120 (2018).