SlideShare a Scribd company logo
1 of 29
Download to read offline
2014-10-31 尾崎勝義 
定理証明系の話
イントロ 
•自己紹介/興味関心 
•コンピュータネットワークを学ぶ大学3年 
•ソフトウェアの形式的検証 
•検索エンジンや推薦システム 
•スライドの目的 
•定理証明系の雰囲気を伝える 
•古典的ATPの仕組みについて
定理証明系とは 
•数学の定理を証明する 
•四色定理の証明にCoqが使われた 
•ケプラーの最密充填の証明にIsabelleが使われた 
•プログラムの正当性の検証 
•例: CompCert,JavaCard,…etc 
•他の形式手法より強力な検証系 
•コンピュータプログラムと証明の一致による
定理証明系(形式手法)の必要性 
•仕様通りであることを証明できる 
•ミドルウェアやミッションクリティカルなソフトウェアの バグは致命的。(言語処理系 , 暗号化ライブラリ , … etc ) 
•バグが存在しないことはテストでは検証できない 
•四色定理の証明は支援系無しでは成し得なかった 
•純粋に数学の定理証明における強力なツール
定理証明系の種類 
•以下のように大別される(他にもある) 
•基づく論理体系の違いにより証明アルゴリズムが違う 
自動定理証明系(ATP) 
定理証明支援系(ITP,PA) 
•証明したい命題を入力し計算 機に全自動で証明を見つけさ せる。 
•証明を人間が書き、そこに誤り が 無いことをPAに証明させる。 
Otter,Prover9,E,VampireACL2(Lisp製)…etc 
Coq,Agda,Isabelle,…etc
Coqによる証明(1/3) – 例 
•逆順にしたリストを返すreverse関数を定義する 
•∀풍풊풔풕.풓풆풗풆풓풔풆풓풆풗풆풓풔풆풍풊풔풕=풍풊풔풕 を証明したい
Coqによる証明(2/3) – 例
Coqによる証明(3/3) 
•コマンド(タクティック)を対話的に入力し証明する 
•証明のついたプログラムは別言語に出力可能 
•Ocaml , Haskell , Scheme , Ruby,Scala 
•プログラムに対して証明は一般に長くなる 
•証明を書くには論理学の知識 + Coqの扱いに慣れる 必要あり 
→ 現実的なソフトウェアの検証にはコストが高い
プログラムと証明の一致?(1/4) 
•形式的証明とは 
•適当な論理体系(古典論理,直観論理,様相論理,…etc)を対象に作 られた証明の枠組み(NK,NJ,LK,LJ…etc) 
•型付ラムダ計算(プログラミング言語)とNJとの直接的対応 
•プログラムがあれば証明が書ける。逆も然り。 
•カリー=ハワード同型対応という 
LJ 
NJ 
直観主義論理 
対応 
ML,Coq,Haskell 
型付ラムダ計算 
理論的基礎
プログラムと証明の一致(2/4) 
•重要な推論規則 
푨を仮定し푩が導かれるなら 
푨→푩である(→導入則) 
푨→푩でありかつ푨であるなら푩である (→除去則,前件肯定,MP,三段論法) 
コロン左側では흀をくっつける(흀抽象) 
コロン左側では関数呼び出し(関数適用)
プログラムと証明の一致(3/4) 
•(int x) -> x +1というプログラムから対応した証明を書く 
•ラムダ式 
•(※ 簡単の為、+演算子はカリー化された関数とする)
プログラムと証明の一致(4/4) 
•푨 →(푩→푪)→(푨→푩)→(푨→푪)の証明から対応した プログラムを得る
閑話休題
ATPによる証明 – 特徴 
•主に古典論理(命題論理、1階述語論理)に基づく 
•高階論理では確立された自動証明アルゴリズムが存在しない 
•帰納法を厳密に表せない . 퐏ퟎ∧∀풙푷풙→푷풙+ퟏ→∀풙푷(풙) 
•全自動化されている 
•人間が証明を書く必要はない 
•導出原理を基礎とする証明 
•述語論理に対しては「証明出来る場合」できると判定する計算手続き 
•MP(モーダスポネンス)の一般化された推論規則 
•ATPやPrologの基盤 
•主に背理法による証明に使われる 
•特定の論理式に対する効率的方法がある 
•等式推論を行えない
導出原理について(1/10) 
•概要 
•相補的になるリテラルを消去する手続き 
•論理式を節の集合に直す必要がある 
•導出原理は節集合に対する証明アルゴリズム 
•任意の論理式は節集合(連言標準形)で表すことができる 
•論理式の変形手順 
1.論理結合子を 퐕 ,¬ , ∧ だけにする 
2.否定を一番内側に移動する(リテラルにする) 
3.冠頭形にする(量化部分と母式にわける) 
4.スコーレム関数で量化子を消去 
5.母式を連言標準形にする 
6.選言部分(節)を取り出す
導出原理について(2/10) 
•冠頭形への変換手順 
•任意の量化された述語論理式と同値な冠頭形の式を 
以下の書き換えを繰り返す事によって求めることができる。 
•푸を量化子,흉を束縛変数とし、흉が論理式흋に自由出現しない場合は 
以下の変換を行う。 
•흉が論理式흋に自由出現する場合は束縛変数흉を付け変える 
푸흉.흍흉 ∨ 흋 → 푸흉.흍흉∨ 흋 
푸흉.흍흉 ∧ 흋 → 푸흉.(흍흉∧흋) 
 
