充足可能性問題SAT (Satisfiability Problem)

Slides:



Advertisements
Similar presentations
一階述語論理 (first-order predicate logic) 一階述語論理入門 構文論(論理式の文 法) 意味論(論理式の解 釈) 認知システム論 知識と推論(4) 知識と論理でを組み合わせて問題を解決する.
Advertisements

人工知能特論2011 No.4 東京工科大学大学院 担当教員:亀田弘之.
人工知能特論2007 No.4 東京工科大学大学院 担当教員:亀田弘之.
第3回 論理式と論理代数 本講義のホームページ:
論理による 知識の表現と推論 (Knowledge Representation and Reasoning in Logic)
融合原理による推論 (resolution)
プログラミング言語としてのR 情報知能学科 白井 英俊.
節集合 (set of clauses) 認知システム論 知識と推論(5) 一階述語論理による知識表現の技法 節集合への変換
論理による 知識の表現と推論 (Knowledge Representation and Reasoning in Logic)
5.チューリングマシンと計算.
5.チューリングマシンと計算.
卒論キックオフ 2005/7/27 1G02P058-6 塚谷 修平.
充足不能性と導出原理 充足不能性の証明 スコーレム標準形 エルブラン解釈 導出原理 基礎節に対する導出 導出原理の完全性と健全性.
プログラミング言語論 第4回 式の構文、式の評価
論理式の表現を数学的に取り扱いやすくするために代数学の助けを借りる.
人工知能特論2011 資料No.6 東京工科大学大学院 担当教員 亀田弘之.
香川大学工学部 富永浩之 情報数学1 第5-2章 命題論理式の 同値変形とカルノー表 香川大学工学部 富永浩之
立命館大学 情報理工学部 知能情報学科 谷口忠大
人工知能特論2011 No.3 東京工科大学大学院 担当教員:亀田弘之.
条件式 (Conditional Expressions)
数理論理学 第1回 茨城大学工学部情報工学科 佐々木 稔.
9.NP完全問題とNP困難問題.
システム開発実験No.7        解 説       “論理式の簡略化方法”.
第4回 カルノー図による組合せ回路の簡単化 瀬戸 目標 ・AND-OR二段回路の実現コスト(面積、遅延)が出せる
エージェントアプローチ 人工知能 7章・8章 B4 片渕 08/07/18.
コンパイラ 2012年10月22日
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
数理論理学 第11回 茨城大学工学部情報工学科 佐々木 稔.
コンパイラ 2011年10月24日
命題論理 (Propositional Logic)
二分探索木によるサーチ.
第7回 条件による繰り返し.
計算の理論 II NP完全 月曜5校時 大月美佳 平成17年1月17日 佐賀大学理工学部知能情報システム学科.
述語論理と∀(全称)∃(存在) 3回の講義の概観: 命題論理 (真理値) (公理と推論規則) 述語論理 (モデルと解釈)
述語論理と∀(全称)∃(存在) 3回の講義の概観: 命題論理 (真理値) (公理と推論規則) 述語論理 (モデルと解釈)
第10回関数 Ⅱ (ローカル変数とスコープ).
アルゴリズムとプログラミング (Algorithms and Programming)
数理論理学 第3回 茨城大学工学部情報工学科 佐々木 稔.
第7回 条件による繰り返し.
第5回放送授業.
論理と推論 命題論理 推論 命題論理体系の健全性と完全性 構文と意味 → 同値関係と標準形(節形式) 決定問題と意味木 推論規則
論理プログラミング 導出の効率化 論理プログラム ホーン節 ホーン集合に対する導出戦略 論理式の手続き的解釈 Prolog
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
数理論理学 第12回 茨城大学工学部情報工学科 佐々木 稔.
コンパイラ 2011年10月20日
融合原理 (resolution) 人工知能 論理と推論(2) 論理的帰結 節形式 融合原理 知識を組み合わせて知識を生み出す
15.cons と種々のデータ構造.
  第3章 論理回路  コンピュータでは,データを2進数の0と1で表現している.この2つの値,すなわち,2値で扱われるデータを論理データという.論理データの計算・判断・記憶は論理回路により実現される.  コンピュータのハードウェアは,基本的に論理回路で作られている。              論理積回路.
