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

外積代数と行列木定理

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

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

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

外積代数
#

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

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

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

  • v∧v=0v\wedge v=0
  • v∧w=−w∧vv\wedge w=-w\wedge v

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

以下、ウェッジを省略して v∧w=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}_I は i∈Ii\in I に関する ψˉi\bar{\psi}_i の積(昇順)、ψJ\psi_J は j∈Jj\in J に関する ψj\psi_j の積(昇順)で、AI,JA_{I,J} は行を II、列を JJ とした小行列です。

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

外積代数と行列木定理
#

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

定理 (行列木定理)

  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ψj∑i=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)={−Aiji≠jBji=j w(i,j)=\begin{cases} -A_{ij} & i\ne j \\ B_j & i=j \end{cases} Ψ(i,j)={(ψˉj−ψˉi)ψji≠jψˉ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)=∑H⊂E(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)=∑H⊂E(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 頂点でもよい。
  • サイクル型:サイクルを含むもの。

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

Ψ(1,2)Ψ(2,3)⋯Ψ(k−1,k)Ψ(k,1)=(ψˉ2−ψˉ1)ψ2(ψˉ3−ψˉ2)ψ3⋯(ψˉk−ψˉk−1)ψk(ψˉ1−ψˉk)ψ1=(ψˉ2ψˉ3⋯ψˉkψˉ1+(−1)kψˉ1ψˉ2⋯ψˉk)ψ2ψ3⋯ψkψ1=((−1)k−1+(−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[n−1],[n−1])\det(A_{[n-1],[n-1]}) を考えます。

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

における ψˉ1⋯ψˉn−1ψ1⋯ψn−1\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).