タグ付けされた質問 「coq」

Coqは、帰納的構造の計算に基づくインタラクティブな定理証明です。

6
自動定理証明の学習
私は自動定理証明 / SMTソルバー / 証明アシスタントを自分で学んでおり、ここからプロセスに関する一連の質問を投稿しています。 これらのトピックは、(数学的な)ロジックの背景なしでは簡単に要約できないことに注意してください。基本用語に問題がある場合は、M。HuthとM. Ryanによるコンピューターサイエンスのロジック(特に、第1章、第2章、第4章)またはPによる数学論理と型理論の紹介を読んでください。アンドリュース。 高次ロジック(HOL)の簡単な紹介については、こちらを参照してください。 私はCoqを見て、とりわけイザベルへの導入の最初の章を読みました。自動定理証明の種類 私は数十年にわたってPrologを知っていて、現在F#を学んでいるので、ML、O'Caml、およびLISPはボーナスです。Haskellは別の獣です。 私は次の本を持っています アラン・ロビンソンとアンドレイ・ボルンコフによる「自動推論のハンドブック」 ジョン・ハリソンによる「実践的論理と自動推論のハンドブック」 フランツ・バーダーとトビアス・ニプコウによる「用語の書き換えとすべて」 CoqとIsabelleの違いは何ですか? IsabelleまたはCoq、またはその両方を学習する必要がありますか? イザベルまたはCoqを最初に学習することには利点がありますか? ここでシリーズの次の質問を見つけます。

2
Cのvoid型がempty / bottom型と類似していないのはなぜですか?
ウィキペディアと私が見つけた他のソースはvoid、空のタイプではなくユニットタイプとしてリストCのタイプを見つけました。void空の/下の型の定義によりよく適合するように思えるので、この混乱を見つけます。 void私が知る限り、値は存在しません。 戻り値の型がvoidの関数は、関数が何も返さないため、何らかの副作用しか実行できないことを指定します。 タイプのポインターvoid*は、他のすべてのポインタータイプのサブタイプです。また、void*C との間の変換は暗黙的です。 最後の点voidに、空の型であることの引数としてのメリットがあるかどうかはわかりvoid*ませんvoid。 一方、voidそれ自体は他のすべてのタイプのサブタイプではありません。これは、タイプがボトムタイプであるための要件であると言えます。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

1
Coqの停止問題の決定不能性を証明することは可能ですか?
Andrej Bauerによる「建設的な数学を受け入れる5つの段階」を見ていましたが、彼は矛盾による2種類の証明(または数学者が矛盾によって証明と呼ぶ2つのこと)があると言っています。 が偽であると仮定します...何とか何とか何とか、矛盾。したがって、は真です。PPPPPP が真であると仮定します...何とか何とか何とか、矛盾。したがって、 は偽です。PPPPPP 1つ目は除外された中間の法則(LEM)と同等であり、2つ目は否定の証明方法です。 停止問題(HP)の決定不能性の証明は、矛盾による証明です。HPを決定できるマシンがあると仮定します...何とか何とか、矛盾。したがって、は存在しません。DDDDDD したがって、を「が存在し、HPを決定できる」とします。が真であると仮定します...何とか何とか何とか、矛盾。したがって、は偽です。PPPDDDPPPPPP これは矛盾による第2種の証明のように見えるので、Coqの停止問題の決定不能性を証明することは可能です(LEMを仮定せずに)? 編集:私は矛盾を使用してこれを証明することについていくつかのポイントを見たいと思います。これは対角化を使用しても証明できることを知っています。

2
入れ子になったコンポーネントを持つ帰納的なタイプの再帰的な定義
入れ子になっているが厳密に正の場所で再帰的に発生する誘導型を考えてください。たとえば、一般的なリストデータ構造を使用して子を格納するノードを使用した有限分岐を持つツリー。 Inductive LTree : Set := Node : list LTree -> LTree. これらのツリーとツリーのリストを再帰的に再帰的に定義する単純な方法は機能しません。以下sizeは、ノードの数を計算する関数の例です。 Fixpoint size (t : LTree) : nat := match t with Node l => 1 + (size_l l) end with size_l (l : list LTree) : nat := match l with | nil => 0 | cons …

4
仕様からコンピュータプログラムを書くシステムを実際に作成した人はいますか?
コンピュータプログラムを生成するシステム(ソフトウェアまたは簡単な例を含む紙の詳細な説明)を実際に書いた人はいますか?I入力、それがリスト素数10未満ことプログラム作成 のP rがiは、mは、E (Xの)単にように定義される 1 &lt; X ∧ ∄ APrime(x)∧x&lt;10Prime(x)∧x&lt;10Prime(x) \wedge x<10Prime(x)Prime(x)Prime(x) 教授は、彼らができると言う誰も実際の完全な例を与えません。1&lt;x∧∄As.t.1&lt;A∧A&lt;x∧x=A×B, with A,B∈N1&lt;x∧∄As.t.1&lt;A∧A&lt;x∧x=A×B, with A,B∈N1<x \wedge \not\exists A\; s.t. 1<A \wedge A<x \wedge x=A\times B,\mbox{ with } A,B\in \mathbb{N}

