Questions tagged «coq»

Coq是一个交互式定理证明者。

3
浅嵌入与深嵌入
在将逻辑编码到诸如Coq或Isabelle的证明助手中时,需要在使用浅埋和深埋之间进行选择。在浅层嵌入中,逻辑公式直接写在定理证明者的逻辑中,而在深层嵌入中,逻辑公式表示为数据类型。 各种方法的优点和局限性是什么? 是否有任何指南可用于确定使用哪个? 是否可以任何系统的方式在两种表示形式之间切换? 作为动机,我想将各种与安全性相关的逻辑编码到Coq中,并想知道不同方法的优缺点。


3
为什么Coq有Prop?
Coq具有类型Prop的证明无关命题,在提取过程中将其丢弃。如果我们仅将Coq用于证明,则有此原因是什么?Prop是强制性的,因此Prop:Prop可自动推论Universe索引,我们可以在任何地方使用Type(i)代替。道具似乎使所有事情变得非常复杂。 我读到,在Luo的书中将Set和Prop分开是有哲学原因的,但是,我在书中没有找到它们。这些是什么?

2
为什么Agda和Coq在严格的积极性上有分歧?
我偶然发现了Agda和Coq之间一个令人困惑的分歧,这显然与它们的类型理论之间最众所周知的区别(例如(im)预测性,归纳递归等)没有关系。 特别是,Agda接受以下定义: data Ty : Set0 -> Set0 where c1 : Ty ℕ c2 : Ty (Ty ℕ) 而等效的Coq定义则被拒绝,因为[Ty _]作为c2中其自身的索引的出现被认为违反了严格的积极性。 Inductive Ty : Set -> Set := | c1 : Ty nat | c2 : Ty (Ty nat). 实际上,这种情况几乎完全是Coq'Art第14.1.2.1节中违反严格积极性的一个例子: Inductive T : Set -> Set := c : (T (T …
24 type-theory  coq 


1
Coq +排除中间的一致性的证明在哪里
我已经看到(并听到)它声称可以在Coq中加入经典的排除中间公理是安全的,但是我似乎找不到支持该主张的论文。我看到Coq Wiki上列出的有关排除中间的论文显示了与强制性Set不一致。 事实上,似乎Coquand指出,加排中(的居民)在他的第4.5.3行为准则不一致的说明大会的元理论(PDF)。但是,本节对我来说有些深奥,所以我很可能会误解他。A+¬AA+¬AA+\neg A

2
为什么是无限类型层次结构?
Coq,Agda和Idris具有无限的类型层次结构(类型1:类型2:类型3:...)。但是,为什么不像λC那样代替它呢?λC是最接近构造演算的lambda立方系统,它只有两种,和and,并且有这些规则?∗∗*◽◽◽ ∅⊢∗:◽∅⊢∗:◽\frac {} {∅ ⊢ * : ◽} Γ⊢T1:s1Γ,x:T1⊢t:T2Γ⊢(λx:T1,t):(Πx:T1,T2)Γ⊢T1:s1Γ,x:T1⊢t:T2Γ⊢(λx:T1,t):(Πx:T1,T2)\frac {Γ ⊢ T _ 1 : s _ 1 \qquad Γ, \: x : T _ 1 ⊢ t : T _ 2} {Γ ⊢ (λ \: x : T _ 1, \: t) : (Π \: x : T _ …

1
证明Coq中的证明无关紧要?
有没有办法证明Coq中的以下定理? Theorem bool_pirrel : forall (b : bool) (p1 p2 : b = true), p1 = p2. 编辑:尝试简要说明“什么证明无关紧要”(如果我错了或不正确,请纠正我) 基本思想是,在命题世界(或PropCoq中的排序)中,您(并且应该)真正关心的是命题的可证明性,而不是它的证明,可能有很多(或没有)。如果您有多个证明,从可证明性的角度来看,它们在证明相同命题的意义上是相等的。因此,它们的区别是无关紧要的。这不同于来看,你真正关心的两个词的区别,计算点例如,基本上,你不想让两个居民bool类型(或Set在勒柯克的话),即true和false相等。但是,如果将它们放入Prop,它们将被平等对待。

3
谓词在类型论中归纳定义中的作用是什么?
我们经常要定义一个对象一∈ ü一种∈üA \in U根据一些推理规则。这些规则表示生成函数FFF,当它是单调的,产生一个至少固定点。我们取是“归纳定义”的。此外,单调性使我们能够以“归纳原理”进行推理,以确定集合何时包含(即,何时属性普遍持有)。μ ˚FμF\mu F甲:= μ ˚F一种:=μFA := \mu F一种一种AFFFA一种AA一种A 在勒柯克这相当于编写定义有明确的介绍条款。尽管此定义表示特定函数,但该函数不一定是单调的。因此,Coq使用一些语法检查来确保定义的“格式正确”。在某种程度上,它拒绝了在引入词类型中出现在负数位置的Inductive一世ñdüCŤ一世vË\mathtt{Inductive}A一种AFFFA一种A (如果到目前为止我的理解存在缺陷,请纠正我!) 首先,关于Coq的一些问题: 1)Coq中的语法检查是否仅用于确保的定义为谓语?(如果是这样,则难辨性是定义定义不正确的唯一方法吗?)还是检查单调性?(相应地,非单调性会杀死它吗?)A一种A 2)这种否定出现是否必然意味着的定义是强制性/非单调性的?还是Coq在这种情况下根本无法验证其定义是否正确?AA一种AA一种A 更一般地说: 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
Coq中OCaml的形式语义
几年前,欧文斯(Owens)在HOL 中将 OCaml的很大子集(称为OCamllight)的语义形式化。最近,Kreitz,Hayden和Hickey在Nuprl中实现了OCaml较小子集的类型理论语义。 Coq是否有类似的发展?

1
如何在Coq中的两个参数上归纳定义一个函数?
我如何才能说服Coq以下给出的递归函数终止?该函数带有两个归纳参数。从直觉上讲,由于任何一个参数都已分解,因此递归终止。 具体来说,该函数将两棵树作为输入。 Inductive Tree := | Tip: Tree | Bin: Tree -> Tree -> Tree. 在“树”上,我喜欢执行以下归纳样式。 Inductive TreePair := | TipTip : TreePair | TipBin : Tree -> Tree -> TreePair | BinTip : Tree -> Tree -> TreePair | BinBin : TreePair -> TreePair -> TreePair. Fixpoint pair (l …

4
依赖类型理论中的对象建模(OOP)
我对依赖类型理论中的面向对象编程中的对象建模感兴趣。作为一个可能的应用程序,我希望有一个模型,可以描述命令式编程语言的不同功能。 我只能找到一篇关于依赖类型理论中的对象建模的论文,即: A. Setzer(2006)的依赖类型理论中的面向对象编程。 是否有我遗漏的主题的更多参考文献,或者是否有更新的参考文献? 是否可以为定理证明者(例如Coq或Agda)提供实现(即证明)?

3
类型检查器的正确性证明实际上应该证明什么?
我已经进行了几年编程,但是对理论CS并不熟悉。我最近一直在尝试学习编程语言,并且其中的一部分是类型检查和推断。 我的问题是,如果我尝试为一种编程语言编写类型推断和检查程序,并且希望证明我的类型检查器可以工作,那么我要寻找的证明到底是什么? 用通俗易懂的语言,我希望类型检查器能够识别出在运行时可能发生的代码中的任何错误。如果我要使用类似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.