Questions tagged «coq»

Coq是基于归纳微积分的交互式定理证明者。

6
学习自动定理证明
我正在独自学习自动定理证明 / SMT求解器 / 证明助手,并从此处开始发布有关该过程的一系列问题。 请注意,如果没有(数学)逻辑的背景知识,就很难轻易消化这些主题。如果您对基本术语有疑问,请继续阅读,例如M. Huth和M. Ryan 撰写的《计算机科学中的逻辑》(特别是第一,第二和第四章),或者P撰写的《数学逻辑与类型理论导论》。安德鲁斯。 有关高阶逻辑(HOL)的简短介绍,请参见此处。 我看着考克(Coq),并阅读了伊莎贝尔(Isabelle)简介的第一章;自动定理证明的类型 我认识Prolog已有几十年了,现在正在学习F#,因此ML,O'Caml和LISP很有用。Haskell是另一种野兽。 我有以下书籍 艾伦·罗宾逊和安德烈·冯科夫编辑的《自动推理手册》 约翰·哈里森(John Harrison)的“实用逻辑和自动推理手册” Franz Baader和Tobias Nipkow撰写的“术语重写和所有内容” Coq和Isabelle有什么区别? 我应该学习Isabelle还是Coq,或者两者都学习? 首先学习Isabelle或Coq有优势吗? 在此处找到系列的下一个问题。

2
为什么C的void类型不同于Empty / Bottom类型?
维基百科以及我发现的其他来源都将C的void类型列为单位类型,而不是空类型。我觉得这很混乱,因为在我看来,它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)的“ 接受建构主义数学的五个阶段 ”,他说存在两种矛盾的证明(或者数学家称之为矛盾证明的两件事): 假设是错误的……等等等等,矛盾。因此,P为真。PPPPPP 假设是真的...等等等等,矛盾。因此, P为假。PPPPPP 第一个等效于排除中间定律(LEM),第二个等效于如何证明否定。 停止问题(HP)的不确定性证明是通过矛盾证明:假设有一台机器可以决定HP ...等等等等,这是矛盾的。因此,D不存在。dDDdDD 因此,让为“ D存在并可以决定HP”。假设P是真的...等等等等,矛盾。因此,P为假。PPPdDDPPPPPP 这看起来像是第二种矛盾的证明,因此可以证明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
有人真的创建了一个可以按照规范编写计算机程序的系统吗?
有没有人实际编写过一个可以生成计算机程序的系统(软件或纸上的详细说明以及简单的示例)?余输入,它创建了一个程序,它列出了素数小于10 P - [R 我中号È (X )被简单地定义为 1 &lt; X ∧ ∄ 甲Prime(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
用于假人的Monadic二阶逻辑
我是一个对自动机有所了解的程序员,但对逻辑并不了解。 我在论文中读到,两者之间有着密切的联系。确定性有限自动机(DFA),树自动机和可见下推自动机都与Monadic二阶逻辑(MSO)相关。尽管我了解自动机,人们(在论文中)试图向我解释与MSO的关系,但他们始终假设自己具有强大的逻辑背景和对MSO的理解。 当我阅读有关逻辑的书籍和课程时,它们大多只处理一阶逻辑,这看起来很简单,并且仅包含以下几个概念:变量,或者(并非暗示)全部存在,等等。 有人可以向我解释或指向可以解释以下内容的资源: 与一阶逻辑相比,二阶逻辑是什么? 什么是单子逻辑与非单子逻辑? 可判定二阶逻辑为什么单调很重要,或者为什么这是错误的问题? 为什么一元二阶逻辑是可确定的? 与至少DFA的关系? 如果它是一种资源,并且假设我是程序员而不是逻辑学家,那将很好。这意味着我想了解如何将其实现为代码,因为在那之前数学对我来说就像是魔力;) 谢谢您能给我的任何帮助。我真的很感激。

1
Coq中的Set和Type有什么区别?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为Computer Science Stack Exchange 的主题。 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中证明(即使可以键入)。ΠΠ\Pi0≠10≠10\neq 1NatNat\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。到目前为止,我已经匆匆完成了Yves Bertot的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} 假设。因此,存在一个与 因此,通过(皮亚诺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) 我们使固定并在归纳。当对于所有,我们都有,这证明了基本情况。接下来,假设定理对成立;现在我们要证明的定理。从对的三分法中可以看出三种情况:和。如果,则显然。如果,则(对于所有都是)。最后,假设X 我(Ñ ,0 ,ÿ )0 &lt; Ý ∨ 我(Ñ ,0 ,ÿ )ÿ X 小号(X )X X …

1
为什么Coq会在其核心语言中包含let表达式
Coq在其核心语言中包含let表达式。我们可以这样将let表达式转换为应用程序: let x : t = v in b ~&gt; (\(x:t). b) v 我知道这并不总是可行,因为v在进行typechecking时该值不可用b。但是,可以通过特殊外壳对表单应用程序进行类型检查来轻松解决此问题(\(x:t). b) v。这使我们可以在进行类型检查时以特殊情况为代价删除let表达式。为什么Coq include仍然包含let表达式?它们是否还有其他优点(除了不需要特殊情况)?

1
来自软件基金会的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 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.