1
ダミーのための単項二次論理
私はプログラマーであり、オートマトンに精通していますが、ロジックには精通していません。 私は論文で、この2つは非常に密接に関連していると読みました。確定的有限オートマトン(DFA)、ツリーオートマトン、および可視プッシュダウンオートマトンは、すべてモナド2次論理(MSO)に関連しています。オートマトンと(論文の)人はMSOとの関係を私に説明しようとしたが、彼らは常に論理とMSOの理解の強い背景を前提としている。 ロジックに関する本やコースを見ると、ほとんどが一次ロジックのみを処理しますが、これは非常に単純で、いくつかの概念のみで構成されています:変数、または、ない、含意、すべて、存在など 誰かが説明したり、説明できるリソースを教えてくれたりできますか? 一次論理と対照的な二次論理とは何ですか? モナドと非モナドのロジックとは何ですか? なぜ二次論理が単項であることが決定可能になることが重要なのか、またはなぜこれが間違った質問なのか? なぜ単項二次論理が決定可能か? 少なくともDFAとの関係は? それがリソースである場合、私がプログラマーであり、論理学者ではないことを前提とすれば良いでしょう。これは、それまでは数学が私にとって魔法のように感じるので、コードとしてどのように実装するかを理解したいということです;) 助けてくれてありがとう。とても感謝しております。

1
CoqのSetとTypeの違いは何ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、コンピューターサイエンススタック交換のトピックになるようにします。 2年前に閉店。 AFAIU型は、Setその要素がプログラムである、またはproposition要素が証明であるにすることができます。したがって、この理解に基づいて: Inductive prod (X Y: Type) : Set := | pair: X -&gt; Y -&gt; prod X Y. 次のコードはコンパイルされるはずですが、次のエラーが原因ではありません。私が変更された場合SetにType、または他TypeとのSetそれは罰金をコンパイルします。誰かが次のエラーの意味を理解するのを手伝ってくれる?Software Foundationsの本を使ってCoqを教えようとしています。 エラー: Error: Large non-propositional inductive types must be in Type.

2
coqによるトートロジーの証明
現在、私はCoqを学ぶ必要があり、どのように対処するのかわかりませんor: 例として、それは簡単ですが、証明する方法がわかりません: Theorem T0: x \/ ~x. 誰かが私を助けることができれば、私は本当に感謝しています。 参考のために、このチートシートを使用します。 また、私が念頭に置いている証拠の例:二重否定の場合: Require Import Classical_Prop. Parameters x: Prop. Theorem T7: (~~x) -&gt; x. intro H. apply NNPP. exact H. Qed.
12 logic  coq 

1
依存型システムの証明のプリミティブとして再帰型が必要なのはなぜですか?
型理論と依存プログラミングは比較的新しいです。私は構造計算(CoC)やその他の純粋型システムについて研究してきました。特にコンパイラシステムの証明を保存する中間表現として使用することに興味があります。 (共)再帰型は、を唯一の型コンストラクタとして使用して、計算上表現できることを理解しています。しかし、それらは帰納法による証明の構築には使用できないことを許しました(許してください、今どこにあるかわかりません!)、たとえば、プレーンなCoC でであることを証明できませんでした(ただし、は)。0 ≠ 1 ナット Π (N:* )。Π (S :N → N)。Π (Z :N)。NΠΠ\Pi0 ≠ 10≠10\neq 1ナットNat\texttt{Nat}Π (N:∗ )。Π (S:N → N)。Π (Z:N)。NΠ(N:∗).Π(S:N→N).Π(Z:N).N\Pi(\mathbb{N}:*).\Pi(S:\mathbb{N}\rightarrow\mathbb{N}).\Pi(Z:\mathbb{N}).\mathbb{N} これが、彼らが帰納的構造(CIC)の計算を構築した理由だと思います。これは正しいです?しかし、なぜ?(共)帰納型をプリミティブとして使用しないと、そのような証明を表現できない理由を説明する資料は見つかりませんでした。これが当てはまらない場合、CICでそれらをプリミティブとして追加するのはなぜですか?

3
ポリモーフィズムと帰納的データ型
私は興味がある。私はOCamlでこのデータ型に取り組んできました: type 'a exptree = | Epsilon | Delta of 'a exptree * 'a exptree | Omicron of 'a | Iota of 'a exptree exptree これは、明示的に型指定された再帰関数(ごく最近追加された機能)を使用して操作できます。例: let rec map : 'a 'b. ('a -&gt; 'b) -&gt; 'a exptree -&gt; 'b exptree = fun f -&gt; begin function | Epsilon -&gt; …


