今だから話そう 幾何の問題・正解集の公開 ソフトウェアの法則 幾何の難問 記憶力 ソフトウェアと記憶力 昔男ありけり
(4)

幾何の問題・正解集の公開


── 幾何の問題・正解集の公開

男ありけり

   昔 男ありけり
   高校時代、幾何の難問に出合いけり
   企業人となり 今度は正解集の扱い方で悩みけり

はじめに
 以前、拙著『ソフトウェアの法則』(中公新書1270)で、ある幾何の問題を取上げたことがありました。高校時代に授業で出された難問で「5分で解けた」と誤解する人が多いのですが、未だ5分で解けるような平易な証明は発見されておりません。
 その際に作られた正解集を、今回ネット上に公開することにしました。以下では、そう決意した背景を説明したいと思います。

背景説明
・ネット上への登場:(1994年)
 最初にこの幾何の問題を取上げたのは1994年の1月24日のことです。東芝社内のイントラネット上にある電子掲示板(vox)に「ソフトウェアと記憶力」というタイトルのエッセイを掲載しました。この中で私は、問題の詳細には触れぬまま唯ある難しい幾何の問題に出会ったこと、そしてその問題に関連して私の周辺で起こった出来事を中心に紹介したものでした。

 東芝の技術者の多くが利用していた掲示板だったからでしょうか、直後から「どんな問題ですか?」という問い合わせメールが多数寄せられました。ここで初めてその幾何の問題の詳細が公になった訳です。その後「ソフトウェアと記憶力」が掲載されている『ソフトウェアの法則』という本が発売(1995年)され、一般にも知られることになりました。

 後にエッセイの方は、掲示板からイントラネット上の個人ホームページ上に掲載され、更にインターネット上の個人ホームページ創設を機会に、関連する情報が同様に転載されるようになりました。これ以後、関連情報を書籍で知った読者から、あるいはインターネットで知った利用者から「問題の解答」なるものが寄せられるようになったのです。

 今までに証明に成功したのは(出題者の私を含めて)6人ですが、複数の解を提出した人もいるので全部で9つの解法が存在しています。この間、正解者にはこれまでに判明したすべての解法を含む正解集を配布してきました。しかし時が流れるに連れて、その正解集の文書ファイルの保存と継承が(特に図を含んでいるため)難しくなってきました。

・1回目の変更:(1997年)
 そこで正解集をウェッブ上に保存することにしました。しかしまだ正解に到達していない方々からは「絶対に正解の証明を公開しないでほしい」という要望が出されていました。あくまでも自分で解きたいということなのでしょう。そこで正解者のみがアクセスできる形にして公開することにしました。“秘密の”正解集への入口は私のホームページの【超極秘欄】を開くと、下から13番目の項目[幾何の問題・正解集]からアクセスすることができます。その中の【正解集へ】から先は(正解者のみが保持する)パスワードが必要になります。

置き場所の変更
・2回目の変更:(2021年)
 こうして20数年が経過しました。私めは、そろそろ自分のホームページの終活に取り組まねばならない年齢に達したのです。このまま放置しておくと正解者(今では連絡の取れない方、故人となられた方もおります)以外には誰も“正解”を知らないという状態になるのは明らかでしょう。そのうちに、果して正解だったのか? と疑問を持つ人も現れることでしょう。そして何より困るのは、私が管理できなくなるとホームページの使用権がなくなって、プロバイダーによる強制削除でホームページそのものが消滅してしまうことになります。

 そこで、次の策を講じることにしました。
 (1)誰もがアクセスできる場所に正解集を置く。
 (2)従来の“秘密の”正解集はそのままとする。
 (3)これまでの経緯を記録として残す。


 ここで、
 (1)はホームページ(*1)上とブログ(*2)上に置きます。
 (2)はホームページ上に残します。
 (3)は、今書いているこの文書そのものですが、出来上がり次第ホームページ上とブログ上に保存します。ホームページの消滅時には(2)は失われますが、(1),(3)はブログに残されることになります。
【注】(*1)ここで、ホームページとは、
    【Knuhsの書斎】
     http://www.hi-ho.ne.jp/skinoshita/

   (*2)ブログとは、
    【(付録)゙:ドッと混む・Knuhsの書斎】
     http://knuhs-dot-com.blogspot.com/
    【(付録)゙Knuhsの書斎】(ミラー)
     http://knuhs.blogspot.com/