文法と言語 ー文脈自由文法とLR構文解析ー
5.チューリングマシンと計算.
第7回  命題論理.
論理回路 第5回
述語論理式の構文と意味 一階述語論理式の構文 一階述語論理式の意味 述語,限量記号 自然言語文の述語論理式表現 解釈 妥当,充足不能
矛盾した知識 デフォルト推論 仮説を用いた推論 準無矛盾推論 デフォルト規則 デフォルト理論の拡張 → デフォルト証明 シナリオ
4.プッシュダウンオートマトンと 文脈自由文法の等価性
情報処理Ⅱ 2005年10月28日(金).
香川大学工学部 富永浩之 情報数学1 第5-2章 命題論理式の 同値変形とカルノー表 香川大学工学部 富永浩之
コンパイラ 2012年10月11日
PROGRAMMING IN HASKELL
情報数理Ⅱ 第10章 オートマトン 平成28年12月21日.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報処理Ⅱ 小テスト 2005年2月1日(火).
数理論理学 最終回 茨城大学工学部情報工学科 佐々木 稔.
情報処理Ⅱ 第3回 2004年10月19日(火).
情報処理Ⅱ 2006年10月27日(金).
立命館大学 情報理工学部 知能情報学科 谷口忠大
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
練習問題.
練習問題.
Presentation transcript:

充足可能性問題SAT (Satisfiability Problem) 認知システム論 知識と推論(2) 知識と論理で問題を解決する 充足可能性問題SAT (Satisfiability Problem)  節と連言標準形  Davis-Putnumのアルゴリズム  ある命題が与えられた知識ベースの論理的帰結かどうかは,演繹(えんえき)定理によって,知識ベースに命題の否定を追加してできる論理式が充足不能かどうかに帰着する.そして,充足不能性の判定は,ちょうどその裏の概念である充足可能性の判定に帰着する.論理式の命題論理式が充足可能かどうかを判定する問題は,充足可能性問題(SAT)と呼ばれており,コンピュータサイエンスや人工知能において重要な役割を果たしている.今回はSATの正確な定義およびそれを解くアルゴリズムを学ぶ.  まず,論理式を連言標準形という簡単な形に変形し,節と呼ばれる簡単な論理式の集合によって表現する方法を学ぶ.そして,節集合として与えられた論理式が充足可能かどうかを判定する Davis-Putnum のアルゴリズムを学ぶ.

復習:命題論理の論理式 論理式 論理定数 は論理式である. true false 命題記号 は論理式である. 論理式: 原始命題を論理記号でつないだ文. 論理式 論理定数 は論理式である. true false 命題記号 は論理式である. が論理式ならば,       は論理式である. が論理式ならば,以下の4つも論理式である.

復習:論理式の解釈と意味 T F P Q P→Q P∨Q P∧Q Q P « 命題変数 p,q,.. の解釈を決めると,他の論理式の解釈は: true の値はT(真), false の値はF(偽)         の値は  の値の逆.  の値は,以下の真理値表に基づいて決める. T F P  Q P→Q P∨Q P∧Q Q P «

復習:恒真,充足不能,充足可能 恒真 どんな解釈のもとでも真 例 充足不能 どんな解釈のもとでも偽 例 充足可能 ある解釈のもとで真 恒真 どんな解釈のもとでも真 例 充足不能 どんな解釈のもとでも偽 例 充足可能 ある解釈のもとで真 本日の主役! 例 本日の主役! 充足不能 充足可能 恒真

復習:論理的帰結 論理的帰結  のすべてを真とするどんな解釈のもとでも が真 の論理的帰結  は が恒真 本日の主役! が充足不能