2
Coqの定理証明
バックグラウンド 私はCoqだけで支援を学んでいます。これまでのところ、急いでイヴベルトットのコックを読み終えました。現在、私の目標は、いわゆる除算アルゴリズムで終わる、自然数に関するいくつかの基本的な結果を証明することです。しかし、私はその目標に向かう途中でいくつかの後退に遭遇しました。特に、次の2つの結果は、私が最初に想像したよりもCoqで証明するのが難しいことを示しています(しゃれた意図)。実際、多くの実りのない試みの後、私はそれらを手動で証明する手段を講じました(以下に示すように)。これは明らかに、私がCoqの処理に習熟するのに役立つわけではありません。これが私がこのフォーラムを利用する理由です。私の希望は、このサイトの誰かが有能で喜んでいることです下記の証明をCoqが受け入れる証明に変換するのに役立ちます。すべての助けに心から感謝しています! 定理A すべてのための証明:x,y∈Nx,y∈Nx,y \in N x&lt;S(y)⊂x&lt;y∨I(N,x,y)x&lt;S(y)⊂x&lt;y∨I(N,x,y)\begin{equation} x < S(y) \subset x < y \lor \text{I}(N,x,y) \end{equation} と仮定します。したがって、と ため、(Peano 1bおよび3)x&lt;S(y)x&lt;S(y)x < S(y)z∈Nz∈Nz \in NI(N,x+S(z),S(y))(*)(*)I(N,x+S(z),S(y))\begin{equation} \text{I}(N,x+S(z),S(y)) \tag{*}\end{equation}I(N,x+z,y)I(N,x+z,y)\begin{equation} \text{I}(N,x+z,y) \end{equation} 述語を定義しQ(u):=(I(N,x+u,y)⊂x&lt;y∨I(N,x,y)Q(u):=(I(N,x+u,y)⊂x&lt;y∨I(N,x,y)\begin{equation} Q(u):=(\text{I}(N,x+u,y) \subset xy¬I(N,x,y)¬I(N,x,y)\neg \text{I}(N,x,y)x&gt;yx&gt;yx>y y&gt;xy&gt;xy>xI(N,x,y)I(N,x,y)\text{I}(N,x,y) 我々は維持上に固定し、入会を。場合我々は全てに対して基本ケースを証明します。次に、定理がについて成立するとします。ここで、定理を証明したいと思います。のトリコトミーから、と 3つのケースがあり。もし、次いで明確。もし、次いで、(ASのためのすべて)。最後に、yyyxxxI(N,0,y)I(N,0,y)\text{I}(N,0,y)0&lt;y∨I(N,0,y)0&lt;y∨I(N,0,y)0 < y \lor \text{I}(N,0,y)yyyxxxS(x)S(x)S(x)xxxx&lt;y,I(N,x,y)x&lt;y,I(N,x,y)xyx&gt;yx&gt;yx>yS(x)&gt;yS(x)&gt;yS(x) >yI(N,x,y)I(N,x,y)\text{I}(N,x,y)S(x)&gt;yS(x)&gt;yS(x) >yS(x)&gt;xS(x)&gt;xS(x) >xx∈Nx∈Nx\in \mathbb{N}x&lt;yx&lt;yx <y次に、定理Aによってまたはが得られ、どちらの場合も完了です。 S(x)&lt;yS(x)&lt;yS(x) < yI(N,S(x),y)I(N,S(x),y)\text{I}(N,S(x),y)(□)(◻)\begin{equation} \tag{$\square$} \end{equation} …

1
Coqにlet表現がコア言語で含まれているのはなぜですか
Coqには、コア言語のlet式が含まれています。let式を次のようなアプリケーションに変換できます。タイプ チェック時にlet x : t = v in b ~&gt; (\(x:t). b) v 値vを使用できないため、これが常に機能するとは限りませんb。ただし、これは、フォームのアプリケーションのタイプチェックを特別なケーシングで簡単に修正できます(\(x:t). b) v。これにより、タイプチェック中に特殊なケースを犠牲にしてlet式を削除できます。Coqインクルードにlet式がまだ含まれているのはなぜですか?それらには他の利点がありますか(特別なケースを必要としない以外に)?

1
Software Foundationsによるbaz_num_elts演習
私はSoftware Foundationsで次の演習に参加しています。 (** **** Exercise: 2 stars (baz_num_elts) *) (** Consider the following inductive definition: *) Inductive baz : Type := | x : baz -&gt; baz | y : baz -&gt; bool -&gt; baz. (** How _many_ elements does the type [baz] have? (* FILL IN HERE *) [] …
9 coq 

2
COQで実数/確率論のフレームワークを作成する作業はありますか?
COQは、帰納的な構造の計算を使用するインタラクティブな定理証明です。つまり、帰納的な型に大きく依存しています。これらを使用すると、自然数、有理数、グラフ、文法、セマンティクスなどの離散構造が非常に簡潔に表現されます。 しかし、証明アシスタントが好きになったので、実数、複素数、確率限界など、数えきれない構造のライブラリーがあるかどうか疑問に思っていました。もちろん、これらの構造を帰納的に(少なくとも私の知る限りでは)定義することはできませんが、たとえば公理的アプローチを使用して、公理的に定義することはできます。 ライブラリとして、基本的なプロパティ、またはチャーノフバウンドやユニオンバウンドなどの確率的バウンドを提供する作業はありますか?

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