タグ付けされた質問 「proof-assistants」

プルーフアシスタントは、人間がマシンチェック済みのプルーフを作成するのに役立つアプリケーションプログラムです。

3
浅い埋め込みと深い埋め込み
CoqやIsabelleなどの証明アシスタントにロジックをエンコードする場合、浅い埋め込みと深い埋め込みのどちらを使用するかを選択する必要があります。浅い埋め込みでは、論理式は定理証明器のロジックに直接記述されますが、深い埋め込みでは、論理式はデータ型として表されます。 さまざまなアプローチの利点と制限は何ですか? 使用するものを決定するために利用可能なガイドラインはありますか? 2つの表現を体系的に切り替えることは可能ですか? 動機として、セキュリティ関連のさまざまなロジックをCoqにエンコードし、さまざまなアプローチの長所と短所を知りたいと思っています。

3
プルーフアシスタントで「戦術」はどのように機能しますか?
質問:プルーフアシスタントで「戦術」はどのように機能しますか?それらは、用語を等価用語に書き換える方法を指定する方法のようです(「等価」の定義のため)。おそらくこれには正式なルールがありますが、それらが何であり、どのように機能するかをどのように知ることができますか?彼らはベータ削減のための順序の選択以上のものを含みますか? 私の興味に関する背景:数ヶ月前、私は正式な数学を学びたいと決めました。予備調査からは正しい方法(TM)のように見え、魅力的なプログラミングと数学を統一するように思われるため、型理論を採用することにしました。私の最終的な目標は、Coqのような証明アシスタントを使用して理解できるようにすることだと思います(特に、行列のタイプを表すようなものに興味があるので、依存型を使用できると思います)。私は、初歩的な関数型プログラミングでさえほとんど知らずに始めましたが、ゆっくりと進歩しています。型とプログラミング言語(Pierce)の大部分を読んで理解し、HaskellとMLをいくつか学びました。


1
プルーフチェッカーのバグがメジャープルーフを無効にしたことはありますか?
ほとんどの(すべて?)証明アシスタントの健全性のバグはときどき修正されます。しかし、私が見た人たちからは、これらのバグは通常、意図せずに遭遇するのが難しく、バグが修正される前に結果が証明されたのは、一般に修正後です。 強さの順に3つの質問: そのような健全性のバグ修正により、プルーフを変更せずに、主要なプルーフが失敗することがありましたか? (1)が当てはまる場合、プルーフを修正するために大きな修正が必要でしたか? (2)が当てはまる場合、健全性のバグにより、間違った主要定理を証明した人はいますか? 「メジャー」の定義は他の人に任せます。

1
TCS定理の合理的な自動証明システムはありますか?
マシンがチェックできるように、停止問題に関するチューリングの証明を形式化したいとします。有名な自動定理証明システムには、Mizar、Coq、HOL4などがあります。Coqをダウンロードして実験しましたが、Turingマシン用のライブラリがありません。私は自分でコーディングしようと思ったが、チュートリアルが欠けており、言語を習得するのが難しいことがわかった。 私の質問は次のとおりです。チューリング機械を含む定理を証明するのに一般的に優れている自動化された定理証明器はありますか?既に存在するライブラリを使用して、停止する問題の決定不能性の証明を形式化できれば、そのような定理証明者は「良い」と考えます。比較的簡単に手に入れることができれば、さらに良いと考えます。(記録のために、私は通常、プログラミング言語に問題はありません。) おかげで、 フィリップ

1
フェイト・トンプソンの定理の形式化に興味深いアルゴリズムはありますか?
George Gonthierと彼の協力者たちは、奇数次定理の定式化を終えたようです。 4色の定理に関する以前の研究で、Gonthierは、特に正式な検証に適した新しいアルゴリズム(主にBDDとグラフアルゴリズムのバリアント)を発明しました。彼は有限群理論の研究でこの小規模な反射スタイルの検証を使い続けていると言っているので、この開発中にどのような新しいアルゴリズムのトリックが開発されたのだろうか?

5
コンピュータ支援のNP完全性証明に興味がある
トーマス・J・シェーファーによる論文「満足度の問題の複雑さ」で、著者は次のように述べています。 This raises the intriguing possibility of computer-assisted NP-completeness proofs. Once the researcher has established the basic framework for simulating conjunctions of clauses, the relational complexity could be explored with the help of a computer. The computer would be instructed to randomly generate various input configurations and test whether the …


1
Coqで証明の無関係性を証明しますか?
Coqで次の定理を証明する方法はありますか? Theorem bool_pirrel : forall (b : bool) (p1 p2 : b = true), p1 = p2. 編集:「証拠の無関係性」とは何かについて簡単な説明をしようとする試み(間違っているか不正確な場合は誰かを修正する) 基本的な考え方は、命題の世界(またはPropCoq の種類)で、あなたが本当に気にするのは、命題の証明ではなく、命題の証明可能性であり、多くの(またはまったくない)かもしれないということです。証明可能性の観点から複数の証明がある場合、それらは同じ命題を証明するという意味で同等です。したがって、それらの区別はまったく関係ありません。これは、あなたが実際には2つの用語の違いを気に計算の観点からは異なり、例えば、基本的に、あなたは二住民たくないタイプ(またはすなわちコックの言葉で)、と等しくなるように。しかし、それらを入れると、それらは等しく扱われます。boolSettruefalseProp


