現実と数学の区別が付かない

数学ネタのブログです

連立方程式とその解の重複度

今日はTwitterで見かけた連立方程式を解いてみます。
\begin{align}
\left\{\begin{array}{ccc}
x^2+y+z &=& 1\\
x+y^2+z &=& 1\\
x+y+z^2 &=& 1
\end{array}\right.
\end{align}

元ネタは多分これ↓
http://mathsoc.jp/publication/tushin/0303/maruyama3-3.pdf

方程式の対称性に注目していくつか具体的に解を見つけてみましょう。まずは  (x,y,z)=(1,0,0),(0,1,0),(0,0,1) が解である事はすぐに見て取れます。

次に x=y=z となる解を求めてみましょう。このとき  x^2+2x-1=0 なので  x=-1\pm\sqrt{2} となります。よって  (x,y,z)=(-1+\sqrt{2},-1+\sqrt{2},-1+\sqrt{2}), (-1-\sqrt{2},-1-\sqrt{2},-1-\sqrt{2}) も方程式の解です。

さて,この5つ以外に解はあるでしょうか?実はこの方程式の解はこの5個のみです。代数幾何と計算機代数の初歩の知識があれば,このことを理論的に証明できるというのが今回のお話です。キーワードはグレブナ―基底重複度です。

解の重複度

1変数方程式の複素数解の個数は重複度も込めて数えると,その方程式の次数と一致します。

代数学の基本定理 - Wikipedia

例えば  x^2(x-1)^3=0 は5次方程式ですが,重複度2の解  x=0 が1つ,重複度3の解  x=1 の解が1つで,重複度を込めて数えると解はちゃんと5個あります。

重複度は代数的に見ると(つまり式の形を見ると)「因子のべき」ですが,幾何的に見る方法もあります。それは「方程式の係数をほんのちょっと変化させたときに現れる単解(重複度1の解)の個数」とする見方です。 x^2=0 の定数項を  0 から絶対値が小さな数  \varepsilon に変えた方程式  x^2=\varepsilon は2つの単解  x=\pm\sqrt{\varepsilon} を持ちます。定数項を  0 から  \varepsilon まで連続的に変化させていくと,原点にあった重解が2つの単解に分かれていく様子が見て取れます。

実は1変数方程式の場合だけではなく,多変数の連立方程式の解も重複度を持っています。幾何的には1変数のときと同様で,係数を摂動させたときに出てくる単解の個数です。

変数の数方程式の本数が共に  n の複素係数連立方程式
\begin{align}
\mbox{(I)} \left\{\begin{array}{ccc}
f_1(x_1,\dots,x_n) &=& 0\\
\vdots && \\
f_n(x_1,\dots,x_n) &=& 0
\end{array}\right.
\end{align}
で解が有限個のときを考えます。この場合を代数幾何の言葉では0次元完全交差といいます。1変数方程式は変数と方程式の本数がともに 1 なので,n=1 の場合の0次元完全交差です。

この方程式の1次以下の項の係数を変化させて新しい連立方程式
\begin{align}
\mbox{(II)}\left\{\begin{array}{ccc}
f_1(x_1,\dots,x_n)+c_{1n}x_n+\cdots+c_{11}x_1+c_{10} &=& 0\\
\vdots && \\
f_n(x_1,\dots,x_n)+c_{nn}x_n+\cdots+c_{n1}x_1+c_{n0} &=& 0
\end{array}\right.
\end{align}
を作ります。ここで  c_{ij}\in \mathbb{C} ( 1\le i\le n0\le j\le n) が十分一般で絶対値が十分小さい*1とき,方程式(II)の解は全て単解で,方程式 (I) の重複度込みの解の個数は方程式(II) の解の個数と等しくなることが知られています(証明は難しいので省略)。各  c_{ij} を一斉に  0 から十分一般で絶対値が十分小さい値に連続的に変化させたとき,方程式 (II) の解も連続的に変化していきます。初めの  c_{ij} が全て  0 のときは方程式(II) は方程式(I) と一致しており,係数を変化させていくと重複度を持つ解は単解に分かれていきます。ある方程式(I)の解が  m 個の解に分かれたとき,その解の重複度は  m です。

さて,初めに考えていた方程式
\begin{align}
(*) \left\{\begin{array}{ccc}
x^2+y+z-1 &=& 0\\
x+y^2+z-1 &=& 0\\
x+y+z^2-1 &=& 0
\end{array}\right.
\end{align}
の重複度込みの解の個数は何個でしょうか?係数を摂動させた方程式はどう見ても元の方程式より難しいですし,とても解く気になりません。ここで1変数のときを思い出すと,重複度込みの解の個数は代数的な視点で見ると方程式の次数という分かりやすい数と一致していました。連立方程式のときも代数を使って計算する方法があります。グレブナ―基底と呼ばれるものです。

重複度込みの解の個数

グレブナ―基底を使えば,方程式の重複度込みの解の個数を知ることが出来ます。
http://www.math.kobe-u.ac.jp/~taka/asir-book-html/main/node92.htmlwww.math.kobe-u.ac.jp
項順序というものを一つ固定して,イニシャルイデアルというものを計算すると,元の方程式と重複度込みの解の個数が変わらす,しかも単項式だけからなる連立方程式を得ることが出来ます。ただし,大抵の場合は方程式の本数は増えてしまいます。

さて,方程式 (*) のイニシャルイデアルを計算してみましょう。項順序は全次数辞書式順序というものを使います。グレブナ―基底を計算してくれるソフトはたくさんありますが,ブラウザ上で動かすことが出来るので今回は Sage を使ってみましょう。
sagecell.sagemath.org

S.<x,y,z> = PolynomialRing(QQ, 3, order='deglex')
J = Ideal([x^2+y+z-1,x+y^2+z-1,x+y+z^2-1])
Gb=J.groebner_basis()
I = Ideal(f.lm() for f in Gb)
I

これをコピペして "Evaluate" を押してみましょう*2

Ideal (x^2, y^2, z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field

と出力されます。これによって方程式(*)と
\begin{align}
(**) \left\{\begin{array}{ccc}
x^2&=& 0\\
y^2&=& 0\\
z^2 &=& 0
\end{array}\right.
\end{align}
は重複度込みの解の個数が等しいことが分かりました。実はグレブナ―基底の理論を勉強すると, x^2, y^2, z^2 のどの2つのペアも互いに素であることから,わざわざ計算機を使わなくても一目でこのことが分かるようになります。

方程式(**)の重複度込みの解の個数は,剰余環  \mathbb{C}\lbrack x,y,z\rbrack/(x^2,y^2,z^2) \mathbb{C}ベクトル空間としての次元として計算でき,実際に計算すると8になります。このことは,たまたま今の場合は方程式(**)も0次元完全交差なので,係数を摂動させた
\begin{align}
(**) \left\{\begin{array}{ccc}
x^2&=& \varepsilon_1\\
y^2&=& \varepsilon_2\\
z^2 &=& \varepsilon_3
\end{array}\right.
\end{align}
の解が (\pm\sqrt{\epsilon_1},\pm\sqrt{\epsilon_2},\pm\sqrt{\epsilon_3} ) の符号の組み合わせで8個の単解であることからも分かります(この場合は定数項だけの摂動でOKです。本当にこの8個の解が全て単解である事は次節の方法で確かめる事が出来ますが,感覚的には1変数の場合の類似で納得できるでしょう)。

さて,方程式(*) の解として初めに5個の解を出しましたが,8-5 で解の個数が 3 だけ足りません。つまり他に解があるか,5個の解の中に重複度が2以上の解があるかのどちらかです。

重複度込みの解の個数はグレブナ―基底を用いて計算出来ましたが,個々の解の重複度はどのように計算したらいいのでしょうか?個々の解の重複度は,標準基底というグレブナ―基底の類似の道具を使えば計算可能です*3。しかしこれは手計算で実行するには面倒な方法なので,今回は重複度を計算する方法ではなく,代わりに方程式の解が単解かどうかを判定する方法を紹介しましょう。

アフィンスキームの特異点

 f_1,\dots, f_k \in \mathbb{C}\lbrack x_1,\dots,x_n\rbrack の零点の集合 \[
V_{\mathbb{C}}(f_1,\dots, f_k)=\{z\in \mathbb{C}^n \mid f_1(z)=f_2(z)=\dots=f_k(z)=0\}
\]を考えます。このような多項式の零点として表される集合をアフィン代数的集合といいます。名前は大袈裟ですが,つまりは連立方程式の解の空間の事です。アフィン代数的集合には次元が定義されます。正確な定義はここでは述べませんが,有限個の点なら0次元,(複素)曲線なら1次元,(複素)曲面なら2次元といった具合です。しかしアフィン代数的集合では重複度の情報は失われてしまいます。V_{\mathbb{C}}(x^2) V_{\mathbb{C}}(x) もどちらも一点集合  \{0\} で,前者に対応する方程式  x^2=0 の解が重解であるという情報は持っていません。そこで,重複度という大切な情報が失われないように零点集合を扱おうという考え方が出てきます。それがアフィンスキームと呼ばれるものです*4

概型 - Wikipedia

正確なアフィンスキームの定義はここではできませんが,アフィンスキームを考えるというのは,技術的には点集合としてのアフィン代数的集合に,追加の情報として多項式の集合  f_1, \dots,f_k をそのままくっつけたものと思っても構いません。そして,「  f_1, \dots,f_k を使って計算された情報」を「 f_1, \dots,f_k で定義されるアフィンスキームの情報」と見なします。0次元完全交差という性質も,「方程式の本数」という多項式の集合に関する情報が条件に入っているので,実はアフィンスキームの性質です。

アフィンスキームの特異点を次のように定義します。


 f_1,\dots, f_k \in \mathbb{C}\lbrack x_1,\dots,x_n\rbrack とし, V_{\mathbb{C}}(f_1,\dots,f_k) の次元を  d とする。点  \alpha \in V_{\mathbb{C}}(f_1,\dots,f_k) に対し,ヤコビ行列
\begin{align}
\left(\cfrac{\partial f_i}{\partial x_j}(\alpha) \right)_{1\le i \le k, 1\le j\le n}=
\left(
\begin{array}{ccc}
\cfrac{\partial f_1}{\partial x_1}(\alpha) & \cdots & \cfrac{\partial f_1}{\partial x_n}(\alpha) \\
\vdots & & \vdots \\
\cfrac{\partial f_k}{\partial x_1}(\alpha) & \cdots & \cfrac{\partial f_k}{\partial x_n}(\alpha)
\end{array}
\right)
\end{align}の階数が  n-d のとき,  \alpha f_1,\dots,f_k で定義されるアフィンスキームの特異点といい,そうでないときは特異点という。

ヤコビ行列は f_1,\dots,f_k を使って定義されているので,特異点であるかどうかは(アフィン代数的集合ではなく)アフィンスキームに関する情報です。

例として1変数の場合を見てみましょう。変数の数が  n=1 で,次元が  d=0 なので,非特異点であることとヤコビ行列の階数が1であることが同値であることに注意しましょう。

 x のヤコビ行列は 1\times 1行列  \left(\cfrac{\partial x}{\partial x}\right)=(1) です。 0\in V_{\mathbb{C}}(x) を代入するとヤコビ行列は  (1) で,階数が1の行列になります。つまり  0 x で定義されるアフィンスキームの非特異点です。
一方で  x^2 のヤコビ行列は 1\times 1行列  \left(\cfrac{\partial x^2}{\partial x}\right)=(2x) です。 0\in V_{\mathbb{C}}(x) を代入するとヤコビ行列は  (0) で,階数が0の行列になります。つまり  0 x^2 で定義されるアフィンスキームの特異点です。

この2つの例の違いは解  x=0 の重複度の違いからきているのは明らかでしょう。単解の場合は非特異点,そうでない場合は特異点となっています。実はこれを一般化した次の定理が成り立ちます。


 f_1,\dots, f_n \in \mathbb{C}\lbrack x_1,\dots,x_n\rbrack が定義するアフィンスキームが0次元完全交差,つまり  V_{\mathbb{C}}(f_1,\dots, f_n) が有限集合であるとする。このとき, \alpha \in  V_{\mathbb{C}}(f_1,\dots, f_n) が非特異点であることと, \alpha連立方程式
\begin{align}
\left\{\begin{array}{ccc}
f_1(x_1,\dots,x_n) &=& 0\\
\vdots && \\
f_n(x_1,\dots,x_n) &=& 0
\end{array}\right.
\end{align}
の単解であることは同値である。

目的の方程式の解の重複度

さて,話を初めに考えていた方程式に戻しましょう。
\begin{align}
\left\{\begin{array}{ccc}
x^2+y+z-1 &=& 0\\
x+y^2+z-1 &=& 0\\
x+y+z^2-1 &=& 0
\end{array}\right.
\end{align}
5つの解が見つかっており,重複度も含めた解の個数が8であることまで分かっています。

さて, (x,y,z)=(1,0,0),(0,1,0),(0,0,1) が単解かどうか調べてみましょう。対称性より, (1,0,0) だけ調べれば十分です。3つの多項式  x^2+y+z-1, x+y^2+z-1,x+y+z^2-1 のヤコビ行列は
\begin{align}
\left(
\begin{array}{ccc}
2x & 1 & 1 \\
1 & 2y & 1 \\
1 & 1 & 2z
\end{array}
\right)
\end{align}
となります。変数の数が  n=3 で次元が  d=0 なので,解を代入したヤコビ行列が階数3,つまり正則行列なら単解,そうでなければ重複度が2以上です。 (x,y,z)=(1,0,0) を代入すると
\begin{align}
\left(
\begin{array}{ccc}
2 & 1 & 1 \\
1 & 0 & 1 \\
1 & 1 & 0
\end{array}
\right)
\end{align}
となります。第2行目と第3行列目を足すと第1行目になるので,この行列は正則ではなく,解  (x,y,z)=(1,0,0) の重複度は2以上であることが分かりました。

では  (x,y,z)=(1,0,0) の重複度は何になるか考えてみましょう。重複度が3以上とすると,3つの解  (x,y,z)=(1,0,0),(0,1,0),(0,0,1) は同じ重複度を持っているので,これだけで重複度込みの解の個数が9以上になってしまいます。重複度込みの解の個数は8だったので,これは矛盾です。

よって3つの解  (x,y,z)=(1,0,0),(0,1,0),(0,0,1) の重複度は2となり,重複度の合計が8を超えないためには必然的に残り2つの解  (x,y,z)=(-1+\sqrt{2},-1+\sqrt{2},-1+\sqrt{2}), (-1-\sqrt{2},-1-\sqrt{2},-1-\sqrt{2}) の重複度は1となります。重複度込みで合わせて  2\times3+1\times2=8 個の解を全部見つけることが出来ました。よってこの5個以外に解は存在しません。

まとめ

記事に書いたら随分長くなってしまいましたが,方程式を解くための計算は簡単なものです。

  • 5個の解を見つける。
  • グレブナ―基底の理論で解が重複度込みで8個あることがぱっと見で分かる。
  • ヤコビ行列を計算することで重複度2以上の解が3つあることが分かる。
  • 解が重複度込みで8個という条件からその重複度が2で, 2\times 3+1\times 2=8 でちょうど勘定が合って全部の解が見つかったことが分かる。

という流れです。まあpdfファイルにあるように解いてもいいんですけどね。

*1:ここでは十分ランダムに小さい値を選べばいいんだなくらいの意味で理解してください。

*2:一応何を計算しているか説明しておきましょう。1行目は  x,y,z を変数とする3変数多項式を考えて,順序を全次数辞書式順序を使うよというおまじないです。2行目は考えている連立方程式を表しています。3行目はグレブナ―基底の計算で,4行目にイニシャルイデアルを計算しています。最後の行はイニシャルイデアルが入っている I を表示してねと Sage にお願いしています。

*3:グレブナ―基底はブッフバーガーによって,標準基底は広中平祐によって発見されました。たまにグレブナ―基底と標準基底は全く同じものであるという雑なことを言う人もいますが厳密には異なるものです。しかしこの2つは理論的にはとても良く似ています。

*4:アフィン代数的集合ではなくアフィンスキームを考える利点は,重複度の情報が失われない事のほかに,係数体が代数閉体でない場合に「点」の概念を拡張することによって方程式系の情報を正しく反映する事が出来るようになることがあります。この辺りの事は適当にごまかした解説を読むよりもちゃんと勉強した方が簡単に理解できると思います。