論理プログラミングへの挑戦

 私自身のA・Iと言えば、この本『Prologの技芸』のことです。

もう少し広く捉えて書けば、共立出版から発行されていたbit誌の記事と共立出版の人工知能関係の書籍になります。

どれも難しい内容でした。そのなかで、一冊購入したのが、「Prologの技芸」です。

いつかちゃんと勉強しようと保管していたつもりですが、いつの間にか古本屋にでも売ってしまったのか、なくなっていました。

なぜ、この本を買ったのかは理由があります。

同じころTurboC 2.0のマニュアルにPrologの説明があり、実際にコーディング例まであった。

個人の環境レベルでPrologをしてみようと考えていたけど、すっかり忘れていました。

そのことを最近のA・I関連の話題で憶いだしました。

 

 

 このマニュアルの表紙

自分にとってPrologは難しくて、頭脳を構築(build)するイメージでなく、頭の中から脳細胞がどんどん出ていく感じでした。Prologとか考えず真面目にC言語を勉強しようと思いました。

 

「Prologの技芸」の本が手元になくても、TurboC2.0(日・英)/Turbo Prolog(英)のコンパイラはあります。でも、なかなか気持ちが向きません。

 『論理的に考える』ことは、なかなか難しい。

せっかくなので、少し考えてみよう。

 

 ポパイのエピソード

ポパイの登場人物 ウィンピーは、いつも「ハンバーガーおごってくれよ」がセリフ。

記憶にあるのは

 ポパイ 相手にしない。

 ブルータス 殴る。
A・Iの学習はどうなるのだろうか。

 

 

 

 

"相手にしない"は、「行動」でないから、ハンバーガーをおごることを断るのは、"殴る"ことになるのだろうか。

その理由は忘れたけど、たまに、ポパイがおごってやる時があったと思う。

それは、"行動の発動条件"になる。

理由が強ければ、殴ることがなくなるかもしれない。

C言語で表現すれば、もし、何々だったらと記述するけど

そこに、人物の性格を加味すると条件式では成立しない。

『消極的なことを正当な理由としなければならない』とき、どういう条件になるのだろう。

なぜなら、本当に悪いことを結果として出すこともあるからだ。

美辞麗句と罵詈雑言のコトバの突き合わせであれば"ロジック"でなく"、"フィジカル"と思う。

トムとジェリーの両者の駆け引きは、もっと複雑だ。

(A・Iなので、アメリカ式に考えてみた。)

 

 

人間の思考をそのままコンピュータ言語にできるだろうか。

 論理的ということを、

コンピュータ言語のIF条件式で実現するのは無理なのではないだろうか。

コンピュータ言語は、IF条件式ありきで実装しないといけない。

IF条件の制御構造がないコンピュータ言語は何があるあろうか。

そもそも制御構造がないコンピュータ言語は成立するのだろうか。

 

 人は、いちいち「もし」と考えて行動するだろうか。

注意深く行動するのは良いとしても、そういう考えでは疲れるから、まずは、行動する。実際は行動した後に「もし」と考えることが多いだろう。

 日常、あれこれ考えすぎと言いつつ、「もし」と考えることは、稀なことなのかもしれない。

論理的な言語を考えるならば、「もし、もし」型(日本式)でなく「Hello」型(アメリカ式)。

 

日本式のIF(もし)

「もし、もし、もし、もし」 条件分岐が複雑になりどれが正当なルートかどうかがわからなくなる。

アメリカ式のHello

「Hello、Hello、Hello」 問い掛けて聞くだけ、あるいは相手が反応するまで。「もし」はない。前方向でルートは1つ。

 

(行動4(行動3(行動2(行動1)))) 

シナリオを考える練習にもなるけど、IFでない条件で処理を進めるためにこのように表現する。

内側の式の結果が真ならば次の内側の式の評価をしていく。

 

OK←((((行動4A)行動3)行動2)行動1)

NG←(((((行動5)行動4B)行動3)行動2)行動1)

 

途中で条件分岐せず、最後にOKとなったものを真とする。

1つの事実がOKとなれば、NGルートは破棄して、その先を同じことをする。

 

しかし、いくつかの事象の結果を同期でとれるのならば、IF条件式があってもよい(と思う)。

そのこともあり、Haskellの遅延評価が気になる存在だ。

従来のプログラミング言語の条件式は、ただ、単に処理を切り替えているだけ、何も考えずに判断している。

正誤は、PGの感覚に頼ることになる。適当なあたりをつけているようだ。

処理の結果でなく、事象の結果を判断する。

何もあれこれ、こう決めつけるのでなく、少しダンマリになって結果が正しければ良いと思う。

言語そのものに知能を持たせるとかでなく、少し考え事をして実行する処理は人工知能言語に適っていると考える。