節と連言標準形

リテラル,節,連言標準形 リテラル 命題記号 はリテラルである. 正リテラル 命題記号 はリテラルである. 負リテラル 節 Literal リテラル 命題記号 はリテラルである. 正リテラル   命題記号 はリテラルである. 負リテラル Clause 節 リテラルの選言(orで結合したもの) Conjunctive Normal Form 連言標準形(CNF)  1個の命題記号そのもの,または,その否定をリテラルという.とくに,前者を正リテラル,後者を負リテラルという.  リテラルの選言(orで結合したもの)を節という.  節の連言(andで結合したもの)を連言標準形(CNF)という.  したがって,CNFでは最も外側では and 記号が現れて節を結合しており,各節の内部では or 記号がリテラルを結合し,リテラルの内部では not 記号が現れるというように,and, or, not が整然とした入れ子構造の中に配置されている.論理式をこのような単純な形にすることによって,それを処理するさまざまなアルゴリズムを簡潔に記述することができる. 節の連言(andで結合したもの)

連言標準形(CNF)への変換 どんな論理式も以下の変換ルール(左辺を右辺に書換え)で 等価なCNFに変換できる. CNFへの変換 1 2 3 4 ド・モルガンの法則 5  論理式の形はかなり複雑なものになり得るが,その意味(真偽値)を変えることなく,それをCNFに変換できる.  論理式をCNFに変換する方法は機械的である.このスライドに示されている6つの等式を用い,論理式の中にいずれかの等式の左辺に合致する部分があったら,それを対応する右辺に書き換える.そのような書換えを可能なだけ繰り返し,もうそれ以上書き換えられなくなったら,そのときの論理式はCNFになっている.  1つめの等式を使えば,同値記号を除去できる.  2つめの等式を使えば,含意記号→を除去できる.  この時点で論理記号は,not, and, or だけとなる.  つぎに,4つめと5つめの等式(ド・モルガンの法則)を使うと,カッコ内のandやorを(orやandに)反転させながら外側に出し,notを論理式の内部に移動させることができる.notを最も内側まで移動すると,命題変数の直前にnotがついたもの,すなわち,リテラルができてくる.   3つめの等式は,その途中でnot が連続した場合には,連続した2個を除去するものである.   6つめの等式は,andがカッコの内側にあって, orがその外側にあるとき,分配則を適用して,orを内側にし,andを外側にするものである.これを繰り返すとすべてのandが最も外側に来て,その内側はorによりリテラルを結合したもの,すなわち,節となる. 分配則 6

CNFへの変換 例 CNF したがって,つぎの2つの節が得られる. 節集合  これがその例題.最初に与えられた論理式がどの等式によって書き換えられているかを確認してほしい.  CNFに含まれる節の集合を節集合という.節集合に含まれる節は,暗黙裏に,andで結合されているので,すべてが「真」であると解釈される.人工知能の応用において,多くの場合,知識ベースは節集合としてモデル化されている. 節集合

節と if-then ルール 節 は if-then ルールに対応する. 正リテラル は 結論 の OR 負リテラル は 条件 の AND  「恒真」を説明したスライドで確認したように,節 ¬p∨q は,節 p→qと等価である.  一般に,どのような節も,「もし○○かつ○○ならば,××または××である」というような if-then ルールというものと等価なものである.  節は正リテラルと負リテラルを∨(or)で結合した論理式であるが,その中の負リテラルの否定記号(¬)を取り外したものが, if-then ルールの条件部(もし○○かつ○○ならば)にきて,それらがすべて∧(and)で結合される.  一方,節の中のすべての正リテラルは∨(or)で結合されたままif-then ルールの結論部( ××または××である)になる.

