220 likes | 653 Views
論理プログラミング. 導出の効率化 ホーン節 ホーン集合に対する導出戦略 論理プログラム 論理式の手続き的解釈 Prolog カット・オペレータ 閉世界仮説に基づく否定表現. 節の新しい表記法. 節:. 負のリテラル. 正のリテラル. ホーン節. ホーン節( Horn clause ). 確定節. ゴール節. ホーン節に対する導出戦略. SLD ( Selective Linear Resolution for Definite Clause ) (1)ゴール節を一方の親節とする. (2)ゴール節の最左端のリテラルに着目した導出を行う.
E N D
論理プログラミング • 導出の効率化 • ホーン節 • ホーン集合に対する導出戦略 • 論理プログラム • 論理式の手続き的解釈 • Prolog • カット・オペレータ • 閉世界仮説に基づく否定表現
節の新しい表記法 • 節: 負のリテラル 正のリテラル ホーン節
ホーン節(Horn clause) 確定節 ゴール節
ホーン節に対する導出戦略 • SLD(Selective Linear Resolution for Definite Clause) (1)ゴール節を一方の親節とする. (2)ゴール節の最左端のリテラルに着目した導出を行う. (3)得られたゴール節を次の導出の一方の親節とする.
SLDは後向き推論である 後向き推論 ホーン節集合: 肯定式 肯定式
を証明するには 論理式の手続き的解釈 を証明すればよい ホーン節は証明の手続きを表していると解釈できる を実行するには, を実行すればよい
論理プログラム • Prolog 頭部(head) プログラム(確定節) 本体(body) 質問(ゴール節) インタプリタ(SLD導出)
Prologの基本動作 • 実行の成功 評価(SLD導出)の順序 (1) 成功 (2) (3) を直接評価した結果が真
例 節の選択は上から下へ 評価は左から右へ
バックトラックの例 スタック 失敗
実行の失敗とは b d • 単一化可能な頭部をもつ節がない. • 単一化可能な頭部をもつ節のすべてが本体の実行に失敗した. • 述語の評価が偽である. • バックトラックで再評価したとき別の選択肢がない. b a
バックトラックの制御 • カット・オペレータ(!) • 引数を持たない述語 • 実行時バックトラック用の選択肢情報を棄却 スタック
バックトラックの制御 • カット・オペレータ(!) • 引数を持たない述語 • 実行時バックトラック用の選択肢情報を棄却 スタック 成功
バックトラックの制御 • カット・オペレータ(!) • 引数を持たない述語 • 実行時バックトラック用の選択肢情報を棄却 スタック
バックトラックの制御 • カット・オペレータ(!) • 引数を持たない述語 • 実行時バックトラック用の選択肢情報を棄却 スタック 失敗
バックトラックの制御 • カット・オペレータ(!) • 引数を持たない述語 • 実行時バックトラック用の選択肢情報を棄却 失敗 スタック
カット・オペレータを用いた制御構造 • 条件分岐 • 繰り返し
例 • 好きなものは赤いりんごかみかんである. YES YES りんご? 赤い? NO NO YES 好きである みかん? NO 好きでない
成功 は失敗 である の実行 失敗 は成功 でない 失敗による否定 • 否定の導入
閉世界仮説 • 失敗による否定は閉世界仮説に基づく 真なる事柄は すべて表示されている 失敗 閉世界仮説
失敗による否定 論理的否定 誤解 質問: 「P(x) の実行に失敗する」? 「Pである xは存在しない」? ゴール節:
例 太郎が嫌いなものは何か? 失敗 好きなものがある 太郎は嫌いなものはない(すべて好き) ? 太郎は桃が嫌い(閉世界仮説より) 失敗 誤解を招かない質問