<戻る>

--- This is prolog6.doc ---

処理系(CMIS) のデータの側面から見た仕様を述べる。

<データ構造>

実行メモリー ------ hnp:(struct thn ノ リスト)

          (1) 用途  導出に使うホーン節を置くエリア
                外部ファイルとの受渡用にも使われる

          (2) 要素
            lrmn  仮説から偽でないものを抽出してきた場合その番号
            hnt   ホーン節

          (3) 制御  ユニファイ可能チェックは昇順
            hn   ホーン節数
            h1   現在のゴールのユニファイ相手のホーン節番号
            h1p   各ユニファイ回目の h1 のリスト(g1迄)

ゴールヒストリ ---- glp:(struct tgl ノ リスト)

          (1) 用途  導出の際、作られるゴール節の履歴

          (2) 要素
            glt   ゴール節(複数アトムからなる)

          (3) 制御
            g1   現在のゴールのユニファイ回目
            gn   現在のゴールのゴールヒストリの番号
            g2   現在のゴールのアトム数
            h2p   各ユニファイ回目の gn のリスト(g1迄)
            h2c   各ユニファイ回目の g2 のリスト(g1迄)

            例   pij をゴールのアトムとすると
                1  2  3  4  5  6  7  8
                1-> 2---------> 3-----> 4----->
                p11,p21,p22,p23,p31,p32,p41,p42
                g1=4
                h2p[g1]=gn=7, h2c[g1]=2

カレントゴール ---- cgp:(struct tcg ノ リスト)

          (1) 用途  ユニファイ中のゴール節

          (2) 要素
            cgt   現在のゴール節(複数アトムからなる)

          (3) 制御
            g1,hn,h2などはゴールヒストリを参照のこと
            例   上図で言えば p41,p42 のこと

言語Lメモリー ---- llp:(struct tll ノ リスト)

          (1) 用途  言語L、言語Lの文法上のデータを持つ
                前提となる節や仮説の制約条件節も持つ

          (2) 要素
            afc   言語L等のタイプ=BLTC/DEFC/DEFP/ATOM/
                       HEAD/BLTP/FUNC
                       用途の区別
            llvc  変数の数
            llat  引数のタイプ=int/listint/str/liststr
                       数値、文字、
                       リストか否か
                       入力項目か出力項目か等
            llt   言語L等

          (3) 制御
            usell  言語L等の数

事実メモリー ------ expp:(struct texp ノ リスト)

          (1) 用途  オラクルからの知識で次のものがある
                MIS実行前に予め教えておく事実
                MIS実行中オラクルから得る事実
                MIS実行後、更に要求して得る事実
                いずれもStrue/Sfalseに属す

          (2) 要素
            tf   <a,V> の V つまり真偽
                Strue/Sfalseの所属区別でもある
            ext   <a,V> の a つまり観測文
            lrmn  この事実(Strueに属す)の実験で使われた
                偽でない仮説の番号のリスト
                hnp 中の lrmn を導出に使われた分集めたもの

          (3) 制御
            useexp 事実の数

仮説メモリー ------ lrmp:(struct tlrm ノ リスト)

          (1) 用途  もっぱら精密化により生成された仮説からなるが
                言語Lメモリーからの前提となる節や仮説の
                制約条件節もMIS実行前に与える。
                偽の仮説以外は精密化の対象でない

          (2) 要素
            fcond  0x01:ADDBODY ENABLE
            ftype  FINE TYPE 0-5
                0 : INIT(NULL CLAUSE())
                1 : MKHEAD
                2 : SUBSTT HEAD&BODY XI/XJ
                3 : SUBSTT HEAD&BODY XI/FY
                4 : ADDBODY
                5 : BINDBODY
                9 : GEN CLAUSE
            fmark  仮説の実験の結果判った真偽を持つが
                その他に用途で述べた区別を持たせている
                HOLD/FIN/IDLE/TRUE/FALSE
            cphbvc HEAD & BODY VAR COUNT
            cpodr  枝刈り優先順のオーダー(この順序は別記)
            cpt   仮説等

          (3) 制御  精密化による追加は生成順に後続させる
                実験には順にサーチし偽でない仮説を抽出する
                精密化すべき偽の仮説の取出は枝刈り優先順に
                従いこの順はオーダーに持つ
                Strueの実験後の毎にコンデンスする
            usec  fmarkがTRUE/IDLEの仮説の数
            usecp  仮説等数
            sizek  サイズk
            clsa  精密化すべき偽の仮説一つで文Aのこと
            sizea  文Aのサイズ
            useb  精密化(1)~(4)により生成した文Bの数