節と if-then ルール(特殊ケース) true は∧(and)の単位元: ⇒ n=0 のとき: false は∨(or)の単位元:  特殊ケースとして,節の中に負リテラルが1つもなければ, if-then ルールの条件部は true とする.また,節の中に正リテラルが1つもなければ, if-then ルールの結論部は false とする.  その根拠は,and の単位元はtrue,or の単位元はfalse であることに基づく.andで結合されたn個の論理式には,暗黙に true も結合されていると考えてよい.したがって,n=0のとき,その論理式は true である.また, orで結合されたn個の論理式には,暗黙に false も結合されていると考えてよい.したがって,n=0のとき,その論理式は false である.  最後に,節が1つもリテラルを含まないものを空節というが,これはいまの約束を使えば,true → false (つまり,真ならば偽)となり,常に偽である論理式,あるいは,矛盾であることを表す論理式である.  このような if-then ルールは,知識を論理的に表現するための言語の基本的な構文として使われることが多い. (空節は矛盾を表す)

休憩

Davis-Putnumのアルゴリズム

Davis-Putnam のアルゴリズム(DPLL) 【入力】 節集合S (CNFの命題論理式) 【出力】 Sの充足可能性を有限時間で判定する. 充足可能ならば true を返す. 充足不能ならば false を返す. 【手順】 以下の3つのヒューリスティクスを用いて探索木の枝刈りをしながら,Sを充足する解釈(モデル)をバックトラック法で網羅的に探索する. 早期の停止判定ヒューリスティクス 純リテラルヒューリスティクス 単位節ヒューリスティクス  Davis, Putnam, Logemann, Loveland によって開発された充足可能性判定アルゴリズム DPLL を学ぶ.  このアルゴリズムの入力,出力,および手順の概略はスライドにかかれているとおりである.

入力形式の例 変数の数 x1,…,x100 変数の数 x1,…,x100 節の数 100 427 -71 -64 24 0 100 427 -71 -64 24 0 41 -93 -54 0 73 81 54 0 -37 -32 73 0 -69 -39 -8 0 70 80 29 0 4 69 37 0 …………………. ¬X71∨¬X64∨X24  具体的には,入力はこのスライドのようなファイルに記述されていると考えるとよい.

分岐規則(バックトラック法による探索) 節集合 S 中の変数シンボルを L とする. S が充足可能 L = true に割り当てた場合 L = false に割り当てた場合 のいずれかが充足可能  アルゴリズムの基本は,制約充足のところで学んだバックトラック法である.ある変数シンボル L に着目し,それを trueとするケースとfalseとするケースに分岐して探索する.  すなわち,まず,それを true とするすべての解釈を探索し,すべての節を真にする解釈を1つでも見つけることができれば充足可能であることを示すのに成功したことになる.  それに失敗した場合は,Lをfalseとするすべての解釈を探索し,すべての節を真にする解釈を1つでも見つけることができれば充足可能であることを示すのに成功したことになる.それにも失敗した場合は,充足不能である. バックトラック法で探索

早期の停止判定ヒューリスティクス = false リテラルが1つでも true である節は true true 節が1つでも false である節集合は false falseのリテラルは削除する = false false  バックトラック法は,逐次的に変数シンボルに真または偽を割り当てていく.しかし,すべての変数に値を割り当てる前にも,つぎのようなことがわかるので,探索木の枝刈りなどに活用することができる.  - リテラルが1つでも真である節は,真である.(節はリテラルを or で結合しているので.)  逆に,リテラルが全部偽である節は偽であるが,その場合には,その節を含む節集合全体が偽となる.  - 節が1つでも偽である節集合は,偽である.(節集合は節を and で結合しているので.)

純シンボルヒューリスティクス(1/2) 純シンボル=同じ符号(正/負)でしか現れない変数シンボル 正の純シンボル 負の純シンボル A = true とする 負の純シンボル B = false とする  同じ符号(正/負)でしか現れない変数シンボルを純シンボル(pure symbol)という.  正のリテラルとして現れる純シンボルには「真」を割り当てればよく,「偽」を割り当てる探索は不要であることが知られている.(「真」を割り当てた方が充足しやすい.「偽」を割り当てても充足しやすくなることはない.)  同様に,負のリテラルとして現れる純シンボルには「偽」を割り当てればよく,「真」を割り当てる探索は不要である. 充足性判定のためには,純シンボルが true になるような 値の割り当てだけを考慮すれば十分である.