導出原理について(3/10) 
•量化子の除去 
•スコーレム関数を導入することで存在量化子を消去することができる。 
•この操作により式の同値性は失われるが充足不可能性は保障される 
•手順 
•スコーレム標準形でない冠頭形の式は以下のような形をしている 
∀풙ퟏ∀풙ퟐ… ∀풙풎∃풚.흋 
•흋中の束縛変数풚の出現を풇풎(풙ퟏ,풙ퟐ,…,풙풎)で置換し存在量化子を消去 
•풇をスコーレム関数と呼ぶ 
•풎=ퟎ(全称量化子が存在しない)の時풇풎は0引数関数となるがこれを 
スコーレム定数と呼ぶ
導出原理について(4/10) – 単一化 
•単一化 
•適当な項の代入を求め同じリテラルとなるか調べる手続き 
•代入が無い場合同じリテラルにすることはできない(失敗) 
•リテラル푳ퟏと푳ퟐが相補的となる代入があれば導出が可能になる 
•命題論理式の場合は項を持たないため必要ない(命題は0項述語) 
•単一化アルゴリズム 
2つのリテラル、 푳ퟏ= 횽풏(풔ퟏ,풔ퟐ,…,풔풏) 푳ퟐ=횽풏(흉ퟏ,흉ퟐ,…,흉풏)につ いて푬={풔ퟏ= 흉ퟏ ,풔ퟐ=흉ퟐ ,…,풔풏=흉풏}を考える。푬に次の操作を繰り 返し代入흈を求める。
導出原理について(5/10) – 単一化 
(A) 푬中の全ての等式の左辺が変項であり、どの等式の左辺の変項も何れの 
等式の右辺の項中にも現れないとき、푬を흈として終了。(終了条件) 
(B) 適当な等式 풆 ∈푬を1つ取り出し(※)풆の形で処理の場合を分ける 
(以下、푿を変項、풕を適当な項とする) 
1. 풇풔ퟏ,…,풔풎=풇(풕ퟏ,…,풕풎) の形の時 : 푬に풔ퟏ= 풕ퟏ ,…,풔풎= 풕풎を加える 
2. 풇풔ퟏ,…,풔풎=품(풕ퟏ,…,풕풎) の形の時 : 関数記号が違うため単一化失敗 
3. 푿=푿 の形の時: 何もしない 
4. 푿=풕 の形の時 : 
풊풇 풕中に푿が出現する → 単一化は失敗(出現検査を行う場合) 
풐풕풉풆풓풘풊풔풆 → 푬の全ての等式に出現する푿を풕に置換し풆を푬に戻す。 
5. 풕=푿の形の時 : 푿=풕 を푬 に追加する 
(A)にもどる 
(※ 푿=풕の形の풆を取り出す場合は푿は푬中の等式に出現していること)
導出原理について(6/10) - 例1 
• {푷,푷→푸} を前提として푸が証明されることを判定 
•1. 푸の否定を前提の節集合に加える→ 푷,¬푷푽푸 ,¬푸 
•2. 得られた節集合に導出を行う 
•命題論理式の場合、冠頭形の変形や単一化は必要ない 
•空節(矛盾□)が出たので前提から푸が証明される (背理法) 
¬푃∨푄 
푃 
푄 
¬푄 
□
導出原理について(7/10) - 手順 
•節集合푺=푪ퟏ ,푪ퟐ ,…,푪풏の充足不可能性の判定 
푪풊∶ 푳ퟏ 퐕 푪풊 ′ , 푪풋∶ 푴ퟏ 퐕 푪풋 ′ の時 
푳ퟏ ,푴ퟏ について 単一化子흈が存在し相補的であれば、 
푪풊흈から푳ퟏ흈を除いたものと、푪풋흈から푴ퟏ흈を除いたものを 選言で 
接続した新しい節 푪풑∶ (푪′ 풊 퐕 푪′ 풋)흈を得る。 
푪풑を푺に加え空節が導出されるまでこれを繰り返す。 
•푺 ⊢ 푷 ↔ 푺 ∪¬푷 ⊢ であるから푷の証明可能性を判定できる。
導出原理について(8/10) – 例2 
•∀풙.푷 풙 →푸풇풙⊢ ∀풙.¬푷풙 퐕 ∃풚.푸(풚) を判定 
•結論の否定を前提の集合に加えて節集合を求める 
¬푷풙 퐕 푸풇풙 ,푷풔풄 ,¬푸풚 
•導出を行い証明図(導出反駁木)を求める 
•どの節を選び導出を行うかなどの戦略は様々ある 
¬푷풙퐕 푸(풇(풙)) 
푷(풔풄) 
흈=풙 →풔풄 푸(풇(풔풄)) 
¬푸(풚) 
흈={풚 →풔풄} □
導出原理について(9/10) – 等号推論 
•等号推論ができない 
•導出は特定の二項述語(等号)について特別な処理を行うことはない。 
•(例) {=풂,풃,≠(풃,풂)}の充足不可能性を判定できない。 
単一化子が無いため導出できない 
•解決策 
•同値律を公理として入れる 
•Paramodulation(等号調整法)などで導出原理を拡張する 
•等式推論の為の別のアルゴリズムを使う
導出原理について(10/10) – 等号推論 
•Paramodulationについて 
節 푪풊∶ 푳ퟏ풕 퐕 푪풊 ′ , 푪풋∶ 풖=풔 퐕 푪′ 풋 の時 
풕と풖について単一化子흈が存在すれば新しい節 
푪풑∶ 푳ퟏ흈풔흈/풕흈 퐕 푪풊 ′흈 퐕 푪′ 풋흈 を得る。 
(ただし はリテラル中の項の注目やスラッシュで置換 
を表している.) 
•例 
푷풇풙,풙 , 풇풚=품풚,푪⊢푷(품풚,푪,풚)
自作ATP(1/3) 
•対話的な処理系(REPL) 
•1階述語論理と命題論理に対応したATP 
•等式推論にもいくらか対応 
•証明図を出力可能 
•任意の形式の式を一般的な式表現で入力可能 
•ソースコードはここ https://github.com/moratori/flexpr
自作ATP(2/3) 
定理 「풙ퟐ=풆を満たす群は可換である」 の証明例
自作ATP(3/3) 
•証明図
参考(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
参考(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

More Related Content

What's hot

「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)parrotstudio
 
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案Kamiya Toshihiro
 
Model seminar shibata_100710
Model seminar shibata_100710Model seminar shibata_100710
Model seminar shibata_100710Kazuya Nishina
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Ra Zon
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!Ra Zon
 
言語処理系入門€7
言語処理系入門€7言語処理系入門€7
言語処理系入門€7Kenta Hattori
 
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試みKamiya Toshihiro
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへNaoki Kitora
 
Effective Modern C++ 勉強会 Item26
Effective Modern C++ 勉強会 Item26Effective Modern C++ 勉強会 Item26
Effective Modern C++ 勉強会 Item26Akihiro Nishimura
 

What's hot (10)

「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
 
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
 
Model seminar shibata_100710
Model seminar shibata_100710Model seminar shibata_100710
Model seminar shibata_100710
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
 
言語処理系入門€7
言語処理系入門€7言語処理系入門€7
言語処理系入門€7
 
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
 
Effective Modern C++ 勉強会 Item26
Effective Modern C++ 勉強会 Item26Effective Modern C++ 勉強会 Item26
Effective Modern C++ 勉強会 Item26
 
C言語講習会4
C言語講習会4C言語講習会4
C言語講習会4
 

Similar to Prover

How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜Hiromi Ishii
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発Kentaro Ohkouchi
 
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要Toshihiro Kamishima
 
Yamadai.Rデモンストレーションセッション
Yamadai.RデモンストレーションセッションYamadai.Rデモンストレーションセッション
Yamadai.Rデモンストレーションセッション考司 小杉
 
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Toraoエンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
エンジニア目線で見る TLA+ と PlusCal - TAKAMI ToraoTorao Takami
 
Proof summit 2017 for slideshare
Proof summit 2017 for slideshareProof summit 2017 for slideshare
Proof summit 2017 for slideshareKeisuke Yahata
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成Akineko Shimizu
 
スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類Yahoo!デベロッパーネットワーク
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„和弘 井之上
 
VDM++仕様を対象としたテストケース自動生成ツールBWDMにおけるペアワイズ法とドメイン分析テストの適用のための機能拡張
VDM++仕様を対象としたテストケース自動生成ツールBWDMにおけるペアワイズ法とドメイン分析テストの適用のための機能拡張VDM++仕様を対象としたテストケース自動生成ツールBWDMにおけるペアワイズ法とドメイン分析テストの適用のための機能拡張
VDM++仕様を対象としたテストケース自動生成ツールBWDMにおけるペアワイズ法とドメイン分析テストの適用のための機能拡張Futa HIRAKOBA
 
pi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッドpi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッドkunihikokaneko1
 
RでKaggleの登竜門に挑戦
RでKaggleの登竜門に挑戦RでKaggleの登竜門に挑戦
RでKaggleの登竜門に挑戦幹雄 小川
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1Susisu
 
モデル検査入門 #wacate
モデル検査入門 #wacateモデル検査入門 #wacate
モデル検査入門 #wacateKinji Akemine
 
第3回nips読み会・関西『variational inference foundations and modern methods』
第3回nips読み会・関西『variational inference  foundations and modern methods』第3回nips読み会・関西『variational inference  foundations and modern methods』
第3回nips読み会・関西『variational inference foundations and modern methods』koji ochiai
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)Takuya Tsuchida
 

