Questions tagged «dependent-types»

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




1
可确定推断的最强大的已知类型系统是什么?
众所周知,Hindley-Milner类型推断(具有多态性的简单类型的演算)具有可确定的类型推断:您可以为任何程序重建原理类型而无需任何注释。λλ\lambda 添加哈斯克尔风格类型类似乎保留此可判定性,但进一步增加使得推理没有标注不可判定的(类型的家庭,GADTs,依赖类型,等级-N类型,系统等)ωω\omega 我想知道:最能断定推断的已知类型系统是什么?它会介于Hindley-Milner(完全可确定)和依赖类型(完全不可确定)之间。是否可以添加DT的某些方面来保持推理可判定性?已经进行了哪些研究以了解可以将其推进多远? 我意识到,没有一个最强大的系统,可能有无限的微小增量变化可以添加到HM保持推理中。但是可能已经发现了一些实用的系统候选对象。 编辑:因为没有“最强”的系统,我会接受,勾勒出一个答案显着扩展辛德雷米尔纳与可判定的推理系统。例如液体类型,等级2等。


1
从属类型,细化类型和Hoare逻辑之间的区别
我几乎不了解依赖类型理论。来自维基百科: 从属类型是其定义取决于值的类型。 从我的类型理论课程中,我记得一个从属类型是: 由类型索引的类型族。 但是我对依赖类型,细化类型和hoare逻辑感到困惑。 因为从Depenedent VS细化类型来看,细化类型看起来像Hoare逻辑。除了仅允许陈述必须满足的陈述之外,还有哪些功率改进类型还提供什么(看起来与Hoare Logic几乎相同)? 相较于细化类型,从属类型还提供了哪些其他功能?并且从属类型比优化类型+ Sat / Constraint求解器更强大。 任何人都可以举例说明。

