Session Type Inference in Haskell
我们提出了一个推理系统的一个版本的PI演算在Haskell的会话类型提出的本田等人。会话类型是非常有用的,如果检查通信行为良好。Haskell中的完整会话类型实现首先由Pucella和Tov提出,它是“半自动”的,因为类型表示的手动操作是必要的。我们给出了一个自动的类型推断的会话类型,通过使用一个更抽象的表示的会话类型的基础上的“德Bruijn水平”。我们展示了一个简单SMTP客户端的会话类型推断示例。
2011-10-19 cs.PL
typedKanren: Statically Typed Relational Programming with Exhaustive Matching in Haskell
本文提出在Haskell中静态类型嵌入带不等性约束的miniKanren关系编程,通过支持静态穷尽性检查的关系匹配扩展组合子库,并利用GHC.Generics与Template Haskell简化用户自定义类型的逻辑编程,最后以示例验证并比较性能。
2024-08-30 cs.PL
Haskell's overlooked object system
Haskell提供了类型类绑定和参数多态性,而不是Java和OCaml等面向对象语言的子类型多态性。Haskell 98不带扩展、带普通扩展或带新扩展是否能完全支持传统的面向对象程序设计,包括封装、可变状态、继承、重写、静态检查、隐式和显式子类型等,这是一个有争议的问题。包括第一级词法作用域类、隐式多态类、灵活的多重继承、安全向下转换和安全协变参数。Haskell确实可以支持宽度和深度,结构和名义子类型。我们解决了保持Haskell的类型推断的特殊挑战,即使是对象和对象操作函数。面向对象特性在Haskell中作为OOHaskell库引入。OOHaskell适合作为类型化OO语言设计的沙箱。
2005-09-10 cs.PL
Type Safe Redis Queries: A Case Study of Type-Level Programming in Haskell
Redis是一种内存中的数据结构存储,通常用作数据库,具有Haskell接口Hedis。Redis是动态类型的--一个键可以被丢弃并重新关联到一个不同类型的值,当一个命令获取一个它不期望的类型的值时,它会发出一个运行时错误的信号。我们开发了一种特定于域的语言,通过利用Haskell的类型级编程技术,包括索引monad,类型级字面量和封闭类型家族,跟踪数据库中的值类型,并静态地保证一类Redis程序不会发生类型错误。
2017-08-30 cs.PL
A Top-Down Deriving Mechanism in Haskell
该文针对 Haskell,提出扩展其现有派生机制,用于复合数据类型和多级类型类层次结构,解决程序员编写派生子句及枚举超类的繁琐问题。
2026-07-10 cs.PL
Proving Type Class Laws for Haskell
Haskell中的类型类用于实现ad-hoc多态性,即一种确保程序员和编译器都为特定数据类型定义一组函数的方法。这种类型类的所有实例都应该以某种方式运行,并满足与相应类相关的定律。然而,这些通常只是在评论中陈述,因此,没有真正的方法来强制执行它们。在本文中,我们描述了一个系统,它允许用户写下类型类的法律,然后自动实例化,并发送到一个归纳定理证明器时,声明一个新的类型类的实例。
2018-08-17 cs.PL
Linear Haskell: practical linearity in a higher-order polymorphic language
线性类型系统有着悠久的历史,但与现有语言(如OCaml或Haskell)集成的道路并不清晰。在本文中,我们研究了一个线性类型系统设计的两个关键属性:向后兼容性和代码重用的线性和非线性用户的图书馆。只有这样,线性类型的好处才能渗透到传统的函数式编程中。我们没有将类型分为线性和非线性对应物,而是将线性附加到函数箭头上。线性函数可以从线性绑定值接收输入,但也可以对不受限制的常规值进行操作。为了证明我们的线性类型系统的有效性--它可以多么容易地集成到现有的语言实现中,以及它如何简化使用线性类型编写程序--我们在领先的Haskell编译器GHC中实现了我们的类型系统,并演示了线性类型的两种应用:纯接口的可变数据;以及在I/O执行函数中执行协议。
2017-11-08 cs.PL
Understanding Haskell-style Overloading via Open Data and Open Functions
本文提出核心语言 System F_D,通过开放数据类型与开放函数为 Haskell 风格重载提供统一且更具表现力的语义,并在 Lean4 中完成元理论机械化。
2025-07-21 cs.PL
How to Safely Use Extensionality in Liquid Haskell
精化类型检查器是对函数式程序进行推理的一种强有力的方法。例如,可以证明一个缓慢的规范实现的属性,将证明移植到行为相同的优化实现。如果没有函数的可拓性,证明必须与完全应用的函数相关。当数据本身具有高阶表示时,完全应用的证明面临严重的障碍!在处理一阶数据时,完全应用的证明在使用高阶函数时会导致令人讨厌的重复。虽然依赖类型论通常与函数扩展性公理一致,但具有语义子类型的精化类型系统不一致地处理函数扩展性的朴素措辞,导致不合理。我们证明了这种不合理性,并在Liquid Haskell中开发了一种新的平等方法:我们在一个名为PEq的库中定义了一个命题平等。使用PEq避免了不健全,同时仍然证明有用的等式在更高的类型,我们证明了它的使用在几个案例研究。我们通过建立一个小模型并开发其元理论来验证PEq。此外,我们使用一种未命名的民间传说技术证明了液体Haskell本身内部PEq的元属性,我们称之为“经典归纳”。
2022-07-19 cs.PL
A Simple Semantics for Haskell Overloading
正如最初提出的那样,类型类提供了重载和特殊定义,但仍然可以根据严格的参数演算来理解(和实现)。对于类型类的后续扩展,情况并非如此。函数依赖和相等约束允许谓词的可满足性来细化类型;这意味着等效限定类型的解释可能是不可互换的。重叠的实例和实例链允许谓词在不确定其关联类方法的实现的情况下得到满足,从而引入真正的非参数行为。我们提出了一种新的方法类型类的语义,解释多态表达式的每个地面实例的行为,但不需要这些行为被参数化确定。我们认为,这种方法既符合限定类型的直观含义,又准确地模拟了程序的行为
2016-12-24 cs.PL
An Introduction to Liquid Haskell
本文是介绍底层技术和工具Liquid Haskell的使用的教程,Liquid Haskell是函数式语言Haskell的类型检查器,可以帮助程序员以较低的工作量验证其程序的非平凡属性。第一部分通过解释其原理并总结其类型推断算法如何证明属性来介绍Liquid类型技术。剩下的部分介绍了Haskell的一些例子,并展示了可以用这个系统证明的性质。
2017-01-12 cs.LO cs.PL
Ready, Set, Verify! Applying hs-to-coq to real-world Haskell code
好的工具可以为用主流函数式语言编写的程序带来机械验证。我们使用hs-to-coq将Haskell容器库的重要部分转换为Coq,并根据我们从各种来源获得的规范进行验证,包括类型类定律,库的测试套件和Coq标准库的接口。我们的工作表明,它是可行的,以验证成熟的,广泛使用的,高度优化的,未经修改的Haskell代码。我们还学习了更多关于权重平衡树的理论,扩展了hs-to-coq来处理bug,并且--因为我们没有发现bug--证明了经过良好测试的功能代码的卓越质量。
2018-03-20 cs.PL
Goanna: Resolving Haskell Type Errors With Minimal Correction Subsets
针对Haskell类型错误调试困难的问题,研究提出了基于最小校正子集枚举的新型工具Goanna,可识别潜在错误原因与解决方案,经86个程序验证有效,并辅以相关技术提升诊断能力。
2024-05-21 cs.HC cs.PL
Equational Reasoning for MTL Type Classes
在等式推理中直接使用代码中出现的定义的能力是函数式编程的关键优势之一。这在Haskell类型的类方法中是不可能的,除非指定了特定的实例类型,因为类方法可以为不同的实例定义不同的方法。为了允许所有实例的统一推理,Haskell库中的许多类型类都带有在注释中指定的定律(公理),所有实例都应该遵循这些定律(尽管Haskell无法强制它)。对于在Monad Transformer Library(MTL)中引入的类型类,这样的定律还没有被指定;然而,在文献和Haskell邮件列表中已经出现了一些公理集。本文探讨了一套法律适用于等式推理的方法的类型类MonadReader和MonadWriter,并回顾了类似的早期建议类MonadError和MonadState。对于MonadReader和MonadWriter,建立了两个不同操作集的替代公理化的等价结果。作为一个副业,在不同的类的方法的选择模式注意到这可能会激发新的发展MTL。
2020-07-01 cs.PL
Coherent Explicit Dictionary Application for Haskell: Formalisation and Coherence Proof
类型类是Haskell最受欢迎的特性之一,并通过ad-hoc多态性扩展了其类型系统。由于他们的概念,有一些有用的功能,不能提供,因为希望提供两个正确的属性:一致性和全局唯一性的实例。一致性本质上保证了程序语义独立于类型检查器内部。库依赖于实例的全局唯一性来强制执行,例如,单个顺序关系用于有序二叉树的所有操作。无法提供的功能包括显式字典应用程序和本地实例,这在实践中非常有用。我们提出了一个新的设计,提供明确的字典应用程序,而不损害一致性和全球唯一性。我们引入了一个新的标准的基础上GHC的类型参数的角色,以决定当一个字典应用程序是安全的全局唯一性的实例。我们通过检测潜在的不一致性来源来保持一致性,并正式证明它。此外,我们的解决方案可以使用本地字典。除了正式开发我们的想法外,我们还在GHC中实现了一个工作原型。本报告包含完整的形式化和一致性证明。
2018-07-30 cs.PL
Trees That Grow
我们研究了函数数据类型的可扩展性概念,作为一种新的方法来装饰抽象语法树与额外的信息集的问题。我们在重新设计GHC中表示Haskell抽象语法的数据类型时观察到了这种可扩展性的需求。具体来说,我们描述了我们的方法,在Haskell中使用一种新的语法机器来表达可扩展的数据类型的树装饰问题。我们表明,语法机器是完整的,因为它可以表达所有的语法可能的形式扩展到代数数据类型声明。然后,我们描述了一个编码的语法机制的基础上现有的功能在格拉斯哥Haskell语言(GHC)。
2016-10-15 cs.PL
Type Classes and Constraint Handling Rules
类型类是对传统的基于Hindley-Milner的类型系统的优雅扩展。它们用于现代类型化语言,如Haskell,以支持符号的受控重载。Haskell 98只支持单参数和构造函数类型的类。其他扩展,如多参数类型类,是非常需要的,但仍然没有得到Haskell的正式支持。扩展会产生一些微妙的问题,这可能会导致丢失可行的类型推断或模糊的程序。类型分类系统的适当逻辑基础似乎缺失了。这样的基础将允许扩展的特点和严格的研究。我们建议采用约束处理规则作为一种工具,研究和开发的类型类系统在一个统一的方式。
2000-06-26 cs.PL
Kind Inference for Datatypes: Technical Supplement
近年来,像Haskell这样的语言出现了大量的新特性,这些特性显著地扩展了它们的类型系统的表达能力。由于这些特点,数据类型声明的类推理问题已经成为一个值得研究的问题。本文研究数据集的类推理。受以前类型推断研究的启发,我们为Haskell 98和我们称为PolyKinds的更高级系统提供了应该接受的数据类型声明的声明性规范,该系统基于现代Haskell的扩展,包括有限形式的依赖类型。我们相信这些公式是新颖的,没有先例,即使是Haskell 98。这些规范补充了可实现的算法版本。我们研究这些系统的可靠性,完备性和主类的存在性,证明它们的性质。这项工作可以作为一个指导语言的设计者谁希望正式化他们的数据类型声明,也渴望有原则的推理的主要类型的实现。这一技术性的补充,以类推理的数据库服务,以扩大文本的主要文件。它包含了详细的打字规则、证明以及与Glasgow Haskell Classifier(GHC)的连接。
2019-11-12 cs.PL
Multicloud API binding generation from documentation
我们介绍了实现可重定向的云API绑定生成器的行业经验。分析是在Haskell中实现的,使用类型类、按菜单选择的类型和代码生成monad。它还针对Haskell,并允许我们在短时间内绑定云API,并实现前所未有的规模。
2020-11-05 cs.PL
Compiling Signal Processing Code embedded in Haskell via LLVM
Martin-Luther-Universität Halle-Wittenberg(哈雷-维滕贝格马丁·路德大学)
本文讨论了一种嵌入在函数式语言Haskell中,以底层虚拟机为后台的实时音频信号处理的程序设计语言。有了这个框架,我们可以用Haskell的舒适性和类型安全性来编码,同时实现快速内部循环和完全向量化的最大效率。这样,Haskell就成为专用信号处理语言的一个有价值的替代方案。
2011-04-13 cs.PL cs.SD
Improved Inference for Checking Annotations
我们认为类型推断在Hindley/Milner系统扩展的类型注释和约束,特别侧重于Haskell风格的类型类。我们观察到,标准的推理算法是不完整的嵌套类型注释的存在。为了改善这种情况,我们引入了一个新的推理方案检查类型注释。我们的推理方案也是不完整的一般,但改善了现有的实现,如发现在格拉斯哥哈斯克尔密码(GHC)。对于某些情况(例如Haskell 98),我们的推理方案是完整的。我们的方法已经完全实现为Chameleon系统(Haskell的实验版本)的一部分。
2005-07-14 cs.LO cs.PL
Declarative Combinatorics: Isomorphisms, Hylomorphisms and Hereditarily Finite Data Types in Haskell
本文是对基本数据类型(自然数、集合、多集合、有限函数、排列、二元判定图、图、超图、括号语言、并元有理数、素数、DNA序列等)之间的{ \em同构}的函数式程序设计框架的探索。通过{\em ranking/unranking}和{ \em pairing/unpairing}运算导出的{ \em hylomorphisms}将它们推广到遗传有限论域.嵌入式高阶{ \em组合子语言}自动提供任意到任意编码。除了实验数学的应用外,还展示了通过在数据类型之间转移操作而获得的“自由算法”的几个例子。其他应用包括组合对象的流迭代器、自定界代码、简洁的数据表示和随机实例的生成。该文件涵盖了59个数据类型,并通过使用嵌入式组合子语言,提供了3540个不同的双射变换。这篇论文的独立源代码是由一个识字的Haskell程序生成的,可以在\url{http://logic.csci.unt.edu/tarau/research/2008/fISO.zip}上找到。{ \bf Keywords}:Haskell数据表示、数据类型同构、声明组合学、计算数学、阿克曼编码、哥德尔数、算术化、排序/非排序、遗传有限集、函数和置换、二进制决策图编码、二元有理数、DNA编码
2009-01-19 cs.DS cs.PL
Learn Physics by Programming in Haskell
我们描述了一种方法,加深学生的理解基础物理,要求学生表达物理思想的功能程序设计语言。该方法是在黎巴嫩谷学院计算物理二年级课程实施。我们认为,牛顿力学的结构是澄清其表达的语言(Haskell),支持高阶函数,类型和类型类。在电磁理论中,计算电场和磁场的函数的类型特征清楚地表达了对产生场的电荷和电流分布的函数依赖性。基础物理学中的许多概念都可以用一个类型或一个函数很好地捕捉到。
2014-12-16 cs.CY cs.PL physics.ed-ph
Designing Walrus: Relational Programming with Rich Types, On-Demand Laziness, and Structured Traces
Galois, Inc.(Galois公司)
本研究提出嵌入Haskell的函数式关系语言Walrus,在miniKanren基础上扩展类型多态合一、按需惰性等特性,结合双向编译器开发经验阐述其设计实现与实践反思。
2025-10-28 cs.PL
Linear Constraints
Imperial College London(伦敦帝国学院);University of Gothenburg(哥德堡大学)
本文提出线性约束,通过隐式参数简化线性类型编程,提升资源管理安全性,扩展GHC求解器并改进形式系统。
2026-04-23 cs.PL
Bidirectional Type Class Instances (Extended Version)
GADT早在十多年前就被引入Haskell的生态系统中,但它们与几个主流特性(如类型类和函数依赖)的交互还有很大的改进空间。更具体地说,对于某些GADT来说,即使是最简单的类型类也很难提供实例。在本文中,我们确定了这个缺点的来源,并通过对Haskell的类型类引入一个保守的扩展来解决它:双向类型类(Bidirectional Type Class)。在本质上,在我们的解释类实例对应于逻辑的双向影响,而不是他们的传统的单向解释。我们提出了一个完全成熟的双向实例设计,涵盖了系统FC的类型和细化规范,以及类型推断和细化的算法。我们提供了我们的算法的概念验证实现,并重新审视元理论的类型类在我们的扩展。
2019-07-01 cs.PL
On Termination, Confluence and Consistent CHR-based Type Inference
我们考虑应用约束处理规则(约束处理规则)规范的类型推断系统,如Haskell使用。confluence的保证类型推断提供的答案是正确的和一致的。建立汇流的标准方法依赖于一个假设,即并行程序正在终止。然而,在实践中的许多例子中,产生了非终止的递归程序,使这种方法不适用。尽管不能保证终止或汇合,Glasgow Haskell推理器(GHC)支持允许用户继续进行类型推断的选项,例如通过使用UndecidableProjectile标志。在本文中,我们正式确定并验证了一组宽松的标准,即范围限制,局部汇合,地面终止,以确保基于CHR的类型推断,映射到潜在的非终止的可编程逻辑程序的一致性。
2014-05-14 cs.PL
Deriving Law-Abiding Instances
Liquid Haskell的精化-反射特性增强了Haskell语言的定理证明功能,允许程序员使用证明来改进现有代码。但是,这些证明中的许多都需要编写繁琐的常规样板代码。此外,许多这样的证明不能很好地扩展,因为证明项的大小可以随着证明中涉及的数据集的大小而超线性地增长。我们提出了一种技术,利用数据类型通用编程,解决了这个问题,细化反射编程。我们的观察是,我们可以采用任何代数数据类型,生成等价的表示类型,并让Liquid Haskell自动构造(并证明)原始类型和表示类型之间的同构。这减少了许多证明到简单的代数“积木”类型上的简单定理,允许程序员便宜而愉快地编写通用证明。
2017-08-07 cs.LO cs.PL
A monadic interpreter and type-and-effect checker
Università del Piemonte Orientale(皮埃蒙特东方大学);Università di Genova(热那亚大学)
本文用 Haskell 实现了单子框架,包含小步解释器和类型-效应检查器,通过分离语法与效应语义,并利用模块化编程验证其可实现性,以异常和非确定性单子示例展示。
2026-09-09 cs.PL
Strategic polymorphism requires just two combinators!
在以前的工作中,我们介绍了函数策略的概念:第一类通用函数,可以遍历任何类型的术语,同时混合统一和类型特定的行为。函数式策略将术语重写策略(包括遍历)的概念转移到函数式编程范式中。同时,提出了许多基于Haskell的模型和组合子套件,以支持具有函数式策略的泛型编程。在本文中,我们提供了一个紧凑和成熟的功能策略的重建。我们只通过两个原始的组合子来捕获策略多态性。这是在不承诺特定函数语言的情况下完成的。我们分析了功能策略实施模型的设计空间。为了完整起见,我们还提供了一个用于实现函数策略的操作参考模型(在Haskell中)。我们证明了我们的方法的一般性,通过重建的Strafunski库的功能策略的代表性片段。
2002-12-19 cs.PL
Type variables in patterns
多年来,GHC实现了对Haskell的扩展,允许类型变量绑定在类型签名和模式中,并在术语上起作用。从未正确指定此扩展名。我们在这里纠正这个疏忽。有了正式的规范,在模式中绑定类型变量的设计之路就变得非常清晰了。因此,我们扩展了ScopedTypeVariables来显式地绑定类型变量,避免了将Proxy解决方案放入历史的垃圾箱。
2018-06-09 cs.PL
On the State of Coherence in the Land of Type Classes
本文考察Swift、Rust和Scala中类型类的一致性处理,并与Haskell对比,发现三者绕过实例唯一性限制的策略惊人相似。
2025-02-27 cs.PL
Linearly Qualified Types: Generic inference for capabilities and uniqueness
线性参数必须在其函数体中只使用一次。当将文件句柄和手动管理的内存等资源声明为线性参数时,线性类型系统可以验证这些资源是否安全使用。然而,编写带有显式线性参数的代码需要官僚主义。本文介绍了线性约束,这是线性类型的前端特性,可以减少使用线性类型的官僚主义。线性约束是由编译器自动填充的隐式线性参数。我们提出线性约束作为一个合格的类型系统,连同推理算法,扩展GHC的现有约束求解算法。线性约束的合理性是通过将其转换为线性Haskell来保证的。
2022-07-22 cs.PL
On Abstract Machine Semantics for Proto-Quipper-M
Quipper是一种用于描述量子电路的特定领域程序设计语言。因为它是作为Haskell中的嵌入式语言实现的,所以Quipper是一种非常实用的函数式语言。然而,出于同样的原因,它缺乏正式的语义,并且受到Haskell类型系统的限制。特别是,由于Haskell缺乏线性类型,很容易编写违反量子态不可克隆特性的Quipper程序。为了以类型安全的方式形式化Quipper的相关片段,在过去几年中引入了Proto-Quipper家族的研究语言。在本文中,我们首先回顾Proto-Quipper-M,Proto-Quipper家族的一个实例,它基于量子电路的分类模型,具有线性类型系统,保证了非克隆属性在编译时保持不变。然后,我们推导出一个试探性的小步操作语义的大步骤语义的Proto-Quipper-M,我们证明了这两个是等价的。在证明了试探性语义的主题缩减和进展结果后,我们在此基础上构建了一个真正的抽象机器风格的小步语义,我们最终证明了它与原始语义是等价的。
2021-05-07 cs.LO cs.PL quant-ph
Modular Inference of Linear Types for Multiplicity-Annotated Arrows
Bernardy等人[2018]提出了一个线性类型系统$λ^q_\to$作为Linear Haskell的核心类型系统。在系统中,线性由带注释的箭头类型$A \to_m B$表示,其中$m$表示参数的多重性。由于这种表示,在许多情况下,现有的非线性代码类型和新编写的线性代码可以与现有的非线性代码一起使用。然而,对$λ^q_\to$的类型推断知之甚少。虽然Linear Haskell实现配备了类型推断,但其算法尚未正式化,并且实现通常无法推断主类型,特别是对于高阶函数。在本文中,基于OutsideIn(X)[Vytiniotis等人,2011],我们提出了一个推理系统的秩1限定类型的变体$λ^q_\to$,推断主类型。这种新设置的一个技术挑战是处理由朴素限定类型推断的二义性类型。我们通过量词消去来解决这个歧义问题,并通过实例证明了该方法的有效性。
2020-02-19 cs.LO cs.PL
Hygienic Source-Code Generation Using Functors
现有的源代码生成工具,如Lex和Yacc,由于使用非实体代码来实现操作,因此存在实际的不便。为了防止这个问题,这样的工具可以生成封闭的函子,然后由程序员用适当的动作代码实例化。这将导致所有代码在其适当的上下文中进行类型检查,并帮助类型检查器正确地定位错误。我们已经为标准ML、OCaml和Haskell实现了基于这种技术的词法生成器和解析器生成器。
2018-01-04 cs.PL
A graded dependent type system with a usage-aware semantics (extended version)
分级类型论提供了一种机制来跟踪和推理类型系统中的资源使用情况。在本文中,我们开发了GraD,一个新的版本,这样一个分级依赖型系统,包括功能,张量积,加法和单位类型。由于标准的操作语义是资源不可知的,我们开发了一个基于堆的操作语义,并证明了一个合理性定理,显示正确的会计资源的使用。从这个定理可以导出一些有用的性质,包括标准型可靠性定理、计算中不受无关资源的干扰以及线性资源的单指针性质。我们希望,我们的工作将提供一个基础,在实际的程序设计语言,如Haskell集成线性,无关性和依赖类型。
2021-01-06 cs.LO cs.PL
Koka: Programming with Row Polymorphic Effect Types
我们提出了一个编程模型,其中的影响被视为在一个纪律的方式,并在一个函数的潜在副作用是显而易见的,在其类型签名。表达式的类型和效果也可以自动推断,我们描述了一个多态类型推断系统的基础上Hindley-Milner风格推理。一个新的功能是,我们支持多态性的影响,通过行多态性使用重复的标签。此外,我们表明,我们的效果不只是语法标签,但有一个深刻的语义连接到程序。例如,如果一个表达式可以在没有exn效应的情况下进行类型化,那么它永远不会抛出未处理的异常。与Haskell的runST类似,我们展示了如何安全地封装有状态操作。通过状态效应,我们还可以安全地将状态与let多态性结合起来,而不需要强制类型变量或语法值限制。最后,我们的系统完全用一种名为Koka的新语言实现,并已成功用于各种中小型示例程序,从Markdown处理器到分层聊天应用程序。您可以在www.rise4fun.com/koka/tutorial上试用Koka live。
2014-06-09 cs.PL
Gradual Liquid Type Inference
液态类型提供了一种可判定的细化推理机制,它很方便,但有两个主要问题:(1)推理是全局的,需要顶级注释,这使得它不适合模块化代码组件的推理,并禁止其适用于库代码,以及(2)推理失败导致模糊的错误消息。这些困难严重阻碍了现有代码的迁移以使用改进。本文表明,逐步液体类型推断-液体推理和逐步细化类型的新组合-解决这两个问题。支持乐观解释的不精确谓词的渐进细化类型可以在参数位置中使用以约束流动推理,使得全局推理过程e有效地推断可用于库组件的模块化规范。双重地,当逐渐改进作为推理的结果出现时,它们表示静态改进的使用不一致。因为液体细化是从一个nite集合的谓词,在逐渐液体类型推断,我们可以枚举每个不精确的细化的安全具体化,即静态细化,证明为什么一个程序是逐渐良好的类型。此枚举对于静态液体类型错误的解释非常有用,因为安全具体化显示了导致静态类型错误的所有潜在不一致性。我们发展了渐进式液态类型推断理论,并在液态Haskell语言环境下对其语用进行了探讨。
2019-10-30 cs.PL
Liquid Resource Types
本文介绍了流动资源类型,一种自动验证函数程序资源消耗的技术。现有的资源分析技术贸易自动化的灵活性-自动化技术被限制在相对有限的家庭的资源界限,而更多的表达证明技术承认依赖于值的界限依赖于手写的证明。流动资源类型结合了这些方法的优点,使用逻辑细化来自动证明程序资源消耗的精确界限。类型系统用潜在的注释来扩充细化类型,以执行摊销资源分析。重要的是,用户可以注释数据结构声明,以指示如何在类型内分配潜力,允许系统用多项式和指数表示边界,以及根据程序值更精确的表达式。我们证明了类型系统的可靠性,提供了一个库的灵活性和可重用的数据结构进行资源分析,并使用我们的原型实现自动验证资源的界限,以前需要手动证明。
2020-07-01 cs.PL
Dependently-Typed AARA: A Non-Affine Approach for Resource Analysis of Higher-Order Programs
Princeton University(普林斯顿大学);Key Lab of HCST (PKU), MOE(北京大学计算机辅助设计与图形学教育部重点实验室;北京大学信息科学技术学院);SCS, Peking University
本文提出了一种非仿射依赖类型系统,用于高阶程序的资源分析,通过解耦资源与类型并采用非仿射类型机制,以提高资源行为推导的精度。
2026-01-22 cs.PL
Work Analysis with Resource-Aware Session Types
虽然存在几种成功的技术来支持程序员推导顺序代码的静态资源界限,但分析消息传递并发进程的资源使用情况带来了额外的挑战。为了应对这些挑战,本文提出了一个静态的消息传递过程所执行的总工作的最坏情况的界限的分析。为了将交互过程分解为可以隔离分析的组件,分析基于新颖的资源感知会话类型,其描述了用于进程间通信的协议和资源契约。一个关键的创新是,消息和流程都有可能在通信时分担和摊销成本。为了在没有静态数据结构和固有大小的情况下象征性地表达资源使用,资源契约描述了作为进程之间交互的函数的边界。资源感知会话类型在线性类型系统中结合了标准二进制会话类型和基于类型的摊销资源分析。这种类型的系统制定的核心会话类型演算的语言SILL和证明声音相对于一个基于多集的运营成本语义,跟踪在系统中交换的消息的总数。分析的有效性证明了标准的例子,从摊还分析和文献的会话类型,并通过比较性能分析不同的并发程序实现相同的接口。
2018-04-27 cs.PL
Resource-Aware Session Types for Digital Contracts
编程数字合同带来了独特的挑战,其中包括(i)表达和执行交互协议,(ii)控制资源使用,以及(iii)防止复制或删除合同资产。本文介绍了Nomos的设计和类型理论基础,Nomos是一种用于解决这些挑战的数字合同的程序设计语言。为了表达和执行协议,Nomos基于共享的二进制会话类型。为了控制资源使用,Nomos采用自动摊销资源分析。为了防止重复或删除资产,Nomos使用线性类型系统。Monad将有效的会话类型语言与通用函数语言集成在一起。Nomos的原型实现具有线性时间类型检查和有效的类型重构功能,包括通过现成的线性优化自动推断资源边界。该语言的有效性通过实施常见智能合约(如拍卖,选举和货币)的案例研究进行评估。Nomos是完全形式化的,包括类型系统,成本语义和事务语义,以在区块链上实例化Nomos合约。类型可靠性证明确保在运行时遵循协议,并且类型在资源消耗上建立可靠的上限,排除可重入性和耗尽漏洞。
2019-11-22 cs.PL
Towards an Abstract Domain for Resource Analysis of Logic Programs Using Sized Types
提出了一种基于大小类型的逻辑程序通用资源分析方法,大小类型是一种包含结构(形状)信息的表示方法,它允许在任意位置和深度上表示一组项及其子项的大小的上下界.它们还允许在逻辑谓词中不同论元位置出现的术语和子术语的大小相关。使用这些大小的类型,资源分析可以推断的下限和上限的资源使用的程序中的所有程序作为输入项(和子项)的大小的函数,克服现有的分析和提高其精度的局限性。我们的新资源分析已经开发的抽象解释框架内,作为大小类型抽象域的扩展,并已集成到Ciao预处理器,CiaoPP。抽象域操作集成的递归方程的建立和求解,推断大小和资源使用功能。我们表明,该分析是一个改进,在CiaoPP目前的资源分析和比较以及功率的最先进的系统。
2013-08-19 cs.PL
Probabilistic Resource-Aware Session Types
会话类型保证消息传递进程遵守预定义的通信协议。以前的工作会话类型集中在确定性语言,但许多消息传递系统,如马尔可夫链和随机分布式算法,是概率。为了对这类系统进行建模和分析,本文引入了概率会话类型,并探讨了它们在自动期望资源分析中的应用。概率会话类型描述消息上的概率分布,是直觉(二进制)会话类型的保守扩展。为了在概率信道上发送,进程必须利用来自概率分支表达式的内部随机性或来自在概率信道上接收的外部随机性。对预期资源边界的分析与类型系统集成在一起,是自动摊销资源分析的一个变体。通过将类型推断简化为线性约束求解,可以自动推导出不同代价度量的符号界限。其技术贡献包括基于新颖的嵌套多重宇宙语义的Meta理论,以及允许灵活混合不同随机性来源而不给程序员增加类型注释负担的类型重构算法。该类型系统已在PRast语言中实现。实验结果表明,PRast可应用于随机分布式算法的资源分析、马尔可夫链极限分布的验证、概率数字合同的分析等领域。
2020-11-18 cs.PL
Extending Isabelle/HOL's Code Generator with support for the Go programming language
本工作为Isabelle/HOL的代码生成器新增Go语言作为第五种目标语言,通过命令式构造模拟函数式特性,并以附加库形式提供支持。
2024-09-19 cs.LO cs.PL
Programming with Applicative-like expressions
事实上,Application类型类允许人们以无变量的组合风格来表达简单的解析器,这在Haskell程序员中很受欢迎,因为它的概念简单,易于使用,以及对于半自动代码生成(元编程)的有用性。我们注意到,这样的应用计算可以被解释为提供一种机制,通过子计算来构造具有“端口”“可插入”的数据类型。我们观察到,正是这个属性使它们在实践中比使用传统合成构建相同计算的通常方式更加方便。我们将这种观察提炼成一个更一般的代数结构(和/或表达技术)“类应用”计算,并演示了这种结构的其他几个实例。我们之所以对所有这些感兴趣,是因为上述实例允许我们在单个构造函数的简单数据类型之间表示任意转换(类似于应用解析如何允许从字符流变换到这样的数据类型)使用紧密遵循常规应用计算的样式,因此极大地简化了(如果不是完全自动化的话)许多函数程序中存在的大量样板代码。
2019-05-26 cs.LO cs.PL cs.SE
Amortised Resource Analysis and Typed Polynomial Interpretations (extended version)
我们介绍了一种新的资源分析类型的长期重写系统的基础上,潜在的类型系统。这种类型系统在最内部的运行时复杂度上产生多项式界限。我们将由此获得的摊销资源分析与多项式解释相关联,并获得了一个可能令人惊讶的结果,即每当重写系统R可以是良好类型的,那么就存在一个面向R的多项式解释。为此,我们充分适应多项式解释的标准概念的类型设置。
2014-03-14 cs.LO cs.PL
Types and Terms Translated: Unrestricted Resources in Encoding Functions as Processes (Extended Version)
类型保持翻译是研究核心程序演算的有效工具。在本文中,我们开发了一个新的类型化翻译,连接顺序和并发演算,它是由类型系统控制资源消耗。我们的主要贡献是源语言,一个新的资源$λ$ -微积分与非确定性和失败,被称为\ulamf。在\ulamf中,资源被分为线性和不受限制的;故障是明确的,并且由这种区别引起。我们定义了一个基于交集类型的类型系统来控制资源和易失败的计算。目标语言是\spi,一种现有的会话类型的$π$演算,它是由线性逻辑和会话类型之间的Curry-Howard对应关系产生的。我们的类型化翻译包含了我们以前的工作;有趣的是,它将\lamrfailunres中的无限制资源视为\spi中的客户端-服务器会话行为。
2022-05-30 cs.LO cs.PL
Resource-Guided Program Synthesis
本文介绍了资源引导合成,一种用于合成既满足功能规范又满足符号资源约束的递归程序的技术。该技术是类型导向的,并依赖于一个新的类型系统,结合多态细化类型与自动摊销资源分析的潜在注释。类型系统支持有效的基于约束的类型检查,并可以表达精确的基于细化的资源边界。类型可靠性证明表明,合成程序是正确的。通过紧密集成程序探索和类型检查,合成器可以利用用户提供的资源绑定来指导搜索,急切地拒绝消耗太多资源的不完整程序。在资源引导合成器ReSyn的实现是用来评估递归数据结构操作的范围内的技术。实验表明,ReSyn合成的程序比由资源不可知的合成器生成的程序更有效。此外,使用ReSyn的合成比合成和资源分析的简单组合更快。ReSyn还能够生成对于固定输入大小具有恒定资源消耗的实现,这可用于减轻侧信道攻击。
2019-04-18 cs.LO cs.PL
Resource Usage Analysis for the Pi-Calculus
我们提出了一个基于类型的资源使用分析的-演算扩展资源创建/访问原语。资源使用分析的目标是静态地检查程序是否以有效的方式访问资源,如文件和内存。我们的类型系统是一个扩展以前的行为类型系统的演算,并可以保证安全属性,没有无效的访问被执行,以及必要的访问(如关闭操作的文件)最终执行,除非程序发散的属性。为使程序员从编写复杂类型注释的负担中解脱出来,本文还开发了一个完善的类型系统类型推断算法。基于该算法,我们已经实现了一个原型的资源使用分析器的演算。据作者所知,我们是第一个基于类型的资源使用分析,处理一个表达并发语言,如pi演算。
2006-09-13 cs.LO cs.PL
Automatic Amortized Resource Analysis with Regular Recursive Types
本文针对复杂自定义数据结构上的资源界推断问题,为正则递归类型定义的代数数据结构统一构造资源多项式,并在FPC类型系统中集成AARA,借助自由半模与逻辑关系证明其可靠性。
2023-04-26 cs.LO cs.PL