Questions tagged «type-theory»

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

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

3
证明助手中的“策略”如何工作?
问题:“策略”在证明助手中如何工作?它们似乎是指定如何将术语重写为等效术语的方法(对于“等效”的某些定义)。大概有正式的规则,我如何才能知道它们是什么以及它们如何工作?他们所涉及的不仅仅是减少Beta的顺序选择吗? 关于我的兴趣的背景:几个月前,我决定想学习形式数学。我之所以选择类型理论,是因为从初步研究来看,它看起来像《做事的正确方法》(tm Way to Do Things,tm),并且因为它似乎使编程和数学统一起来非常有趣。我认为我最终的目标是能够使用和理解像Coq这样的证明助手(我认为特别是能够使用依赖类型,因为我对表示矩阵类型之类的东西感到好奇)。我开始了解的很少,甚至不了解基本的函数式编程,但是我的进展缓慢。我已阅读并理解了大量的类型和编程语言(Pierce),并了解了一些Haskell和ML。


2
用分类术语解释应用函子-单向函子
我想Applicative从范畴论的角度理解。 该文档的Applicative说,这是一个强烈的宽松monoidal仿函数。 首先,维基百科有关单调子函子的页面说,单调子函子要么松懈要么强大。因此在我看来,其中一个来源是错误的,或者它们使用的术语不同。有人可以解释吗? 其次,哪些Applicative是单曲面函子的单曲面类别?我假设函子是标准Haskell类别(对象=类型,态射=功能)上的内函子,但我不知道该类别上的单曲面结构是什么。 感谢帮助。

3
类型类与对象接口
我不理解类型类。我在某处读过,将类型类视为类型实现的“接口”(来自OO)是错误的并且具有误导性。问题是,我在将它们视为不同的东西以及这是怎么回事时遇到了问题。 例如,如果我有一个类型类(使用Haskell语法) class Functor f where fmap :: (a -> b) -> f a -> f b 与接口[1]有什么不同(Java语法) interface Functor<A> { <B> Functor<B> fmap(Function<B, A> fn) } interface Function<Return, Argument> { Return apply(Argument arg); } 我能想到的一个可能的区别是,在特定调用中使用的类型类实现未指定,而是由环境确定的,也就是说,检查可用的模块以实现该类型。这似乎是可以用OO语言解决的实现工件。例如编译器(或运行时)可以扫描包装程序/扩展程序/ monkey-patcher,以在类型上公开必要的接口。 我想念什么? [1]请注意f a,fmap由于自变量是OO语言,因此已将其从中删除,因此您将在对象上调用此方法。此接口假定f a参数已固定。

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


1
归纳类型用于大数量的序数符号。
我希望以一种“自然的方式”为大量可计数的普通物品建立符号。“自然”是指给定归纳数据类型X,相等应为通常的递归相等(与deriving EqHaskell中产生的相同),并且顺序应为通常的递归词典顺序(与deriving OrdHaskell中产生的相同)),并且有一个可确定的谓词来确定X的成员是否为有效序数符号。 例如,序数小于ε 0可以通过世袭有限排序的列表,并且满足这些要求来表示。将X定义为μα。μβ。1 +α×β,又称遗传有限列表。定义isValid以检查X是否已排序并且X的所有成员均为isValid。X的有效成员都是序小于ε 0通常的词典顺序下。 我猜想,μα 0 ...μα ñ。1 +α 0 ×...×α Ñ可用于以下定义序比φ n + 1个(0),其中φ是凡勃伦功能,以类似的方式。 如您所见,我用完了φω(0)的μ个量词。我可以建立满足我要求的较大序数符号吗?我希望得到尽可能Γ 0。如果我对有效性谓词放弃可判定性要求,我可以得到更大的序数吗?

6
为什么用自然而不是整数?
我对自然数为何受到编程语言理论和类型理论书籍(例如J. Mitchell,编程语言基础和B. Pierce,类型与编程语言)的作者如此钟爱的原因感兴趣。简单类型的lambda微积分的描述,尤其是PCF编程语言,通常是基于Nat和Bool的。对于使用和教学通用工业PL的人来说,用整数代替自然数更自然。您能提及PL理论家偏爱nat的一些好理由吗?除此之外,它还不那么复杂。有任何根本原因还是仅仅是一种荣誉? UPD对于所有关于自然的“基本性”的评论:我对所有这些很酷的东西都非常了解,但是我更希望看到一个示例,说明在PL理论的类型理论中拥有这些属性确实至关重要。例如,广泛提到的归纳法。当我们有任何一种逻辑(简单地键入LC就是这种逻辑)时,就像基本的一阶逻辑一样,我们确实使用归纳法,但是对派生树(在lambda中也有)进行归纳。 我的问题基本上来自行业人士,他们想要获得一些编程语言的基本理论。他们曾经在程序中使用整数,却没有具体的论据和对正在研究的理论(在本例中为类型论)的应用,为什么只用nat来学习语言,他们感到非常失望。


2
类型空间中的对数或根运算是什么?
我最近在阅读计算的两个对偶:否定和小数类型。本文扩展了求和类型和乘积类型,为类型a - b和提供了语义a/b。 与加法和乘法不同,乘幂,对数和生根不是一个而是两个倒数。如果函数类型(a→b)是类型理论乘幂,则给定类型a → b(或b^a),具有类型logb(c)或类型意味着什么a√c? 将对数和根扩展为类型是否有意义? 如果是这样,这方面是否有任何工作,关于如何理解这些影响有什么好的指导? 我尝试通过逻辑查找有关此问题的信息,希望Curry-Howard的信件对我有帮助,但无济于事。


1
是类型主张吗?(确切地说是什么类型?)
我已经阅读了很多有关类型系统的文章,并且大致了解了为什么引入它们(以解决Russel的悖论)。我也大致了解了它们在编程语言和证明系统中的实际意义。但是,我对类型是什么的直观认识并不完全正确。 我的问题是,宣称类型是命题是否合法? 换句话说,语句“ n是自然数”与语句“ n具有类型'自然数'”相对应,这意味着所有涉及自然数的代数规则都适用n。(也就是说,代数规则是语句。那些对自然数成立的语句对n也成立。) 那么这是否意味着一个数学对象可以具有不止一种类型? 此外,我知道集合不等于类型,因为您不能拥有所有集合的集合。我是否可以说,如果集合是类似于数字或函数的数学对象,则类型是一种超数学对象,而按照相同的逻辑,一种则是超元数学对象?(在某种意义上,每个“元”都表示更高的抽象级别...) 这与范畴论有某种联系吗?


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 

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.