Similar to Prover (20)

秀スクリプトの話
秀スクリプトの話秀スクリプトの話
秀スクリプトの話
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
 
Phantom Type in Scala
Phantom Type in ScalaPhantom Type in Scala
Phantom Type in Scala
 
Spock's world
Spock's worldSpock's world
Spock's world
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
 
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
 
Yamadai.Rデモンストレーションセッション
Yamadai.RデモンストレーションセッションYamadai.Rデモンストレーションセッション
Yamadai.Rデモンストレーションセッション
 
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Toraoエンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
 
Proof summit 2017 for slideshare
Proof summit 2017 for slideshareProof summit 2017 for slideshare
Proof summit 2017 for slideshare
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
 
VDM++仕様を対象としたテストケース自動生成ツールBWDMにおけるペアワイズ法とドメイン分析テストの適用のための機能拡張
VDM++仕様を対象としたテストケース自動生成ツールBWDMにおけるペアワイズ法とドメイン分析テストの適用のための機能拡張VDM++仕様を対象としたテストケース自動生成ツールBWDMにおけるペアワイズ法とドメイン分析テストの適用のための機能拡張
VDM++仕様を対象としたテストケース自動生成ツールBWDMにおけるペアワイズ法とドメイン分析テストの適用のための機能拡張
 