純シンボルヒューリスティクス(2/2) アルゴリズムは,すでに true である節を無視する true 負の純シンボル A = false とする 正の純シンボル C = true とする  DPLLアルゴリズムでは,「偽」を割り当てたリテラルや「真」となった節を,あたかも削除したかのように無視する.(「偽」が or の単位元,「真」が and の単位元であることによる.)  したがって,このスライドの例のように,もともと AとC は純シンボルではないのだが,Bに偽を割り当てた後は,1つめの節は真なので,それが削除されたかのように無視すると,AとC は純リテラルということになる.

単位節ヒューリスティクス 単位節=1つのリテラルだけからなる節 DPLLアルゴリズムでの単位節の定義: 1つのリテラル以外にすべて false が割り当てられた節 単位節 C = true とする  A や ¬B のように,1つのリテラルだけからなる節を単位節(unit clause)という.  DPLLアルゴリズムでは,この定義をやや拡張して用い,1つのリテラル以外にすべて false が割り当てられた節を単位節という.これは1つ前のスライドで述べたように,「偽」であるリテラルは節から削除されたかのように無視すると思えば,もともとの定義と一致することから,その意味が理解できるでしょう.  単位節があったら,そこに含まれる唯一のリテラルが「真」となるように変数シンボルに真偽を割り当てればよいことは自明でしょう.このスライドの例では,A=true, B=false を割り当てたとき,¬A∨B∨C は単位節(C)となるので,C=trueとする. 充足性判定のためには,単位節を構成するリテラルが true になるような値の割り当てだけを考慮すれば十分である.

単位節伝播(unit propagation) 単位節ヒューリスティクスによってリテラルの値を決めると, さらに単位節が生じて,単位節ヒューリスティクスを連続的に使用できることがある. true true true  最初は単位節でなくても,単位節ヒューリスティクスによってリテラルの値を決めると,さらに単位節が生じて,単位節ヒューリスティクスを連続的に使用できることがある.このスライドの例では,もともとは単位節は1つもないのだが,いったんA=true という値を割り当てると,¬A∨B が単位節(B)となり,B=true となる.これがつぎつぎと他の節に波及して,C=false, D=true となる.これは制約充足で学んだ「制約伝播」に相当するもので,単位節伝播(unit propagation)と呼ばれている.

DPLLアルゴリズムのメインプログラム 節集合 変数シンボルの集合 boolean DPLLmain (S, V) { return DPLL (S, V, [ ] ); } 変数シンボルへの 空の割り当て  DPLLアルゴリズムの中心は,DPLLという再帰的関数である.メインプログラムでは,節集合S,すべての変数シンボルの集合V,および空の解釈(どの変数シンボルにも値を割り当てていない)を引数としてDPLLを呼び出している.

