コンテンツへスキップ
Topos Uranos

要約

意味論は、真理値表全体をたどらずに充足不能性を判定する方法を約束した。この課はその主要なものを与える。論理式の集合は節の集合として書かれ、各節はリテラルの有限集合である。そのために連言標準形を用いるか、その指数的な増大を避けるために、新しい変数をもつ定義節を用いる。定義節は充足可能性を保つ。節の上ではただ一つの規則、融合規則が働く。あるリテラルを含む節とその反対のリテラルを含む節から、その対を除いた両者の和集合が推論される。反駁とは空節に到達する生成列である。健全性(反駁があれば、その集合は充足不能である)は生成列の長さに関する帰納法で、反駁完全性(有限集合が充足不能ならば、反駁がある)は変数の個数に関する帰納法で、変数を一つずつ消去しながら証明される。コンパクト性定理によって、完全性は無限集合に拡張される。そこから帰結を判定する方法が得られ、真理値表と比較される。また充足可能性問題を紹介し、すばやく判定できる二つの場合、ホーン節と二リテラルの節を示す。

学習目標

  1. 論理式の集合を、連言標準形によって、または新しい変数をもつ定義節によって、節の集合として表し、その表現が充足可能性と帰結を保つことを正当化する。
  2. 融合法による反駁を構成し、それを用いて帰結と充足不能性を判定する。その際、一歩で二つの相補対を消去するといった典型的な誤りを犯さない。
  3. 融合法の健全性を生成列の長さに関する帰納法で、その反駁完全性を変数の消去によって証明し、コンパクト性定理によってそれを無限集合に拡張する。
  4. 充足可能性問題、その既知のコスト、およびすばやく判定できる場合(ホーン節と二リテラルの節)を説明し、融合法を真理値表と比較する。

命題論理の意味論の課は、妥当性と充足可能性が真理値表によって決定可能であることを示した。そのコストは変数が一つ増えるごとに二倍になる。そして真理値表全体をたどる必要のない方法を予告した。意味論的帰結と同値の課は、あらゆる帰結を充足不能性に帰着させた。Γ⊨φ\Gamma \models \varphi であるのは、Γ∪{¬φ}\Gamma \cup \{\neg\varphi\} が充足不能であるとき、かつそのときに限る。標準形の課とそのアルゴリズムの課は、あらゆる論理式に連言形を与えた。その妥当性は一目でわかるが、充足可能性はわからない。そうであるならば、節の連言の充足不能性を、節そのものの上で操作して判定する手続きが欠けている。その手続きが融合法である。これはジョン・アラン・ロビンソンが 1965 年に、マーティン・デイヴィスとヒラリー・パトナム(1960)の着想をもとに提案したものであり、今日、数百万の変数をもつ論理式の充足可能性を判定するプログラムの中核である。演繹の単元の体系(その意味論との関係は健全性と完全性の課とコンパクト性定理の課が調べる)とは異なり、融合法は結論を演繹しない。集合を反駁するのである。この課は、融合法がそれを健全かつ完全に行うことを証明する。

これまでの課と同様に、pp、qq、rr、ss、tt は変数 v1v_1 から v5v_5 を表す。添字のない文字 vv、および ww は付値を表す。V(φ)V(\varphi) は φ\varphi の変数の集合である。

節と節の集合

標準形の課を思い出そう。リテラルとは変数または変数の否定であり、リテラル ℓ\ell の反対は ℓ∗\ell^{*} と書かれ、同じ変数で符号が逆のリテラルである。互いに反対の二つのリテラルは相補対をなす。リテラルの否定の補題により、v(ℓ∗)=1−v(ℓ)v(\ell^{*}) = 1 - v(\ell) がすべての付値 vv について成り立つ。そこでは節はリテラルの選言であった。ここでは、値を変えない順序と繰り返しを忘れ、集合だけを残すのがよい。

節とはリテラルの有限集合である。リテラルをもたない節は空節と呼ばれ、□\Box と書かれる。付値 vv が節 CC を充足するとは(v⊨Cv \models C と書く)、CC のあるリテラルが値 11 をとる(vv において)ことをいう。そうでなければ、vv はそれを反駁する。リテラルを一つだけもつ節は単位節と呼ばれる。節の変数は集合 V(C)V(C) をなす。節の集合 SS の変数は集合 V(S)V(S) をなし、これは前者の和集合である。付値が節の集合 SS を充足するとは(v⊨Sv \models S)、そのすべての節を充足することをいう。SS は、ある付値がそれを充足するとき充足可能であり、そうでないとき充足不能である。最後に、SS が節の集合で CC が節であるとき、S⊨CS \models C は、SS を充足するすべての付値が CC を充足することを意味する。