のことです。
ソフトウェアと記憶力
 ところで「ソフトウェアと記憶力」をここで読んでもらいたいのですが、残念ながらは『ソフトウェアの法則』の出版に合わせてホームページ上からは削除されました。原文のテキストが存在しないので書籍の該当ページを写真に撮り、それをこの欄に表示する積りでいました。しかし実際にやってみると、文章が縦書きになるのでパソコンの画面では読み難いことが分かりました。


『ソフトウェアの法則』から
「ソフトウェアと記憶力」

 書籍を見ながら再度パソコンに入力するのは何んとも馬鹿らしいので、いろいろ悩んだ末に昔電子掲示板に投稿したときのメールを利用すればよいことに気が付きました。当時の掲示板上での議論、あるいは個人のメール交換でいろいろと議論したことはすべてメール形式でそのまま保存されているのです。それを以下に掲載することにしました。初稿原稿(原文)ですから書籍として出版されるまでに手直しされた部分があり、それらは完全には反映されていませんから、多分どこかに相違はあると思います。

【以下は、昔の投稿ファイルから復元したもの】
From: (TSE)木下 恂 990092050039
Date: 24 Jan 1994 17:57
Subject: 『ソフトウェアと記憶力』

『ソフトウェアと記憶力』

 学生時代、私の好きな学科といえば数学であった。特に、記憶力よりも推理力を必要とするところが性に合っていたように思う。古文とか歴史など最初に多くのことを暗記しなければならない学科は大嫌いで、「以後パッパ(1588)と刀狩り」などとこじつけて歴史の年代を覚えることにどれ程の意味があるのか、などと勝手なことを言っていたものである。暗記するのが苦手だった訳ではなく、要するに関心のあることしかやらないという、単なる物ぐさだっただけなのであるが。好きな分野にのみ熱中するという偏った勉強法の欠陥に気付いたのは、ずっと後のことである。今でも仕事に関連した専門分野以外のことには比較的無関心で、読む本の分野も偏っていると家内からはよく注意される。最近は、努めて専門以外の分野にも首を突っ込むようにしているが、そうやって得た知識が専門の分野でも役立つことが意外に多いことを知った(もはや手遅れの感があるが)。

 高等学校時代は、数学の中でも特に幾何学が好きだった。誰も思い付かない場所に補助線を引くことによって、難しい問題がスパッと解けたときのあの爽快感は決して忘れることがない。受験戦争真っただ中の灰色の高校生活で、唯一思い出す痛快な思い出は幾何の難問を自分一人だけが解いたときのことである。幾何の先生が出してくれたその問題は、一見単純で簡単に解けそうに見えたが予想外に難問であった。聞くところによると、その先生が学生の頃同じように出題され誰も解けなかったが、ある優秀な学生が病死した後で、彼の机の引きだしの中から正解を書いたメモが出てきたのだそうである。そういうことがあったので先生にとっても印象深い問題だったのであろう。この話を聞いて皆で勇んで挑戦したものである。結局、正解となったのは自分のものだけだったように記憶している。

 最近、古い資料を整理していたとき高校時代の友人からの葉書が出てきた。東大の法科へストレートで入った秀才K氏からの手紙で、浪人中の私への激励と例の幾何の問題の解答を教えて欲しいという依頼が書かれている。K氏の友人が家庭教師をしていてこの問題を聞かれ、答えられずに困っているからとのことであった。同時にその友人からの礼状も残されており「家庭教師として若干の威厳は保持せねばならず、かといって嘘をつくわけにもいかず、全くの苦境でありました。お陰で大変助かりました」とユーモラスに書かれているところから、正解を教えてあげたもののようである(すっかり忘れてしまっているが)。この自慢話の締まらないところは、今ではこの問題を自分では解けないということである。どこに補助線を引いたかも正確に覚えているのに、どう頑張っても正解に到達できない。今や記憶力だけでなく、推理力も衰えてきた証拠であろう。

 暗記が苦手ではないことを自分で証明するために、円周率(π:パイ)の値を丸暗記したのも高校時代のことである(これは誰でもよくやることらしい)。それも、何かにこじつけて覚えるというようなせこい方法は使わずに、小数点以下の数字をそのまま丸ごと覚えるのである。小数点以下100桁(*)までなら今でも数字を諳じることができる。若い頃に覚えたことはなかなか忘れないものである(しかし最近は 80 桁目以降が少しあやしくなってきている)。

 (*)  3.1415926535 8979323846 2643383279 5028841971
     6939937510 5820974944 5923078164 0628620899
     8628034825 3421170679

 円周率の値をそんなに覚えても何の得にもならないが、全く役に立たないという訳でもない。学校を卒業しコンピュータのソフトウェア開発という仕事につくようになると、結構円周率の値に出くわすことが多くなった。コンピュータを大学に購入してもらうため、大学の先生に立ち会ってもらってコンピュータ(と関連するソフトウェア)の性能を調べるためのベンチマークテストを行うことがよくあった。ベンチマークテストというと、直ぐ私のようなコンパイラ屋が駆り出されたものである。テストに使うプログラムは先生が日頃研究で使っているFORTRAN言語で書かれたプログラムであることが多く、テスト当日に突然提示されるのが普通であった。当時のFORTRANは異機種間でのプログラム互換性に問題があり、利用者の側も互換性についての認識に欠けている時代であった。したがって、プログラムに何の手直しも加えないで、異なる機種の上で同じ結果が得られるというようなことは滅多になかったといってもよい。与えられた1〜2時間の内に、先生が期待する(正しい?)結果が得られるようにするのが、こちらの役目である。はっきり言って、かなり酷いプログラムが多かったのを覚えている。そういうプログラムを解読して問題箇所を見付けるという経験を積み重ねたことが、後年プログラムを美しく書くことの重要性を意識するようになった出発点ではないかと思う。感謝すべきであろう。

 先生の方は、従来機種での結果が正しいと信じているので我々のコンピュータでの出力結果が異なれば、それは即こちらのソフトウェアが間違っていると主張することになる。それに対して反論するには、プログラムの問題の箇所を見付けて指摘し、それが原因であることを納得させなければならない。更に(これが一番難しいのだが)それを修正することを了解してもらわなければならない。先生の方は日頃の研究成果である自慢のプログラムに難癖を付けられるのだからそれを喜ぶ訳がない。かなり難儀な仕事であった。

 プログラムの互換性上から望ましくない記述、たとえば特定の機種でしか通用しないような記述を見付けても、それを誤っていると認めないのは勿論のこと修正することすら認めてくれないのである。当然プログラム言語の仕様とその解釈についての議論をしなければならなくなる。かなり理屈っぽい男だと思われたものである。しかし、こちらとしてはそれしか方法がなかったのである。

 FORTRANによる技術計算プログラムであるから、そういうプログラムには必ずといってよい程円周率の値が登場する。面白いもので円周率に関心のない先生のプログラムでは、円周率の値は高々10桁くらいしか書かれていない。3.14 だけというのもある。しかし、20桁近く書き連ねている先生も中にはいる。FORTRANの倍精度機能を使うとしても、高々16〜7桁で十分なのだから全く無意味な記述である(しかも、それを単精度で使っている)。こういう先生は間違いなく円周率に強い関心をもっている先生である。ある国立大学の教授のプログラムを調べていたとき、たまたまこの長い円周率の記述にぶつかった。しかも10桁目付近で間違っているではないか。有効桁数から考えて、プログラムの実行結果に影響するものではないから放っておいてもよかったのである。思わしい結果が得られない本当の原因は、他のところにあるに決まっている。しかし、若気の至りで、ついそれを指摘してしまった。「いや、そんなことはありません。この値で正しいです」と教授は毅然と言い、当然不機嫌になる。言わなければよかったと後悔しながら「そうですか」と引き下がった。しかしその後で気が付くと、教授は少し離れた所に置いてある自分の鞄の中から資料を色々と取り出し、何かを調べている様子。暫くするとまたやってきて「やはり私の間違いでした」ということになった。当然のことながらこの後は非常に協力的になり、プログラムの修正の方もうまくいったのである。

 少し脱線するが、ベンチマークというと私は某金融機関を相手にしたときの出来事を直ぐに思い出す(もう何年も誰かに話したいのをじっと我慢してきたのだが、もはや時効になった頃であろう)。私が直接タッチしたケースではなかったが、例によってベンチマークテストで使われたCOBOLプログラムで期待した結果が得られないことがあった。

 色々調べていった結果、金融機関側が期待する某IBM社のマシンでの計算結果との違いは、ある特定の式の評価以降で起こるというところまで追い詰めることに成功した。その式の値を手計算で求めてみると当社のCOBOLの計算結果の方が正しいのである。詳細はどのような具合になっていたかもはや忘れてしまったが、多分ライブラリプログラムの返す値の丸めの差ではなかったかと思う。結局、某社のCOBOLの結果の方がおかしいということが明らかとなったのである。それを金融機関側も納得した。

 しかし問題はそれで解決した訳ではなかった。従来からその間違った値で金融機関の方はお客にローン等の支払いをさせていた関係上、コンピュータを入れ替えたからといって急にその支払額が変更されるようなことがあっては困るというのである。そこで、やむをえずCOBOLプログラムに手を入れてその間違った値をわざわざ出すように式を手直ししたのである。ほんの些細な額ではあるが、金融機関にとっては信用が掛かっている重大な問題だった訳である(やはり、ここだけの話にしておいた方がよさそうである)。それにしても、こういう下らないことだけはよく覚えているものである。大切なことは直ぐ忘れてしまうのに‥‥。何故なのだろう。

 円周率の値といえば、技術計算のプログラムでしか使わないと思われ勝ちであるが、結構色々なところで利用されている。たとえば、これをパスワードとして用いる人が多い。コンピュータシステムで使われるパスワードは忘れると大変なことになるが、そうかと言って手帳などにメモしておく訳にもいかないので、取り扱いには結構神経を使うものである。

 その結果、絶対に忘れないような身近なものからパスワードを選び勝ちになる。たとえば自分の誕生日の日付をパスワードの数字に選ぶ人が多いが、これをやると身分証明書とキャッシュカードを一緒に落としたときなど簡単に見破られてしまう。そこで理数系の人はπやeの値を用いたりする。理論物理学者のファインマン教授は暗号破りの名手だったそうであるが、特別な技能があった訳ではなく、円周率などの特別な数字をパスワードに使う人が多いことを知っていて(もちろん学者仲間が対象であるから)、後は根気と推理だけで対応したもののようである。

 最近気が付いたことであるが、電子手帳などで使えるパスワードは20桁以上の長い数字を受け付けるものが多い。こういう場合はパスワードとして円周率の値をおおっぴらに利用するとよい。パスワードが円周率の値だと他人に分かってしまっても、普通は全部正確に入力できないからである。更に適当な桁を一字だけ変えておけばなお安全である。

 ところで、苦手ではないと称していた私の記憶力も年とともに衰えてきて、新たな情報を記憶するのに次第に困難を感じるようになってきた。そこで、情報を効率よく記憶するためには、コンピュータの記憶装置になぞらえた方法で覚えるのがいいのではないかと最近思うようになり、それを実践している。

 たとえば、コンピュータ関係の新しい技術を勉強しようと本を買っても、忙しくて読めなかったり、途中で興味を失ったりで最後まで読了しないことが多い。そういう場合、そのまま本をしまい込まずに全体をパラパラと見たり、目次だけでもよく見ておいて、どういうテーマが書いてあるかを記憶しておくのである。そして、何かの折りにその知識が必要になった場合、あの本に書いてあったはずと直ぐ思い出せるようにする。そして必要になった時点で精読するのである。

 したがって私は、雑誌類は図書の本を利用するが、それ以外の書物は努めて自分の本として購入し、自分の「ライブラリ」という名の補助記憶装置を充実させるように努力している。

 つまり主記憶装置(主メモリ)の容量に制約があり、新たな情報を直接貯える余地がない場合には補助記憶装置に入れておくのである。そして補助記憶装置のどこに記憶したかの情報だけを主メモリに置いておく。無理に主メモリに記憶しようとしても揮発性メモリなのか直ぐ忘れてしまうからである。そして、どうでもよい(無益な)情報は努めて捨てることにし、必要な情報でも敢えて無理に主メモリ上には記憶しないようにする。補助記憶装置のどこを読めば分かるかを知ってさえいればよいのだから楽である。自分の外部記憶装置であるライブラリを充実させておいて、必要に応じて主メモリ上に呼び出す「仮想記憶方式」にして主メモリの容量不足に対応するのである。

 歳をとってから主メモリのサイズを拡張しようとしても、それは殆ど不可能に近い。大容量の主メモリの持ち主になりたければ、若い時にそれなりの対応をしておかなければ無理であろう。若いときによく勉強して主メモリを拡げて記憶容量を大きくし、内容を充実させておくべきなのである。私のように怠け者で偏った勉強をしていると、決して広くはならないものである。年を取ってからできることといえば、それは精々補助記憶装置の充実を計ることしかないのではないか。

 しかし、主メモリにはもう新たな情報を記憶する余地がないかというと、必ずしもそうではない。たとえば円周率に関係するニュースなどは直ぐ覚えてしまうから不思議である。現在、円周率の値は小数点以下32億2千百22万桁まで求まっていて10億桁目の数字は“9”であるとか、国際的にどことどこが競っているとか、どのような手法で値を求めているかなどの情報はたちまち覚えてしまう。

 何故なのか。どうやら主メモリの中にある、若いときに張り巡らした記憶の網に、たまたま引っ掛かった情報は忘れ去られることなく記憶されるもののようである。しかし引っ掛かるべき記憶の網が何も張り巡らされていない分野では、覚えるのに大変な苦労をする。新たな網を張るのに多大な労力を要するからであろう。将来どんな分野の記憶の網が必要になるか分からない以上、我々は若いときに選り好みをせずに広く色々な分野の勉強をしておくべきなのであろう。私の場合、気が付くのが遅すぎたが。

 若い時に、主メモリ上をどうでもよいガラクタ情報で満たしていると、この将来必要となる記憶の網が張り巡らされないままになってしまうのではないかと思う。たとえば、昔はコンピュータゲームなどを見ると、知的好奇心を刺激され同じようなものを自分で作ってみたものである。そしてその過程で色々なことを学び、経験し、結果として何らかの有益な記憶の網が張り巡らされたはずである(と信じている)。しかし最近の若者達は(などと言うと、年寄りが若者の行動を批判する典型的な構図になってしまうが)ゲームのきらびやかな外見に圧倒され、同じようなものを自分で作りたいという意欲が湧く前に先ずそれで遊んでみたくなる。そして結局は遊ぶ方に没入してしまう傾向が強い。あたら、有益な記憶の網を張るチャンスを逸しているように思えてならない。

 コンピュータゲームの遊び方の網ばかり張り巡らされた記憶装置には、将来どんな情報が引っ掛かるのであろうか? そこで、思い付いた法則をいくつか。

