自動定理証明の学習


44

私は自動定理証明 / SMTソルバー / 証明アシスタントを自分で学んでおり、ここからプロセスに関する一連の質問を投稿しています。

これらのトピックは、(数学的な)ロジックの背景なしでは簡単に要約できないことに注意してください。基本用語に問題がある場合は、M。HuthとM. Ryanによるコンピューターサイエンスのロジック(特に、第1章、第2章、第4章)またはPによる数学論理と型理論の紹介を読んでください。アンドリュース。
高次ロジック(HOL)の簡単な紹介については、こちらを参照してください

私はCoqを見て、とりわけイザベルへの導入の最初の章を読みました。自動定理証明の種類

私は数十年にわたってPrologを知っていて、現在F#を学んでいるので、ML、O'Caml、およびLISPはボーナスです。Haskellは別の獣です。

私は次の本を持っています

アラン・ロビンソンとアンドレイ・ボルンコフによる「自動推論のハンドブック」

ジョン・ハリソンによる「実践的論理と自動推論のハンドブック」

フランツ・バーダーとトビアス・ニプコウによる「用語の書き換えとすべて」

  1. CoqとIsabelleの違いは何ですか?

  2. IsabelleまたはCoq、またはその両方を学習する必要がありますか?

  3. イザベルまたはCoqを最初に学習することには利点がありますか?

ここでシリーズの次の質問を見つけます


7
あなたが言及するツールは自動化された証明者ではなく、証明支援者であることに注意することが重要です(ただし、それらは簡単なものを自分で証明することができます)。
ラファエル

@DaveClarke Duplicate?
ラファエル

@Raphael:はい(現在、私の答えには新しいデータが含まれています)。
デイブクラーク

@DaveClarkeこれを閉じて、2つをマージする必要があると思いますか?
ラファエル

@ラファエル:はい。ここで回答のテキストを他の質問の回答にコピーしました。
デイブクラーク

回答:


25

私の好みはCoqですが、他の人はIsabelleを好むと思います。Isabelleについて私が見つけた奇妙なことの1つは、定義の一部を二重引用符で囲む必要がある2レベルの構文があることです。Coqにはそのようなナンセンスは存在しません。

最終的に、あなたに最も適したものは、あなたが証明したいものに依存するかもしれません。両方の言語には、多くのライブラリサポートがあり、あらゆる種類の開発とサンプル理論を行うアクティブなコミュニティがあります。1つの言語が、開発したい種類の理論に対して適切なライブラリ(または他の)サポートを提供する場合、その言語を選択します。

戦略の1つは、両方の言語で簡単なチュートリアルを実行し、最も適切なものをフォローアップすることです。例えば、

ここでは、最終的イザベルを好む誰かによって両者を比較するブログ記事を簡単にです。

コマンドラインで何かを行うのではなく、適切なIDE(ProofGeneralなど)を使用していることを確認してください。

Coqにアクセスする別の方法は、Benjamin Pierce et al。によるオンラインの本Software Foundationsを試すことです。それは提供される詳細の負荷で優れたチュートリアルを提供します。主にプログラミング言語のセマンティクスに焦点が当てられていますが、Coqおよび半自動化された定理証明の基本(およびそれ以降)の多くは途中で説明されています。


4
ProofGeneralは、使い慣れたら最高です!Isabelle構文について:iirc、二重引用符で囲まれたものは、あなたが話しているもの、式です。それ以外はすべて証明制御です。明確な区別は良かったのですが、二重引用符(およびその後の引用符内の構文強調表示の欠如)は、おそらくそれを実装する最良の方法ではありません。
ラファエル

4
昨年、Isabelle / HOL wikiをコースに設定しました。それ以外では手に入らないいくつかの素晴らしい概要があります。
ラファエル

18

おもしろいと思うことの1つは、「定理証明」という用語は、どの分野にいるかによって大きく異なるということです。 「自動推論のハンドブック」で詳しく説明されているように、CoqやIsabelleとはあまり関係がありません。

関連することを証明する定理について最初に学び始めたとき、私が読んだ最初の本(今ではかなり古いものですか?)は、メルビンフィッティングの優れたFirst Order Logicと自動定理証明でした。 この本は、あなたが実際にかなりの量の自動化を得ることができる低次のロジックに関連するあなたが見るであろう種類のトピックをカバーした本当に素晴らしい本でした。あなたが学ぶ論理の種類は、あなたが推論したいものによって決定されるべきであり、それのために証明するそれほど多くの定理ではありません。たとえば、一次論理はかなりの表現力と推論能力を提供しますが、ほとんどのプログラミング言語コミュニティ(最近になって終わりました)は、定理証明とモデルチェックの古い学校から出発しています(より決定的であるが表現力の低いもののバケツ)。

ただし、これを、一次推論やモデル検査のようなものは実際にはあまり役に立たなかったことを意味するものではありません。彼らはされています!ACL2は、産業分野で驚くほどの成功を収めた一次論理の上に構築された証明者の例として見ることができます。それに加えて、SMTの解決にも驚くほどの開発がありました。最新のSMTソルバーは、非常に強力なSATソルバーの上に構築されており(主に過去20年以内にDPLLの改善のために発見されたものです)、シンボリック実行のようなもので非常に多く使用されています。

