Prover
- 6. Coqによる証明(1/3) – 例
•逆順にしたリストを返すreverse関数を定義する
•∀풍풊풔풕.풓풆풗풆풓풔풆풓풆풗풆풓풔풆풍풊풔풕=풍풊풔풕 を証明したい
- 14. ATPによる証明 – 特徴
•主に古典論理(命題論理、1階述語論理)に基づく
•高階論理では確立された自動証明アルゴリズムが存在しない
•帰納法を厳密に表せない . 퐏ퟎ∧∀풙푷풙→푷풙+ퟏ→∀풙푷(풙)
•全自動化されている
•人間が証明を書く必要はない
•導出原理を基礎とする証明
•述語論理に対しては「証明出来る場合」できると判定する計算手続き
•MP(モーダスポネンス)の一般化された推論規則
•ATPやPrologの基盤
•主に背理法による証明に使われる
•特定の論理式に対する効率的方法がある
•等式推論を行えない
- 15. 導出原理について(1/10)
•概要
•相補的になるリテラルを消去する手続き
•論理式を節の集合に直す必要がある
•導出原理は節集合に対する証明アルゴリズム
•任意の論理式は節集合(連言標準形)で表すことができる
•論理式の変形手順
1.論理結合子を 퐕 ,¬ , ∧ だけにする
2.否定を一番内側に移動する(リテラルにする)
3.冠頭形にする(量化部分と母式にわける)
4.スコーレム関数で量化子を消去
5.母式を連言標準形にする
6.選言部分(節)を取り出す
- 18. 導出原理について(4/10) – 単一化
•単一化
•適当な項の代入を求め同じリテラルとなるか調べる手続き
•代入が無い場合同じリテラルにすることはできない(失敗)
•リテラル푳ퟏと푳ퟐが相補的となる代入があれば導出が可能になる
•命題論理式の場合は項を持たないため必要ない(命題は0項述語)
•単一化アルゴリズム
2つのリテラル、 푳ퟏ= 횽풏(풔ퟏ,풔ퟐ,…,풔풏) 푳ퟐ=횽풏(흉ퟏ,흉ퟐ,…,흉풏)につ いて푬={풔ퟏ= 흉ퟏ ,풔ퟐ=흉ퟐ ,…,풔풏=흉풏}を考える。푬に次の操作を繰り 返し代入흈を求める。
- 19. 導出原理について(5/10) – 単一化
(A) 푬中の全ての等式の左辺が変項であり、どの等式の左辺の変項も何れの
等式の右辺の項中にも現れないとき、푬を흈として終了。(終了条件)
(B) 適当な等式 풆 ∈푬を1つ取り出し(※)풆の形で処理の場合を分ける
(以下、푿を変項、풕を適当な項とする)
1. 풇풔ퟏ,…,풔풎=풇(풕ퟏ,…,풕풎) の形の時 : 푬に풔ퟏ= 풕ퟏ ,…,풔풎= 풕풎を加える
2. 풇풔ퟏ,…,풔풎=품(풕ퟏ,…,풕풎) の形の時 : 関数記号が違うため単一化失敗
3. 푿=푿 の形の時: 何もしない
4. 푿=풕 の形の時 :
풊풇 풕中に푿が出現する → 単一化は失敗(出現検査を行う場合)
풐풕풉풆풓풘풊풔풆 → 푬の全ての等式に出現する푿を풕に置換し풆を푬に戻す。
5. 풕=푿の形の時 : 푿=풕 を푬 に追加する
(A)にもどる
(※ 푿=풕の形の풆を取り出す場合は푿は푬中の等式に出現していること)
- 20. 導出原理について(6/10) - 例1
• {푷,푷→푸} を前提として푸が証明されることを判定
•1. 푸の否定を前提の節集合に加える→ 푷,¬푷푽푸 ,¬푸
•2. 得られた節集合に導出を行う
•命題論理式の場合、冠頭形の変形や単一化は必要ない
•空節(矛盾□)が出たので前提から푸が証明される (背理法)
¬푃∨푄
푃
푄
¬푄
□
- 21. 導出原理について(7/10) - 手順
•節集合푺=푪ퟏ ,푪ퟐ ,…,푪풏の充足不可能性の判定
푪풊∶ 푳ퟏ 퐕 푪풊 ′ , 푪풋∶ 푴ퟏ 퐕 푪풋 ′ の時
푳ퟏ ,푴ퟏ について 単一化子흈が存在し相補的であれば、
푪풊흈から푳ퟏ흈を除いたものと、푪풋흈から푴ퟏ흈を除いたものを 選言で
接続した新しい節 푪풑∶ (푪′ 풊 퐕 푪′ 풋)흈を得る。
푪풑を푺に加え空節が導出されるまでこれを繰り返す。
•푺 ⊢ 푷 ↔ 푺 ∪¬푷 ⊢ であるから푷の証明可能性を判定できる。
- 22. 導出原理について(8/10) – 例2
•∀풙.푷 풙 →푸풇풙⊢ ∀풙.¬푷풙 퐕 ∃풚.푸(풚) を判定
•結論の否定を前提の集合に加えて節集合を求める
¬푷풙 퐕 푸풇풙 ,푷풔풄 ,¬푸풚
•導出を行い証明図(導出反駁木)を求める
•どの節を選び導出を行うかなどの戦略は様々ある
¬푷풙퐕 푸(풇(풙))
푷(풔풄)
흈=풙 →풔풄 푸(풇(풔풄))
¬푸(풚)
흈={풚 →풔풄} □
- 23. 導出原理について(9/10) – 等号推論
•等号推論ができない
•導出は特定の二項述語(等号)について特別な処理を行うことはない。
•(例) {=풂,풃,≠(풃,풂)}の充足不可能性を判定できない。
単一化子が無いため導出できない
•解決策
•同値律を公理として入れる
•Paramodulation(等号調整法)などで導出原理を拡張する
•等式推論の為の別のアルゴリズムを使う
- 24. 導出原理について(10/10) – 等号推論
•Paramodulationについて
節 푪풊∶ 푳ퟏ풕 퐕 푪풊 ′ , 푪풋∶ 풖=풔 퐕 푪′ 풋 の時
풕と풖について単一化子흈が存在すれば新しい節
푪풑∶ 푳ퟏ흈풔흈/풕흈 퐕 푪풊 ′흈 퐕 푪′ 풋흈 を得る。
(ただし はリテラル中の項の注目やスラッシュで置換
を表している.)
•例
푷풇풙,풙 , 풇풚=품풚,푪⊢푷(품풚,푪,풚)
- 28. 参考(1/2)
•型付ラムダ計算の体系の性質
http://logic.cs.tsukuba.ac.jp/~kam/lecture/complogic2012/8.pdf
•単純型付ラムダ計算とその論理
http://www.fos.kuis.kyoto-u.ac.jp/~igarashi/class/cal12w/stlc.pdf
•カリー=ハワード同型対応入門
http://ocw.kyoto-u.ac.jp/ja/frp7an/002- 006/pdf/curryhoward2.pdf/at_download/file
•計算体系と論理体系の関係
http://logic.cs.tsukuba.ac.jp/~kam/lecture/complogic2008/9.pdf
•JavaCardにおける形式的技法適用例
http://www.cs.gunma- u.ac.jp/~fujita/nagamiya080310_html/presentation060908.pdf
•定理証明支援系Coq入門
https://staff.aist.go.jp/reynald.affeldt/ssrcoq/coq-jssst2014.pdf
- 29. 参考(2/2)
•Krakatoa and Jessieを用いた、Javaプログラムの正当性&安全性証
http://qnighy.hatenablog.com/entry/2011/12/12/104640
•導出原理による定理証明
http://ci.nii.ac.jp/naid/110002761456
•単一化について
http://www.sic.shibaura-it.ac.jp/~sasano/lecture/proglang/2013/unify.pdf