2
“最小”直觉型理论?
我为人们不断在类型理论中添加新类型感到惊讶,但似乎没有人提到一种最基本的理论(或者我找不到它)。我以为数学家喜欢极少的东西,不是吗? 如果我正确理解的话,在具有强制性的类型理论中Prop,λ-抽象和Π型就足够了。说够了,我的意思是它可以用作直觉逻辑。其他类型可以定义如下: ⊥ =dË ˚FΠ α :P[R Ø p 。α¬ 甲=dË ˚FA → ⊥甲∧ 乙=dË ˚FΠ ç:P[R Ø p 。(A → B → C)→ C甲∨ 乙=dË ˚FΠ ç:P[R Ø p 。(A → C)→ (B → C)→ C∃X :小号(P(x ))=dË ˚FΠ α :P[R Ø p 。(Π X :小号。Px → α )→ …

3
路径归纳是否具有建设性?
我正在阅读HoTT的书,并且很难理解路径归纳法。 当我查看1.12.1节中的类型时: ind=A:∏C:∏x,y:A(x=Ay)→U((∏x:AC(x,x,reflx))→∏x,y:A∏p:x=AyC(x,y,p)),ind=A:∏C:∏x,y:A(x=Ay)→U((∏x:AC(x,x,reflx))→∏x,y:A∏p:x=AyC(x,y,p)),\text{ind}_{=_A}:\prod_{C:\prod\limits_{x,y:A}(x=_Ay)\to \mathcal{U}} \left( \left(\prod_{x:A}C(x,x,\text{refl}_x)\right) \to \prod_{x,y:A}\prod_{p:x=_Ay} C(x,y,p) \right), 对于理解这意味着什么,我没有任何问题(我只是从内存中写出类型,以进行检查)。 下一个问题是我的问题: with the equalityind=A(C,c,x,x,reflx):≡c(x)with the equalityind=A(C,c,x,x,reflx):≡c(x)\text{with the equality}\quad \text{ind}_{=_A}(C,c,x,x,\text{refl}_x):\equiv c(x) 我的第一印象是,这最后一个表达式不限定所得到的函数f:∏x,y:A∏p:x=AyC(x,y,p),f:∏x,y:A∏p:x=AyC(x,y,p),f:\prod_{x,y:A}\prod_{p:x=_Ay} C(x,y,p), 但仅陈述其性质。 这与先前的归纳原理indA×BindA×B\text{ind}_{A\times B},indA+BindA+B\text{ind}_{A+B}或示例形成对比indNindN\text{ind}_\mathbb{N}- 为这些元素定义了方程式 -我们确实知道在给定前提的情况下如何构造结果函数。这与本章所提到的类型理论的“建设性”是一致的。 回到ind=Aind=A\text{ind}_{=_A},我对它(未定义)的事实感到怀疑。指出元素fff 刚刚存在似乎与本章的其余部分格格不入。实际上,第1.12.1节似乎强调我的印象是错误的,我们实际上已经定义了 ... 的函数 f:∏x,y:A∏p:x=AyC(x,y,p),f:∏x,y:A∏p:x=AyC(x,y,p),f:\prod_{x,y:A}\prod_{p:x=_Ay} C(x,y,p),由下式定义 从路径感应c:∏x:AC(x,x,reflx)c:∏x:AC(x,x,reflx)c:\prod_{x:A}C(x,x,\text{refl}_x),而且 满足 ...f(x,x,reflx):≡c(x)f(x,x,reflx):≡c(x)f(x,x,\text{refl}_x):\equiv c(x) 这使我完全困惑,但是我觉得这一点对于所有进一步的发展都非常重要。那么,应该选择的两个读数中的哪个?或者,也许我错过了一些重要的微妙之处,答案是“都不”? ind=Aind=A\text{ind}_{=_A}

2
我可以有一个“依赖的副产品类型”吗?
我正在阅读HoTT的书,并且对第一章中的内容有一个(可能很幼稚)问题。 本章介绍函数类型 ,然后通过使依赖于来对其进行概括 这就是所谓的从属函数类型。B x :A B :A → U,f:A→Bf:A→B f:A\to B BBBx:Ax:Ax:A B:A→U,g:∏x:AB(x)B:A→U,g:∏x:AB(x)B:A\to\mathcal{U},\qquad g:\prod_{x:A}B(x) 接下来,本章介绍产品类型 ,然后通过使依赖于归纳产品类型 ,这称为依赖对类型。B x :A B :A → U,f:A×Bf:A×B f:A\times BBBBx:Ax:Ax:A B:A→U,g:∑x:AB(x)B:A→U,g:∑x:AB(x)B:A\to\mathcal{U},\qquad g:\sum_{x:A}B(x) 我绝对可以在这里看到一个模式。 接下来,本章将介绍副产品类型 和... combobreaker ...没有讨论这种类型的依赖版本。f:A+Bf:A+B f:A+B 对此是否有一些基本限制,或者与本书的主题无关?无论如何,有人可以帮助我了解功能和产品类型的原因吗?是什么让这两个如此特别,以至于它们被泛化为依赖类型,然后用于构建其他所有内容?

1
Coq中的Set和Type有什么区别?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为Computer Science Stack Exchange 的主题。 2年前关闭。 AFAIU类型可以是Set其元素为程序或其proposition元素为证明的类型。因此,基于这种理解: Inductive prod (X Y: Type) : Set := | pair: X -> Y -> prod X Y. 以下代码应编译,但不是由于以下错误。如果我Set用Type或Type与Set它一起更改,则可以正常编译。有人可以帮助我了解以下错误的含义吗?我正在尝试使用Software Foundations书籍自学Coq。 错误: Error: Large non-propositional inductive types must be in Type.

2
将HoTT中的产品简化为教堂/斯科特编码
因此,我目前正在与某些人一起阅读HoTT书。我声称,通过将递归的类型作为等效类型的灵感,我们将看到的大多数归纳类型都可以简化为仅包含依赖函数类型和Universe的类型。我开始勾勒出我认为这将如何工作的草图,经过一番绊脚石,我得出了我认为是答案的答案。 (⋅ ,⋅ )≡ λ 一个:甲。λ b :乙。λ Ç :ü。λ 克:甲→ 乙→ Ç 。g (a )(b )i n d⋅ × ⋅ ≡ ΠA ,B ,C:U(A → B → C)→ C⋅×⋅≡∏A,B,C:U(A→B→C)→C\cdot \times \cdot \equiv \prod_{A, B, C : \mathcal{U}} (A \to B \to C) \to C (⋅ ,⋅ )≡ λ 一个:甲。λ …


1
构造演算中的是什么?
我正在查看构造演算及其在Lambda Cube中的位置。 如果我理解正确,则可以将多维数据集的每个轴都认为是向简单类型的演算添加了另一个涉及类型的操作。第一个轴添加类型到术语运算符,第二个类型到类型运算符和第三个从属类型或术语到类型运算符。CoC具有这三个要素。λ→λ→\lambda_\to 但是,CoC引入了一个术语,并根据推理规则指出,但未使用。我了解这是用于同义命题,但是逻辑命题并未以此为准。P - [R ø p :Ť ÿ p ëPropPropPropProp:TypeProp:TypeProp : Type 您能否向我解释的用途,出现的时间/地点,并根据立方体的轴进行解释(如果确实可以这样做的话)?PropPropProp

2
依赖类型理论中的宇宙
我正在Homotopy类型理论在线书中阅读有关依赖类型理论的内容。 在“ 类型论”一章的第1.3 节中,它介绍了宇宙层次的概念:ü0:U1个:U2:⋯ü0:ü1个:ü2:⋯\mathcal{U}_0 : \mathcal{U}_1 : \mathcal{U}_2 : \cdots,其中 每个宇宙ü一世ü一世\mathcal{U}_i是下一个宇宙的元素ü我+ 1ü一世+1个\mathcal{U}_{i+1}。此外,我们假设我们的宇宙是累积的,即,所述的所有元件一世Ť ^ h一世ŤHi^{\mathrm{th}}宇宙也在的元件(我+ 1 )Ť ^ h(一世+1个)ŤH(i+1)^{\mathrm{th}}宇宙。 但是,当我看一下附录A中各种类型的构成规则时,乍一看,如果有一个Universe出现在柱上方,则该Universe出现在下方。例如,对于联产品类型形成规则: Γ ⊢ 甲:ù一世Γ ⊢ 乙:ù一世Γ ⊢ 甲+ 乙:ù一世(+ - ˚Fø - [R 中号)Γ⊢一个:ü一世Γ⊢乙:ü一世Γ⊢一个+乙:ü一世(+--FØ[R中号)\dfrac{\Gamma \vdash A : \mathcal{U}_i \quad \Gamma \vdash B : \mathcal{U}i}{\Gamma \vdash A + B : \mathcal{U}_i}(+\mbox{-}FORM) 所以我的问题是为什么必须要有层次结构?在什么情况下,您需要从一个Universe跳到更高的层次结构?这是真的不明显,我怎么给定的任意组合,你可以结束了一个类型乙是不是在ü我。更详细地:在附录A.2.4,A.2.5,A.2.6,A.2.7,A.2.8,A.2.9,A.2.10,A.3.2的部分中的形成规则,无论提ü我在前提和判断,或仅在判断中。一个米:U一世一个米:ü一世A_m: \mathcal{U}_i乙乙Bü一世ü一世\mathcal{U}_iü一世ü一世\mathcal{U}_i …

2
如何得出依赖类型的消除符?
在依赖类型的编程中,有两种主要的方法来分解数据并执行递归: 相关模式匹配:函数定义作为多个子句给出。统一可确保所有遗漏的情况都是不可能的,并且外部求解器可确保有充分的递归依据。 消除符:每个归纳数据类型都有一个关联的常数E D,它充当归纳原理,并充当分解类型D的值的递归函数。它们比较冗长,但是具有总计(所有情况都由E D覆盖)并通过构造终止的优点。ddDËdËdE_DddDËdËdE_D 我已经看到了常见数据类型的消除器,例如,其中消除器基本上是数学归纳法,或者L i s t,其中消除器基本上是折叠。ñ一个牛逼ñ一个ŤNat大号我小号吨大号一世sŤList 我已经阅读了几篇有关依存模式匹配的论文,并且许多论文都引用了类型理论,在其中可以定义数据类型,并且该理论提供了消除符。例如,消除相关模式匹配描述了UTT如何基于消除符,以及在存在公理的情况下如何将模式匹配转换为消除。我的理解是,一旦定义了数据类型,该理论便提供了消除器。ķķK 我没有发现(或者至少没有发现,如果我没看过的话)很好地描述了如何导出消除符,包括其类型和语义。 有人可以指出我的引用,该引用描述了如何从数据类型的定义中获得消除符吗?

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.