第3話
『ブッフベルガーの判定法』
「はぁっ……はぁっ……」
大雨の中、1人の少女が、息を荒くしながら走っている。
人気のない路地裏には、外灯がポツリポツリと立ち並ぶだけである。
少女は何かに怯えており、しきりに周囲を気にしている。
そして、走り疲れたのか、ゴミ箱の側に体を縮めるように座った。
「逃げても無駄だ。ビッグ・ブラザーの監視からは誰も逃れられない。」
少女の背後から大柄の男が現れる。
驚き再び走り出す。
男は黒いスーツに白い覆面をしていて、覆面には大きな目が1つ描かれていた。目からは2つの足のような線が生えており、「兄」という漢字のようにも見える。
少女は進入禁止の看板を破壊し、誰もいない工事現場へと踏み入れた。
「今度はかくれんぼか?いいだろう、付き合ってやる。」
男は彼女の後を追う。中に入ると、ピンポン球ほどの裸電球だけが、男の周囲を照らしていた。
カチャカチャカチャ、という金属音の後、工事現場の奥で何かが光った。
「
少女は10本ほどの金属のリングを両手で擦り、互いに反発させる。
そして小さく、しかし、力強く言った。
「
その瞬間、リングは少女の手を離れ、男に向かって飛んでいく。
その衝撃で、付近の工事器具はバランスを失い、男に覆いかぶさるように崩れ落ちた。
しばらくして、ザーという雨の音だけが工事現場に響き渡る。
少女は胸を撫で下ろし、その場から去ろうとするも、崩れた工事器具の下から何かが出てくることに気がついた。
そして、それは轟音を鳴らし、こちらに近づいてくる。
「貴様の程度の数力では、私に傷つけることは不可能だ。それに、お前に代数幾何を教えたのは誰だと思っている。」
もはや少女に為すすべはなかった。
男は彼女の首を掴み、そのまま持ち上げる。
両手で必死に抵抗するも、やがて気を失った。
「北条
***
「ぶっふべるがー?あれ?どこかで聞いたことがあるような…」
妹は、頭にはてなマークを置いて、そう呟く。
俺は踊る気持ちを抑えながら、ゆっくりと説明した。
「ブッフベルガー先生は、グレブナー基底を発見した数学者だ。ほら、初めてグレブナー基底を教えた時に説明しただろ?」
「あ!スティーブ・ジョブズみたいな先生だよね!?」
「まあ、そうだな。計算機代数という新しい分野を作り、革新を起こしたという意味で、俺は”スティーム・ジョブズ”って表現をした。」
「ああーあの人だね。」
「ちなみに、ブッフベルガー先生はオーストリアのリンツという都市に、 RISC Linz という大学兼研究所も作っていて、現在でもそこで研究に尽力している。」
「えー!まだ生きてるんだね!もっと昔の人だと思ってた!」
「生きてるんだね、は流石にちょっと失礼かな……(汗)。お兄ちゃんもいつかお会いしたいものだ。」
話が少し逸れたので元に戻す。
「それで、ブッフベルガー先生が見つけたすごい定理が『ブッフベルガーの判定法』なんだ。」
「はんていほう、って、なんだか難しいね。」
「その主張を今から書こう。」
定理(ブッフベルガーの判定法)
単項式順序 > を1つ固定する。
G={f_1,...,f_k} を有限個の多項式の集合とする。
I=<G> を G から生成されるイデアルとする。
この時、(1),(2)は同値である。
(1) G が > に関して I のグレブナー基底
(2) G の各ペア f_i, f_j に対し、S(f_i,f_j) は G 以外の新しい先頭項を作らない。すなわち、S(f_i,f_j)を f_1,...,f_k で割った時の余りは 0
「ほへー。なんだか難しいね。」
「今から一文ずつ読んでいこう。そうすれば難しくないさ。」
「うん!」
俺はまず一行目に下線を引いた。
「『単項式順序 > を1つ固定する。』とは、単項式順序を何でもいいから1つ決めておくということだ。例えば、辞書式順序でもいい。」
「『固定する』って、なんだか不思議な表現だね。」
「数学ではよく使われる言い回しだな。英語だと、『fix』って言うね。『選ぶ』って言ってもいいかな。」
「数学って、わざわざ難しい言い回し使うから意地悪だよねー」
妹はむーと、しかめっ面でノートを見つめる。
俺は優しく妹をたしなめた。
「まあ、そう言うな。数学にだって色々慣習があるんだ。」
「なるほど?」
「二行目を読もう。『G={f_1,...,f_k} を有限個の多項式の集合とする。』これは文字通り、G には k 個の多項式 f_1,...,f_k が入ってるってことだね。例えば、G={x+y, x-y} だったり、G={x, y^2, x^2+y} だったりするわけだ。」
「この k ってなに?」
「ああ、これは適当な自然数だ。G には有限個なら何個入っててもいいので、k っていう文字で置いてるんだ。G={x+y, x-y} だったら k=2 だし、G={x, y^2, x^2+y} だったら k=3 だね。」
「うーんと、何個入ってるか分からないから、k って文字で置いたってこと?」
「まあ、そう解釈してもいいかな。」
「よく分からなくなってきた。」
「難しく考えすぎかな。簡単に言うと、『Gには有限個の多項式が入っている。それを f_1,...,f_k と表すことにしよう。』というのを難しく書いてるだけだ。」
「あー、それなら何となく分かるかも。」
「これから具体例を見ていけば分かると思うよ。」
「わかった。」
環奈は素直に返事をする。
俺は定理の三行目を指でなぞった。
「『I=<G> を G から生成されるイデアルとする。』つまり、」
I=<G>=<f_1,...,f_k>
「ということだ。もっと言うと、<>の定義から」
I=<f_1,...,f_k>={h_1*f_1+...+h_k*f_k | h_1,...,h_k は多項式}
「が成り立つ。」
「むー……また複雑なのが出たね……」
「最初に出てきた <x,y> や <x+y,x-y> と同じだよ。」
「あーと、基底ってやつ?」
「少し用語の混乱をしているようだね。ここで整理をしておこう。<f_1,..,f_k> はイデアルで、{f_1,...,f_k} はその基底だ。この違いが分かるかな?」
<f_1,..,f_k>: f_1.,,,f_k から生成されるイデアル
{f_1.,,,f_k}: <f_1,..,f_k> の基底
「なんか同じに見える……」
「具体的な例で、違いを見よう。例えば、I=<x,y> とすると、I は何かな?」
「えーと、イデアル?」
「そうだね。I=<x,y> は {x,y} から生成されるイデアルだ。じゃあ、{x,y} は?」
「I の基底?」
「そうだね。{x,y} はイデアル I の基底だ。」
「なんとなく、分かってきたかも。イデアルを作るのが、基底ってことだね。」
「それじゃあ、定理のメインの主張へと移ろう。」
「おお、いよいよメインディッシュってことだね。」
妹は料理を楽しみにしているような顔で、次の言葉を待っている。
俺は少し咳払いをして、ゆっくりと説明を始めた。
「次の(1)と(2)が同値であるというのが、定理の主張だ。」
(1) G が > に関して I のグレブナー基底
(2) G の各ペア f_i, f_j に対し、S(f_i,f_j) は G 以外の新しい先頭項を作らない。すなわち、S(i,j)を f_1,...,f_k で割った時の余りは 0
「同値……ってなんだっけ?」
「同値とは、(1)が成り立つならば(2)が成り立ち、逆に(2)が成り立つならば(1)が成り立つということだ。」
「つまり、同じってこと?」
「まあ、平たくいえばそうだけど……じゃあ、簡単な例で復習してみよう。」
「うん!」
俺はノートに1つの命題を書いた。
命題1
整数 m について、次の2つは同値である。
(a) mは偶数
(b) mの一の位は偶数(ただし、10進法で考える)
「この2つ (a), (b) は同値なんだけど、分かるかな?」
「えーと、(a) は偶数ってことは、2とか4ってことだよね。」
「そうだね。」
「(b) は一の位が偶数って言っているから、14とか100とかってことだよね。」
「うんうん。」
「つまり、(a)も(b)もどっちも2で割れるってこと?」
「もう少し正確に述べてみよう。(a)と(b)が同値というのは、」
(a)ならば(b)
(b)ならば(a)
「の両方が成立するということだ。今回の場合だと、(a) mは偶数であるとき、10進法表記では、一の位も偶数になる。よって、(a)ならば(b)が成り立つ。」
「うんそうだね。」
「逆に、mの一の位が偶数とすると、mは2で割り切れるから、偶数になる。」
「ふむ。」
「つまり、(b)ならば(a)が成り立つ。」
「えーと、どっちからでも、もう片方が出せるってこと?」
「そうだな。言い換えると、(a)と(b)は常に真偽が一緒ってことだ。すなわち、(a)が成り立つか確認したい時は、代わりに(b)を確認してもいいということ。」
「ほほう?」
「つまり、(b) はmが偶数であることの『判定法』になっているんだ。」
「はんてーほー。」
「それじゃあ、具体的にこの判定法を使ってみよう。次の数は偶数かな?奇数かな?」
432833421111843432398
「えーと……偶数?」
「どうして?」
「だって、一の位が8だから?…………あ!」
「そうだね。今、環奈は無意識に判定法を使ったんだ。偶数であることを定義に基づいて示すには、2で割らなければいけない。しかし、その計算をしなくても一の位を見ればすぐ分かる。」
「そうか、それが(b)なんだね。」
「そうそう。判定法 (b) を使えば、効率よく整数が偶数であることを判定できる。」
「今まで無意識に使っていたけど、すごいことだったんだね。」
「計算機代数においては、判定法というのがよく出てくる。数学的な定義に基づいて判定すると大変なものを、別の同値な条件に置き換えて効率よく計算するんだ。」
「へー。なんか数学でエコって感じだね。」
「ちなみに、偶数の判定は、コンピュータで使われる2進法表記だと、110 (10進法の6)のように末尾が 0 かどうかで判定できるね。」
「ほへー。」
妹はクッキーを美味しそうに食べている。
俺は新幹線で群城たちに弁当を奪われお腹が空いていたので、ぶぶ漬けというお茶漬けみたいなものを頂いた。
「さて、グレブナー基底の話に戻ろう。次の2つ、」
(1) G が > に関して I のグレブナー基底
(2) G の各ペア f_i, f_j に対し、S(f_i,f_j) は G 以外の新しい先頭項を作らない。すなわち、S(f_i,f_j)を f_1,...,f_k で割った時の余りは 0
「が同値というのが定理の主張だった。」
「えーと、つまり、同値ってことは、(1)ならば(2)と、(2)ならば(1)のどっちも成り立つってことだね。」
「そう。(1) は、G がグレブナー基底であることを言っている。一方、(2) は f_i, f_j のS多項式から新しい先頭項は作れないことを言っている。ここで、(2) が G がグレブナー基底かどうかの判定法になっているんだ。」
「うーん……難しいね。」
「じゃあ、G を具体的に設定してみよう。例えば、」
>:辞書式順序
G={x,y}
「とする。このとき、(2) はどうなるかな?」
「むーんと、定理だと、『G={f_1,...,f_k} を有限個の多項式の集合とする』ってあって、今 G={x,y} だから f_1=x、f_2=y ってこと?」
「そうだな。」
「えーと、(2) の最初の文を見ると、」
(2) G の各ペア f_i, f_j に対し、S(f_i,f_j) は G 以外の新しい先頭項を作らない。
「だけど、ん?ペアってどういうこと?」
「G から2つ多項式を取ってくるってことだね。例えば、G={f_1,f_2} だとペアは f_1,f_2 だけだ。」
「そうか、今は G={x,y} だから、ペアは x,y しかないってことだね。」
「そうだな。ちなみに、G={f_1,f_2,f_3} だと、f_1,f_2、f_2,f_3、f_1,f_3 の3つのペアがある。」
「なるほど。」
「そして、『各ペアに対して』ってのは、『それぞれのペアに対して』ってことだ。」
「つまり、今は、x,y しかペアはないから、x,y の S多項式 S(x,y) を計算すればいいってことだね!」
「その通り!」
妹はポッキーを口に咥えながら、ノートの新しいページをめくる。
窓から入る夏の風が、妹の長い髪を揺らしている。
「えーと、x,y の辞書式順序による先頭項はそれぞれ、LT(x)=x、LT(y)=y だから、それぞれ足りないものを比べると、」
x← yが足りない
y← xが足りない
「だから、」
S(x,y)
=y*x-x*y
=0
「になって、あ、0 になっちゃったね。」
「そうだな。つまり、x,y からは新しい先頭項は生まれなかった。」
「おおー。」
「すなわち、f_1=x、f_2=y の時、」
(2) G の各ペア f_i, f_j に対し、S(f_i,f_j) は G 以外の新しい先頭項を作らない。すなわち、S(i,j)を f_1,...,f_k で割った時の余りは 0
「が成り立つということだ。ここで、定理より (1) と (2) は同値だから、」
(1) G が > に関して I のグレブナー基底
「ということがいえる。つまり、G={x,y} は辞書式順序に関して I=<x,y> のグレブナー基底が示せた。」
「おおー。」
「この (2) はとても便利なんだ。(1) のグレブナー基底であることを定義から示そうとすると、」
<LT(I)>=<LT(G)>
「という等式を示さなきゃいけないけど、これは大変だ。」
「どうして?」
「そもそも <LT(I)> の中には無限個の多項式があるから、すべてをチェックするのは有限の時間では不可能だ。」
「無限は、現実では無理だもんね。」
「一方、(2) の方では、有限個のペア f_i,f_j のS多項式 S(f_i,f_j) の計算でいいから、有限時間で絶対に終わる。」
「へー。」
「じゃあ、次に、グレブナー基底じゃない例も考えてみよう。」
「うん!」
妹からペンを拝借する。
俺はノートに G={x+y,x-y} と書いた。
「今度は、f_1=x+y、f_2=x-y としよう。単項式順序は辞書式順序のままで。」
「わかった。えーと、S多項式を計算するんだよね?」
「そうだな。」
「うーんと、x+y も x-y も先頭項が x だから、」
x← x に比べて足りないものはない
x← x に比べて足りないものはない
「だから、何も掛けなくて大丈夫だね。ってことは、」
S(x+y,x-y)
=(x+y)-(x-y)
=2y
「となって、2y が出てきたね。」
「この 2y は新しい先頭項かな?」
「そうなんじゃない?」
「理由は?」
「えーと、G={x+y,x-y}には、x しか先頭項がなかったから?」
「そうだね。ちなみに補足すると、2y は x+y と x-y で割っても余りは 2y で、 0 じゃないね。」
「そだね。」
「すなわち、(2) は成り立つかな?」
「成り立たない!」
「そう。定理おいては、(1)と(2) は同値だったから、これは、(1)も成り立たないことを意味している。」
「そっか。ということは、G={x+y,x-y} は I=<x+y,x-y> のグレブナー基底じゃないってことだね。」
「その通り。G={x,y}の時は、グレブナー基底であることを示すのに(2)を使った。G={x+y,x-y}の時は、グレブナー基底《《でない》》ことを示すのに、(2) を使った。すなわち、(2) が成り立つかどうか調べることで、G がグレブナー基底かどうか判定した、ってことなんだ。」
「おおー!!なんかすごいね!!」
妹はパチパチと拍手をする。
ブッフベルガーの判定法の凄さを少し分かってもらえたようだ。
俺はまるで自分が褒められたように、少し照れくさくなって、指で鼻の下をこすった。
「もう一度、定理を見直してみよう。」
定理(ブッフベルガーの判定法)
単項式順序 > を1つ固定する。
G={f_1,...,f_k} を有限個の多項式の集合とする。
I=<G> を G から生成されるイデアルとする。
この時、(1),(2)は同値である。
(1) G が > に関して I のグレブナー基底
(2) G の各ペア f_i, f_j に対し、S(f_i,f_j) は G 以外の新しい先頭項を作らない。すなわち、S(f_i,f_j)を f_1,...,f_k で割った時の余りは 0
「環奈、どうかな。最初見たときは、よく分からなかったと思うけど、今は理解できたんじゃないかな。」
「うん。なんとなく分かったかも。S多項式を使うと、グレブナー基底かどうかを判定できるってことだよね。」
「そうだな。それがブッフベルガーの判定法だ。」
「判定法に自分の名前が付くなんて、ブッフベルガー先生すごいね。」
「グレブナー基底を見つけたのも、もちろんすごいけど、その判定法を同時に提案したのが、ブッフベルガー先生のすごいところだな。」
「おおー!すごいすごい!」
妹は豆餅を食べながら大げさに感心する。
というか色々食べすぎじゃないか?
誰に似たんだか……
俺はぶぶ漬けをすすって、飲み込んだ。
「さて、話を手紙のイデアルに戻そう。」
「うん。」
「俺たちは、手紙に書かれたイデアル I=<x^3+y^2, x^2y+xy^2> からS多項式を計算して基底 G={f_1,f_2,f_3,f_4}={x^3+y^2, x^2y+xy^2, xy^3+y^3, y^4-y^3} を作った。」
「そうだね。」
「これが Iの(辞書式順序の)グレブナー基底であるか、それを確かめるにはどうすればいいかな?」
「ええと、ブッフベルガーの判定法を使う?」
「その通り。つまり?」
「うーんと、Gの各ペアのS多項式を計算して、新しい先頭項が作れないって言えばいいってこと?」
「ザッツライト。でも、それは既に計算してあったね。」
「あ、そうだっけ。」
「そうだ。まず、G={f_1,f_2,f_3,f_4} のペアの組み合わせを考えると、4つのうち2個とってくるから、4C2=4*3/2*1=6 通りが考えられる。f_1,f_2 、f_1,f_3、f_1,f_4、f_2,f_3、f_2,f_4、f_3,f_4 の6通りだな。」
「うん。」
「それぞれのS多項式はこのようになるけど、これらを G で割ると全部 0 になってしまうことは、G を作った時に確認済みだ。」
S(f_1,f_2)=-x^2y^2 + y^3 → 0
S(f_1,f_3)=-x^2y^3+y^5 → 0
S(f_1,f_4)=x^3y^3+y^6→ 0
S(f_2,f_3)=xy^4 - xy^3 → 0
S(f_2,f_4)=x^2y^3+xy^5 → 0
S(f_3,f_4)=xy^3+y^4 → 0
「おおー。」
「つまり、ブッフベルガーの判定法の (2) が成立するということが言えた。すなわち、G は?」
「グレブナー基底!」
「正解!」
結論:
G={x^3+y^2, x^2y+xy^2, xy^3+y^3, y^4-y^3}
は
I=<x^3+y^2, x^2y+xy^2> の(辞書式順序の)グレブナー基底
「ほんとにグレブナー基底を手で計算しちゃったんだね…」
「そうだな。今計算したように、ブッフベルガーの判定法は、同時にグレブナー基底の計算アルゴリズムも与えてくれる。」
「計算あるごりずむ?」
「つまり、計算方法ってことだ。」
「もう、数学の人ってすぐ難しくいうよね。」
「すまんすまん。俺たちがした計算の仕方を、まとめてみよう。」
ブッフベルガーのアルゴリズム
入力:F={f_1,..,f_k}、>:単項式順序
出力:<F> の > に関するグレブナー基底 G
手順:
1. G に F を代入する。
2. G の各ペア f_i,f_j のS多項式 S(f_i,f_j) を計算する。
3. 各 S(f_i,f_j) を G で割った余り h_ij を計算する。
4. h_ij が 0 でないなら、h_ij を新しく G に追加する。
(ここで、G={f_1,..,f_k} の時、f_{k+1}=h_ij としてGに追加する)
5. 上の 2-4 を G に新しく追加されなくなるまで繰り返す。
6. G が > に関する I のグレブナー基底である。
「また難しいのがきた……」
「そんなことないさ。書いてあることは、今回俺たちがした計算を抽象的に書いているだけだ。簡単にいうと、すべてのペアから、S多項式で新しい先頭項をどんどん作っていく。そして、新しい先頭項が作れなくなった時、それがグレブナー基底っていうことだ。まあ、これは今度にしようか。」
「うん、そうだね。」
「それで、だ……」
うーんと、俺は頭を抱えるポーズをする。
妹は不信そうな顔でそれを見つめる。
「どうしたの?」
「いや、グレブナー基底は計算できたんだが、結局これが何なのかは分からなかったな…」
「あ、もともと、りんさんの手紙の謎を解くために、計算したんだもんね。」
俺は手紙の内容を振り返った。
***手紙***
先輩へ。
クリスマス、待ち合わせ場所に行けなくてごめんなさい。
私のことは探さないでください。
京都は交差点が多くて迷ってしまいますから。
借りてた辞書も返せなくてすみません。
もしまたいつか会えたら一緒に喫茶店に行きましょう。
私はメイプルシロップのパンケーキです。
北条環
I=<x^3+y^2, x^2y+xy^2>
***
「よし、ここは俺の、無意識を意識するスキル『
「え、うん……そうだね」
能力説明に若干引き気味な妹の視線を受けながら、俺は目を瞑った。
全身の力を抜き、白い部屋をイメージする。
凡人たる俺の非凡なるスキル。
発動せよ。
『
…………
…………
発動せよ。
『
…………
…………
あれ?
「お兄ちゃん、どうしたの?」
「え、あ、なんか、発動しないみたいだな……旅の疲れで疲れてるのかな……」
おかしい。
ピンチの時はいつも発動していたのに。
こんな状況は、導来圏との数戟、
「仕方ない……群城たちの方はどうなっているか聞いてみるか。」
少し離れたところで(と言っても同じ部屋なのだが)、手紙を解読している群城に声をかけた。
群城は少し疲れたような顔で返事をした。
「うーん、手紙の謎は少し分かったんだが、決め手がなくてなあ。圭介たちはどうだ?」
「こっちもグレブナー基底は計算できたけど、まだそれが何を表しているか分からないって感じだ。」
「お、ちょっとアタシに見せてくれ。」
そうして俺たちは再び一緒に考えることにした。
「なるほど、グレブナー基底は G={f_1,f_2,f_3,f_4}={x^3+y^2, x^2y+xy^2, xy^3+y^3, y^4-y^3} が出てきたか。確かに、これだけじゃ分からないのも無理ないな。」
「これだけって、もしかして群城はここから何か分かるのか?」
「ああ。おそらくこのグレブナー基底は、京都のある場所を意味している。」
「ある場所?」
群城は一枚の紙をテーブルいっぱいに広げた。
どうやら地図のようだ。
「ガイドブックについてた京都市内の地図だ。みんな知っているように、京都の街路は、南北と東西で直交して配置されている。そう、まるで座標平面のように。」
「……直交……そうかっ!手紙の『京都は交差点が多くて迷ってしまいますから。』は、それを意味しているということかっ!」
「圭介にしては察しがいいな。」
「えへへ。」
「まあ、アタシたちもそれにはすぐ気がついた。」
「え。」
「そして問題は、それがグレブナー基底とどう関連するかだ。それを解く鍵となるのが……」
「『先頭項の次数』デスね。」
後ろにいた杉裏解析が、俺たちを見下ろすようにして発言する。
そして、メガネをくいっとあげて言葉を続けた。
「グレブナー基底は、イデアルの先頭項の情報をすべて持ってイルような基底デス。つまり、」
<LT(I)>=<LT(G)>
「が成立してイルわけデス。今回の場合、G={x^3+y^2, x^2y+xy^2, xy^3+y^3, y^4-y^3} デスので、」
<LT(I)>=<LT(G)>
=<LT(x^3+y^2),LT(x^2y+xy^2),LT(xy^3+y^3),LT(y^4-y^3)>
=<x^3,x^2y,xy^3,y^4>
「ということデスねっ!……さて、ここで単項式というのは、座標と関係付けることが可能デス。例えば、x は座標 (1,0)、y は座標 (0,1)、xy は座標 (1,1)というように、x と y の次数をそれぞれ x 座標 y 座標に当てることによってネ。」
x ⇄ (1,0)
y ⇄ (0,1)
xy ⇄ (1,1)
x^a*y^b ⇄ (a,b)
「フフフっ!ズバリ!京都市内を座標平面とみなせば、自ずとある場所が浮かび上がっぶほぉ!!!」
オイシイところで杉裏は群城に殴られた。
いやむしろ殴られることが、彼にとってオイシそうな雰囲気さえある。
「このメガネに言われてしまったが、つまり、圭介たちが計算してくれたグレブナー基底に出てくる多項式の先頭項」
x^3
x^2y
xy^3
y^4
「と座標を対応させると、」
x^3 ⇄ (3,0)
x^2y ⇄ (2,1)
xy^3 ⇄ (1,3)
y^4 ⇄ (0,4)
「という4つの座標が得られる。これを京都市内の座標平面と対応させれば、この A,B,C,D という4つの地点が得られるというわけだ。」
群城は地図の交差点のうち、4つの箇所に赤丸をつけた。
そして、そのままペンを置いた。
「ただ……」
「ただ?」
「アタシたちに、分かったのはここまでということだ。候補の地点は導けたが、ここから1つに絞ることはできなかった。」
「なるほど……」
「いや、もしかしたら、この4つすべてが正解かもしれない。しかし、何か腑に落ちない感じがするんだよな。」
その時、環奈が小さく手をあげた。
「……あの、ちょっといいですか?」
「ん?どうした環奈ちゃん。」
「えーと、手紙の7行目の『私はメイプルシロップのパンケーキです。』って、これについても何か分かりました?」
「ああ、その箇所か。それについてもよく分からなかった。」
「えーと、なんとなくなんですけど、『私はメイプルシロップのパンケーキです』って、自分がパンケーキみたいに聞こえますよね。なんか変じゃないですか?」
環奈の言葉に俺はある光景が浮かんだ。
メイプルシロップのパンケーキ……喫茶店……たくさん食べているりん……
そして、この4つの先頭項。
あ、そうか。
なんで今まで気づかなかったんだ。
俺は地図のある地点を指差す。
そして、自信を持って言った。
「すべてが分かった。りんは、ここにいる。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます