第2話
『S多項式』
「これってもしかして、暗号?」
環奈が手紙を覗きながら言った。
北条
俺は逆に問い返す。
「どうしてそう思うんだ?」
「うーん、最初は普通の手紙かと思ったんだけど、やっぱりなんか変な感じがするんだよね。」
「ほう、例えばどこが?」
「えっと、どこがっていうか、なんとなくかな。あ、まあ一番変なのは、最後の数式だよね。」
俺はもう一度、りんからの手紙を読み返す。
***
先輩へ。
クリスマス、待ち合わせ場所に行けなくてごめんなさい。
私のことは探さないでください。
京都は交差点が多くて迷ってしまいますから。
借りてた辞書も返せなくてすみません。
もしまたいつか会えたら一緒に喫茶店に行きましょう。
私はメイプルシロップのパンケーキです。
北条環
I=<x^3+y^2, x^2y+xy^2>
***
確かに一番不自然なのは、最後の"I=<x^3+y^2, x^2y+xy^2>"だ。
ここだけ文章から独立しているし、必要性がよく分からない。
ただ、一番引っかかることは……
「お兄ちゃん、不安そうな顔してどうしたの?」
「いや、なんでもない。環奈の言う通り、これは暗号だと考えるのが自然だろう。りんが、俺だけに何かを伝えたくて残したものだ。これを解読するためにはヒントを見落とさず、じっくりと考える必要がある。」
俺は顔をあげ、みんなを見渡す。
そして、頭を下げて言った。
「気になること、気づいたことがあれば、どんな些細なことでも教えてください。ここにいるメンバーならば、きっと正解にたどり着けると思います。」
群城は「もちろんだ」と力強く返事をする。
杉裏は何も言わずメガネをクイっと上げた。
「こういう文章の解読でまず浮かぶのは、縦読みだな。」
群城がそう言って、手紙の文字を指差す。
そして、各行の先頭の文字だけをつぶやいた。
「セクワキカモワ。なるほど。意味分からん。」
「群城、他の列も読んで見たけど、縦読みではなさそうかな。」
「確かにその可能性は低い。」
「縦読みの線は薄そうデスかね。」
「杉裏、お前の発言は許可してねーぞ。」
「エッ!?」
杉裏の扱いがどんどん雑になってきている。
こいつ本当に高層なんだよな……??
「圭介的にはどうなんだ?やっぱり恋人同士にしか分からないこともあるだろ?」
「うーん、文章の意味的に一番変なのはここかな。」
俺は「借りてた辞書も返せなくてすみません。」の行を指した。
群城は不思議そうに俺に問う。
「ん?なんでそれが変なんだ?」
「俺の記憶が正しければ、俺はりんに辞書を貸したことなんてないんだよな。」
「なん……だと。」
「つまり、この一文はフェイク。もしくは何かしらの情報を持っていると考えていい。」
俺は口に手を当て考える。
「借りる」「辞書」「返す」
この中にヒントとなるものがあるのだろうか。
「辞書といえば、辞書式順序じゃない?」
環奈がポツリとつぶやいた。
いつの間にか、俺のすぐ横に座っている。
「ほら、来る時の新幹線の中で、ちょうど辞書式順序の話をしたでしょ?」
「確かに……数式 I=<x^3+y^2, x^2y+xy^2> はイデアルっぽいし、りんにはグレブナー基底を教えたこともある。」
「圭介、つまり、このイデアル I の辞書式順序のグレブナー基底を計算しろということか?」
「ああ。それが何になるかは分からないが、とりあえず計算してみよう。」
俺としたことが迂闊だった。
なんとなくグレブナー基底を使うとは思っていたが、辞書式順序のヒントは頭から抜け落ちていた。
「圭介と環奈ちゃんはグレブナー基底を計算しててくれ。アタシたちは別方向から手紙の謎を解決してみる。」
群城が俺にそう提案する。
俺は了承し、グレブナー基底の計算に集中することにした。
「ああ、分かった。頼むよ。」
「フフッ。選ばれしエリート中のエリート、高層のワタシにお任せくだっぶほっつ!!」
杉裏が群城に殴られているのを横目で眺めながら、カバンを開けてレポート用紙とペンを取り出した。
「あれ?お兄ちゃん、今日はパソコン使わないの?」
「ああ。いつもだと Web上で WolframAlpha とか使って計算してたけど、今回は計算する過程自体にヒントが隠されているかもしれないから、手計算で求めてみることにする。」
「え!?グレブナー基底って、手でも求められるの!?」
「もちろん。というかコンピュータで計算できることは基本的に人間でも計算できるからね。計算は遅いけど。」
「へー。コンピュータって、魔法の機械かなんかと思ってた。」
今まで妹にグレブナー基底を教えてきたが、
謎を解く鍵になるかもしれないし、グレブナー基底を計算するアルゴリズムを解説しながらやっていこう。
「環奈、まず、『グレブナー基底』とはどういうものだったかな?」
「えーと、いい感じの、多項式の集まり?」
「もっと言うと?」
「あ、えーと……確かセントーコーが全部あるもの?」
「そうだね。もっと正確には、グレブナー基底とは次の条件を満たすものだった。」
定義(グレブナー基底)
> を単項式順序、I=<f_1,...,f_k> を k 個の多項式 f_1,.,,,f_k から生成されるイデアルとする。
I の基底 G={f_1,.,,,f_k} (つまり、I=<G>)は、
<LT(I)>=<LT(f_1),...,LT(f_k)>
を満たす時、I の(> に関する)グレブナー基底と呼ばれる。
(ここで、LT (f_1),...,LT(f_k) はそれぞれ f_1,...,f_k の先頭項)
「うへー……難しい……」
「具体例で思い出してみよう。例えば、」
I=<x+y,x-y>
「とした時、G={x+y,x-y} は I の基底と呼ばれていた。」
「えーと、この "<" や ">" ってなんだっけ?」
「これは生成されるイデアルの記号だね。x+y と x-y に何かを掛けたり、掛けたものを足したりしてできるもの全体だ。つまり、」
I=<x+y,x-y>={h1*(x+y)+h2*(x-y) | h1,h2 は多項式}
「と定義されている。例えば、2x+3y^2 は I に入っているけど、x+y+1 は h1*(x+y)+h2*(x-y) という形に書けないから、I には入っていない。」
「まだイマイチよく分かってないけど、とりあえず多項式の集まりってことだね!」
「そうだな。まあ、イデアルについては追い追い分かっていくことにしよう。じゃあ、f_1=x+y, f_2=x-y として、まず」
<LT(f_1),LT(f_2)>
「が何になるか見てみよう。f_1=x+y の先頭項は何かな?」
「えーと、先頭項って、先頭にあるやつだから、x ?」
「そうだな。今は、辞書式順序 x>y を考えているから、x の方が y より大きい。だから、x+y の先頭項は x だ。」
LT(x+y)=x
「じゃあ、次に f_2=x-y の先頭項はどうかな?」
「うーんと、x-y の先頭項は x ?」
「そうだな。単項式順序は係数は関係なく、あくまで単項式だけを考えるから、さっきと同じように、x>y だから、x-y の先頭項は x だ。」
LT(x-y)=x
「また、x だね。」
LT(x+y)=x
LT(x-y)=x
「その通り。どちらも x の情報しか出ていない。しかし、イデアル I=<x+y,x-y> には x 以外の先頭項も出てくる。例えば、」
I=<x+y,x-y>={h1*x+h2*y | h1,h2 は多項式}
において、
h1=1/2, h2=-1/2 とすれば、
h1*(x+y)+h2*(x-y)=(1/2)(x+y) + (-1/2)(x-y)/2 = y
「から分かるように、y も先頭項に出てくる。ここで、<LT(f_1),LT(f_2)>=<LT(x+y),LT(x-y)>=<x,x>=<x> だから、」
LT(I)≠<LT(f_1),LT(f_2)>
「であり、G={x+y,x-y} には先頭項 y の情報が出て来ないので、I のグレブナー基底ではない。」
「ほへー。」
「一方、G'={x,y} も I の基底となっていて、」
I=<x+y,x-y>=<x,y>
「が成り立つけど、G'={x,y} は I のグレブナー基底になっている。」
「えーと、G' にはちゃんと y も出てきているから?」
「そう。もちろんイデアルによっては y が出てくるとは限らないけど、今回の I=<x+y,x-y> の場合には y が出てこないとおかしいね。」
「ふむふむ。」
「このように、『イデアルの先頭項の情報を全て持っている基底』がグレブナー基底だった。」
「ほほう。」
「ここで、視点を変えよう。」
俺は腰を少し上げ、椅子に座り直す。
そして、環奈の目を見て言った。
「元の G={x+y,x-y} からグレブナー基底を作る、ということを考える。」
「作る?」
「そう。与えられた基底 G がグレブナー基底じゃなかったら、そこからグレブナー基底を作ってしまえばいい。」
「へ?」
「G のままだと先頭項の情報が足りなかったらどうすればいい?」
「えーと、……増やす?」
「その通り。」
俺は、ノートに
f_1=x+y,
f_2=x-y
と書いた。そして、それらにアンダーラインを引いて、環奈に問いかける。
「この f_1 と f_2 から新しい先頭項を作るにはどうしたらいいかな?」
「え?うーんと、うーん。引いたりする?」
「それじゃあ、引いてみようか。」
俺は環奈にペンを渡し計算をさせる。
「えーと、f_1-f_2 だから、」
f_1-f_2=(x+y)-(x-y)=2y
「だよね。」
「新しい先頭項はできたかな?」
「うん。えーと、元々の G={x+y,x-y} は、先頭項に x しかなくて、だから、2y は新しい先頭項?だよね。」
「そうそう。ここで、分かりやすいように、2y に1/2 を掛けて y としよう。f_3=y として、G に新しく加え、G"={f_1,f_2,f_3}={x+y,x-y,y}とする。」
G"={f_1,f_2,f_3}={x+y,x-y,y}
「おおー。仲間が増えたね!」
「ここで、G" の先頭項を見てみると、」
LT(f_1)=LT(x+y)=x
LT(f_2)=LT(x-y)=x
LT(f_3)=LT(y)=y
「ということで、x,y 両方とも登場しているよね。」
「うん。」
「元のイデアルを考えると、I=<x,y> だったから」
<LT(I)>=<x,y>
「だった。本当はこれをちゃんと示さなきゃいけないが、ここでは認めよう。そして、LT(G")={LT(x+y),LT(x-y),LT(y)}={x,x,y}={x,y} だから、」
<LT(I)>=<LT(G")>=<x,y>
「が成り立ち、G"={x+y,x-y,y} は I のグレブナー基底になっている。」
「あれ?でも、I=<x,y> と形が違うけどいいの?」
「一般に、グレブナー基底はイデアルに対し複数存在するんだ。だから、{x+y,x-y,y} は I のグレブナー基底だし、{x,y} も I のグレブナー基底だ。まあ、{x,y} の方がシンプルなので計算結果としてはこちらの方が好まれる。」
「ほへー。」
「それじゃあ、今やったことを手紙にあったイデアルにも同じようにやって、グレブナー基底を計算してみよう。」
I=<x^3+y^2, x^2y+xy^2>
俺は、ノートに
f_1=x^3+y^2
f_2=x^2y+xy^2
と書いた。
「今度は、f_1=x^3+y^2、f_2=x^2y+xy^2 としよう。それぞれの先頭項は何かな?」
「えーと、x^3 と x^2y ?」
LT(f_1)=x^3
LT(f_2)=x^2y
「そうだね。じゃあ、この f_1 と f_2 から新しい先頭項を作るには?」
「また、引いたりする?」
「よし、引いてみようか。」
「えーと、f_1 - f_2 だから、」
f_1 - f_2=x^3+y^2-x^2y-xy^2
「だよね。」
「新しい先頭項はできたかな?」
「あ、x^3 のままだね。」
「そう、今度の場合は、ただ引くだけでは、新しい先頭項は生まれない。お互いの先頭項を上手く揃えてあげる必要があるんだ。」
「揃える?」
俺は、f_1 に y を、f_2 に x を掛けた。
y*f_1=x^3y+y^3
x*f_2=x^3y+x^2y^2
「この y*f_1 と x*f_2 の先頭項を比べるとどうかな?」
「……あ!同じ x^3y になってる!」
「うん。つまり、f_1 と f_2 の先頭項が同じになるように、それぞれに適切な単項式を掛けたんだ。」
「ほほう?」
「f_1 の先頭項 『LT(f_1)=x^3』 と f_2 の先頭項 『LT(f_2)=x^2y』 を比べると、LT(f_1)=x^3 には LT(f_2)=x^2y の y がなくて、逆に LT(f_2)=x^2y には LT(f_1)=x^3 の x が1つ足りないよね?」
「そだね。」
「だから、お互いに足りない単項式を補間し合えば、同じ x^3y が作れる。」
「おおー。」
「そして、これらを引いてみよう。y*f_1 - x*f_2 を計算してみて。」
「うん。」
妹は、ゆっくりとペンを走らせる。
「えーと、y*f_1=x^3y+y^3、x*f_2=x^3y+x^2y^2 だから、」
y*f_1 - x*f_2
= (x^3y+y^3) - (x^3y+x^2y^2)
= x^3y + y^3 - x^3y - x^2y^2
= x^3y - x^3y +y^3 - x^2y^2
= y^3 - x^2y^2
「になるよね。あ!x^3y が上手く消えてる!」
「そう。つまり、y*f_1 と x*f_2 の先頭項が上手く消えることで、新しい先頭項が作られたんだ。どんな先頭項が出てきているかな?」
「えーと。y^3 ?」
「惜しいね。」
「え?違うの?」
「単項式順序を思い出してみよう。今、俺たちは辞書式順序を考えている。辞書式順序において、y^3 - x^2y^2 に登場する単項式、y^3 と x^2y^2 はどっちが大きいかな?」
「うーんと、辞書式順序ってなんだったっけ…」
環奈はノートの過去のページを開き、定義を確認する。
その目は真剣そのものだ。
「あ、まず x の次数で比べるんだったんだよね。この場合だと、」
y^3 … xの次数は0
x^2y^2 … xの次数は2
「だから、2 の方が 0 より大きくて、だから、x^2y^2 の方が y^3 より大きい?」
「イエス!つまり、y^3 - x^2y^2 の『辞書式順序による先頭項』は y^3 ではなく、-x^2y^2 なんだ。」
「ほほー。y^3 - x^2y^2 だと、xy^2 の方が先頭項っぽいけど、見た目に騙されちゃダメってことだね。」
妹は納得したように、グーにした右手を左手にポンと乗せる。
見た目に騙されちゃいけないのは人間も同じだ。
「それでは、話を f_1 と f_2 に戻そう。今、f_1 と f_2 に適切な単項式を掛けて引くことにより、先頭項がキャンセルされ、」
y*f_1 - x*f_2 = -x^2y^2 + y^3
「LT(y*f_1 - x*f_2) = -x^2y^2 という先頭項が得られた。この先頭項を消去する多項式 y*f_1 - x*f_2 を f_1 と f_2 の『S多項式』といい、S(f_1,f_2) で表される。」
S(f_1,f_2)=yf_1 - xf_2 ……… f_1 と f_2 のS多項式
「えすたこうしき?」
「そう。2つの多項式から1つの多項式を作り出す関数みたいなものだね。」
「ほへー。」
「さて、今見たように、S(f_1,f_2) において f_1 と f_2 の先頭項は消去されてて、-x^2y^2 という先頭項が得られた。」
S(f_1,f_2)=y*f_1 - x*f_2=-x^2y^2 + y^3
LT(S(f_1,f_2))=-x^2y^2
「これが新しい先頭項ってわけだね!」
「いや、実はそうでもない。」
「えっ!?」
「-x^2y^2 は f_2=x^2y+xy^2 の先頭項 LT(f_2)=x^2y から作れてしまう。」
「そうなの?」
「試しに、x^2y に -y を掛けてごらん?」
「あ!」
環奈は驚いて声を上げる。
そして、ペンで「x^2y × (-y)= -x^2y^2」と書いた。
妹はポツリと呟くように言う。
「……ほんとだ。x^2y に -y を掛けると、さっきの -x^2y^2 が作れちゃうんだね。」
「そうそう。だから、S(f_1,f_2)=-x^2y^2 + y^3 の先頭項 -x^2y^2 は新しくないんだ。」
「残念だね。」
「諦めるのはまだ早い。-x^2y^2 が f_2 の先頭項から作れてしまうなら、f_2 で割ってしまえばいい。」
「え?」
俺はペンで割り算の筆算を書いた。
_________________
x^2y + xy^2) -x^2y^2 + y^3
「S(f_1,f_2)=-x^2y^2 + y^3 を f_2=x^2y + xy^2 で割ってみてくれ。割り算は新幹線の中でもやったよな?」
「……えーと、今やったように、f_2 に -y を掛ければ、S(f_1,f_2)=-x^2y^2 + y^3 の先頭項 -x^2y^2 と一致するから、」
-y
――――――――
x^2y + xy^2) -x^2y^2 + y^3
「という感じに、-y が上に立つよね。それで、下に、掛けた結果を書くと、」
-y
――――――――
x^2y + xy^2) -x^2y^2 + y^3
-x^2y^2 - xy^3
「だから、これを引いたものをさらに下に書けば、」
-y
――――――――
x^2y + xy^2) -x^2y^2 + y^3
-x^2y^2 - xy^3
――――――――
xy^3+y^3
「ができる?合ってる?」
「うん。合ってるよ。」
「やった!」
「じゃあ、 残った xy^3+y^3 は、x^2y+xy^2 で割れるかな?」
「うーん、割れないんじゃない?」
「どうして?」
「えーと、 f_2=x^2y + xy^2 の先頭項は、x^2y で x の次数は 2 だよね。でも、 xy^3+y^3 の先頭項は xy^3 だから、x の次数は、1。だから、f_2 に何を掛けても、xy^3+y^3 の先頭項にはならないから?」
「いいね。もちろん、先頭項が LT(f_2) で割り切れないだけで、それ以外の項が割り切れちゃう場合もある。しかし、今回の場合、xy^3 以外の項 y^3 も LT(f_2) で割ることはできない。つまり、割り算はこれで終わりだ。ちなみに、 xy^3+y^3 は f_1 でもこれ以上割ることはできない。」
「ほへー。」
俺は筆算の xy^3+y^3 に丸をつけた。
「f_3 = xy^3+y^3 としよう。今作った f_3 の先頭項、LT(f_3)=xy^3 は、LT(f_1)=x^3、LT(f_2)=x^2y のどちらでも作れない新しい先頭項だ。だから、新しく f_3 を {f_1,f_2}に加え、{f_1,f_2,f_3}とする。」
{f_1,f_2,f_3}
f_1=x^3+y^2
f_2=x^2y+xy^2
f_3=xy^3+y^3
LT(f_1)=x^3
LT(f_2)=x^2y
LT(f_3)=xy^3
「これがグレブナー基底なの?」
「いや、まだそれは分からない。ここから、またS多項式を使って、新しい先頭項が作れるかもしれない。」
「なるほど。」
「さっきは、f_1 と f_2 しかなかったから、S多項式は S(f_1,f_2) しか考えられなかったけど、f_3 が増えたおかげで、S(f_1,f_3), S(f_2,f_3) という2つのS多項式が考えられる。どっちから先に計算したい?」
「うーん、じゃあ、S(f_2,f_3) から!」
「よし、じゃあ、S(f_2,f_3) を計算するには、どうすればいい?」
「えーと、先頭項をキャンセル?するんだよね?」
「そう。f_2 と f_3 の先頭項を消去してみよう。つまり、f_2 と f_3 のS多項式 S(f_2,f_3)を計算する。」
「やってみる!」
俺は妹にペンを渡して計算させる。
妹は少しまごつきながらもペンを動かす。
「えーと、f_2=x^2y+xy^2、f_3= xy^3+y^3 のそれぞれの先頭項は」
LT(f_2)=x^2y、LT(f_3)=xy^3
「だよね。うーんと、どうするんだっけ?」
「ヒント:揃える」
「……あ、揃えるのか。だから、それぞれに足りないものを考えると、」
x^2y ← y^2 が足りない
xy^3 ← x が足りない
「ということだよね。」
「そうだな。」
「揃ったらどうするんだっけ?」
「引けばいいのさ。」
「あ、そっか。それが、 S多項式だもんね。」
S(f_2,f_3)
=y^2f_2 - xf_3
=(x^2y^3+xy^4) - (x^2y^3+xy^3)
=xy^4 - xy^3
「……こうで……こうなるから……」
LT(S(f_2,f_3))=xy^4
「これで合ってる?」
「ここまでは、大丈夫だな。」
「やった。この xy^4 が新しい先頭項ってこと?」
「いや油断大敵だ。これは、LT(f_3)=xy^3 で割り切れてしまう。」
「あ、ほんとだ。」
「つまり?」
「割り算ができる?」
y
――――――――
xy^3+y^3 ) xy^4 - xy^3
xy^4 + y^4
―――――――――
-xy^3 - y^4
「えーと、-xy^3-y^4 の先頭項 LT(-xy^3-y^4)=-xy^3 は LT(f_3)=xy^3 で割れるので、さらに割り算をすると、」
y-1
――――――――
xy^3+y^3 ) xy^4 - xy^3
xy^4 + y^4
―――――――――
-xy^3 - y^4
-xy^3 - y^3
―――――――――
-y^4 + y^3
「だから、余りは -y^4+y^3、で合ってる?お兄ちゃん?」
「うん。-y^4+y^3 は新しい先頭項かな?」
「うーん、そうなんじゃない?だって、LT(f_1)=x^3、LT(f_2)=xy^2、LT(f_3)=xy^3 のどれも x を持っちゃってるから、割れなくない?」
「いいね。その通り、割れない。もちろん、-y^4+y^3 の第二項 y^3 も割れない。だから、-y^4+y^3 を新しい仲間に加えよう。おっと、先頭の係数がマイナスなのは少し気持ち悪いから、-1 を掛けた y^4-y^3 を f_4=y^4-y^3 として、 {f_1,f_2,f_3}に加えよう。」
{f_1,f_2,f_3,f_4}
f_1=x^3+y^2
f_2=x^2y+xy^2
f_3=xy^3+y^3
f_4=y^4-y^3
LT(f_1)=x^3
LT(f_2)=x^2y
LT(f_3)=xy^3
LT(f_4)=y^4
「おお!どんどん仲間が増えてくるね!」
「そうだな。次に、S(f_1,f_3) も計算してみよう。」
「うん!」
妹はノートに計算過程を書き始める。
「えーと、f_1=x^3+y^2、f_3=xy^3+y^3 だから、それぞれの先頭項は、」
LT(f_1)=x^3、LT(f_3)=xy^3
「だよね。これを揃えるには、x^3 と xy^3 を比べて…」
x^3← xy^3 に比べて、y^3 が足りない
xy^3← x^3 に比べて、x^2 が足りない
「だから、f_1 に y^2、f_3 に x^2 を掛ければよさそう?」
「そうだね。」
「うーんと、掛けると、」
y^3*f_1=x^3y^3+y^5
x^2*f_3=x^3y^3+x^2y^3
「になって、あ!確かに揃ってるね!次にどうするんだっけ?」
「先頭項が揃ったんだから、引くと消えるよな。そして、それが f_1 と f_3 のS多項式」
「あ、そっか。引いてみよ。うーんと、」
S(f_1,f_3)
=y^3*f_1 - x^2*f_3
=(x^3y^3+y^5)-(x^3y^3+x^2y^3)
=y^5-x^2y^3
「だから、先頭項は y^5 ?」
「本当にそうかな?」
「え…?あ、そうか。辞書式順序でちゃんと並べないといけないのか。」
「その通り。」
「えーと、y^5 と x^2y^3 の x の次数を比べると、y^5 には x がないから、x^2y^3 の方が強いね。だから、さっきの式は、」
S(f_1,f_3)
=y^3*f_1 - x^2*f_3
=(x^3y^3+y^5)-(x^3y^3+x^2y^3)
=y^5-x^2y^3
=-x^2y^3+y^5
「になるんだね。」
「大正解!だんだん計算にも慣れてきたみたいでよかった。」
「えへん。」
「この 先頭項 -x^2y^3 は新しいものかな?」
「むーんと、新しくはない?」
「それはどうして?」
「えーと、f_2=x^2y+xy^2 の先頭項が x^2y でしょ?-x^2y^3 は x^2y で割れちゃうから?」
「そう。じゃあ、f_1 で割り算をしてみよう。」
「うん!」
-y^2
―――――――――
x^2y + xy^2) -x^2y^3 + y^5
-x^2y^3 - xy^4
――――――――――
xy^4 + y^5
「お兄ちゃん、できたよ。余りが、xy^4+y^5 になったかな。」
「合ってるね。じゃあ、この xy^4+y^5 の先頭項 xy^4 は新しい先頭項かな?」
「うーん、そうなんじゃない? f_1 の先頭項 x^3 でも割れないし、f_2 の先頭項 x^2y でも割れないし。さっき追加した f_3 の先頭項 xy^3 でも……あ、割れるか。」
「そうだね。xy^4 は LT(f_3)=xy^3 で割り切れるから、f_3=xy^3+y^3 で割ってみよう。」
「うん!」
y
――――――――
xy^3 + y^3) xy^4 + y^5
xy^4 + y^4
―――――――――
y^5 - y^4
「えーと、 y^5-y^4 になったよ?」
「y^5 は割り算できるかな?」
「あ、さっき加えた f_4=y^4-y^3 でできる?」
y
――――――――
y^4 - y^3 ) y^5 - y^4
y^5 - y^4
―――――――――
0
「あ!お兄ちゃん!0になったよ!」
「そうだねー。つまり、S(f_1,f_3) からは新しい先頭項は生まれなかったということになる。」
「そういうこともあるんだね。」
「うん。いつも新しい先頭項が生まれるとは限らない。」
「これでもう終わり?」
「いや、まだだよ。これまで、S(f_1,f_2)、S(f_2,f_3)、S(f_1,f_3) については計算できた。しかし、また新しい仲間 f_4 が増えたから、f_4 とのS多項式 S(f_1,f_4), S(f_2,f_4), S(f_3,f_4) を計算すれば新しい先頭項がまた出てくるかもしれない。」
「うへー。大変だね。」
「こんな感じで、グレブナー基底を手で計算するのは大変なことなんだ。だから、コンピュータで計算する必要がある。」
「おおん。」
「まあ、俺も手伝うから、一緒にやろう。」
「うん!」
・f_1 と f_4
S(f_1,f_4)
=y^4(x^3+y^2)-x^3(y^4-y^3)
=x^3y^3+y^6
x^3y^3+y^6 を f_1=x^3+y^2 で割ると、
y^3
――――――――
x^3 + y^2 ) x^3y^3 + y^6
x^3y^3 + y^5
―――――――――
y^6 - y^5
y^6-y^5 を f_4=y^4-y^3 で割ると、
y^2
――――――――
y^4 - y^3 ) y^6 - y^5
y^6 - y^5
―――――――――
0
よって、余りは0なので新しい先頭項は出ない。
・f_2 と f_4
S(f_2,f_4)
=y^3(x^2y+xy^2)-x^2(y^4-y^3)
=x^2y^3+xy^5
x^2y^3+xy^5 を f_2=x^2y+xy^2 で割ると、
y^2
――――――――
x^2y + xy^2 ) x^2y^3 + xy^5
x^2y^3 + xy^5
―――――――――
0
よって、余りは0なので新しい先頭項は出ない。
・f_3 と f_4
S(f_3,f_4)
=y(xy^3+y^3)-x(y^4-y^3)
=xy^3+y^4
xy^3+y^4 を f_3=xy^3+y^3 で割ると、
1
――――――――
xy^3 + y^3 ) xy^3 + y^4
xy^3 + y^3
―――――――――
y^4 - y^3
さらに、y^4-y^3 を f_4=y^4-y^3 で割ると、
1
――――――――
y^4 - y^3 ) y^4 - y^3
y^4 - y^3
―――――――――
0
よって、余りは0なので新しい先頭項は出ない。
「あれ?どれも新しい先頭項は出なかったよ?」
「そうだな。S(f_1,f_4),S(f_2,f_4),S(f_3,f_4) はすべて f_1,f_2,f_3,f_4 の割り算で割ると余りが 0 になってしまった。」
「うん。」
「実は、これは G={f_1,f_2,f_3,f_4} が I=<f_1,f_2> のグレブナー基底であることを意味しているんだ。」
「そうなの!?」
俺は、ペンを置きゆっくりと深呼吸をする。
そして、あのお方の名前を声に出す準備をする。
グレブナー基底の生みの親であり、計算機代数の創始者。
「これがグレブナー基底計算において最も重要な定理……」
妹にグレブナー基底を教え始めて早数ヶ月。
紆余曲折あったが、これに辿りつけるとは実に感慨深い。
妹の真剣な眼差しを浴びながら、俺はその名を口にした。
「ブッフベルガーの判定法だ。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます