Questions tagged «type-theory»

类型结构是用于强制抽象级别的语法学科。

2
依赖类型是否给您所有子类型化功能?
类型和编程语言将重点放在子类型上,但是据我所知,子类型似乎并不是特别基础。与依赖类型相比,子类型化还给您更多的好处吗?使用依赖类型必然会花费更多工作,因此我可以理解为什么子类型在实践中可能会有用。但是,我对类型理论作为数学的基础比对编程语言的基础更感兴趣,我应该特别注意子类型化吗?

2
类型系统是否有表达层级?
受到复杂性理论中广泛的层次结构的启发,我想知道类型系统是否也存在这种层次结构。但是,到目前为止,我发现的两个示例都更像是清单(具有正交特征),而不是层次结构(具有越来越多的表现型类型系统)。 我发现的两个示例是Lambda多维数据集和k级多态性的概念。第一个是具有三个选项的清单,第二个是真实的层次结构(尽管我相信,针对k的特定值对k排序并不常见)。我知道的所有其他类型的系统特征大部分都是正交的。 我对这些概念很感兴趣,因为我正在设计自己的语言,并且很好奇它在当前现有类型系统中的排名(据我所知,我的类型系统有些不常规)。 我意识到“表达性”的概念可能有点含糊,这可以解释为什么类型系统在我看来像清单。

1
交集和并集类型的实际问题是什么?
我正在设计一种简单的静态类型的函数式编程语言,作为一种学习体验。 到目前为止,我已经实现的类型系统似乎可以(需要做一些额外的工作)合并交集和并集类型,例如,您可以: <Union String Integer> <Union Integer Foo> 上面两种类型的交集将是一个普通的 Integer 两种类型的联合是 <Union String Integer Foo> 当然,这是可能的事实并不一定意味着它是一个好的设计思想。特别是,我有点担心保持类型不相交和/或处理重叠的实现困难。 在类型系统中合并此类功能的利弊是什么?

1
笛卡尔封闭类别中的箭头和指数对象有什么区别?
在笛卡儿闭范畴(CCC),存在所谓的指数的对象,撰写。当CCC被视为简单类型λ演算的模型时,指数对象(如B A)表征了从A类型到B类型的函数空间。指数对象由称为c u r r y的箭头引入:(A × B → C )→ (A → C BBABAB^Aλλ\lambdaBAB一种B^AAAABBB和由箭头消除称为一个p p 升ÿ :Ç 乙 × 乙→ Ç(不幸的是称为 Ë v 一个升上类别理论在大多数文本)。我在这里的问题是:指数对象 C B与箭头 B → C有什么区别?curry:(A×B→C)→(A→CB)curry:(A×B→C)→(A→CB)curry : (A \times B \rightarrow C) \rightarrow (A \rightarrow C^B)apply:CB×B→Capply:CB×B→Capply : C^B \times B \rightarrow CevalevalevalCBCBC^BB→CB→CB \rightarrow C


2
是否存在一致且图灵完成的类型化lambda演算?
是否存在类型化的Lambda演算,其中Curry-Howard对应关系下的相应逻辑是一致的,并且每个可计算函数都有可键入的Lambda表达式? 公认地,这是一个不精确的问题,缺少“类型化λ演算”的精确定义。我基本上想知道是否有(a)此方面的已知示例,或(b)该领域中某些事物的已知不可能证明。 编辑:@cody在下面的回答中给出了此问题的精确版本:是否存在一个逻辑上纯的类型系统(LPTS),该系统是一致的并且图灵完整的(在下面定义的意义上)?

3
为什么用冒号来表示值属于类型?
Pierce(2002)通过撰写第92页的文章介绍打字关系: 算术表达式的类型关系,写为“ t:T”,是由一组将类型分配给项的推理规则定义的 并且脚注说符号经常代替:。我的问题很简单,为什么类型理论家更喜欢使用:而不是?如果类型是一组值,则写入绝对有意义,不需要新的符号。∈∈\in∈∈\inTTTt∈Tt∈Tt \in T 这是否类似于某些cs编写者甚至认为滥用符号并应将其写为类似?3n2=O(n2)3n2=O(n2)3n^2 = O(n^2)3n2∈O(n2)3n2∈O(n2)3n^2 \in O(n^2)

3
Pi型的分裂和极性
在阿格达(Agda)邮件列表上的最新帖子中,出现了法律的问题,彼得汉考克(Peter Hancock)在其中发人深省。ηη\eta 我的理解是法则带有否定类型,即。引入规则是可逆的连接词。要禁用功能,Hank建议使用定制消除器funsplit,而不是通常的应用程序规则。我想了解汉克关于两极的说法。ηη\etaηη\eta 例如,有两个演示类型。有传统的马丁- LOF 分裂消除,以积极的风格:ΣΣ\Sigma Γ⊢f:(a:A)(b:Ba)→C(a,b)Γ⊢p:Σa:A.BΓ⊢splitfp:CpΓ⊢f:(a:A)(b:Ba)→C(a,b)Γ⊢p:Σa:A.BΓ⊢splitfp:Cp \begin{array}{l} \Gamma \vdash f : (a : A)(b : B\: a) \to C (a , b) \\ \Gamma \vdash p : \Sigma a : A. B \\ \hline \\ \Gamma \vdash \mathrm{split}\: f\: p : C\: p \end{array} 还有否定版本: Γ⊢p:Σa:A.BΓ⊢π0p:AΓ⊢p:Σa:A.BΓ⊢π1p:B[π0p/a]Γ⊢p:Σa:A.BΓ⊢π0p:AΓ⊢p:Σa:A.BΓ⊢π1p:B[π0p/a] \begin{array}{l} \Gamma \vdash …

3
有类型/无类型Lambda结石的分类
谁能简要解释(如果可能的话!)或将我引介给参考文献,以总结未类型化的lambda演算与更常见的类型化的lambda演算之间的区别? 我特别在寻找它们的表达能力,与逻辑/算术系统或计算方法的等效性以及与编程语言(如果适用)类似的陈述。 虽然我当然打算阅读,但是像参考表概述了结石及其等价/差异/在层次结构中的位置之类的东西将是巨大的参考,可帮助我对它们进行分类。 并不是说以下内容是正确的,只是试图勾勒出一些印象,我必须看看它们是否至少可以作为起点(或要纠正的东西!) 无类型Lambda演算-等式 一阶逻辑-不能做X 简单地输入lambda演算-等于...逻辑,与Lisp有关? '多态'lambda calc-等等 构造演算-直觉逻辑? 组合逻辑-相当于??? 类型的lambda演算,与APL / J类型的语言有关 如果这与lambda多维数据集及其三个轴相关联,那就更好了。 虽然我熟悉lambda微积分和使用函数式语言进行编程的基础知识,但我从未对所涉及的类型系统和不同类型的lambda(可能是pi?)计算进行过深入的探讨,也从未建立任何重要的联系。 当我尝试对此进行研究时,我忍不住发现自己陷入了困境,打开了许多浏览器选项卡,并在多个方向分支,我从没有深入了解其中的任何一个! 我不确定我要的内容是否合理,但是希望至少我已经画了足够多的图片以提出一些可以解释我所寻找内容的阅读材料?

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

2
隐式与显式子类型化
该页面断言 许多语言不使用隐式子类型(结构等效),而是使用显式/声明子类型(声明等效) 我主要使用的编程语言使用显式子类型。如上面的注释所述,隐式子类型化的优点是什么?


1
子类型的分类语义是什么?
从Curry-Howard-Lambek开始,类型理论,逻辑和类别一直是三位一体。我很好奇,当您在类型理论中添加(强制性)子类型时,您会得到什么分类语义-似乎根本没有对此进行太多探讨。 通常,在类型理论中添加强制性子类型不会破坏其元理论属性(例如强规范化),因此,我认为其分类语义应该是实际感兴趣的内容!

1
寻求斯科特的原始LCF论文
以下手稿是否公开可用? 达纳·斯科特(Dana Scott),1969年,一种高阶可计算函数的理论。未出版的研讨会笔记,共7页,牛津大学。 在Cardone和Hindley,2006年Lambda微积分和组合逻辑的历史中,第8.1.2节“ 类型为集合 ”中对本文进行了讨论。另外,第10.1节“ 领域理论 ”可追溯至本手稿,其中包含一些至关重要的顺序理论见解。

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)归纳定义的谓词性与该定义的生成函数的单调性之间有什么关系?它们是同一枚硬币的两个面吗?他们无关吗?非正式地,哪一个更重要?

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.