3
型理論の帰納的定義における偏見の役割は何ですか?
私たちは、多くの場合、オブジェクト定義したいいくつかの推論規則に従って。これらのルールは、生成関数示すFが単調である場合、最小不動点得、μ Fを。私たちは取るA := μ Fの「誘導的な定義」であることをA。さらに、Fの単調性により、セットにAが含まれるとき(つまり、プロパティがAに普遍的に保持されるとき)を決定するために、「帰納の原理」を推論できます。A∈UA∈うんA \in UFFFμFμF\mu FA:=μFA:=μFA := \mu FAAAFFFAAAAAA Coqでは、これは、明示的な導入用語を使用してAの定義を記述することに対応します。この定義は特定の関数Fを示していますが、その関数は必ずしも単調ではありません。したがって、Coqはいくつかの構文チェックを使用して、定義の「整形式」を保証します。近似的に、それはの発生を拒否しますInductiveInductive\mathtt{Inductive}AAAFFFAAA的には、導入用語のタイプの負の位置でのます。 (これまでの私の理解に欠陥がある場合、私を修正してください!) 最初に、Coqのコンテキストでのいくつかの質問: 1)Coqの構文チェックは、の定義がAAA述語ですか?(もしそうなら、定義が不明確になる唯一の方法は不可逆性ですか?)それとも単調性をチェックしていますか?(それに対応して、非単調性はそれを殺すかもしれませんか?) 2)そのような否定的な発生は、必然的にAAAAAAAの定義はimpredicative /非単調ですか?または、その場合にCoqが明確に定義されていることを確認できませんか? より一般的に: 3)帰納的定義の偏見とその定義の生成関数の単調性との関係は何ですか?それらは同じコインの両面ですか?それらは無関係ですか?非公式に、どちらが重要ですか?

2
Coq証明でのcofixの排除
Coqの共誘導型を使用していくつかの基本的なプロパティを証明しようとすると、次の問題にぶつかり続け、回避できません。次のように、単純なCoqスクリプトに問題を抽出しました。 タイプTreeは、タイプAの要素でラベル付けされたブランチを持つ無限ツリーを定義します。ブランチは、すべての要素のために定義する必要はありませんA。値Univは、すべてのAブランチが常に定義されている無限ツリーです。isUnivは、指定されたツリーがUnivと等しいかどうかをテストします。補題は、UnivがisUnivを実際に満たしていると述べています。 Parameter A : Set. CoInductive Tree: Set := Node : (A -> option Tree) -> Tree. Definition derv (a : A) (t: Tree): option Tree := match t with Node f => f a end. CoFixpoint Univ : Tree := Node (fun _ => Some Univ). CoInductive isUniv …

2
複雑性理論研究での証明アシスタントの使用法?
STOCのような会議で取り上げられているトピックを考慮すると、アルゴリズムまたは複雑性の研究者はCOQまたはIsabelleを積極的に使用していますか?もしそうなら、彼らは研究でそれをどのように使用していますか?証拠が低すぎるため、ほとんどの人はそのようなツールを使用しないと思います。素敵なサプリメントとは対照的に、これらの証明アシスタントを研究に不可欠な方法で使用している人はいますか? これらのツールのいずれかを学習し始める可能性があり、削減、正確さ、または実行時間の証明のコンテキストでそれらについて学ぶのが楽しいので、私は興味があります。

1
Coqの2つの引数に帰納的に関数を定義する方法は?
以下に示す再帰関数が終了することをCoqに納得させるにはどうすればよいですか?この関数は、2つの帰納的引数を取ります。直感的に、どちらかの引数が分解されるため、再帰は終了します。 具体的には、この関数は入力として2つのツリーを取ります。 Inductive Tree := | Tip: Tree | Bin: Tree -> Tree -> Tree. Treesでは、次のスタイルの誘導を行うのが好きです。 Inductive TreePair := | TipTip : TreePair | TipBin : Tree -> Tree -> TreePair | BinTip : Tree -> Tree -> TreePair | BinBin : TreePair -> TreePair -> TreePair. Fixpoint pair (l …

6
数学を書くための証明アシスタント
証明アシスタントを使用して数学的な証明を書きたいです。すべては、一次論理(平等)と自然推論を使用して記述されます。背景は集合論(ZF)です。たとえば、次の証明をどのように書くことができますか? 公理:∀x∀y(x=y↔∀z(z∈x↔z∈y))∀x∀y(x=y↔∀z(z∈x↔z∈y))\forall x\forall y(x=y\leftrightarrow\forall z(z\in x\leftrightarrow z\in y)) 定理:∀x∀y(∀z(z∉x)∧∀z(z∉y)→x=y)∀x∀y(∀z(z∉x)∧∀z(z∉y)→x=y)\forall x\forall y(\forall z(z\notin x)\land\forall z(z\notin y)\rightarrow x=y) つまり、空のセットは一意です。 紙とペンを使ってそれを達成するのは簡単なことではありませんが、本当に必要なのは、証拠が正しいかどうかを確認するのに役立つソフトウェアです。 ありがとうございました。

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