Mechanizing Refinement Types (extended)
基于精化类型的实用检查器使用隐式语义子类型和参数多态性的组合来简化规范并自动验证程序的复杂属性。然而,一个正式的元理论会计的完善型系统使用这种组合已被证明是难以捉摸的。我们提出了一个结合语义子类型和参数多态性的核心精化演算λ_RF。我们开发了这个演算的元理论,并证明了类型系统的可靠性。最后,我们使用基于精化类型的LiquidHaskell作为证明检查器,给出了我们的元理论的完整机械化,展示了精化如何用于机械化。
2022-07-12 cs.PL
Extensible Datasort Refinements
细化类型将类型检查转变为轻量级验证。精化类型的经典形式是归并精化,其中归并标识归纳数据集的子类。现有的类型系统要求在声明一个类型时指定该类型的所有细分;同一类型的多个细分只能通过复制类型定义来获得,从而复制代码。我们丰富了传统的签名的概念,它描述了居民的港口,允许重新完善通过签名扩展,而不重复的定义。由于任意更新的签名可以无效的反演原则用于检查情况下的表达式,我们开发了一个定义的签名格式良好,确保扩展保持现有的反演原则。这个定义允许程序的不同部分以不同的方式扩展相同的签名,而不会相互冲突。每个部分都可以独立地进行类型检查,允许单独编译。
2020-11-14 cs.PL
Executable Refinement Types
本文介绍了可执行精化类型,它通过半判定谓词精化结构类型,并建立了它们的元理论和相应的实现技术。这些结果对于一般的不可判定类型系统是有用的。具体贡献包括:(1)可执行精化类型的类型可靠性和扩展等价的逻辑关系(2)针对可执行细化类型的混合类型检查,其以新颖的方式混合了静态和动态检查,在某种意义上比任何可判定的近似在静态上执行得更好;(3)类型重构算法--当被适当地重新定义以应用于不可判定类型系统时,即使类型检查不是可判定的,重构也是可判定的;(4)一种新的使用存在类型与依赖类型,以确保逻辑公式的语言在类型检查下是封闭的(5)可执行细化类型的原型实现Sage,使得所有动态错误都被传达回编译器,并且是thore-static错误。
2014-03-13 cs.PL
Toward SMT-Based Refinement Types in Agda
依赖类型提供了很大的通用性和强大的功能,但是用它们来开发证明可能是乏味的,并且需要相当多的人工指导。我们建议将可满足性模理论(SMT)为基础的细化类型的依赖类型的语言Agda的努力,以减轻一些负担的依赖类型的编程,并结合两种方法的机械化定理证明的优势。
2021-10-12 cs.PL
Sums of Uncertainty: Refinements Go Gradual
静态类型函数式语言的一个长期存在的缺点是类型检查不能排除模式匹配失败(运行时匹配异常)。细化类型区分不同的数据类型值;如果用细化注释的程序通过了类型检查,那么模式匹配失败就变得不可能了。不幸的是,细化是类型的单一属性,这加剧了向非平凡程序添加细化类型的难度。渐进式类型化探索了如何在静态类型化和动态类型化之间渐进地移动。我们开发了一个类型系统的逐步总和,结合细化与不精确。然后,我们开发了一个双向版本的类型系统,它排除了过度的不精确性,并给出了一个类型导向的翻译到一个目标语言显式转换。我们证明了静态子语言不能有匹配失败,一个良好类型的程序仍然是良好类型的,如果它的类型注释不太精确,并使注释不太精确的原因目标程序失败后。其中一些结果与Siek et al.(2015)给出的渐进分型标准相对应。
2020-09-19 cs.PL
Contextual Refinement Types
本文扩展了证明环境 Beluga,引入数据排序精化类型和精化模式,以细粒度分类上下文与绑定器结构,合并类型与排序检查,并证明扩展的保守性。
2023-11-17 cs.PL
Data Flow Refinement Type Inference
精化类型支持函数程序的轻量级验证。用于静态推断细化类型的算法通常通过简化到求解从类型化派生中提取的受约束Horn子句的系统来工作。一个例子是Liquid类型推断,它使用谓词抽象来解决提取的约束。然而,约束求解本身的简化已经意味着影响整体静态分析精度的程序语义的抽象。为了更好地理解这个问题,我们通过抽象解释的视角来整体研究类型推断问题。我们提出了一个新的细化类型系统,是参数的类型细化的抽象域的选择,以及它跟踪上下文敏感的控制流信息的程度。然后,我们推导出一个伴随的参数推理算法作为一个抽象的解释一个新的数据流语义的功能程序。我们进一步表明,类型系统是健全的和完整的构造抽象语义。我们的理论发展揭示了细化类型推断算法中固有的关键抽象步骤。这些抽象步骤的精度和效率之间的权衡由类型系统的参数控制。现有的精化类型系统及其相应的推理算法,如Liquid类型,都是通过具体的参数实例化来捕获的。我们已经在一个原型工具中实现了我们的框架,并针对一系列新的参数实例(例如,使用八边形和多面体来表示类型细化)。该工具与其他现有工具相比毫不逊色。我们的评估表明,我们的方法可以用来系统地构建新的细化类型推断算法,是强大的和精确的。
2020-11-10 cs.PL
Refinement Kinds: Type-safe Programming with Practical Type-level Computation (Extended Version)
这项工作介绍了新的概念,细化,我们开发的上下文中明确多态ML类语言与类型级计算。正如类型精化通过类型域中的值上的谓词所表达的理解原则来嵌入丰富的规范一样,种类精化通过种类域中的类型上的谓词来提供丰富的种类规范。通过利用我们强大的细化类规则,我们语言中的类型不仅用于静态地对程序表达式和值进行分类,而且还可以方便地作为树状数据结构进行操作,并通过对此类结构的逻辑约束来细化它们的类。值得注意的是,由此产生的类型和分类规则允许强大的类型反射,ad-hoc多态和类型元编程,这些通常在现代软件开发中发现,但通常不能在通用语言中以类型安全的方式表达。我们通过建立类型安全的标准元理论结果,并通过一个原型实现的一种检查器,类型检查器和解释器,我们的语言,验证我们的方法在形式上和实用。
2019-08-01 cs.PL
Refinement Type Inference via Horn Constraint Optimization
我们提出了一种新的方法来推断高阶函数程序的精化类型。所提出的方法的主要优点是它可以推断最大优选(即,Pareto最优)细化类型。所提出的方法实现的灵活优化的细化类型铺平了道路,有趣的应用程序,如推断最一般的输入特性,一个给定的程序满足(或违反)给定的安全(或终止)属性。我们的方法减少了这样一个类型的优化问题的Horn约束优化问题,通过使用一个新的细化类型的系统,可以灵活的原因在程序中的非确定性。然后,我们的方法通过反复改进当前解决方案,直到通过基于模板的不变式生成收敛来解决约束优化问题。我们已经实现了一个原型推理系统的基础上,我们的方法,并取得了可喜的成果,在初步的实验。
2015-05-16 cs.PL
First-Class Refinement Types for Scala
EPFL(洛桑联邦理工学院)
本文提出在 Scala 3 中实现第一类细化类型,使细化类型能参与子类型、推断和模式匹配,提升类型安全性和实用性。
2026-09-25 cs.PL
Refinement Types for Ruby
细化类型是指定和推理关键程序属性的流行方法。在本文中,我们介绍RTR,一个新的系统,增加了细化类型的Ruby。RTR构建在RDL之上,RDL是一个Ruby类型检查器,为验证过程提供基本的类型信息。RTR通过将其验证问题编码到Rosette(一种求解器辅助主机语言)中来工作。RTR通过假设保证推理处理mixin,并使用即时验证进行元编程。我们正式RTR显示从核心,Ruby类语言与细化类型到Rosette的翻译。我们应用RTR来检查六个Ruby程序的功能正确性属性的范围。我们发现,RTR可以成功地验证这些程序中的关键方法,只需几分钟的时间来执行验证。
2017-11-25 cs.PL
Answer Refinement Modification: Refinement Type System for Algebraic Effects and Handlers
本文提出一种针对代数效应与处理器的细化类型系统,引入答案细化修改(ARM)概念以精确追踪效应发生及其顺序,并证明其可靠性,在OCaml 5子集上实现并评估,同时提出双向类型保持的CPS转换。
2023-11-17 cs.PL
Gradual Liquid Type Inference
液态类型提供了一种可判定的细化推理机制,它很方便,但有两个主要问题:(1)推理是全局的,需要顶级注释,这使得它不适合模块化代码组件的推理,并禁止其适用于库代码,以及(2)推理失败导致模糊的错误消息。这些困难严重阻碍了现有代码的迁移以使用改进。本文表明,逐步液体类型推断-液体推理和逐步细化类型的新组合-解决这两个问题。支持乐观解释的不精确谓词的渐进细化类型可以在参数位置中使用以约束流动推理,使得全局推理过程e有效地推断可用于库组件的模块化规范。双重地,当逐渐改进作为推理的结果出现时,它们表示静态改进的使用不一致。因为液体细化是从一个nite集合的谓词,在逐渐液体类型推断,我们可以枚举每个不精确的细化的安全具体化,即静态细化,证明为什么一个程序是逐渐良好的类型。此枚举对于静态液体类型错误的解释非常有用,因为安全具体化显示了导致静态类型错误的所有潜在不一致性。我们发展了渐进式液态类型推断理论,并在液态Haskell语言环境下对其语用进行了探讨。
2019-10-30 cs.PL
Explicit Refinement Types
提出λert类型理论,通过允许程序员在程序中嵌入显式证明来支持带量词和归纳的精化类型,并在Lean 4中形式化证明了其类型系统的可靠性。
2023-11-23 cs.PL
Nested Refinements for Dynamic Languages
用动态语言编写的程序大量使用了运行时类型测试、值索引字典、多态性和高阶函数等特性,这些特性超出了使用纯语法或纯语义推理的类型系统的范围。我们提出了一个核心演算,系统D,这两种模式的推理合并成一个强大的机制嵌套细化类型,其中的类型关系本身是一个谓词的细化逻辑。系统D协调基于SMT的逻辑蕴涵和语法子类型,以自动检查复杂的动态语言程序。通过将嵌套精化与麦卡锡的有限映射理论相结合,系统D可以精确地推理高阶函数、多态性和字典之间的相互作用。向精化逻辑添加类型谓词创建了一个循环,导致元理论中的独特技术挑战,我们用一种新的分层方法来解决这个问题,我们用这种方法来证明系统D的可靠性。
2011-09-15 cs.PL
Local Refinement Typing
我们介绍了融合算法的局部细化类型推断,产生一个新的SMT为基础的方法验证程序的多态数据类型和高阶函数。Fusion是简洁的,因为程序员只需要为(外部导出的)顶级函数和具有循环(递归)依赖关系的位置编写签名,之后Fusion可以可预测地合成所有中间项(可在可判定的细化逻辑中表达)的最精确的细化类型,从而检查程序而不会出现错误警报。我们已经实现了Fusion,并在LiquidHaskell套件的基准测试中对其进行了评估,总计约12 Kbps。Fusion检查现有的安全基准测试套件,使用的模板数量是以前的一半,速度快了近2倍。在一组新的定理证明基准测试中,Fusion的速度提高了10 - 50倍,并且通过合成最精确的类型,避免了误报,使验证成为可能。
2017-06-24 cs.PL
Refinement-Types Driven Development: A study
本文倡导在日常编程中集成SMT求解器,通过Liquid Haskell的细化类型增强类型检查能力,并以编译器绑定器作用域处理为案例验证其有效性,同时提供了有限映射理论的原型实现。
2025-09-18 cs.PL
Practical Refinement Session Type Inference (Extended Version)
University of Edinburgh(爱丁堡大学);Boston University(波士顿大学)
本文提出了一种带算术细化的会话类型系统类型推断算法,并通过优化使其在实际应用中可行。
2026-02-06 cs.PL
Practical Range Refinement Types with Inference
Software Institute, USI – Università della Svizzera italiana(软件研究所,瑞士意大利语区大学)
提出Ranger系统,通过双向类型推断和轻量级流敏感分析,减少整数范围细化类型的注解负担,有效验证数组边界等属性。
2026-09-22 cs.PL
If-T: A Benchmark for Type Narrowing
本文提出If-T,一个与语言无关的类型收窄设计基准,通过正反示例衡量类型系统验证正确代码和拒绝错误代码的能力,并在五个类型检查器上实现,以阐明精度与性能的权衡。
2025-08-05 cs.PL
ConSORT: Context- and Flow-Sensitive Ownership Refinement Types for Imperative Programs
Kyoto University(京都大学);The University of Tokyo(东京大学)
该研究提出ConSORT类型系统,结合精化类型与分数所有权类型,解决命令式程序中别名导致的强更新判定难题,实现自动推理工具,可验证含数据结构的非平凡程序。
2026-08-11 cs.PL
Verification of High-Level Transformations with Inductive Refinement Types
像Rascal这样的高级转换语言包括用于操作大型抽象语法树的表达功能:第一类遍历,表达模式匹配,回溯和广义迭代器。我们提出了一个抽象的解释工具,Rabit的设计和实现,用于验证归纳类型和形状属性的转换写在这样的语言。我们描述了如何执行抽象解释的基础上操作语义,特别是集中在分析时所产生的挑战的表达遍历和模式匹配。最后,我们对Rabit进行了一系列转换(规范化、去糖、重构、代码生成器、类型推断等)。这表明我们可以有效地验证所述属性。
2018-09-17 cs.PL
Program Synthesis from Polymorphic Refinement Types
我们提出了一种方法,用于合成递归函数,证明满足给定的规范的形式的多态细化类型。我们观察到,这样的规范是特别适合于程序合成的原因有两个。首先,他们提供了一个独特的组合的表达能力和可判定性,这使得自动验证-因此合成-非平凡的程序。第二,一个基于类型的规范的程序往往可以有效地分解成独立的规范,其组件,使合成器考虑更少的组件组合,并导致组合的搜索空间的大小减少。在我们的合成过程的核心是一个新的算法,细化类型检查,支持规格分解。我们已经评估了我们的原型实现的一个大的合成问题,发现它超过了最先进的可扩展性和可用性方面。该工具能够合成比以前的工作(几个排序算法和平衡搜索树上的操作),以及现有的合成器处理的大多数基准更复杂的程序,通常从更简洁和直观的用户输入开始。
2016-04-21 cs.PL
SolType: Refinement Types for Arithmetic Overflow in Solidity
随着智能合约在金融交易中的采用,确保它们没有错误和安全漏洞变得越来越重要。在此上下文中特别相关的是算术溢出错误,因为整数通常用于表示帐户余额等金融资产。受这一观察的启发,本文提出了SolType,这是一种针对Solidity的细化类型系统,可用于防止智能合约中的算术溢出和不足。SolType允许开发人员添加细化类型注释,并使用它们来证明算术运算不会导致溢出和下溢。SolType包含丰富的细化术语词汇表,允许表达复杂数据结构的整数值和聚合属性之间的关系。此外,我们的实现,称为固体,采用了类型推断引擎,可以自动推断有用的类型注释,包括非平凡的合同不变式。为了评估我们的类型系统的有用性,我们使用Solid来证明总共120个智能合约的算术安全性。当在其全自动模式下使用时(即,使用Solid的类型推断功能),Solid能够消除86.3%用于防止溢出的冗余运行时检查。我们还将Solid与最先进的算术安全验证器VeriSmart进行了比较,结果表明Solid的误报率明显较低,同时在验证时间方面明显更快。
2021-12-21 cs.PL
Occurrence Typing Modulo Theories
我们提出了一个新的类型系统相结合的出现类型,以前用于类型检查程序的动态类型的语言,如Racket,JavaScript,和Ruby,依赖细化类型。我们证明,除了细化类型允许任意的解决方案支持的推理逻辑命题从外部理论的集成。通过建立在出现类型的基础上,我们可以添加丰富的类型系统作为类型化Racket的扩展-添加依赖和细化重用现有的形式主义,同时增加其表达能力。依赖细化类型允许Typed Racket程序员表达丰富的类型关系,从数据结构不变量(如红黑树平衡)到前提条件(如向量边界)。改进允许程序员将Typed Racket中的发生类型已经推理的命题嵌入到他们的类型中。此外,扩展发生类型的细化允许我们使底层的形式主义更简单,更强大。除了介绍我们的系统的设计,我们提出了一个正式的系统模型,展示了如何将其与线性算术和位向量的理论相结合,并评估系统的完整类型的球拍实现的背景下。具体来说,我们采取安全的向量访问作为案例研究,并检查所有的向量访问在56,000行语料库的类型球拍程序。我们的系统能够证明其中50%是安全的,没有新的注释,并且通过一些注释和修改,我们可以捕获接近80%。
2016-10-04 cs.PL
Ownership Refinement Types for Pointer Arithmetic and Nested Arrays
Kyoto University(京都大学)
本文提出一种扩展的类型系统,支持嵌套数组的验证,通过泛化所有权概念以处理数组索引并证明系统的正确性。
2026-10-27 cs.PL
Type-directed Bounding of Collections in Reactive Programs
我们的目标是静态验证,在一个给定的反应式程序中,集合变量的长度不会超过一个给定的界限。我们提出了一个可扩展的基于类型的技术,检查每个集合变量有一个给定的细化类型,指定其长度的约束。我们的细化类型的一个新特性是,细化可以引用AST计数器,这些计数器跟踪AST节点执行了多少次。此功能使类型细化能够跟踪有限的流敏感信息。我们生成验证条件,以确保AST计数器的使用一致,并且类型暗示给定的界限。验证条件由现成的SMT求解器排出。实验结果表明,我们的技术是可扩展的,有效地验证反应式程序的集合长度的要求。
2019-01-28 cs.PL
Refinement types for precisely named cache locations
许多用于增量计算的程序设计语言技术为高速缓存的信息使用程序员指定的名称。在运行时,每个名称标识动态数据值或子计算的“缓存位置”;总之,这些缓存位置选择指导更改传播和增量(重新)执行。当一个缓存位置最多标识一个值或子计算时,我们称它为精确的;我们称所有其他名称为不精确的或模糊的。至少,缓存位置名称必须精确,以确保更改传播正确工作;然而,在增量程序中静态推理名称仍然是一个悬而未决的问题。作为第一步,本文定义并解决了精确的名称问题,在这里我们验证了增量程序与显式名称使用它们精确。为了做到这一点,我们给出了一个细化类型和效果系统,并证明它是合理的(每个类型良好的程序都精确地使用名称)。我们还通过验证计算增量序列和集合的高效表示的示例程序来证明这种类型系统的表达能力。除了验证这些程序,我们的类型系统还描述了它们的动态命名策略,例如,用于图书馆文档。
2017-10-21 cs.PL
A Relational Logic for Higher-Order Programs
关系程序验证是程序验证的一种变体,其中可以推理两个程序,并且作为一种特殊情况,可以在不同的输入上对单个程序进行两次执行。关系程序验证可用于推理广泛的属性,包括等价性和精化,以及诸如连续性、信息流安全性或相对成本等专门概念。在高阶环境中,关系程序验证可以使用关系精化类型系统来实现,关系精化类型系统是断言具有关系解释的一种精化类型。关系精化类型的系统擅长于将结构上等价的项关联起来,但是对于将结构非常不同的项关联起来,提供的支持有限。本文提出了一种逻辑,称为关系高阶逻辑(RHOL),用于证明具有归纳类型和递归定义的简单类型$λ$ -演算的关系性质。RHOL保留了关系精化类型系统的类型导向风格,但通过同时推理两个术语的规则以及只考虑两个术语之一的规则实现了更大的表达性。我们表明,RHOL具有强大的基础,通过证明与高阶逻辑(HOL)的等价性,并利用这种等价性来推导关键的元理论属性:主题约简,可接受的传递性规则和集合理论的合理性。此外,我们定义了几个现有的关系类型系统,如关系细化类型和依赖分析和相对成本的类型系统的声音嵌入,我们验证的例子是以前的工作无法达到的。
2017-03-15 cs.PL
A Sound and Complete Characterization of Fair Asynchronous Session Subtyping
本文针对异步会话类型的公平细化关系,提出了首个既可靠又完备的刻画,并通过内嵌异步语义的新型带标签迁移系统将其与同步会话类型的已有刻画建立联系,解决了该领域长期未决的问题。
2025-06-06 cs.PL
Intensional Datatype Refinement
模式匹配安全问题是验证给定的函数程序不会由于其函数定义中的非穷举模式而崩溃。我们提出了一个细化类型的系统,可以用来解决这个问题。该系统通过有限的结构子类型和环境级交集的形式,用代数数据库扩展ML风格的类型系统。我们描述了一个全自动的,健全的和完整的类型推断程序,在合理的假设下,该系统是最坏情况下的线性时间的程序大小。组合性对于获得这种复杂性保证是必不可少的。Haskell的一个原型实现能够在几百毫秒内分析Hackage数据库中的一些包。
2020-11-25 cs.PL
Liquid Intersection Types
我们提出了一个新的类型系统结合细化类型和表达的交集型纪律。这些特征的使用使得派生出比原始精化系统更精确的类型成为可能。我们已经能够证明我们的系统(包括主题减少)的几个有趣的属性,并开发了一个推理算法,我们证明是合理的。
2015-03-17 cs.PL
The Design and Implementation of Typed Scheme: From Scripts to Programs
当非类型化语言的脚本成长为大型程序时,维护它们就变得困难了。典型的脚本语言中缺乏显式的类型注释,这迫使程序员在每次希望更改程序时都必须(重新)发现关键的设计信息。这一分析步骤既会减慢维护过程,甚至可能由于违反未发现的不变量而引入错误。本文提出了类型化的方案,显式类型的扩展PLT方案,一个无类型的脚本语言。它的类型系统是基于发生类型的新概念,我们形式化和机械地证明声音。Typed Scheme的实现还从一系列方法中借用了元素,包括递归类型,真联合和子类型,加上多态性与少量局部推理的结合。出现类型的公式化自然会导致一个简单而富有表现力的谓词版本来描述精化类型。类型化模式程序可以使用这些细化类型通过类型系统跟踪任意类的值。此外,我们展示了如何类型化的计划类型系统,结合简单的递归类型,是能够编码现有的数据库的改进,从而表示两个建议的改进类型的变化。
2011-06-13 cs.PL
Program Synthesis by Type-Guided Abstraction Refinement
我们考虑的问题,类型导向组件的合成,给定一组(类型化)组件和查询类型,目标是合成一个长期居住的查询。基于直觉逻辑中的证明搜索的经典方法不能扩展到现代语言的标准库,后者跨越数百或数千个组件。最近为Java等语言提出的基于图可达性的方法确实可以扩展,但仅适用于单态数据和函数的组件:多态数据和函数无限地扩展了必须搜索的图的大小,使得合成变得难以处理。我们介绍了类型引导抽象细化(TYGAR),一种新的方法,可扩展的类型导向合成多态数据库和组件。我们的关键见解是,我们可以通过在抽象类型上构建一个图来克服爆炸,该抽象类型表示一组潜在的无界具体类型。我们展示了如何使用图的可达性来搜索抽象类型上的候选项,并介绍了一种新的算法,该算法使用病态类型候选项的不可类型性证明来迭代地细化抽象,直到找到一个良好类型的结果。我们已经在H+中实现了TYGAR,H+是一个以一组Haskell库和一个查询类型作为输入的工具,并返回一个Haskell术语,该术语使用所提供的库中的函数来实现查询类型。我们使用一组流行的Haskell库(共有291个组件)对一组44个查询进行了H+评估。我们的研究结果表明,H+返回一个有趣的解决方案的前五个结果中的33个44查询。此外,TYGAR允许H+快速返回类型良好的术语,第一个解决方案的平均时间仅为1.4秒。
2019-11-11 cs.PL
Session Types with Arithmetic Refinements
会话类型静态地规定了消息传递过程的双向通信协议。但是,简单会话类型不能指定交换消息类型以外的属性。在本文中,我们通过使用线性算术的索引细化来扩展类型系统,捕获数据结构和算法的内在属性。我们发现,尽管Presburger算术的可判定性,类型平等,因此也子类型和类型检查现在是不可判定的,这与类似的依赖细化类型系统的函数语言。我们还提出了一个实用的,但不完整的算法类型的平等,我们已经在我们的实现Rast,并发会话类型的语言与算术索引的改进,以及测力和时间类型。此外,如果必要的话,程序员可以提出额外的类型互模拟,这些互模拟被平滑地集成到类型相等算法中。
2020-05-12 cs.LO cs.PL
Differentially Private Bayesian Programming
我们提出PrivInfer,一个表达框架,用于编写和验证差分私有贝叶斯机器学习算法。PrivInfer中的程序是用一种功能丰富的概率程序设计语言编写的,其中包含用于执行贝叶斯推理的结构。然后,程序的差分隐私建立使用关系的细化类型系统,其中的概率类型的细化由分布的度量索引。我们的框架利用贝叶斯推理,概率程序设计语言,并在关系细化类型的最新发展。我们证明了表达的PrivInfer验证隐私的几个例子的私人贝叶斯推理。
2016-08-17 cs.PL
Refinement Types for Logical Frameworks and Their Interpretation as Proof Irrelevance
精化类型通过提供更精确地对良好类型的术语进行分类的表达方式来锐化简单类型和依赖类型的系统。我们提出了一个系统的LF精炼类型在最近的配方的风格,只有规范形式是良好的类型。通常的LF规则和类型细化的规则都是双向的,从而直接证明了类型检查的可判定性,即使存在交集类型。因为我们坚持标准形式,子类型的结构规则现在可以被导出,而不是被假定为原始的。我们用例子说明了我们的系统的表达能力,并通过展示与传统的子类型表示的精确对应来验证其设计。证明不相关性提供了一种机制,用于选择性地隐藏类型论中术语的同一性。我们发现,LF细化类型可以被解释为谓词使用证明不相关性,建立一个统一的关系之前研究的概念之间的类型论。解释和它的正确性证明是令人惊讶的复杂,支持精化类型是一个基本的构造,而不仅仅是一个方便的表面语法,用于证明无关性的某些用途。
2010-12-13 cs.LO cs.PL
Bounded Refinement Types
我们提出了一个有界量化的概念,并展示了它如何通过使用它来开发类型化的组合子来扩展细化类型的表达能力:(1)关系代数和安全数据库访问,(2)配备有用于分支和循环的组合子的状态Transformer monad内的霍尔逻辑,以及(3)使用上述来实现跟踪能力和资源使用的细化的IO monad。这种表现力的飞跃是通过转换为“ghost”函数实现的,它让我们保留了自动化和可判定的基于SMT的检查和推理,使细化类型在实践中有效。
2015-07-01 cs.PL cs.SE
Refinement types in Jolie
Jolie是微服务的第一种语言,目前它是动态类型检查的。本文认为有机会集成动态和静态类型检查与细化类型的介绍,通过SMT求解器验证。这两个方面的集成允许内部服务的静态验证和(潜在恶意的)外部服务的动态验证合作的场景,以减少测试工作并增强安全性。
2016-02-22 cs.PL cs.SE
Refining Inductive Types
依赖类型的程序设计语言允许在类型系统中表达数据的复杂属性。在依赖类型编程中特别有用的是索引类型,它通过计算上有用的信息来细化数据。例如,N索引类型的向量通过它们的长度来细化列表。其他数据类型也可以用类似的方式进行细化,但是程序员必须根据特定的目的进行细化,开发人员必须预测库中要包含哪些细化,并且实现必须经常存储有关数据及其细化的冗余信息。在本文中,我们将展示如何一般地推导归纳类型的细化归纳特征,并认为这些特征可以减轻一些与特设细化相关的上述困难。我们的特征也确保了标准的编程技术和推理归纳类型适用于细化,细化本身可以进一步细化。
2012-06-01 cs.LO cs.PL
Refinement Types: A Tutorial
精化类型通过逻辑谓词丰富了语言的类型系统,这些逻辑谓词限制了类型所描述的值集,从而为软件开发人员提供了一个可调旋钮,可以通知类型系统应该在代码中检查哪些不变量和正确性属性。在本文中,我们将提炼大量关于精化类型的文献中提出的思想,并将其整合为一个统一的教程,解释现代精化类型系统的关键要素。特别是,我们将展示如何通过逐步向语言或类型系统添加功能的语言进展来实现细化类型检查器。
2020-10-15 cs.LO cs.PL cs.SE
Flux: Liquid Types for Rust
我们介绍Flux,它展示了逻辑改进如何与Rust的所有权机制一起工作,以产生符合人体工程学的基于类型的低级指针操作程序的验证。首先,我们为Rust设计了一个新的精炼类型系统,该系统索引可变位置,纯(不可变)值可以出现在精炼中,然后利用Rust的所有权机制来抽象Rust多态类型构造函数中位置的子结构推理,同时支持强更新。我们通过利用堆叠借用别名模型来形式化对Rust的强别名保证的关键依赖,以证明“良好类型程序的良好借用评估不会卡住”。其次,我们在Flux中实现了我们的类型系统,Flux是Rust编译器的一个插件,它利用复杂不变量到类型和细化的因素来有效地合成循环注释-包括描述容器内容的复杂量化不变量-通过液体推理。第三,我们评估通量与基准套件的向量操作程序和部分先前验证的安全沙箱库,以证明在最先进的Prusti验证器中实现的程序逻辑的优势,细化类型。虽然Prusti更具表现力的程序逻辑通常可以验证深层功能正确性规范,但对于我们的基准测试所涵盖的轻量级但普遍存在的重要验证用例,液体类型使验证符合人体工程学,将规范行削减了两倍,验证时间减少了一个数量级,注释开销从代码大小的24%(平均9%)减少到根本没有。
2022-11-14 cs.PL
Ownership Types for Verification of Programs with Pointer Arithmetic
本文扩展Toman等人结合所有权与精化类型的低级程序验证类型系统以支持指针算术,证明可靠性并实现原型工具,实验表明可自动验证无断言错误。
2023-12-11 cs.PL
Synchronous Programming with Refinement Types
本文提出 CPS 语言 MARVeLus 的形式化,构建其同步细化类型系统元理论,实现验证与实现在同一语言中的结合,并在真实系统上验证同步程序执行。
2024-09-04 cs.PL
Dependent Type Refinements for Futures
本文提出将依值类型细化应用于基于 future 的进程演算 SAX,综合无穷证明论、双向类型检查与 Hoare logic,实现了支持 codata 信息隐藏的程序部分正确性推理,并证明了语法类型可靠性。
2023-11-18 cs.LO cs.PL
Session Types with Arithmetic Refinements and Their Application to Work Analysis
会话类型静态地规定了消息传递过程的双向通信协议,并且与线性逻辑命题处于Curry-Howard对应关系中。但是,简单会话类型不能指定交换消息类型以外的属性。在本文中,我们扩展了类型系统,通过使用索引细化从线性算术捕捉内在属性的数据结构和算法,使我们可以表示和验证摊销成本的程序使用测力类型。我们发现,尽管Presburger算术的可判定性,类型平等,因此也类型检查现在是不可判定的,这与类似的依赖细化类型系统的函数语言。我们还提出了一个实用的不完全算法的类型相等和算法的类型检查,这是完整的相对于一个预言的类型相等。在这个显式语言的过程表达式是相当冗长的,所以我们也引入了一个隐式的形式和一个健全的和完整的算法重建显式程序,借用的想法,从证明理论的技术聚焦。最后,我们用各种例子说明了我们的系统和算法,这些例子在我们的实现中得到了验证。
2020-01-23 cs.LO cs.PL
Higher-Order Constrained Horn Clauses and Refinement Types
出于高阶函数程序自动验证中的应用,我们开发了一个概念的约束霍恩条款在高阶逻辑和决策问题,其可满足性。我们表明,虽然高阶子句的可满足系统一般不具有最小模型,有一个规范模型的概念,通过减少到一种单调逻辑程序的问题。在高阶程序验证的工作之后,我们开发了一个细化类型的系统,以推理和自动搜索模型。这为解决决策问题提供了一个合理但不完整的方法。最后,我们证明了一个扩展的决策问题,其中细化类型直接用作警卫存在量词可以减少到原来的问题。这个结果可以用来表明,高阶函数的性质,可定义使用细化类型也表示使用高阶约束霍恩子句。
2017-08-01 cs.LO cs.PL
Type refinement and monoidal closed bifibrations
类型论中的精化概念是一种调和类型的“内在”和“外在”意义的方法。我们从这个概念的严格分析开始,得出一个简单的结论,即“类型精化系统”的类型理论概念可以与“函子”的范畴理论概念相一致。然后,我们使用这种对应关系,给出了一个等价的类型理论制定的Grothendieck的定义(双)纤维化,并将其扩展到定义的monoidal封闭bifibrations,我们认为这是一个自然的空间中,研究性质的证明和程序。我们的主要结果是一个表示定理强单子上的monoidal闭纤维化,描述了充分条件单子同构的延续单子“上拉回”。
2013-10-01 cs.LO cs.PL math.CT
ANOSY: Approximated Knowledge Synthesis with Refinement Types for Declassification
非干扰是一种流行的方式来加强敏感数据的机密性。然而,在实际应用中,经常需要对敏感信息进行解密,但却破坏了无干扰性。我们提出了ANOSY,一个近似的知识合成器定量解密政策。ANOSY使用细化类型来自动构造机器检查过的攻击者知识的近似值和近似值,以用于多整数秘密的布尔查询。它还提供了一个AnosyT monad来跟踪多个解密查询的攻击者知识,并检查信息流控制应用程序中是否违反用户指定的策略。我们实现了一个原型的ANOSY,并表明它是精确的和宽容的:多达14个解密查询之前,允许使用幂集的区间域发生违反政策。
2022-03-22 cs.CR cs.PL
Statically Verified Refinements for Multiparty Protocols
随着分布式计算在现代变得无处不在,安全的分布式编程是一个公开的挑战。为了解决这个问题,多方会话类型(MPST)为消息传递并发提供了一个类型规则,保证了通信安全属性,如死锁自由。虽然最初MPST集中在通信方面,并采用一个简单的类型系统的通信有效载荷,在现实世界中的通信协议通常包含的有效载荷的约束。我们介绍了改进的多方会话类型(RMPST),MPST的扩展,通过细化类型的数据类型表示数据相关的协议。我们提供了一个RMPST的实现,在一个工具链称为会话 *,使用Scribble,多方协议描述工具链,并针对F*,面向验证的功能程序设计语言。用户可以在Scribble中描述协议,并使用从协议生成的精炼类型的API在F* 中实现端点。然后F* 编译器可以静态地验证细化。此外,我们使用一种新的回调风格的API生成方法,提供静态线性保证与控制反转。我们评估我们的方法与现实世界的例子,并表明,它几乎没有开销相比,一个天真的实现,同时保证从底层理论的安全属性。
2020-09-14 cs.DC cs.PL
Refinement Reflection (or, how to turn your favorite language into a proof assistant using SMT)
Refinement Reflection通过将实现用户定义函数的代码反映到函数的(输出)细化类型中,将您最喜欢的程序设计语言变成一个证明助手。因此,在函数的使用中,函数定义以精确的、可预测的、最重要的是程序员可控的方式展开到细化逻辑中。在逻辑中,我们使用未解释的符号编码的功能,并保留基于SMT的可判定性验证。在该语言中,我们提供了一个组合子库,让程序员可以从基本的改进和函数定义中组合证明。我们已经在Liquid Haskell系统中实现了我们的方法,从而将Haskell转换为一个交互式证明助手,我们用来验证各种属性,从高阶的算术属性,递归函数到Monoid,Application,Functor和Monad类型的类法律的各种实例。
2016-10-14 cs.LO cs.PL
HELMHOLTZ: A Verifier for Tezos Smart Contracts Based on Refinement Types
DaiLambda, Inc.(DaiLambda公司);Kyoto University(京都大学)
智能合约是在区块链上执行的程序,许多加密货币都是在此基础上实现的,并被用于自动化交易。由于智能合约涉及大量资金,因此对一种可以静态和正式验证它们的方法的需求激增。本文介绍了我们为Michelson开发的基于类型的静态验证工具HELMHOLTZ,这是一种基于静态类型的堆栈语言,用于编写在区块链平台Tezos上执行的智能合约。HELMHOLTZ是在我们对迈克尔逊类型系统的细化类型扩展之上设计的。HELMHOLTZ以用户定义的规范(以精化类型的形式编写)注释迈克尔逊程序作为输入;然后根据精化类型系统的规范对程序进行类型化,使用SMT求解器Z3释放生成的验证条件。我们简要地介绍了我们的精化类型系统的核心演算迈克尔逊的迷你迈克尔逊,它结合了特征,如复合数据集(例如,列表和对)、高阶函数和调用另一个合约。\HELMHOLTZ{}成功地验证了几个实用的迈克尔逊程序,包括一个向帐户转账和检查数字签名的程序。
2021-09-10 cs.CL cs.LO cs.PL
Higher-Order Approximate Relational Refinement Types for Mechanism Design and Differential Privacy
机制设计是对算法设计的研究,其中算法的输入由策略代理控制,必须激励他们忠实地报告它们。与典型的编程属性不同,算法仅仅满足属性是不够的-激励属性只有在战略代理也相信这一事实的情况下才有用。验证是一种有吸引力的方式来说服代理,激励属性实际上持有,但机制设计提出了几个独特的挑战:有趣的属性可以是涉及期望值的概率计算的复杂关系属性,机制可能依赖于其他概率属性,如差分隐私,以实现其目标。我们介绍了一个关系细化类型的系统,称为$\mathsf{HOARe}^2$,验证机制设计和差分隐私。我们证明了$\mathsf{HOARe}^2$是可靠的.一个指称语义,并正确地模型$(ε,δ)$ -差分隐私,此外,我们表明,它包括DFuzz,现有的线性依赖类型系统的差分隐私。最后,我们开发了一个基于SMT的$\mathsf{HOARe}^2$实现,并使用它来验证具有挑战性的机制设计的例子,包括拍卖和聚合游戏,以及新提出的差分隐私的例子。
2014-10-29 cs.GT cs.PL
A Type Checker for a Logical Framework with Union and Intersection Types
我们提出的语法,语义和类型规则的公牛,一个原型定理证明的基础上的三角洲框架,即一个完全类型化的Alkida演算装饰与工会和交叉类型,如作者在以前的论文中所描述的。Bull还实现了Barbanera-Dezani-de'Liguoro的类型论Xi的子类型算法。Bull有一个命令行界面,用户可以在其中声明公理,术语,并执行计算和一些基本的终端风格的功能,如错误漂亮打印,子表达式突出显示和文件加载。此外,它可以对证明进行类型检查或规范化,这些项可能是不完整的,因此类型检查算法使用统一来尝试构建缺失的子项。Bull使用Berardi的纯类型系统的语法来提高内核的紧凑性和模块性。抽象语法和具体语法基本上是一致的,并且与Coq的具体语法相似。Bull对术语使用高阶统一算法,而类型检查和部分类型推断是通过双向细化算法完成的,类似于Matita和Beluga中发现的算法。精化可以分为两个部分:本质精化和类型精化。绑定器使用常用的de Bruijn索引实现。我们已经定义了一个具体的语言语法,允许用户编写Delta-terms。我们已经定义了约简规则和评价器。我们从头开始实现了一个细化器,它可以进行部分类型检查和类型重构。我们已经实验了公牛经典的例子的交集和工会的文学,如形式化的Pfenning与他的细化类型在LF。我们希望,这种研究静脉可能是有用的实验,在证明理论的设置,形式的多态性替代吉拉德的参数…
2020-02-25 cs.LO cs.PL