1 / 23

自動定理証明の紹介

自動定理証明の紹介. ~ Proof Summit ~ 2011-09-25 酒井 政裕. 自己紹介. 酒井 政裕 Blog: ヒビルテ Twitter: @masahiro_sakai Haskeller Agda: Agda1 のころ遊んでた Coq: 最近入門 最近、 Alloy の本を翻訳. Alloy 本. 『 抽象によるソフトウェア設計 Alloy ではじめる形式手法 』 オーム社より 好評発売中!. この LT の趣旨. Coq とか Agda の話ばかりで ツマラン ので、 息抜き にちょっとは違う話を. 話したかったこと.

gazit
Download Presentation

自動定理証明の紹介

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 自動定理証明の紹介 ~Proof Summit~ 2011-09-25 酒井 政裕

  2. 自己紹介 酒井 政裕 • Blog: ヒビルテ • Twitter: @masahiro_sakai • Haskeller • Agda: Agda1のころ遊んでた • Coq: 最近入門 • 最近、Alloyの本を翻訳

  3. Alloy本 『抽象によるソフトウェア設計Alloyではじめる形式手法』 • オーム社より好評発売中!

  4. このLTの趣旨 CoqとかAgdaの話ばかりでツマランので、息抜きにちょっとは違う話を

  5. 話したかったこと • 自動定理証明 • Automated Theorem Proving • モデル発見 • 色々な Decision procedure • SAT/SMT

  6. CoqやAgdaへのイチャモン • 自分が考えた証明を形式化し、正しさを確認したり、リファクタリングしたりには便利 • だけど、何かを証明したいときに、本当に支援になるのか?

  7. CoqやAgdaへのイチャモン そもそも機械に分からせるために、細部まで証明を書くなど機械の奴隷では?

  8. 対話的定理証明 vs 自動定理証明

  9. 多分この辺り Comparing mathematical provers (by Freek Wiedijk, 2003) より

  10. 数学的な表現力は弱い • が、その分自動化されている!

  11. 自動定理証明器 • Otter • 自動定理証明器が有名になるきっかけになった証明器 • SPASS • 様相論理などもサポート • E • The E Equational Theorem Prover (eprover) • 他にも沢山 • Prover9, Vampire, Waldmeister, …

  12. begin_problem(Sokrates1). list_of_descriptions. name({*Sokrates*}). author({*Christoph Weidenbach*}). status(unsatisfiable). description({* Sokrates is mortal and since all humans are mortal, he is mortal too. *}). end_of_list. list_of_symbols. functions[(sokrates,0)]. predicates[(Human,1),(Mortal,1)]. end_of_list. list_of_formulae(axioms). formula(Human(sokrates)). formula(forall([x],implies(Human(x),Mortal(x)))). end_of_list. list_of_formulae(conjectures). formula(Mortal(sokrates)). end_of_list. end_problem. 簡単な例: ソクラテスは死ぬ(SPASS) 公理 ヘッダ 証明したいゴール 関数・述語とアリティの宣言

  13. 簡単な例: ソクラテスは死ぬ(SPASS) % SPASS -DocProof Socrate.dfg (中略) Here is a proof with depth 1, length 5 : 1[0:Inp] || -> Human(sokrates)*. 2[0:Inp] || Mortal(sokrates)* -> . 3[0:Inp] Human(U) || -> Mortal(U)*. 4[0:Res:3.1,2.0] Human(sokrates) || -> . 5[0:MRR:4.0,1.0] || -> . Formulae used in the proof : axiom0 conjecture0 axiom1

  14. 簡単な例: ソクラテスは死ぬ(SPASS) Human(U) || -> Mortal(U)*. || Mortal(sokrates)* -> ゴールの否定 公理2 Res Human(sokrates) || -> || -> Human(sokrates)* 公理1 MRR || -> 矛盾

  15. 表現力の弱さ • 有限個の公理のみ & 一階 • たとえば、数学的帰納法は公理化不能: • 各述語Pに対して公理がひとつ必要 • 高階なら ∀P : N→Prop. ~ として、単一の公理で公理化できる P(n) ∧ (∀n. P(n)→P(s(n))) → ∀n. P(n)

  16. 例: 自然数の加算の結合性(E / TPTP) fof( plus_z, axiom, ![X] : plus(X,z)=X ). fof( plus_s, axiom, ![X,Y] : plus(X,s(Y))=s(plus(X,Y)) ). fof( plusAssocP_def, axiom, ![X,Y,Z] : ( plusAssocP(X,Y,Z) <=> (plus(plus(X,Y),Z)=plus(X,plus(Y,Z))) ) ). fof( plusAssocP_ind, axiom, ![X,Y] : ( (plusAssocP(X,Y,z) & (![Z] : plusAssocP(X,Y,Z) => plusAssocP(X,Y,s(Z)))) => ![Z] : plusAssocP(X,Y,Z) ) ). fof( plus_assoc, conjecture, ![X,Y,Z] : plus(plus(X,Y),Z) = plus(X,plus(Y,Z)) ). ! は ∀ 帰納法のインスタンスを明示的に公理に eprover -l 2 --tptp3-format nat1.tptp

  17. TPTP • Thousands of Problems for Theorem Provers • http://www.cs.miami.edu/~tptp/ • ATP向けの諸々を提供 • 問題セット • 入力ファイルフォーマット • 各種ユーティリティ • 証明を見やすく表示したり、他のツール用に変換したりといったツールもあった気がするが、忘れた • SATLIB, SMTLIB, MIPLIB等のATP版

  18. 応用: プログラム検証Jahob

  19. チャレンジSeven Trees 問題 • 関数記号: +, ×, T • 公理: 半環の公理 + {T = 1 + T2} • ゴール: T = T7 • あなたの使っている定理証明系は、こういうのを解くのを支援してくれる?

  20. 自動定理証明器に解かせてみた (1) fof( coprod_comm, axiom, ![X,Y] : coprod(X,Y) = coprod(Y,X) ). fof( coprod_assoc, axiom, ![X,Y,Z] : coprod(X,coprod(Y,Z)) = coprod(coprod(X,Y),Z) ). fof( prod_comm, axiom, ![X,Y] : prod(X,Y) = prod(Y,X) ). fof( prod_assoc, axiom, ![X,Y,Z] : prod(X,prod(Y,Z)) = prod(prod(X,Y),Z) ). fof( dist, axiom, ![X,Y,Z] : prod(X,coprod(Y,Z)) = coprod(prod(X,Y),prod(X,Z)) ). fof( prod_unit, axiom, ![X] : prod(one, X) = X ). fof( t, axiom, t = coprod(one, prod(t, t)) ). fof( seven_trees, conjecture, t = prod(t,prod(t,prod(t,prod(t,prod(t,prod(t,t)))))) ). 爆発

  21. 自動定理証明器に解かせてみた (2) fof( comm, axiom, ![X,Y] : coprod(X,Y) = coprod(Y,X) ). fof( assoc, axiom, ![X,Y,Z] : coprod(X,coprod(Y,Z)) = coprod(coprod(X,Y),Z) ). fof( t1, axiom, t1 = coprod(t0, t2) ). fof( t2, axiom, t2 = coprod(t1, t3) ). fof( t3, axiom, t3 = coprod(t2, t4) ). fof( t4, axiom, t4 = coprod(t3, t5) ). fof( t5, axiom, t5 = coprod(t4, t6) ). fof( t6, axiom, t6 = coprod(t5, t7) ). fof( t7, axiom, t7 = coprod(t6, t8) ). fof( t8, axiom, t8 = coprod(t7, t9) ). fof( seven_trees, conjecture, t1 = t7 ). 解けた

  22. チャレンジ:Otterが有名になった例 • Two inverter problem • 3入力3出力の組み合わせ回路で、各出力が対応する入力の否定になっているものを作れ • ただし、andとorは何個使ってもよいが、notは2個しか使えない • OtterはPrologのメタ述語のような機能を持っていて、それを利用して解いた • (今の一般的な定理証明系では使えない) • あなたの使っている定理証明系は、こういうのを解くのを支援してくれる?

  23. CASC • The CADE ATP System Competition • http://www.cs.miami.edu/~tptp/CASC/ • CADE(the Conference on Automated Deduction)で毎年やってるコンペ • CASC‑23 (2011) の勝者:

More Related