可以将基本仿射逻辑用作实用编程语言的核心类型系统吗?


9

基本仿射逻辑是一种类型系统,它捕获可以在基本时间内减少的λ项的类。此外,可以使用Lamping算法的抽象片段来减少EAL可键入的术语,这对我来说特别有趣,因为我正在探索相应的交互组合器。

我的问题是,如何使用EAL作为底层类型系统来制作一种实用的编程语言?即,可以在不影响该特性的情况下对核心类型系统进行什么样的扩展(定点,多态性,从属类型,数据类型等),这样的语言在实践中是否可以使用,或者是否可以以某种方式使用出于我不知道的原因而受到限制?


“基本仿射逻辑是一种类型系统,它捕获了可以在基本时间内减少的λ项的类”:这是不精确的。EAL捕获了严格λ-表示基本功能的术语(wrt教会编码)。确实涵盖了所有基本功能:对于每个基本功能f,至少有一个EAL术语计算 f,但通常还有大量其他术语与基本算法计算相对应 f不在EAL中。
Damiano Mazza

糟糕,对。另外,据我所知,还有一些术语可以用抽象算法来简化,但是没有EAL类型,对吗?因此,尽管无需使用oracle就可以减少所有EAL术语,但抽象算法和EAL之间仍然存在一些不匹配。@DamianoMazza
MaiaVictor

对,那是正确的。
Damiano Mazza

1
“无论如何,没有人禁止你尝试看看能得到什么!” -3年后:是的,没有人禁止我,所以我做到了!docs.formality-lang.org。感谢您的帮助:)
MaiaVictor

Answers:


10

几年前,Baillot,Gaboardi和Mogbil尝试了一种非常相似的方法,但是使用了轻仿射逻辑(LAL)而不是EAL(您可以在此处找到本文)。我认为他们的工作很容易推广到EAL,这是一个更为宽松的系统。

至于这种语言的功能,您本来就有多态性(EAL是二阶线性逻辑的限制)。据我所知,没有人研究过依赖类型,但是我不明白为什么它们不起作用。实际上,未类型化的EAL与类型化的EAL一样有效,因为其归一化属性不依赖于类型。

结果是,在EAL中,您可以使用类型的任意定点(例如,参见Baillot的另一篇论文),并以自然递归样式定义数据类型(例如list A:=nil|A  list A)以及较不自然的(从编程角度而言)系统F定义。但是,通过以上关于无类型归一化的说明,基于EAL的编程语言将始终是total,这意味着您将没有定位点组合器,并且递归类型的使用并不像您期望的那样自然。例如,以斯科特(Scott)数字为例:如果没有递归定义(由定点组合器给出),则很难用这种整数表示形式来表达恒定时间操作以外的任何东西。因此,您仍然需要使用教堂数字进行迭代(即,for 循环),通过这种方式,您将受到轻逻辑的基本分层限制(这为其赋予了其复杂性):您无法迭代函数 NatNat 它本身是通过迭代定义的(Nat 这是教会整数的类型)。

例如:通过“教会整数黑客”,可以在EAL中进行定义 dbl:NatNat 这样 dbl n_=2n_ 使用迭代。然后,您可以迭代dbl 定义指数函数 exp其中,但是,不能本身进行迭代。因此,任何基于EAL的编程语言都将需要某种机制来通过迭代禁止某些定义。很难想象这样的限制不会导致一种令程序员感到尴尬的语言。无论如何,没有人禁止您尝试看看您能得到什么!

无论如何,如果您对最佳评估,EAL和总体逻辑之间的关系感兴趣,我建议您看一下2000年代初期至中期的Coppola论文

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.