基本仿射逻辑是一种类型系统,它捕获可以在基本时间内减少的λ项的类。此外,可以使用Lamping算法的抽象片段来减少EAL可键入的术语,这对我来说特别有趣,因为我正在探索相应的交互组合器。
我的问题是,如何使用EAL作为底层类型系统来制作一种实用的编程语言?即,可以在不影响该特性的情况下对核心类型系统进行什么样的扩展(定点,多态性,从属类型,数据类型等),这样的语言在实践中是否可以使用,或者是否可以以某种方式使用出于我不知道的原因而受到限制?
基本仿射逻辑是一种类型系统,它捕获可以在基本时间内减少的λ项的类。此外,可以使用Lamping算法的抽象片段来减少EAL可键入的术语,这对我来说特别有趣,因为我正在探索相应的交互组合器。
我的问题是,如何使用EAL作为底层类型系统来制作一种实用的编程语言?即,可以在不影响该特性的情况下对核心类型系统进行什么样的扩展(定点,多态性,从属类型,数据类型等),这样的语言在实践中是否可以使用,或者是否可以以某种方式使用出于我不知道的原因而受到限制?
Answers:
几年前,Baillot,Gaboardi和Mogbil尝试了一种非常相似的方法,但是使用了轻仿射逻辑(LAL)而不是EAL(您可以在此处找到本文)。我认为他们的工作很容易推广到EAL,这是一个更为宽松的系统。
至于这种语言的功能,您本来就有多态性(EAL是二阶线性逻辑的限制)。据我所知,没有人研究过依赖类型,但是我不明白为什么它们不起作用。实际上,未类型化的EAL与类型化的EAL一样有效,因为其归一化属性不依赖于类型。
结果是,在EAL中,您可以使用类型的任意定点(例如,参见Baillot的另一篇论文),并以自然递归样式定义数据类型(例如)以及较不自然的(从编程角度而言)系统F定义。但是,通过以上关于无类型归一化的说明,基于EAL的编程语言将始终是total,这意味着您将没有定位点组合器,并且递归类型的使用并不像您期望的那样自然。例如,以斯科特(Scott)数字为例:如果没有递归定义(由定点组合器给出),则很难用这种整数表示形式来表达恒定时间操作以外的任何东西。因此,您仍然需要使用教堂数字进行迭代(即, 循环),通过这种方式,您将受到轻逻辑的基本分层限制(这为其赋予了其复杂性):您无法迭代函数 它本身是通过迭代定义的( 这是教会整数的类型)。
例如:通过“教会整数黑客”,可以在EAL中进行定义 这样 不使用迭代。然后,您可以迭代 定义指数函数 其中,但是,不能本身进行迭代。因此,任何基于EAL的编程语言都将需要某种机制来通过迭代禁止某些定义。很难想象这样的限制不会导致一种令程序员感到尴尬的语言。无论如何,没有人禁止您尝试看看您能得到什么!
无论如何,如果您对最佳评估,EAL和总体逻辑之间的关系感兴趣,我建议您看一下2000年代初期至中期的Coppola论文。