v⊨C  ⇔  (∃ℓ∈C)  v(ℓ)=1,v⊨S  ⇔  (∀C∈S)  v⊨Cv \models C \;\Leftrightarrow\; (\exists \ell \in C)\; v(\ell) = 1, \qquad v \models S \;\Leftrightarrow\; (\forall C \in S)\; v \models C

定義から二つの極端な場合が従い、それを確認しておくのがよい。空節はリテラルをもたない。したがって、そのどのリテラルも 11 をとらず、どの付値もそれを充足しない。□\Box は充足不能であり、それを含むすべての集合もそうである。これに対して、節の空集合には充足すべき節がなく、すべての付値がそれを充足する。両者を混同してはならない。{□}\{\Box\} は充足不能であり、∅\emptyset はすべての付値によって充足される。

補題節とその選言

C={ℓ1,…,ℓk}C = \{\ell_1, \ldots, \ell_k\} を空でない節とし、そのリテラルを任意の順序で、繰り返さずに書く。すべての付値 vv について、v⊨Cv \models C であるのは v(⋁j=1kℓj)=1v\left( \bigvee_{j=1}^{k} \ell_j \right) = 1 であるとき、かつそのときに限る。特に、CC のリテラルのすべての選言は、任意の順序でも繰り返しがあっても、互いに同値である。さらに、CC がすべての付値によって充足されるのは、それが相補対を含むとき、かつそのときに限る。

証明

  1. v(⋁j=1kℓj)=1  ⇔  (∃j≤k)  v(ℓj)=1v\left( \bigvee_{j=1}^{k} \ell_j \right) = 1 \;\Leftrightarrow\; (\exists j \leq k)\; v(\ell_j) = 1

    nn 個の論理式の選言の値の補題(一般化されたド・モルガンの法則と分配法則の課で証明した)により、選言が値 11 をとるのは、その項のいずれかが値 11 をとるとき、かつそのときに限る。

  2. v(⋁j=1kℓj)=1  ⇔  v⊨Cv\left( \bigvee_{j=1}^{k} \ell_j \right) = 1 \;\Leftrightarrow\; \resaltar{v \models C}

    ある ℓj\ell_j が値 11 をとるとは、CC のあるリテラルが値 11 をとること、すなわち vv が CC を充足することである。この条件は順序にも繰り返しにもよらない。どのリテラルがあるかだけを問うからである。

  3. (∀v)  v⊨C  ⇔  (∃ℓ)  ℓ∈C,  ℓ∗∈C(\forall v)\; v \models C \;\Leftrightarrow\; (\exists \ell)\; \ell \in C, \; \ell^{*} \in C

    基本連言と節の補題(標準形の課)により、リテラルの選言が妥当であるのは、それが相補対を含むとき、かつそのときに限る。前述のことにより、同じことが CC についても成り立つ。

相補対を含む節は恒真な節と呼ばれる。それは何の条件も課さず、どの集合からもそのモデルを変えずに取り除くことができる。節を集合として書くのは記法の気まぐれではない。(p∨q)(p \vee q) と (p∨¬q)(p \vee \neg q) から pp を得たいとき、選言は (p∨p)(p \vee p) を与え、これは pp と同値であるが同じ論理式ではない。集合では {p}∪{p}={p}\{p\} \cup \{p\} = \{p\} となり、繰り返されたリテラルの融合はひとりでに起こる。

例節の集合を充足する

S={{p,q},{¬p,r},{¬q}}S = \{ \{p, q\}, \{\neg p, r\}, \{\neg q\} \} とする。節 {¬q}\{\neg q\} は v(q)=0v(q) = 0 を要求する。すると {p,q}\{p, q\} は v(p)=1v(p) = 1 を要求し、すると {¬p,r}\{\neg p, r\} は v(r)=1v(r) = 1 を要求する。値 11 を pp と rr に与え、値 00 を他の変数に与える付値は SS を充足し、それが V(S)={p,q,r}V(S) = \{p, q, r\} 上での唯一の可能性である。節 {¬r}\{\neg r\} を加えると、拡大した集合を充足する付値はない。それは充足不能である。たとえ □\Box を含まなくとも。

v(q)=0  ⇒  v(p)=1  ⇒  v(r)=1v(q) = 0 \;\Rightarrow\; v(p) = 1 \;\Rightarrow\; v(r) = 1