古い文献
N-Prologに対して自分なりに分散並列、マルチスレッド並列機能を追加しました。やり終えてみて1980年代のICOTの研究者はどのように考えてGHCを設計したのか?という疑問が湧いてきました。ICOTの主要メンバーの古川康一さんの文献を見つけました。以下はその文献からの一部引用です。
ー引用ー
第五世代コンピュータの
プロジェクト運営と人工知能の未来 古川康一
4・3 研究の方向性の転換
ICOTは,前期から中期に進む過程で,Prologから並
行論理プログラミングへの大きな方向転換を行った.そ
の転換は,ICOTおよび関連メーカの研究従事者間で大
きな論争を生んだが,著者を中心とする核言語グループ
は,反対意見を抑えて,その方針転換を遂行した.その
根幹にあるのが,Prologと並行プログラミングとの相性
の悪さである.Prologの重要な機能に,バックトラック
による探索機能があるが,並行プログラミングでは現実
世界とのインタラクションが必要であり,後戻りできな
い並行現象を制御しなければならない.これらは相容れ
ないので,我々はPrologの探索機能を捨てて並行機能
を取った.この方針転換は,後述する海外研究者を含め
た並行論理プログラミングの開発競争の中でのICOTの
独創技術の確立を促した.一方,この方針転換は探索機
能を見掛け上犠牲にしたことになるが,この点も後に述
べるように,画期的な技術により取り戻した
ー引用終わりー
人間の表面意識と潜在意識
私はGHCの文献を持っています。これを理解したくてElixirの並列機能を利用して自分でもGHC処理系を作ってみようとしたことがありました。一応はできたのですが、どうも仕様が違っていたようです。なかなか理解困難な複雑な言語仕様のように思えました。そのときの経験から、もっと単純で理解しやすいProlog並列ができないものだろうかと考えるようになりました。
古川さんの文献からなぜGHCの方向へ向かったのかを理解しました。しかし、今のハードウェアならもっと違う方向もあったのではないだろうか?と思うようになりました。分散並列で現実世界とのインタラクションと現実世界とは切り離されたところでの深い推論とを別に分担させたらいいのではないだろうか?
人間は日々、活動をしつつ現実の問題に対応しています。リアルタイムで現実世界に対応しないといけませんので、その判断に深い推論をしている時間はありません。経験則などをもとに瞬時に判断をしていると思われます。
しかし、その判断がどうもしっくりせずに考え直し、一晩寝て、翌朝、それは違う!もっと良い方法がある!と閃くことが多々あります。潜在意識は意識の背後において時間をかけて推論を繰り返しているのだろうと思います。
これを分散並列Prologに応用できないだろうか?と思っています。とりあえずは既存の知識ベースで対応するけれども、より深い推論を分散したProlog処理系に推論させておいて、その結果を待つというアイディアです。これならばPrologの特長であるバックトラック、深い推論を活かすことができます。
夢見るおじさん
1980年代と今とではハードウェアの質、量ともに大きな革新がありました。これを利用したらアマチュアであってもおもしろいことができるのではないか?と夢想しています。黎明期のAppleのウォズニアックのようなものです。アイディアと卓越した知識と、そして普及しはじめた電子部品をもってイノベーションを起こしました。
ICOTは莫大な資金がなければできない専用ハードウェアを作りました。21世紀の今なら私もウォズニアックのようなことができるのではないか、と夢想して楽しんでいます。挑戦を忘れた男はなんとも情けないです。いつまでも夢見て挑戦するおじさんでありたいと私は思っています。