Intrinsically-Typed Mechanized Semantics for Session Types
会话类型已经成为构建基于通信的程序的强大范例。它们保证了具有复杂通信协议的并发程序的类型可靠性和会话保真度。由于具有会话类型的语言的类型可靠性证明是繁琐的,并且涉及技术,因此很少看到这些系统的机械可靠性证明。我们提出了一个可执行的内在类型的小步语义的一个现实的功能会话类型演算。演算包括线性、递归和带子类型的递归会话。异步通信是用编码来建模的。语义在Agda中实现为一个内在类型化的、可中断的CEK机器。这个实现证明了类型保持和特定的构造进度概念。
2019-08-08 cs.PL
Parameterized Cast Calculi and Reusable Meta-theory for Gradually Typed Lambda Calculi
对渐进类型化的研究导致了Siek和Taha(2006)的渐进类型化λ演算(GTLC)及其基础的铸造演算的许多变化。例如,Wadler和Findler(2009)增加了责任跟踪,Siek等人(2009)研究了替代的铸造评估策略,Herman等人(2010)为了空间效率而将铸造替换为铸造。GTLC的元理论也扩展到类型安全之外,包括责备安全(Tobin-Hochstadt and Felleisen 2006),空间消耗(Herman et al. 2010)和渐进保证(Siek et al. 2015)。这些结果已被证明的GTLC的一些变化,但不是其他人。此外,研究人员继续开发GTLC的变体,但为新变体建立所有元理论非常耗时。本文以两个参数化的铸造演算的形式确定了捕获许多铸造演算之间相似性的抽象,一个用于语言规范的目的,另一个用于指导节省空间的实现。然后,本文为这两个演算开发了可重用的元理论,证明了类型安全性、错误安全性、渐进保证和空间消耗。最后,本文以八个铸造结石为例,包括五个文献中的结石和三个新的结石。所有这些定义和定理,包括两个参数化演算,可重用的元理论,和八个实例化,在Agda中广泛使用模块参数和依赖记录来定义抽象。
2021-05-15 cs.PL
Denotational Semantics of Gradual Typing using Synthetic Guarded Domain Theory (Extended Version)
本文提出一种基于受卫域论的渐近类型指称语义,结合步进索引逻辑关系的通用性与指称语义的模块化,在简单 lambda 演算上证明了 beta-eta 等式有效性与渐近性定理,并在 Guarded Cubical Agda 中完成核心定理机械化,为渐近类型程序语义提供可重用的数学基础。
2025-07-10 cs.PL
Corpse Reviver: Sound and Efficient Gradual Typing via Contract Verification
渐进类型化程序设计语言允许将静态类型增量添加到非类型化程序中。为了保持可靠性,语言在类型化和非类型化代码之间的边界处插入运行时检查。不幸的是,性能研究表明,这些检查的开销可能高得惊人,这让人们对声音渐进式输入的可行性产生了疑问。在本文中,我们表明,通过建立在现有的工作软合同验证,我们可以减少或消除这种开销。我们的关键见解是,虽然非类型化代码不能被渐进类型系统信任,但在优化渐进类型化程序时,没有必要只考虑最坏的情况。相反,我们静态分析的非类型化的部分逐渐类型化的程序,以证明几乎所有的动态检查暗示逐渐类型边界不能失败,并可以在编译时消除。我们的分析是模块化的,可以应用于程序的任何部分。我们评估了这种方法对现有的十几个渐进式程序以前表现出令人望而却步的性能开销--与$3.5\times$的中位数开销和高达$73.6\times$在最坏的情况下--和消除所有的开销在大多数情况下,在最坏的情况下,只有$1.6\times$开销的痛苦。
2020-10-09 cs.PL
Proving Noninterference by a Fully Complete Translation to the Simply Typed lambda-calculus
Tse和Zdancewic已经正式确定了Abadi等人的不干涉概念。的DCC的逻辑关系,并通过系统F的参数化证明了系统F的不干涉性。不幸的是,他们的证明在一个关键引理中包含错误,即他们从DCC到系统F的翻译保留了为两个演算定义的逻辑关系。事实上,我们已经找到了一个反例,在这篇文章中,我们证明了密封演算的不干涉性,而不是DCC,密封演算是DCC的一个新变体,通过还原到简单类型λ演算的逻辑关系的基本引理,使用简单类型λ演算的完全完全翻译。完全完备性在显示翻译过程中两种逻辑关系的保持方面起着重要的作用。此外,我们调查之间的关系密封演算,DCC和DCC的Tse和Zdancewic的扩展,并表明第一个和最后三个是等价的。
2008-09-20 cs.CR cs.PL
A Dependent Dependency Calculus (Extended Version)
二十多年前,Abadi等人建立了依赖核心演算(DCC)作为分析类型化程序设计语言中依赖关系的通用框架。从那时起,依赖性分析已经显示出对语言设计的许多实际好处:它的结果可以帮助用户和编译器强制执行安全约束,消除死代码,以及其他应用。在这项工作中,我们提出了一个依赖依赖演算(DDC),它扩展了这个一般的想法,设置依赖类型的语言。我们使用这种演算来跟踪运行时和编译时的无关性,从而实现更快的类型检查和程序执行。
2022-02-02 cs.PL
Nominal Henkin Semantics: simply-typed lambda-calculus models in nominal sets
我们研究了一类简单类型的λ演算的名义代数Henkin式模型,其中变量映射到表示中的名称,而λ演算抽象映射到(非功能性的)名称抽象操作。由此产生的表示更小,更好的行为,在我们精确的方式,比基于函数值的模型。使用这些新的模型,我们然后开发了一个概括的λ-长期语法丰富他们的存在元变量,从而产生一个理论的不完整的功能。这种不完备性与函数抽象和应用给出的不完备性的通常概念是正交的,并且对应于洞和不完备对象。
2011-11-01 cs.LO cs.PL
A Proposal for an Interactive Shell Based on a Typed Lambda Calculus
The Open University of Japan(日本开放大学)
本文介绍了Favalon,一个功能性的程序设计语言的前提下建立的λ演算作为一个交互式的外壳更换。Favalon使用类型推断、灵活的运行时类型元数据以及shell用来将命令链接在一起的相同技术,与现有库和命令的类型化版本无缝集成。Favalon的大部分语法都可以通过用户定义函数进行自定义,允许任何熟悉命令行shell的人对其进行扩展。此外,Favalon的类型推断引擎可以从其运行时库中分离出来,并且可以很容易地重新用于其他应用程序。
2021-04-08 cs.CL cs.PL
Type-Driven Prompt Programming: From Typed Interfaces to a Calculus of Constraints
本文提出类型驱动的提示编程框架Lambda Prompt,通过依赖类型演算与概率精化表达句法和语义约束,并针对约束表达与算法支持不足提出优化规则及编译器研究方向。
2025-08-17 cs.FL cs.PL
On Generalized Metric Spaces for the Simply Typed Lambda-Calculus (Extended Version)
广义度量,从Lawvere的度量空间丰富的范畴的观点,已被广泛应用于指称语义作为一种方式来衡量在何种程度上两个程序的行为相似,但不等价的方式。然而,到目前为止,将广义度量应用于高阶语言(如简单类型的λ演算)并不令人满意。本文研究了广义度量空间的Carnival闭范畴的一种新的构造方法。我们的出发点是一个定量语义学的基础上,一般的逻辑关系。在这种情况下,我们表明,几个家庭的广义度量提供的方法来扩展欧几里德度量的所有高阶类型。
2021-04-27 cs.LO cs.PL math.LO
Strong Normalization for the Calculus of Constructions
构造演算(CC)是依赖类型编程和高阶构造性逻辑的核心理论。CC最初是在Coquand 1985年的论文中提出的,它激发了程序设计语言和类型论25年的研究。今天,CC的扩展构成了Coq和Agda等语言的基础。本综述回顾了CC强规范化属性的三个证明(良好类型的表达式不存在无限约简序列)。它突出了证明结构的相似性,同时显示了它们的差异是如何被作者的不同目标所激发的。
2022-10-07 cs.PL
A Specification for Typed Template Haskell
多阶段编程是一种经过验证的技术,可以通过控制代码生成来提供可预测的性能特征。我们提出了一个核心语义类型化模板Haskell,扩展的Haskell,支持多阶段的编程,以及与多态性和合格的类型进行交互。我们的语义与一个声明性的源语言与合格的类型的核心语言的基础上的多态λ演算增强多阶段的结构。
2021-12-07 cs.PL
Efficient Gradual Typing
渐变类型在同一个程序中结合了静态类型和动态类型。人们希望渐进类型语言的性能介于动态类型语言和静态类型语言之间。渐进类型语言的现有实现由于与运行时强制转换相关联的开销而没有实现这个目标。Takikawa等人(2016)报告了部分类型化程序的最多100个$\times$减速。在本文中,我们提出了一个编译器,名为Grift,逐步打字评估实现技术。我们采取了一种简单但令人惊讶的未探索的实现方法来逐步类型化,即提前编译为本地汇编代码,并精心选择运行时表示和节省空间的编译器。我们的实验表明,这种方法实现的性能与OCaml的静态类型的程序和性能之间的Gambit和Racket的无类型的程序。在部分类型化的代码上,几何平均值的范围是基准测试中(未类型化)Racket的0.42 $\times$到2.36 $\times$。我们使用Siek,Thiemann,and Wadler(2015)的方法来实现类型转换。这种技术消除了所有灾难性的减速,而不会引入显著的开销。在所有基准测试中,与常规类型转换相比,转换速度从慢15%(fft)到快近2 $\times$(matmult)不等。我们还实现了Siek et al.(2015)的单调引用。单调引用消除了静态类型代码中的所有开销,对于部分类型代码,它们比代理引用快,有时高达1.48 $\times$。
2018-02-18 cs.PL
Typed Non-determinism in Concurrent Calculi: The Eager Way
本文提出一种基于急切语义的会话类型π-演算,以处理非确定性与线性性的张力,确保无死锁性,并通过翻译资源λ-演算展示其表达能力。
2024-12-07 cs.LO cs.PL
Session Types in a Linearly Typed Multi-Threaded Lambda-Calculus
我们提出了一个形式化的会话类型在多线程λ演算(MTLC)配备了一个线性类型系统,建立MTLC类型保存和全球的进步。后者(全局进度)意味着在MTLC中对良好类型程序的评估永远不会陷入死锁。由于这个制定的MTLC可以很容易地嵌入到ATS,一个成熟的语言与功能的编程核心,支持依赖类型(的DML风格)和线性类型,我们得到了一个直接实现的会话类型在ATS。此外,我们获得了直接支持的依赖会话类型的基础上,这种嵌入到ATS的形式。与现有的各种会话类型的形式化相比,我们看到本文给出的形式化在其接近具体实现方面是独特的。特别是,我们报告这样一个实现准备实际使用,生成Erlang代码从良好类型的ATS源(利用会话类型),从而充分利用的基础设施支持分布式计算在Erlang。
2016-03-11 cs.LO cs.PL
A prototype-based approach to object reclassification
我们调查,在功能原型为基础的语言,微积分的对象,可能会扩展自己收到一条消息,一种能力被Cardelli称为一个自我造成的操作。我们提出了一个健全的类型系统,这种演算,保证评估一个良好类型的表达式将永远不会产生一个消息未找到运行时错误。由此产生的演算是一种尝试,旨在定义一种语言,将静态类型检查的安全优势与动态类型语言中通常存在的灵活性相结合。
2018-08-13 cs.PL
$λ_A$: A Typed Lambda Calculus for LLM Agent Composition
State Key Laboratory of Novel Software Technology, Nanjing University(南京大学软件新技术国家重点实验室);Software Institute, Nanjing University(南京大学软件学院)
本文提出$λ_A$类型lambda演算,通过引入oracle调用、有界固定点、概率选择和可变环境扩展简单类型lambda演算,证明类型安全性和终止性,并展示其在代理配置检测中的应用。
2026-04-14 cs.MA cs.PL cs.SE
A Theory of RPC Calculi for Client-Server Model
使用多层程序设计语言,程序员可以指定要运行的代码的位置,以减少基于Web的客户端-服务器模型的开发工作,在基于Web的客户端-服务器模型中,程序员分别编写客户端和服务器程序,并一起测试多个程序。RPC演算是Cooper和Wadler开发的这些语言的基础之一,在程序员编写任意深度嵌套的客户-服务器的【形】交互时具有对称通信的特征。然而,现有的研究只考虑动态类型的位置。我们提出了一个类型化的RPC演算的位置跟踪类型级别。一个新的定位类型系统为客户-服务器的【形】模型的RPC演算理论铺平了道路。(In在SCP 2020和PPDP 2021上发表的以下论文中,类型化RPC演算将通过多态位置和基于类型的切片编译进行增强。)
2021-10-28 cs.PL
Typed Generic Traversal With Term Rewriting Strategies
提出了一种策略性术语改写的类型化模型。关键的创新是覆盖了泛型遍历。为此,我们定义了一个类型化重写演算S '_{gamma}。演算采用了一个多排序的类型系统扩展指定的通用策略类型伽马。我们考虑两种通用的策略类型,即类型保持和类型统一的策略。S ′_{gamma}提供遍历组合子,用于从多分类和一般策略中构造遍历或遍历方案。遍历组合子模拟了不同形式的单步遍历,也就是说,它们处理给定项的直接子项,而不期望任何递归到项的方案。为了适应泛型类型,我们需要添加一个基本的组合子来将多排序策略$s$提升为泛型类型gamma。这一步称为策略扩展。对应的组合子的语义表明,只有当手头的项的类型适合时才应用s,否则扩展策略失败。这种方法要求策略应用的语义必须在一定程度上依赖于类型。覆盖泛型项遍历的类型化策略项重写是泛型编程的一个简单但富有表现力的模型。它在程序转换和程序分析中有应用。
2002-07-28 cs.PL
On Encoding LF in a Predicate Logic over Simply-Typed Lambda Terms
Festival和Miller描述了他们声称是遗传Harrop公式逻辑中依赖类型化的λ演算LF的忠实编码,这是Church简单类型论的直觉变体的子逻辑。它们的编码大致基于将LF中的对象表达式转换为简单类型的λ演算中的项,方法是在类型化中擦除依赖关系,然后通过使用谓词重新捕获擦除的依赖关系。不幸的是,这个想法并不完全奏效。特别是,我们提供了一个反例,声称所描述的编码是忠实的。这种说法错误的根本原因是,从依赖类型的lambda项到简单类型的lambda项的映射不是一对一的,因此逆变换是模糊的。这一观察对其他相关编码有广泛的影响。
2021-08-24 cs.LO cs.PL
On Decidable and Undecidable Extensions of Simply Typed Lambda Calculus
本文证明了有限PCF在加入异常、代数效应和引用等副作用后的四种扩展的不可判定性,并针对带引用的扩展提出了首个包含引用单元的高阶递归函数的非平凡可判定片段。
2025-02-10 cs.LO cs.PL
Backpropagation in the Simply Typed Lambda-calculus with Linear Negation
Deepomatic;CNRS(法国国家科学研究中心);Université Sorbonne Paris Nord(索邦巴黎北大学);Université de Paris(巴黎大学)
反向传播是一种经典的自动微分算法,用于计算由某类简单的一阶程序(称为计算图)指定的函数的梯度。它是多个领域的基本工具,最值得注意的是机器学习,它是有效训练(深度)神经网络的关键。近年来,一个名为可微程序设计的研究领域迅速发展,其目的是通过求助于实际的程序设计语言,赋予控制流算子和高阶组合子,如map和fold,更综合和模块化地表达计算图。在本文中,我们将反向传播算法扩展到这样的一个程序设计语言的一个范例:我们定义了一个组合程序转换从简单类型的λ演算本身增加了一个概念的线性否定,并证明了这计算梯度的源程序具有相同的效率作为一阶反向传播。转换是完全无效果的,因此提供了对反向传播动态的纯逻辑理解。
2019-11-06 cs.LG cs.LO cs.PL
Recovering Purity with Comonads and Capabilities
在本文中,我们采用了一种普遍有效的(ML风格的)类型λ演算,并展示了如何扩展它以允许捕获具有类型的纯表达式。我们的关键观察是,正如纯简单类型的λ演算可以扩展到支持一元类型规则的效果,不纯类型的λ演算可以扩展到支持一元类型规则的纯度。我们通过一个简单的指称模型来建立我们的类型系统的正确性,我们称之为能力空间模型。我们的模型形式化的直觉常见的系统程序员,执行效果的能力应该通过访问权限或能力进行控制,一个程序是能力安全的,如果它没有执行效果,它没有一个运行时的能力。然后,我们确定的公理范畴结构的能力空间模型验证,并使用这些公理给我们的comonadic类型系统的范畴语义。然后,我们给出了一个等式理论(替代和调用的值$β$和$η$法律)的命令λ演算,并显示其可靠性相对于此语义。最后,我们给出了一个翻译的纯简单类型的λ演算到我们的共同命令演算,并表明,任何两个条款是$βη$ -平等的STLC是平等的共同命令演算的方程理论,建立纯程序可以映射到我们的命令演算在一个方程保持的方式。
2020-11-10 cs.LO cs.PL
Typing Copyless Message Passing
我们提出了一个演算,模拟一种形式的进程交互的基础上无拷贝的消息传递,在风格的奇点OS。演算配备了一个类型系统,确保良好的类型的进程是免费的内存故障,内存泄漏,和通信错误。类型系统本质上是线性的,但是我们证明了仅仅线性是不够的,因为它为类型良好的进程泄漏大量内存的情况留下了空间。我们解决这些问题的基础上的会话类型的原始变体的类型系统。
2012-03-01 cs.PL
Space-Efficient Gradual Typing in Coercion-Passing Style
Herman等人指出,在渐进类型化程序中插入运行时检查可能会妨碍尾部调用优化,从而恶化程序的空间复杂度。为了解决这个问题,他们提出了一个空间有效的强制演算,随后由Siek等人改进。这些演算的语义涉及到由随机数表示的运行时检查的渴望组合,以防止术语的大小增长。然而,它还依赖于一个非标准的归约规则,这似乎不容易实现。事实上,没有渐进类型语言的编译器实现完全忠实地支持空间有效的语义。在本文中,我们研究了Herman等人已经提到过的子传递风格,作为一种简单的空间有效实现渐进类型语言的技术。一个程序在继承传递风格传递“其余的运行时检查”-就像延续传递风格(CPS),其中“其余的计算”被传递-和(不像CPS)组成继承急切。本文给出了Siek等人的$λ$ S到$λ$ S $_1$的形式化的传递函数转换,并证明了转换的正确性.我们还实现了我们的Grift编译器的Kuhlenschalet等人的实验结果表明,堆栈溢出可以适当地防止在大多数部分类型的实际程序的执行速度慢3倍的成本。
2020-11-10 cs.PL
Explicit Effect Subtyping
随着代数效果和处理程序的普及,对其有效执行的需求也在增加。Eff是一种类似ML的语言,具有对处理程序的本机支持,它具有一个基于子类型的效果系统,可以在该系统上构建一个效果感知优化编译器。不幸的是,根据我们的经验,为Eff实现优化非常容易出错,因为它的核心语言是隐式类型的,这使得代码转换非常脆弱。为了弥补这一点,我们提出了一个显式类型的多态核心演算代数效果处理程序与子类型为基础的类型和效果系统。它具体化了在显式类型转换中的子类型化,并使用见证子类型化证明的子类型化,从而快速暴露程序转换中的类型化错误。我们的面向类型的细化带有一个基于约束的推理算法,该算法将隐式类型的Eff-like语言转换为我们的演算。此外,所有的子和效应信息都可以直接擦除,这表明子没有计算内容。此外,我们提出了一个一元的翻译从我们的演算到一个纯语言没有代数的影响或处理程序,使用效果的信息,只有在必要时才引入一元结构。
2020-05-28 cs.PL
Gradual Typing for Extensibility by Rows
这项工作研究了行类型和行多态性的逐步类型化。这项工作中的关键要素是动态行类型,它表示行的静态未知部分,以及行类型的一致性,它允许将静态行类型注入动态行类型,反之,将动态行类型投影到任何静态行类型。虽然一致性静态地捕获动态行类型的行为,但当与标识行类型直到字段重新排序的行等价相结合时,它使逐渐类型化语言的语义不一致。为了解决这个问题,我们开发了一致等价,它的特点是一致性和行等价的组合。使用一致等价,我们提出了一个多态归咎演算行类型和行多态性。在我们的责备演算中,强制转换不仅执行动态行类型的运行时检查,而且还执行行类型中的字段重新排序。为了简化行多态性的技术开发,我们采用了作用域标签,这是Koka语言所采用的,也是在效果系统的上下文中出现的。利用这些技术发展给出了我们的责备演算的形式化定义,并证明了它的类型可靠性。我们还勾画了逐渐类型化的表面语言和类型保持翻译的表面语言的责任演算和讨论的保守性的表面语言的静态类型化的语言与行类型和行多态性。
2019-10-22 cs.PL
A Categorical Normalization Proof for the Modal Lambda-Calculus
本文为模态λ-演算提出基于Kripke式替换的求值归一化算法,证明其可靠完备,为元编程的依赖类型基础奠定逻辑基石。
2023-02-20 cs.LO cs.PL
The Safe Lambda Calculus
安全性是高阶文法的一个句法条件,它根据变量的类型论顺序约束变量在产生式规则中的出现。在本文中,我们介绍了安全的λ演算,这是通过转置(和推广)的设置简单类型的λ演算的安全条件。与安全性的原始定义相反,我们的演算并不约束类型(必须是同质的)。我们表明,在安全的λ演算,没有必要重命名绑定变量时,执行替代,变量捕获是保证不会发生。我们还提出了一个适当的概念β-减少,保持安全性。与Schwichtenberg在1976年对简单类型的λ演算的刻画一样,我们证明了在安全的λ演算中可表示的数值函数恰好是多元多项式,因此条件是不可定义的。我们也给出了表征词的功能。然后,我们研究了两个安全的简单类型的条款,并表明这个问题是PSPACE困难的决定β-eta平等的复杂性。最后,我们给出了一个游戏语义分析的安全:我们表明,安全的条款表示的“P-增量合理的策略”。因此,在安全的博弈语义中,指针只有从4阶开始才是必要的。
2009-02-19 cs.GT cs.PL
Monotonic References for Gradual Typing
我们描述了一种处理可变引用的替代方法(又名。指针)在逐渐类型化的语言中具有与Herman等人[2010]的先前方法不同的效率特征。特别是,我们通过静态类型代码区域中的引用降低了读写成本。我们将成本降低到与静态类型语言中的成本相同,也就是说,只是加载或存储指令的成本(对于基本数据类型)。这种成本的降低对于那些希望使用渐进类型来促进从算法的动态类型原型到静态类型的高性能实现的过渡的程序员来说尤其重要。我们心目中的程序员是科学家和工程师,他们目前在Matlab中进行原型设计,然后手动将他们的算法翻译成Fortran。我们提出了静态和动态的可变引用和类型安全的机械化证明使用伊莎贝尔证明助手的语义。
2014-07-12 cs.PL
Putting gradual types to work
在本文中,我们描述了我们的经验,将渐进类型的静态类型的函数式语言与Hindley-Milner风格的类型推断。大多数渐进类型系统的目标是在动态类型语言中改进静态检查,我们从相反的角度来处理它,并在静态类型语言中促进动态检查。我们的方法提供了一个一瞥,像SML和OCaml语言可能会处理渐进类型。我们将讨论我们的实现和面临的挑战--特别是渐进类型规则如何应用于复合和递归类型的表示。我们回顾了将动态类型添加到静态类型语言中的各种实现,以突出混合静态和动态类型的不同方式,并在保持类型系统渐进性的同时检查可能的灵感。本文还讨论了我们在语言中添加渐变类型的动机,以及在我们的工业环境中这样做的实际好处。
2021-01-28 cs.PL
A type system for data flow and alias analysis in ReScript
本文提出一种用于ReScript语言子集(含可变性和模式匹配的lambda演算)的数据流分析类型系统,通过局部分析收集变量使用与别名信息。
2024-08-21 cs.PL
The Functional Machine Calculus II: Semantics
作者最近引入的函数机器演算(FMC)是拉姆达演算的推广,它可以忠实地编码高阶可变存储、I/O和概率/非确定性输入的影响。值得注意的是,它仍然是融合的,并且可以在这些效果存在的情况下简单地类型化。在本文中,我们探讨的指称语义的FMC。我们有三个主要的贡献:首先,我们认为,它的语法-在这两个效果,并实现使用相同的句法结构-是语义自然,密切对应的结构斯科特风格的域理论语义。第二,我们表明,简单的类型赋予强规范化扩展甘迪的证明,包括一个小的简化的技术。最后,我们表明,类型FMC(不考虑具体的编码效果),模适当的方程理论,是一个完整的语言笛卡尔闭范畴。
2023-02-05 cs.LO cs.PL
A type-based termination criterion for dependently-typed higher-order rewrite systems
一些作者设计了基于类型的终止标准ML类语言允许非结构递归调用。我们将这些工作扩展到一般的重写和依赖类型,从而为构造演算中的重写和β-还原的组合提供了一个强大的终止标准。
2006-10-11 cs.LO cs.PL
An Interactive Proof of Termination for a Concurrent $λ$-calculus with References and Explicit Substitutions
在本文中,我们介绍了一个类型化的,并发的$λ$ -演算的引用具有显式替换变量和引用。除了通常的安全属性,我们恢复了强正常化。证明是基于一个reductiontechnique和一个原始的互动属性让人想起游戏语义的方法。
2021-02-09 cs.LO cs.PL
Dynamic Program Slices Change How Developers Diagnose Gradual Run-Time Type Errors
针对渐进类型系统运行时类型错误调试困难及责备报告误导的问题,提出基于动态程序切片的TypeSlicer工具,并通过Wizard-of-Oz用户研究验证其能帮助开发者提供有效的更改建议。
2025-02-27 cs.PL
Typed Answer Set Programming and Inverse Lambda Algorithms
Arizona State University(亚利桑那州立大学)
我们更广泛的目标是将英语句子自动翻译成适当的知识表示语言中的公式,作为理解和回答英语文本问题的一步。本文的重点是回答集编程语言(ASP)。我们的方法来翻译句子ASP规则的启发蒙塔古的使用λ演算公式的单词和短语的意义。以ASP为目标语言,单词和短语的含义是ASP-lambda公式。在早期的工作中,我们通过手动开发单词字典及其ASP lambda公式来说明我们的方法。然而,这种方法是不可扩展的。在本文中,我们的重点是两个算法,允许一个以逆的方式构建ASP-lambda公式。特别地,这两个算法将两个微积分表达式G和H作为输入,并且计算微积分表达式F,使得输入为G的F(由F@G表示)等于H;并且类似地G@F = H。我们目前的正确性和复杂性的结果,这些算法。为了做到这一点,我们开发了类型化ASP-λ演算理论及其顺序的概念,并将其用于开发完备性结果。(To《逻辑程序设计的理论与实践》(Theory and Practice of Logic Programming)
2012-10-21 cs.AI cs.LO cs.PL
The Guarded Lambda-Calculus: Programming and Reasoning with Guarded Recursion for Coinductive Types
我们提出了守护的Alguda演算,简单类型的Alguda演算与守护递归和共归纳类型的扩展。保护递归类型的使用确保了良好类型程序的生产力。受模态逻辑和Atkey-McBride时钟量化启发的类型生成器可以将受保护的递归类型转换为共归纳类型,从而允许非因果函数的类型化。我们给出了演算的按名调用操作语义,并在树的拓扑中定义了适当的指称语义。充分性证明意味着程序的评估总是终止的。我们介绍了一个程序逻辑与Löb归纳推理的上下文等价的程序。我们展示了表现力的演算显示的可定义性的解决方案Rutten的行为微分方程。
2016-09-05 cs.LO cs.PL
Linear Recursion
我们定义了两个扩展的类型的线性代数演算,产生最小的图灵完备系统。扩展是基于无界递归在一种情况下,和有界递归与最小化在其他。我们表明,这两种方法是兼容的线性和可键入性的限制。类型化线性代数演算的两个扩展都是最小的,在这个意义上,去掉任何组件都会破坏系统的普适性。我们讨论的实施技术,利用线性的结石。最后,我们将结果应用于语言的不动点算子:我们给出了一个编译的程序设计语言PCF成线性代数演算与线性无界递归。
2016-11-25 cs.LO cs.PL
Transformer Models for Type Inference in the Simply Typed Lambda Calculus: A Case Study in Deep Learning for Code
IHES(高等科学研究所);University of Illinois at Urbana-Champaign(伊利诺伊大学厄巴纳-香槟分校);IBM Research(IBM研究院)
本文提出以项与类型关系为核心的基准,研究 transformer 在简单类型 lambda 演算类型推断中的预热与优化器选择,发现 Adafactor 较 Adam 和 RAdam 收敛更快。
2023-03-15 cs.AI cs.LG cs.LO
Programming and Reasoning with Guarded Recursion for Coinductive Types
我们提出了守护的Alguda演算,简单类型的Alguda演算与守护递归和共归纳类型的扩展。保护递归类型的使用确保了良好类型程序的生产力。受模态逻辑和Atkey-McBride时钟量化启发的类型生成器可以将受保护的递归类型转换为共归纳类型,从而允许非因果函数的类型化。我们给出了演算的按名调用操作语义,并在树的拓扑中定义了适当的指称语义。充分性证明意味着程序的评估总是终止的。我们展示了表现力的演算显示的可定义性的解决方案Rutten的行为微分方程。我们介绍了一个程序逻辑与Löb归纳推理的上下文等价的程序。
2015-01-15 cs.LO cs.PL
Towards a Direct, By-Need Evaluator for Dependently Typed Languages
我们提出了一个C语言实现的Adida-pi演算的扩展(按需调用)栈机的Ariola,张和Felleisen持有类型,使用无类型的无标签的最终解释器策略。它的优点是将所有操作都表示为术语的折叠,包括按需评估,恢复任何术语的初始语法树编码,并消除大多数垃圾收集任务。这些都是通过一种规范的方法来处理每个术语的主干,以及一个强大的基于堆栈的API。类型推断在本工作中没有涉及,但也从当前的堆栈转换中获得了几个优点。执行基准问题的时间和最大堆栈空间使用的结果。我们讨论了如何设计选择这个解释器允许语言被用作一个高层次的脚本语言自动分布式并行执行常见的科学计算工作流程。
2015-09-23 cs.PL
The Geometry of Bayesian Programming
本文为高阶贝叶斯编程的典范演算构建了交互几何模型,基于可测空间范畴,并证明其相对于分布和采样操作语义的充分性。
2019-04-16 cs.PL
Explicit Auditing
审计单位演算(英语:Calculus of Audited Units,CAU)是一种类型化的λ演算,源自于在Curry-Howard同构下对Artemov的证明逻辑的计算解释;它通过提供审计类型来扩展简单类型化的λ演算,这些审计类型由携带其过去计算历史的表达式占据。与大多数其他审计技术不同,CAU允许在运行时检查踪迹作为一流的操作,并应用于科学计算的安全性、调试和透明度。CAU的有效实现是具有挑战性的:不仅轨迹的大小快速增长,而且在每次beta缩减后都需要对其进行归一化。在本文中,我们研究了如何减少条款更有效地在无类型的变体CAU通过显式替换和显式审计操作,最后得出一个按值调用抽象机。
2018-08-01 cs.LO cs.PL
A Polymorphic RPC Calculus
RPC演算是多层程序设计语言(如Links)的简单语义基础,在Links中可以为客户端-服务器模型编写定位函数。随后,类型化RPC演算被设计成按类型捕获函数的位置信息,并驱动位置类型导向的切片编译。然而,位置的使用目前仅限于单态的,这是要克服的差距之一,将RPC演算的客户端-服务器模型的理论付诸实践。本文提出了一种多态RPC演算,允许程序员编写简洁的多层程序使用多态位置结构。然后,多态多层程序可以自动转换成程序只包含位置常数服从现有的切片编译方法。我们制定了多态RPC演算的类型系统,并证明其类型可靠性。此外,我们还设计了一个单态化翻译,并证明了翻译的类型和语义正确性。
2020-05-25 cs.PL
Polymorphic Endpoint Types for Copyless Message Passing
我们提出的PolySing#,一个演算,模型的基础上,无拷贝的消息传递过程中的交互,在风格的奇点OS。我们配备了一个类型系统,可容纳多态端点类型,这是一个变种的多态会话类型的演算,我们表明,良好的类型的进程是免费的故障,泄漏和通信错误。类型系统本质上是线性的,尽管线性本身可能会为类型良好的进程泄漏内存的情况留下空间。我们在端点类型上确定一个条件,以防止这些泄漏发生。
2011-08-02 cs.DC cs.PL
Gradual Type Theory (Extended Version)
渐进类型语言被设计为同时支持动态类型和静态类型的编程风格,同时保留每种风格的优点。虽然这些语言现有的渐进类型可靠性定理旨在表明,当从完全静态设置移动到渐进设置时,基于类型的推理被保留,但这些定理并不意味着基于类型的重构和优化的正确性被保留。建立程序转换的正确性在技术上是困难的,并且在渐进式语言的元理论中经常被忽视。在本文中,我们提出了一个公理帐户的程序等价的逐步铸造演算,我们正式的逻辑,我们称之为渐进类型论(GTT)。基于Levy的按推值调用,GTT给出了按值调用和按名称调用渐进语言的公理化解释。然后,我们证明定理,证明优化和重构逐渐类型化的语言。例如,渐变类型连接词的唯一性原则表明,如果$βη$定律对连接词成立,那么连接词之间的转换必须等价于惰性转换语义。相反,这表明渴望强制转换语义违反了函数类型的可扩展性。作为另一个例子,我们表明,逐步向上的是纯粹的和对偶的,逐步向下的是严格的。我们证明了我们的理论的一致性和适用性,使用懒惰的铸造语义的实现给出了我们的类型论的逻辑关系模型,在GTT等价意味着上下文等价的程序。由于GTT也公理化了动态渐进保证,我们的模型也建立了渐进类型化的中心定理。该模型通过动态类型的实现来参数化,因此给出了一系列实现,以验证基于类型的优化和渐进保证。
2018-11-06 cs.PL
Mailbox Types for Unordered Interactions
我们提出了一个类型的系统推理的协议一致性和死锁自由网络的进程,通过无序的邮箱进行通信。我们在邮箱演算中对这些网络进行建模,邮箱演算是具有第一类邮箱和选择性输入的异步π演算的温和扩展。演算包含演员模型,并允许我们分析网络的动态拓扑结构和不同数量的进程可能混合不同的并发抽象。良好类型的进程是无死锁的,永远不会因为意外消息而失败。对于其中的一个重要类别,垃圾自由也是有保证的。我们说明了表达的演算和类型系统的编码实例的非统一的,并发的对象,二进制会话扩展连接和分叉,和一些已知的演员基准。
2018-01-12 cs.PL
A polynomial time λ-calculus with multithreading and side effects
轻逻辑的框架已被广泛研究,以控制高阶函数程序的复杂性。我们提出了一个扩展的框架,多线程程序的副作用,专注于多项式时间的情况下。在引入一个具有并行复合和区域的模态λ演算后,我们证明了对于一类良构程序,一个现实的按值调用求值策略可以在多项式时间内计算出来.结果依赖于模拟调用的值由多项式浅优先的策略,保持评估顺序的副作用。然后,我们提供了一个多项式类型系统,保证良好类型的程序不会出错。最后,我们通过一个并发迭代在归纳数据结构上产生副作用的编程例子来说明类型系统的表达能力。
2012-09-26 cs.PL
Deriving a Simple Gradual Security Language
抽象渐进类型化(AGT)是一种系统地导出静态类型规则的渐进对应物的方法。该方法包括通过将渐变类型解释为静态类型集来定义渐变类型的语义,然后定义一个最佳抽象回到渐变类型。这些操作用于将静态规程提升到渐进设置。渐进式语言的运行时语义随后作为渐进式类型派生的约简而出现。为了证明AGT的灵活性,我们渐进的$λ_\text{SEC}$,原型安全类型化的语言,相对于只有安全标签,而不是整个类型,产生一个类型系统,范围逐渐从简单类型到复杂类型。我们使用Zdancewic的逻辑关系证明方法建立了渐进语言的无干扰性,称为$λ_{\widetilde{\text{SEC}}}$。而以前的工作提出了渐进的安全转换语言,这需要显式的安全转换,这项工作产生的第一个渐进的安全源语言,这需要没有显式的转换。
2015-11-20 cs.PL
Dynamic Type Inference for Gradual Hindley--Milner Typing
Garcia和Cimini研究了ITGL的类型推断问题,并为ITGL开发了一个可靠的完整的推断算法。可靠性和完整性意味着,如果算法成功,输入项可以通过强制转换插入转换为显式类型的责备演算的良好类型项,反之亦然。然而,一般来说,根据静态类型推断未确定的类型变量如何用具体的静态类型实例化,有许多可能的转换。更糟糕的是,翻译后的术语可能会表现得不同-有些评价价值观,但其他人则提出指责。在本文中,我们提出了一个新的责任演算$λ^{\textsf{DTI}}_{\textsf{B}}$,避免了这种分歧的ITGL的中间语言和形式化。一个主要的想法是允许一个术语包含类型变量(在静态类型推断期间没有被实例化),并将这些类型变量的实例化推迟到运行时间。我们将动态类型推断(DTI)引入到$λ^{\textsf{DTI}}_{\textsf{B}}$的语义中,使得类型变量沿着约简被实例化。基于DTI的语义不仅避免了上述分歧,而且在以下意义上相对于完全实例化的项的语义是合理和完整的:终止于值),则存在该术语的完全实例化版本,该完全实例化版本也在显式类型化的归咎演算中成功,反之亦然。最后,我们证明了ITGL的渐进保证,这是渐进类型语言的一个重要的正确性准则。
2018-11-09 cs.LO cs.PL
Recursive Session Types Revisited
会话类型为基于通信的结构化编程建模。具体来说,π演算的二进制会话类型描述了分布式场景中两个参与者之间的通信。向pi演算添加会话意味着用类型和术语构造来扩充它。在之前的一篇文章中,我们试图理解会话结构在何种程度上比标准的pi演算结构更复杂和更具表达力。为此,我们采用线性类型和变量类型以及连续传递原则,提出了一种将二进制会话pi演算编码为标准类型pi演算的方法。在本文中,我们专注于递归会话类型,我们提出了一个编码到递归线性π演算。这种编码是前者的保守扩展,因为它保留了其中获得的结果。最重要的是,它采用了对偶关系的新处理方法,在递归类型的情况下,这已经被证明是相当具有挑战性的。
2014-08-26 cs.PL
Abductive functional programming, a semantic approach
我们提出了一个调用的值λ演算扩展了一个新的构造的灵感来自溯因推理和机器学习的编程习惯。虽然在句法上简单,但溯因结构具有复杂而微妙的操作语义,我们使用基于交互几何的风格来表达。我们表明,微积分是健全的,在这个意义上,良好的类型的程序正常终止。我们还提供了一个视觉实现的语义依赖于额外的垃圾回收规则,我们也证明声音。
2017-10-11 cs.PL
Revisiting Soundness for Occurrence Typing, Semantically
Indiana University(印第安纳大学)
针对Typed Racket出现类型演算中因类型内替换导致的可靠性缺陷,本文通过修订核心演算并利用Lean形式化的步进索引逻辑关系给出语义可靠性证明,修复了句法证明中的错误。
2026-09-16 cs.PL