pi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッドpi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッド
 
RでKaggleの登竜門に挑戦
RでKaggleの登竜門に挑戦RでKaggleの登竜門に挑戦
RでKaggleの登竜門に挑戦
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
講座Java入門
講座Java入門講座Java入門
講座Java入門
 
モデル検査入門 #wacate
モデル検査入門 #wacateモデル検査入門 #wacate
モデル検査入門 #wacate
 
第3回nips読み会・関西『variational inference foundations and modern methods』
第3回nips読み会・関西『variational inference  foundations and modern methods』第3回nips読み会・関西『variational inference  foundations and modern methods』
第3回nips読み会・関西『variational inference foundations and modern methods』
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
 

Recently uploaded

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Recently uploaded (8)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

Prover

  • 2. イントロ •自己紹介/興味関心 •コンピュータネットワークを学ぶ大学3年 •ソフトウェアの形式的検証 •検索エンジンや推薦システム •スライドの目的 •定理証明系の雰囲気を伝える •古典的ATPの仕組みについて
  • 3. 定理証明系とは •数学の定理を証明する •四色定理の証明にCoqが使われた •ケプラーの最密充填の証明にIsabelleが使われた •プログラムの正当性の検証 •例: CompCert,JavaCard,…etc •他の形式手法より強力な検証系 •コンピュータプログラムと証明の一致による
  • 4. 定理証明系(形式手法)の必要性 •仕様通りであることを証明できる •ミドルウェアやミッションクリティカルなソフトウェアの バグは致命的。(言語処理系 , 暗号化ライブラリ , … etc ) •バグが存在しないことはテストでは検証できない •四色定理の証明は支援系無しでは成し得なかった •純粋に数学の定理証明における強力なツール
  • 5. 定理証明系の種類 •以下のように大別される(他にもある) •基づく論理体系の違いにより証明アルゴリズムが違う 自動定理証明系(ATP) 定理証明支援系(ITP,PA) •証明したい命題を入力し計算 機に全自動で証明を見つけさ せる。 •証明を人間が書き、そこに誤り が 無いことをPAに証明させる。 Otter,Prover9,E,VampireACL2(Lisp製)…etc Coq,Agda,Isabelle,…etc
  • 6. Coqによる証明(1/3) – 例 •逆順にしたリストを返すreverse関数を定義する •∀풍풊풔풕.풓풆풗풆풓풔풆풓풆풗풆풓풔풆풍풊풔풕=풍풊풔풕 を証明したい
  • 8. Coqによる証明(3/3) •コマンド(タクティック)を対話的に入力し証明する •証明のついたプログラムは別言語に出力可能 •Ocaml , Haskell , Scheme , Ruby,Scala •プログラムに対して証明は一般に長くなる •証明を書くには論理学の知識 + Coqの扱いに慣れる 必要あり → 現実的なソフトウェアの検証にはコストが高い
  • 9. プログラムと証明の一致?(1/4) •形式的証明とは •適当な論理体系(古典論理,直観論理,様相論理,…etc)を対象に作 られた証明の枠組み(NK,NJ,LK,LJ…etc) •型付ラムダ計算(プログラミング言語)とNJとの直接的対応 •プログラムがあれば証明が書ける。逆も然り。 •カリー=ハワード同型対応という LJ NJ 直観主義論理 対応 ML,Coq,Haskell 型付ラムダ計算 理論的基礎
  • 10. プログラムと証明の一致(2/4) •重要な推論規則 푨を仮定し푩が導かれるなら 푨→푩である(→導入則) 푨→푩でありかつ푨であるなら푩である (→除去則,前件肯定,MP,三段論法) コロン左側では흀をくっつける(흀抽象) コロン左側では関数呼び出し(関数適用)
  • 11. プログラムと証明の一致(3/4) •(int x) -> x +1というプログラムから対応した証明を書く •ラムダ式 •(※ 簡単の為、+演算子はカリー化された関数とする)
  • 14. ATPによる証明 – 特徴 •主に古典論理(命題論理、1階述語論理)に基づく •高階論理では確立された自動証明アルゴリズムが存在しない •帰納法を厳密に表せない . 퐏ퟎ∧∀풙푷풙→푷풙+ퟏ→∀풙푷(풙) •全自動化されている •人間が証明を書く必要はない •導出原理を基礎とする証明 •述語論理に対しては「証明出来る場合」できると判定する計算手続き •MP(モーダスポネンス)の一般化された推論規則 •ATPやPrologの基盤 •主に背理法による証明に使われる •特定の論理式に対する効率的方法がある •等式推論を行えない
  • 15. 導出原理について(1/10) •概要 •相補的になるリテラルを消去する手続き •論理式を節の集合に直す必要がある •導出原理は節集合に対する証明アルゴリズム •任意の論理式は節集合(連言標準形)で表すことができる •論理式の変形手順 1.論理結合子を 퐕 ,¬ , ∧ だけにする 2.否定を一番内側に移動する(リテラルにする) 3.冠頭形にする(量化部分と母式にわける) 4.スコーレム関数で量化子を消去 5.母式を連言標準形にする 6.選言部分(節)を取り出す
  • 16. 導出原理について(2/10) •冠頭形への変換手順 •任意の量化された述語論理式と同値な冠頭形の式を 以下の書き換えを繰り返す事によって求めることができる。 •푸を量化子,흉を束縛変数とし、흉が論理式흋に自由出現しない場合は 以下の変換を行う。 •흉が論理式흋に自由出現する場合は束縛変数흉を付け変える 푸흉.흍흉 ∨ 흋 → 푸흉.흍흉∨ 흋 푸흉.흍흉 ∧ 흋 → 푸흉.(흍흉∧흋)  
  • 17. 導出原理について(3/10) •量化子の除去 •スコーレム関数を導入することで存在量化子を消去することができる。 •この操作により式の同値性は失われるが充足不可能性は保障される •手順 •スコーレム標準形でない冠頭形の式は以下のような形をしている ∀풙ퟏ∀풙ퟐ… ∀풙풎∃풚.흋 •흋中の束縛変数풚の出現を풇풎(풙ퟏ,풙ퟐ,…,풙풎)で置換し存在量化子を消去 •풇をスコーレム関数と呼ぶ •풎=ퟎ(全称量化子が存在しない)の時풇풎は0引数関数となるがこれを スコーレム定数と呼ぶ
  • 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について 節 푪풊∶ 푳ퟏ풕 퐕 푪풊 ′ , 푪풋∶ 풖=풔 퐕 푪′ 풋 の時 풕と풖について単一化子흈が存在すれば新しい節 푪풑∶ 푳ퟏ흈풔흈/풕흈 퐕 푪풊 ′흈 퐕 푪′ 풋흈 を得る。 (ただし はリテラル中の項の注目やスラッシュで置換 を表している.) •例 푷풇풙,풙 , 풇풚=품풚,푪⊢푷(품풚,푪,풚)
  • 25. 自作ATP(1/3) •対話的な処理系(REPL) •1階述語論理と命題論理に対応したATP •等式推論にもいくらか対応 •証明図を出力可能 •任意の形式の式を一般的な式表現で入力可能 •ソースコードはここ https://github.com/moratori/flexpr
  • 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