Questions tagged «dependent-type»

类型理论和类型系统的重叠特征。

5
我能学到的最直观的依存类型理论是什么?
我有兴趣真正掌握依赖类型。我读过最TaPL和读取(如果不是完全吸收)“相关类型” ATTaPL。我也阅读并浏览了很多有关依赖类型的文章。 许多类型理论的讨论似乎都集中在向以前的类型系统添加增量功能,而不是“从类型系统X进行的下一个大型概括是什么?”。依赖类型似乎是System F的下一个大型概括,但是我还没有找到直观,规范的依赖类型语言。对(归纳)构造的微积分的许多引用使我认为CoC是该语言,但是我所看到的对该语言的解释对我而言似乎并不十分清楚或直观。 我期望/猜测这种语言将具有以下功能:(并且请让我知道是否有任何特别的东西因为困惑或不现实而跳出来) 广义抽象(可以具有从类型层次结构中的任何域到其他种类,种类->术语,术语->类型'''等的功能) 具有无限的键入层次结构(术语:类型:类型':类型”:...) 最少数量的基本元素。我在想该语言对于每个级别都只声明一个元素。例如,它可能断言(():Unit:Type:Type':...)。其他元素是从这些元素构建的。 总和和产品类型是可导出的。 我也在寻找该语言的解释,理想情况下将讨论: 该语言中抽象与量化之间的关系。如果它们不统一,请解释为什么它们不统一。 无限类型层次结构明确 我之所以问这个问题,是因为我想学习依存类型理论,也因为我想编写一份指南,假设具有一点CS知识,就可以教授证明助手和依存类型语言的用法以及如何理解。 (交叉发布到Reddit)

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

4
合同与依存类型之间的关系
我一直在阅读一些有关依赖类型和编程合同的文章。从我所阅读的大部分内容来看,似乎合同是动态检查的约束,而依赖类型是静态检查的。 有一些论文使我认为可以对合同进行部分静态检查: 混合类型检查(C. Flanagan-2006) 统一混合类型和合同(J.Gronski,C.Flanagan-2007) 这样,似乎有很多重叠,而我对合同和依存类型的分类就开始消失了。 在我所缺少的两个概念中,还有更深入的东西吗?还是这些只是代表相同基础概念的模糊类别?


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
相关记录的参数化和投影消除
π 1:甲× 乙→ 甲π 2:甲× 乙→ 乙A×B≜∀α.(A→B→α)→αA×B≜∀α.(A→B→α)→α A \times B \triangleq \forall\alpha.\; (A \to B \to \alpha) \to \alpha π1:A×B→Aπ1:A×B→A\pi_1 : A \times B \to Aπ2:A×B→Bπ2:A×B→B\pi_2 : A \times B \to B 即使F型的自然读数是一对带有let样式消除的对,也并不令人惊讶。let(x,y)=pinelet(x,y)=pine\mathsf{let}\;(x,y) = p \;\mathsf{in}\; e,因为两种对在直觉逻辑中是可互换的。 现在,在具有强制性量化的从属类型理论中,您可以遵循相同的模式来编码从属记录类型Σx:A.B[x]Σx:A.B[x]\Sigma x:A.\; B[x]为 Σx:A.B[x]≜∀α.(Πx:A.B[x]→α)→αΣx:A.B[x]≜∀α.(Πx:A.B[x]→α)→α \Sigma x:A.\;B[x] \triangleq \forall\alpha.\; (\Pi x:A.\; B[x] \to \alpha) …

1
如何显示不存在具有依赖类型的系统中的类型(即,公式不可证明)?
对于没有依赖类型的系统,例如Hindley-Milner类型系统,这些类型对应于直觉逻辑的公式。在那里,我们知道它的模型是Heyting代数,特别是为了证明一个公式,我们可以限制为一个Heyting代数,其中每个公式都由一个开放子集表示。RR\mathbb{R} 例如,如果我们想表明,没有人居住,我们构建了一个映射φ从公式的子集开放ř通过定义: φ (α )∀α.α∨(α→⊥)∀α.α∨(α→⊥)\forall\alpha.\alpha\lor(\alpha\rightarrow\bot)ϕϕ\phiRR\mathbb{R} 然后 ϕ (α → ⊥ )ϕ(α)=(−∞,0)ϕ(α)=(−∞,0)\begin{align} \phi(\alpha) &= (-\infty, 0) \end{align} 这表明原始公式无法得到证明,因为我们有一个模型,该模型不成立,或者等效地(根据Curry-Howard同构),无法使用该类型。ϕ(α→⊥)ϕ(α∨(α→⊥))=int([0,∞))=(0,∞)=(−∞,0)∪(0,∞)=R∖0.ϕ(α→⊥)=int([0,∞))=(0,∞)ϕ(α∨(α→⊥))=(−∞,0)∪(0,∞)=R∖0.\begin{align} \phi(\alpha\rightarrow\bot) &= \mbox{int}( [0, \infty) ) \\ & = (0,\infty) \\ \phi(\alpha\lor(\alpha\rightarrow\bot)) &= (-\infty, 0) \cup (0,\infty) \\ &= \mathbb{R} \setminus {0}. \end{align} 另一种可能性是使用Kriepke框架。 对于依赖类型的系统,是否有任何类似的方法?像Heyting代数或Kripke框架的一般化? 注意:我不是在要求决策程序,我知道不可能有任何程序。我只是在寻求一种可以证明公式不可证明的机制-说服某人它不可证明。

2
在霍特书中,大多数类型创建者是多余的吗?如果是这样,为什么?
在Hott的第1章和附录A中,介绍了几种基本类型族(宇宙类型,从属函数类型,从属对类型,副产品类型,空类型,单位类型,自然数类型和标识类型)以构成基础用于同伦类型理论。 但是,在给定的Universe类型和相关函数类型看来,您可以构造所有其他“原始”类型。例如,Empty类型可以改为 ΠT:U.T 我认为其他类型的构造也可以类似于它们在纯CC中的构造(即,仅从定义的归纳部分派生类型)。 在第5章和第6章中介绍的归纳/ W类型明确地使其中许多类型变得多余。但是归纳/ W类型似乎是该理论的可选部分,因为存在关于它们如何与HoTT相互作用的公开问题(参见至少在本书出版时)。 因此,我对为什么将这些附加类型表示为原始类型感到非常困惑。我的直觉是,基础理论应尽可能少,并且将冗余的Empty类型重新定义为该理论中的原始元素似乎非常武断。 做出这个选择了吗 出于某些我不知道的元理论原因? 由于历史原因,要使类型理论看起来像过去的类型理论(不一定是基础理论)? 计算机接口的“可用性”? 对于我不知道的证据搜索有什么好处? 类似于:Martin-Löf类型理论的最低要求,https: //cs.stackexchange.com/questions/82810/reducing-products-in-hott-to-church-scott-encodings/82891#82891

2
依拉类型演算的Church-Rosser属性?
这是众所周知的是,教会罗塞属性会为 -reduction在简单类型的演算。在并非所有涉及λ-项的方程都是可导数的意义上,这意味着演算是一致的:例如,K ≠ I,因为它们不共享相同的范式。βηβη\beta \etaλλ\lambda≠≠\neq 还已知可以将结果扩展到对应于产品类型的对。 但是我想知道是否可以进一步扩展具有多态类型的依存类型lambda微积分(也许)的结果,例如构造微积分? 任何参考也将很棒! 谢谢

3
用公理扩展CIC有什么负面影响?
将公理添加到CIC确实会对定义和定理的计算内容产生负面影响吗?我的理解是,在该理论的正常行为,任何封闭来看会减少它的规范形式,例如,如果是真实的,那么ñ必须降低到窗体的一个术语(S ^ ü Ç Ç 。。。(小号ü c c (0 )))。但是,当假设一个公理时(例如函数扩展性公理),我们只是向系统添加一个新常数。n:Nn:Nn : \mathbb{N}nnn(succ...(succ(0)))(succ...(succ(0)))(succ ... (succ (0)))funext funext:Πx:Af(x)=g(x)→f=gfunext:Πx:Af(x)=g(x)→f=g funext : \Pi_{x : A} f (x) = g (x) \to f = g 这将只是“神奇”产生的一个证明从任何证明Π X :一个 ˚F (X )= g ^ (X ),没有在所有任何计算的意义(在这个意义上,我们不能提取他们的任何代码?)f=gf=gf = gΠx:Af(x)=g(x)Πx:Af(x)=g(x)\Pi_{x : A} f (x) = g (x) 但是为什么这个“坏”呢? …

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

1
PTS / CoC中教会编码类型的从属类型
我正在Barendregt的lambda多维数据集中尝试使用纯类型系统,特别是最强大的系统,即构造微积分。该系统具有排序*和BOX。仅出于记录目的,下面我使用Morte工具https://github.com/Gabriel439/Haskell-Morte-Library的具体语法,该语法与经典的lambda演算很接近。 我看到我们可以通过某种类似于教堂的编码(对于代数数据类型也称为Boehm-Berarducci同构)来模拟归纳类型。作为一个简单的示例,我将type Bool = ∀(t : *) -> t -> t -> t与构造函数True = λ(t : *) -> λ(x : t) -> λ(y : t) -> xand一起使用False = λ(t : *) -> λ(x : t) -> λ(y : t) -> y。 我看到,术语级函数Bool -> T的类型通过实际上是同一性的函数Product T T与具有经典Product = λ(A : *) …

2
依赖类型的编译器比解释器难吗?
我一直在学习有关实现依赖类型的知识,例如本教程,但其中大多数是实现解释器。我的问题是,为依赖类型实现编译器似乎比编译器难得多,因为您可以真正评估依赖类型参数以进行类型检查。 所以 我的天真印象对吗? 如果是正确的话,关于实现支持依赖类型的静态检查语言的任何示例/资源?

2
严格积极性背后的直觉?
我想知道是否有人可以给我直觉,为什么归纳数据类型严格的正定性可以保证强大的规范化。 明确地说,我看到负出现是如何导致分歧的,即通过定义: data X where Intro : (X->X) -> X 我们可以编写一个发散函数。 但我想知道,怎样才能证明严格正归纳类型不容许分歧?也就是说,是否有某种归纳措施可以让我们构造强规范化的证明(使用逻辑关系或类似关系)?此类证据在哪里会针对负面事件进行分解?有没有很好的参考文献显示出归纳类型语言的强大归一化?

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.