【新人プログラマの記憶力の法則】
 『いつか助けてくれるかもしれないと期待して困っている新人プログラマを助けてあげると、ありがたいもので次に困ったときも必ず自分を思い出してくれる』

【貸し借りに関する記憶力の差の法則】
 『お金を貸したことは忘れないが、借りたことは直ぐ忘れてしまう』

【貸し借りに関する記憶力の差の法則に基づく問題提起】
 『徹夜でデバッグしたあの日、自販機の前で貸した私のお金は一体どうなったんでしょうね』

【参照終り】

【以下は、書籍に書き加えたもの】
<追記>

 ここでふれた幾何の問題について、「どんな問題か教えてくれませんか」という問い合わせが電子メールを通じて寄せられた。その問題とは、次のようなものである。

三角形ABCにおいて、∠Bと∠Cの二等分線が辺AC、辺ABと交わる点をそれぞれD、Eとするとき、BD=CEであるという。このとき、三角形ABCは二等辺三角形であることを証明せよ(つまり∠B=∠Cを証明せよ)

 私はこういう状況になるのを、実は一番に恐れていたのである。この問題を尋ねられ、問題を公開したら「なんだ、簡単じゃないか」とすぐ正解が送られてきたらどうなるか。自分の数少ない自慢話(いまやそれが怪しくなってきている)の一つが完全になくなってしまうからである。他人に教えられて「なるほど、そうやって解くのか」と感心している自分を想像するのは大変辛いことである。

 しかしその後、この問題を電子メールシステムの掲示板で公表してからほどなくしてなんとか自分で解くことに成功した。問題に挑戦した人の数は定かではないが、解けないという苦情、奮闘報告、正解を教えてくれという要請、五分で解けたという誤報(?)などが多数寄せられた。最終的に正解となったのは三人の方から寄せられた四つの解法であった(一人で二つの解を寄せられた方がいた)。出題者としての解答と合わせて五つの解が集まったことになる。いずれも異なる解法ばかりで、いろいろな解き方があるものだと感心した次第。これを見るとどれも五分程度ですぐ解けるという解法ではない。「五分で解けた」と報告をくれて以来音沙汰がない方々は多分勘違いだったのであろう。しかし「五分で解ける」未知の解がある可能性はまだ残されている。貴方(女)も挑戦してみませんか。

<追記 終り>

以上は、1994年時点の集計結果に基づいて書かれています。

なお、新たに正解と思われる解法を見つけても、私めに送りつけるのはご容赦ください。もはや解法の正否を判定できない可能性があるからです。

円周率についての最近の記録は以下のようになっています。
 1991 22億6千万桁 (コロンビア大学)
 1995 32億2,122万桁(東大 金田)
 2020 50兆桁 Timothy Mullican


正解集への入口

正解集(ホームページ)
seikaishuu3.htm

正解集(ブログ)   
blog-post.html