ホーンヒストリ ---- uhp:(struct tuh ノ リスト)

          (1) 用途  導出に使われたホーン節をユニファイ後の形で 
                持たせ、これにより逆導出が可能になる

          (2) 要素
            uht   ユニファイ後のホーン節

          (3) 制御
            g1はゴールヒストリを参照のこと
            g1は即ち uhtの数でもある


<unify> 1~ g1 の順にゴールヒストリの生成

(1)仮説メモリー中の偽でない仮説を抽出して実行メモリーに置く
(2)ゴールヒストリ中の現在のゴールを取出してカレントゴールに置く
(3)ユニファイ可能なホーン節を実行メモリーから選択する
(4)カレントゴールとユニファイ可能なホーン節とでユニファイの実行
(5)カレントゴールを取出してゴールヒストリ中の現在のゴールの位置に収める
(6)ユニファイ後のホーン節をホーンヒストリに収める
(7) g1 のインクリメント


<backtrace> g1 ~1 の順にゴールヒストリの置き換え(逆導出)

(1)ゴールヒストリ中の現在のゴールを取出してカレントゴールに置く
(2)対応するユニファイ後のホーン節をホーンヒストリから取出す 
(3)カレントゴールとユニファイ後のホーン節とで逆ユニファイの実行
(4)カレントゴールを取出してゴールヒストリ中の現在のゴールの位置に収める
(5) g1 のデクリメント

但し循環導出点の摘出があればユニファイループなので矛盾点追跡させない
逆導出については別記にもあるようにゴールヒストリ・ホーンヒストリと共に用いる
ことにより矛盾点追跡アルゴリズムが非常に簡単になる


<refinement>

fmark の遷移でもって説明する

(1)HOLD
         ・ 前提となる節や仮説の制約条件節

(2)NULL->IDLE
         ・ 精密化により生成された仮説候補

(3)IDLE->FIN
         ・ 同一節(variant を含む重複節)である仮説
          ある仮説がvariant として他の仮説に存在しているかの
          摘出の為に仮説生成時、変数の正規形付替を行っている
          例 q(Z,X):-p1(Y,Z),p2(X) は
            変数の正規形付替で
            q(X,Y):-p1(Z,X),p2(Y) となる
         ・ 同一のアトムを持つ仮説
          これは既約チェックの一部でもある!
          例 q:-p1,p2,p3,p2 における p2
         ・ その他

(4)IDLE->FALSE
         ・ 精密化(4)により生成した場合、生成時点で即マーク付け
          することにより確実に次のステップ以降で精密化の対象になる
         ・ 閉論理式でないものの一部
          ヘッド以外つまりボディに自由変項のみから成るアトムを持つ
          仮説
          例 q(X,Y):-p1(Z,X),p2(Y),p3(V,W) における p3
         ・ その他

(5)IDLE->TRUE
         ・ Strueの実験後、現時点で真とされた仮説

(6)TRUE->IDLE
         ・ Strueの実験前、現時点で真とされた仮説をリセットしIDLE
          の状態にする
          このことにより今度のStrueの実験では使われない仮説となる
          可能性のある現時点で真とされた仮説を固定せず帳消しできる
          但し変項のない事実節のような自明的な仮定節はリセットせず
         ・ 一応、真である仮説ではあるが冗長である仮説の可能性があり
          その為に精製アルゴリズムを用意してこれを排除することに
          した

                               以   上