状況計算は、動的な領域を表現し、推論するために設計された論理形式体系です。これは、 1963 年にジョン・マッカーシーによって初めて導入されました。 [ 1 ] [ 2 ]本稿で紹介する状況計算の主要バージョンは、 1991 年にレイ・ライターによって導入されたものに基づいています。続いて、マッカーシーの 1986 年バージョンと論理プログラミング定式化に関するセクションがあります。
状況計算は、変化するシナリオを一階述語論理式の集合として表現する。この計算の基本要素は以下のとおりである。
ドメインは、以下の数式によって形式化される。
実行例として、シンプルなロボットの世界をモデル化します。この世界には、1 体のロボットといくつかの無生物があります。世界はグリッドに従ってレイアウトされているため、位置は次のように指定できます。座標点。ロボットは世界中を移動し、物を拾ったり落としたりすることができます。ただし、ロボットが持ち上げるには重すぎる物や、落とすと壊れてしまうような壊れやすい物もあります。また、ロボットは手に持っている壊れた物を修理する機能も備えています。
状況計算の主要な要素は、アクション、フルーエント、および状況です。通常、世界の記述には多数のオブジェクトも関与します。状況計算は、アクション、状況、オブジェクトの3つのソートを持つソート済みドメインに基づいています。オブジェクトには、アクションでも状況でもないすべてのものが含まれます。各ソートの変数を使用できます。アクション、状況、オブジェクトはドメインの要素ですが、フルーエントは述語または関数としてモデル化されます。
アクションは一種のドメインを形成します。アクション型の変数や、結果がアクション型となる関数を使用できます。アクションは定量化できます。ロボットの世界の例では、可能なアクション用語は次のようになります。ロボットが新しい場所に移動する様子をモデル化する、 そしてロボットが物体oを拾い上げる様子をモデル化します。特別な述語Poss は、アクションが実行可能かどうかを示すために使用されます。
状況計算では、動的な世界は、その世界内で実行される様々な行動の結果として、一連の状況を経て進行していくものとしてモデル化されます。状況は、行動の発生履歴を表します。ここで説明するライター版の状況計算では、状況は状態を表すものではありません。これは、この用語の文字通りの意味や、マッカーシーとヘイズによる元の定義とは異なります。この点は、ライターによって次のように要約されています。
何らかの行動が行われる前の状況は、通常次のように表されます。そして、それを初期状態と呼びます。アクションの実行によって生じる新しい状態は、関数記号doを使用して表されます(他のいくつかの参考文献[ 4 ]ではresultも使用しています)。この関数記号は、引数として状態とアクションを受け取り、結果として状態を受け取ります。後者は、与えられた状態で与えられたアクションを実行した結果生じる状態です。
状況は状態ではなく一連の行動であるという事実は、次の公理によって裏付けられる。に等しいかつその場合に限りそして状況を状態と捉えるならば、この条件は意味をなさない。なぜなら、異なる状態で実行された2つの異なる行動が、同じ状態をもたらす可能性があるからである。
ロボットの世界の例で、ロボットの最初のアクションが場所へ移動することである場合最初のアクションはそして結果として生じる状況は次の行動がボールを拾うことであれば、結果として生じる状況は状況用語そしてこれは、実行された一連の動作を表すものであり、実行の結果として生じる状態を表すものではない。
真偽値が変化する可能性のある命題は、状況を最終引数として受け取る述語である関係流暢性によってモデル化されます。また、状況を最終引数として受け取り、状況に応じた値を返す関数である関数流暢性も可能です。流暢性は「世界の特性」と考えることができます。
この例では、流暢なロボットが特定の状況で特定の物体を運んでいることを示すために使用できます。ロボットが最初に何も運んでいない場合、偽である一方これは正しい。ロボットの位置は関数型流暢性を使用してモデル化できる。場所を返す特定の状況におけるロボットの挙動。
動的な世界の記述は、 3種類の式を用いて二階述語論理で符号化される。すなわち、行動に関する式(前提条件と結果)、世界の状態に関する式、および基礎となる公理である。
特定の状況では実行できないアクションもあります。たとえば、実際に持ち運んでいない限り、物を置くことはできません。アクションの実行に関する制約は、次の形式のリテラルによってモデル化されます。ここで、aはアクション、sは状況、Possはアクションの実行可能性を示す特別な二項述語です。この例では、物体を落とすことができるのは、それを運んでいるときだけであるという条件は、次のようにモデル化されます。
より複雑な例として、ロボットは一度に1つの物体しか運ぶことができず、また、一部の物体はロボットが持ち上げるには重すぎる(述語heavyで示される)というモデルを以下に示します。
ある状況においてある行動が可能であるならば、その行動が流暢な要素に及ぼす影響を明示する必要がある。これは効果公理によって行われる。例えば、物体を拾い上げるとロボットがそれを運ぶことになるという事実は、次のようにモデル化できる。
また、現在の状態に依存する効果である条件付き効果を指定することも可能です。以下のモデルは、一部のオブジェクトが壊れやすい(述語fragileで示される)こと、そしてそれらを落とすと壊れる(流暢なbrokenで示される)ことを示しています。
この式は行動の効果を正しく記述しているが、フレーム問題のため、論理的に行動を正しく記述するには不十分である。
上記の式は行動の効果を推論するのに適しているように見えるが、重大な弱点がある。それは、行動の非効果を導き出すことができない点である。例えば、物体を拾い上げた後、ロボットの位置が変化しないことを推論することはできない。これには、いわゆるフレーム公理、すなわち次のような式が必要となる。
フレーム公理を指定する必要性は、動的世界を公理化する際の課題として長らく認識されており、「フレーム問題」として知られています。一般的に、このような公理は非常に多数存在するため、設計者が必要なフレーム公理を省略したり、世界記述に変更を加えた際に適切な公理をすべて修正し忘れたりすることが非常に容易です。
後継状態公理は、状況計算におけるフレーム問題を「解決」します。この解決策によれば、設計者は、特定の流暢の値を変更できるすべての方法を効果公理として列挙する必要があります。流暢の値に影響を与える効果公理は、これは、正の効果と負の効果の公理として一般化された形で記述できる。
式状況sにおける行動aが、後続の状況において流暢なFを真にする条件を記述する。。 同じく、これは、状況sにおいて行動aを実行すると、後続の状況において流暢性Fが偽となる条件を説明するものである。
この2つの公理が、流暢な関数Fが値を変えるすべての方法を記述しているとすれば、それらは1つの公理として書き直すことができる。
言葉で表すと、この公式は「状況sにおいて行動aを実行できる場合、結果として生じる状況において流暢なFは真となる」というものである。sにおいてaを実行することでそれが真になる場合、またはsにおいてそれが真であり、 sにおいてaを実行してもそれが偽にならない場合に限る。
例えば、上で紹介した流暢な破綻の値は、次の後継状態公理によって与えられます。
初期状態やその他の状況の特性は、単に数式として記述することで指定できます。たとえば、初期状態に関する事実は、次のような主張を行うことで形式化されます。(これは状態ではなく状況です)。以下の記述は、ロボットが最初は何も持っておらず、ある場所にいることを示しています。破損した物はありません。
状況計算の基礎公理は、状況が履歴であるという考え方を形式化しています。また、状況に関する二次帰納法などの他の特性も含まれる。
回帰[ 5 ]は、状況計算における結果を証明するメカニズムである[ 6 ] 。これは、状況を含む式を表現することに基づいている。アクションaと状況sを含む式で、状況は含まないこの手順を繰り返すことで、初期状態S 0のみを含む同等の式が得られます。この式から結果を証明する方が、元の式から証明するよりも簡単だと考えられます。
GOLOGは状況計算に基づく論理プログラミング言語である。 [ 7 ] [ 8 ]
マッカーシーとヘイズによるオリジナルの状況計算と、今日使われている状況計算との主な違いは、状況の解釈にある。現代の状況計算では、状況とは一連の行動を指す。元々、状況は「ある瞬間の宇宙の完全な状態」と定義されていた。このような状況を完全に記述することは不可能であることは最初から明らかだった。その考え方は、状況についていくつかの記述を与え、そこから結果を導き出すというものだった。これは、状態が既知の事実の集合、つまり宇宙の不完全な記述である可能性がある流暢な計算のアプローチとも異なる。
状況計算のオリジナル版では、流暢性は実体化されていません。言い換えれば、変化する可能性のある条件は関数ではなく述語によって表されます。実際、マッカーシーとヘイズは流暢性を状況に依存する関数として定義しましたが、その後、流暢性を表すために常に述語を使用しました。たとえば、状況sにおいて場所xで雨が降っているという事実は、リテラルによって表されます。マッカーシーによる1986年版の状況計算では、関数フルーエントが使用される。例えば、状況sにおけるオブジェクトxの位置は、次の値で表される。ここで、位置は関数である。このような関数に関する記述は、等式を用いて表すことができる。これは、オブジェクトxの位置が2 つの状況sとで同じであることを意味します。。
アクションの実行は関数resultで表されます。状況sにおけるアクションaの実行は状況です。行動の効果は、状況における流暢さと状況における流暢さを関連付ける式によって表現される。例えば、ドアを開けるという動作によって、ロックされていない場合はドアが開いた状態になることは、次のように表されます。
述語lockedとopen は、それぞれドアが施錠されている状態と開いている状態を表します。これらの状態は変化する可能性があるため、状況引数を持つ述語で表されます。この式は、ある状況でドアが施錠されていない場合、定数opensで表される open アクションを実行した後にドアが開いている状態になることを示しています。
これらの公式は、もっともらしいと考えられるすべてのことを導き出すには不十分です。実際、異なる状況における流暢性は、それが行動の前提条件と結果である場合にのみ関連しています。流暢性が行動の影響を受けない場合、それが変化しなかったと推論する方法はありません。たとえば、上記の公式は、から続くこれは当然のことです(ドアを開けてもロックされるわけではありません)。慣性が成り立つためには、フレーム公理と呼ばれる公式が必要です。これらの公式は、行動の非効果をすべて規定します。
状況計算の元の定式化では、初期状況は、後に で表されます。は明示的に識別されていません。状況が世界の記述であるとみなされる場合、初期状況は必要ありません。たとえば、ドアが閉まっているがロックされておらず、ドアを開ける動作が実行されるシナリオを表すには、定数s を初期状況とみなし、それに関する記述 (例:変更後にドアが開いていることは、数式に反映されています。必然的に伴う。現代の状況計算のように、状況を行動の履歴とみなす場合、初期状況は行動の空列を表すため、初期状況が必要となる。
1986年にマッカーシーによって導入された状況計算のバージョンは、関数流暢性(例:は、状況sにおけるxの位置を表す用語であり、枠公理を置き換えるために限定を使用する試みです。
状況計算を論理プログラムとして記述することも可能である(例:Kowalski 1979、Apt and Bezem 1990、Shanahan 1997)。
ここで、Holdsはメタ述語であり、変数fは流暢なものの範囲をとります。述語Poss、Initiates、Terminate は、述語Poss、、 そしてそれぞれ。左矢印 ← は等価性 ↔ の半分です。残りの半分はプログラムの完成に暗黙的に含まれており、そこでは否定は失敗としての否定として解釈されます。帰納法の公理も暗黙的に含まれており、プログラムの特性を証明するためにのみ必要です。論理プログラムを実行するために通常使用されるメカニズムであるSLD 解決などの後方推論は、回帰を暗黙的に実装します。