SICP 4.4.4.5 Ex. 4.79

  • 投稿日:
  • カテゴリ:

Ex. 4.79

束縛変数をすべて局所的環境におきかえる。なんていう壮大な計画は没。

変数の名前を替える(rename-variables-in)を呼び出していたのは、ruleの本体の処理 (apply-a-rule) のところである。

この処理だけ、局所的環境を使うようにする。また、束縛変数を1つづつではなく、frame ごと局所的環境におくようにする。

ブロック構造の手続きというのは、処理をサブルーチンに分けること

(sub 
   (sub1 ...)
   (sub2 ...))

こういうの。queryシステムだと、rule の中から別の rule を呼び出すこと。

実際に、名前の衝突が起こるのは、rule呼び出しの引数名しかない。(ruleにローカル変数ないし)

ここから、問題が別になっている。

(原文 "Can you relate any of this to the problem of ..." 局所的環境版でも名前変更版でも、どちらかを使って、次の問題を解け、、、)

"文脈の中で推論"について

「P が真ならば A B を推論する」というのは、AとBに関するルール

ルール①PならばA
       (rule1 A
              P)
ルール②PならばB
       (rule2 B
              P)

があるとき、Pを真にするフレーム (...frameP...) のもとでこれらのルールを評価するということである。

文脈というのは、この frameP を指すと思われる。

frameP のもとで推論可能な ルール①、ルール② が最初から選ばれているわけではないので、全ルールを総なめして、ルール①、ルール② を探さなければいけない。

ここで要求されているのは、このルールの検索プログラムを作れということだと思われる。

と思ったけど、これだけだと未解決でもなんでもない唯の検索問題になる、、、?

ということで、未解決問題"AIのフレーム問題"に絡めてみよう。(これしか知らんし)

例えば、rule が 10000個もあったら全ルールを総なめにするというのはとても重い作業だ。

さらに推論を重ねる場合、この総なめ作業はどんどん増えていく。

frameP で推論(10000個総なめ) → 
  結果Aをフレームとしてさらに推論(10000個総なめ)
    結果Cをフレームとしてさらに推論(10000個総なめ)
    ...
  結果Bをフレームとしてさらに推論(10000個総なめ)
    結果Dをフレームとしてさらに推論(10000個総なめ)
    ...

たとえば、結果が末端にいくまで10回推論を重ねる必要があって、推論の度に2個づつ結論ができる場合、2の9乗 * 10000 = 500万個 総なめしないといけない。

なので、この重い作業をなんとかしろという問題だと解釈する。