しかし、私が言ったように、より伝統的な「定理証明」ビットは楽しいですが、学ぶべきことはまだたくさんあります。たとえば、Coqの学習は、提供する自動化ツールの学習とはほとんど関係がなく、基になる型理論(共誘導構造の予測計算)の学習とは関係がありません。建設的な論理、カレーハワード同型、または型理論に慣れていない場合、これらのツールを学ぶエキサイティングな時間がありますが、それらが第1巻で見るものとあまりにも密接に関連しているとは思えませんハンドブックの。

したがって、何をしたいかを決定します。モデルと定理を1次論理で検証するか、強力な型理論を使用してプログラムの正しさ(または構成論理の定理)を推論します。最初の場合は、より自動化された演basedベースのテクニックについて学び、2番目の場合は、Coq、HOLなどについて詳しく学びます。ところで、Coqを学びたい場合は、上記の参考文献は良いと思いますが、 Coqを学習するための2つのコアリファレンスがあります。

Benjamin Pierceのソフトウェア基盤の本(Dr. Pierceは優れた作家です。まだ読んでいないなら、彼のより人気のある「ブリックブック」もご覧になることをお勧めします)。

依存型を使用した認定プログラミング (Adam Chlipalaも非常によく書いていますが、彼の本はPierceのおそらく簡単な導入よりも少し成熟度と知性が高いと想定しています)


15

Interactive Theorem Proving(ITP)にはさまざまなシステムがあります-その名前の会議も参照してください-Coq、Isabelle、HOL、ACL2、PVSなど

それらはすべて、学ぶのが比較的難しく、それぞれに固有の文化があります。それは外国語を学ぶようなものです。あなたはすでに英語を知っていると言い、それからフランス語、ドイツ語、イタリア語、スペイン語、ポルトガル語の選択肢があります。それらはすべて何らかの形で関連しています(これは中国語ではありません)が、これらすべてを同時に管理する人はほとんどいません。だから、あなたはそれぞれの文化やコミュニティの味を試してみて、そしてコミットメントをするべきです。

作業に本当に必要な「キラー機能」もあるかもしれません。

また、これらのシステムの1つについて仲間の専門家がいることも役立ちます。

  • CoqとIsabelleの違いは何ですか?

どちらもスタンフォード/エジンバラ/ケンブリッジのLCFシステムの子孫です。1985年、G。ヒュートとL.ポールソンは、ケンブリッジLCFの最後のバージョンで共同作業を行いました。その後、フランスのCoc / CIC / COQ(現在のCoq)、およびケンブリッジとミュンヘンのIsabelleに向けて分割が行われました。HOL4、HOL-Light、HOL-XYZは、LCFの他の関連する子孫であることに注意してください。

20年以上前、CoqとIsabelleの区別は、論理的基盤(ここでは依存型の構成的論理、単純型の古典的論理)に従って行われていました。アドオンツールやライブラリを含む各フォーマルシステムの上にさらに多くのレイヤーが追加されているため、今日、実際にはそれに対する影響は驚くほどほとんどありません。

  • IsabelleまたはCoq、またはその両方を学習する必要がありますか?

両方をて、もっとワインとチーズ、またはブラートヴルストとザウアークラウトが好きなら、気分をつかむようにしてください。(イザベルの背後にいる人の一人ですが、現在フランスにいるとき、私が家にいて誰も見ていないときに、ザウアークラウトを実際に好きなフランス人がどれだけいるかに驚いています:-)

  • イザベルまたはCoqを最初に学習することには利点がありますか?

そうは思いません。最初に試したものにこだわって、2つ目のものを試さないという危険があるか、最初の1つに失望しすぎてすぐに解雇する危険があります。いずれにせよ、どちらのシステムでも生産性を上げるには時間と永続性が必要です。

「IDE」としてのProof Generalがすでに言及されているため、Proof General / Emacsは長年にわたってCoqとIsabelleの両方の標準統一インターフェースでしたが、IDEとは呼んでいませんでした。名前に「IDE」を含むCoqIDEもありますが、Gtkウィジェットの上にある比較的基本的なエディターです。現在のIsabelleにはIsabelle / jEditが含まれています。Isabelle/ jEditは名前に「IDE」はありませんが、NetbeansまたはIntelliJ IDEAで日常的に表示されるものを概算することを目的としています。


10

ここではアンドレイ・バウアーによっていくつかの素晴らしいビデオCoqのチュートリアルがあります。決して完全ではありませんが、良い入門だと思います。


1
すばらしいです!「Coqを使用した最初の証明」の中心的な文に注意してください。「紙の上でどのように行うか考えてください。」史上最高のアドバイス。
ラファエル

4

このイザベルの紹介はかなり網羅的です。

イザベルの紹介もご覧ください

一般に、使用可能な例は多数あるため、Isabelleは比較的簡単に開始できます。たとえば、公式ウェブサイトで

PS-私はイザベルとはまったく関係がなく、正式な方法の理論家ですが、イザベルがデフォルトの出発点として頻繁に登場することを知っています。


1
「Isabelleがデフォルトの開始点として頻繁に登場することを知っています。」:私はむしろ、HOLはデフォルトの開始点として、そして証明アシスタントとして、それはむしろCoqであり、しばしばデフォルトとして来ます。それを考えると、それは面白いです...最も有名なロジック(CoCよりも有名なHOL)と最も有名な証明アシスタント(Isabelleよりも有名なCoq)は一致しません(CoqはCoCとHOLのIsabelleに基づいています)。
Hibou57 14

2

λ

また、DeepSpec Summer SchoolのSoftware Foundationsには、かなりクールな講義がいくつかあります。

既に述べたソフトウェアの基礎シリーズに基づいた講義のいくつか。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.