変数シンボルへの 真偽値の割り当て (解釈) DPLLアルゴリズム 節集合 変数シンボルの集合 boolean DPLL (S, V, I) { if (すべての節が真) return true if (ある節が偽) return false p, value ← 純シンボルとその値を探す if (p≠null) return DPLL(S, V-{p}, extend(p, value, I)) p, value ← 単位節を探す p ←Vのうちの1つのシンボル return DPLL (S, V-{p}, extend(p, true, I)) or DPLL (S, V-{p}, extend(p, false, I)) } 変数シンボルへの 真偽値の割り当て (解釈) 割当て (p = value) を I に追加  再帰関数 DPLL は,3つの引数S,V,I を受け取る.  S は節集合である.再帰呼び出しをしてもそのまま第1引数として引き継がれる普遍的なデータである.  V は変数シンボルの集合である.ある変数pに真偽値を設定して再帰呼び出しするときに,Vからpが除去されたものを第2引数として渡す.  I はこれまで設定した解釈(変数シンボルへの真偽値の割り当て)である.DPLLを再帰的に呼び出すときには,ある変数シンボル p に適切な真偽値 value を割り当てることによって,I を拡張したものを第3引数として渡す.  DPLLは,解釈 I をさらに拡張することによってSを真にすることにできれば trueを返す.逆に,解釈 I をどのように拡張してもSを真にすることができないときは false を返す.  アルゴリズムの内容はこれまで概説したとおりである.  現在の解釈 I のもとですべての節が真ならば,適切な解釈を見つけたことになり,Sは充足可能であるので,DPLLは true を返す.  現在の解釈 I のもとである節が偽ならば,I をどう拡張しても S は偽なので,DPLLは falseを返す.  つぎに,純シンボルヒューリスティクスを適用する.純シンボルpが存在するならば,純シンボルヒューリスティクスによって定まるその真偽値をvalueとし,p=value を追加することによって解釈 I を拡張し,DPLLを再帰呼び出しする.  純シンボルが存在しなければ,単位節ヒューリスティクスを適用する.単位節pが存在するならば,単位節ヒューリスティクスによって定まるその真偽値をvalueとし, p=value を追加することによって解釈 I を拡張し,DPLLを再帰呼び出しする.  純シンボルも単位節も存在しなければ,探索木を探索する.あるシンボルpを選び,まずそれに真を割り当て,p=trueを追加することによって解釈 I を拡張し,再帰呼び出しをする.その戻り値が true なら,p=true という割り当てが成功してSのすべての節を真とすることができたことになるので,その戻り値 trueをそのまま返す.再帰呼び出しの戻り値が falseなら,プログラミング言語の or の機能によって,こんどはpに偽を割り当て, p=falseを追加することによって解釈 I を拡張し,再帰呼び出しする.そこからの戻り値が true/false のいずれであれ,それが最終的にこの関数からの戻り値になる.  プログラミング上のコメント:上記のような制御は2つのDPLL呼び出しを結合している or によってなされている.一般に,P or Q (CやJavaでは,P || Q)は,逐次的ORと呼ばれており,必ずしもPとQの両方を実行するわけではない.Pがtrueならば,Qを実行せずにtrueを返し,Pがfalseならば,Qを実行してその値を返す.

例題 魔宮の世界(1/2) 背景知識 (1,2) にモンスターがいるなら,(1,1) で異臭を感じる 例題 魔宮の世界(1/2) 背景知識 (1,2) にモンスターがいるなら,(1,1) で異臭を感じる (1,2) に落とし穴があるなら,(1,1) で風を感じる (1,2) にモンスターも落とし穴もないなら,(1,2) はOK 事実 質問 (1,1) で異臭を感じない (1,2) はOKか?  前回学んだ魔宮の世界の例題の一部についての例題である.  背景知識に含まれる3つの if-then ルールを節として表現したものを(1),(2),(3)とする.  事実を表す(4),(5)はすでに節(単位節)となっている.  調べたいことは(1,2)が安全であること,すなわち,OK12が(1)-(5)の論理的帰結であることである.それを確認するために,その否定(6)を付け加えて,(1)-(6)が全体として充足不能であることを調べることとする. (1,1) で風を感じない

例題 魔宮の世界(2/2) true true false true true true 単位節(4) S11=false 例題 魔宮の世界(2/2) true true false true true true 単位節(4) S11=false 単位節(1) M12=false  このスライドで示されているように,この例題の場合,分岐によるバックトラックすることなしに,(1)-(6)が充足不能であることを確認することができる.ゆえに,演繹定理より,OK12 は背景知識と事実の論理的帰結である. 単位節(5) B11=false 単位節(2) P12=false 単位節(6) OK12=false 空節(3) 充足不能 この例題の場合,分岐によるバックトラックは不要であった.