首页 > 最新文献

Proceedings of the 18th ACM SIGPLAN international conference on Functional programming最新文献

英文 中文
Fun with semirings: a functional pearl on the abuse of linear algebra 半环的乐趣:滥用线性代数的功能珍珠
Stephen Dolan
Describing a problem using classical linear algebra is a very well-known problem-solving technique. If your question can be formulated as a question about real or complex matrices, then the answer can often be found by standard techniques. It's less well-known that very similar techniques still apply where instead of real or complex numbers we have a closed semiring, which is a structure with some analogue of addition and multiplication that need not support subtraction or division. We define a typeclass in Haskell for describing closed semirings, and implement a few functions for manipulating matrices and polynomials over them. We then show how these functions can be used to calculate transitive closures, find shortest or longest or widest paths in a graph, analyse the data flow of imperative programs, optimally pack knapsacks, and perform discrete event simulations, all by just providing an appropriate underlying closed semiring.
使用经典线性代数描述问题是一种非常著名的解决问题的技术。如果您的问题可以表述为关于实矩阵或复矩阵的问题,那么通常可以通过标准技术找到答案。不太为人所知的是,非常相似的技术仍然在应用,而不是实数或复数,我们有一个封闭的半环,这是一个类似加法和乘法的结构,不需要支持减法或除法。我们在Haskell中定义了一个类型类来描述闭半环,并实现了一些函数来操作矩阵和它们上面的多项式。然后,我们将展示如何使用这些函数来计算传递闭包、查找图中最短、最长或最宽的路径、分析命令式程序的数据流、最佳打包背包以及执行离散事件模拟,所有这些都只需要提供适当的底层封闭半环即可。
{"title":"Fun with semirings: a functional pearl on the abuse of linear algebra","authors":"Stephen Dolan","doi":"10.1145/2500365.2500613","DOIUrl":"https://doi.org/10.1145/2500365.2500613","url":null,"abstract":"Describing a problem using classical linear algebra is a very well-known problem-solving technique. If your question can be formulated as a question about real or complex matrices, then the answer can often be found by standard techniques. It's less well-known that very similar techniques still apply where instead of real or complex numbers we have a closed semiring, which is a structure with some analogue of addition and multiplication that need not support subtraction or division. We define a typeclass in Haskell for describing closed semirings, and implement a few functions for manipulating matrices and polynomials over them. We then show how these functions can be used to calculate transitive closures, find shortest or longest or widest paths in a graph, analyse the data flow of imperative programs, optimally pack knapsacks, and perform discrete event simulations, all by just providing an appropriate underlying closed semiring.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"2015 1","pages":""},"PeriodicalIF":0.0,"publicationDate":"2013-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"87047667","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 33
Modular and automated type-soundness verification for language extensions 语言扩展的模块化和自动化类型稳健性验证
F. Lorenzen, Sebastian Erdweg
Language extensions introduce high-level programming constructs that protect programmers from low-level details and repetitive tasks. For such an abstraction barrier to be sustainable, it is important that no errors are reported in terms of generated code. A typical strategy is to check the original user code prior to translation into a low-level encoding, applying the assumption that the translation does not introduce new errors. Unfortunately, such assumption is untenable in general, but in particular in the context of extensible programming languages, such as Racket or SugarJ, that allow regular programmers to define language extensions. In this paper, we present a formalism for building and automatically verifying the type-soundness of syntactic language extensions. To build a type-sound language extension with our formalism, a developer declares an extended syntax, type rules for the extended syntax, and translation rules into the (possibly further extended) base language. Our formalism then validates that the user-defined type rules are sufficient to guarantee that the code generated by the translation rules cannot contain any type errors. This effectively ensures that an initial type check prior to translation precludes type errors in generated code. We have implemented a core system in PLT Redex and we have developed a syntactically extensible variant of System Fw that we extend with let notation, monadic do blocks, and algebraic data types. Our formalism verifies the soundness of each extension automatically.
语言扩展引入了高级编程结构,保护程序员免受低级细节和重复任务的影响。要使这种抽象障碍可持续,就生成的代码而言,不报告错误是很重要的。一种典型的策略是在转换为低级编码之前检查原始用户代码,并假设转换不会引入新的错误。不幸的是,这种假设在一般情况下是站不住脚的,特别是在可扩展编程语言(如Racket或SugarJ)的上下文中,这些语言允许普通程序员定义语言扩展。在本文中,我们提出了一种构建和自动验证语法语言扩展类型健全性的形式化方法。要使用我们的形式化构建类型健全的语言扩展,开发人员需要声明扩展语法、扩展语法的类型规则,并将规则翻译成(可能进一步扩展的)基本语言。然后,我们的形式化方法验证用户定义的类型规则足以保证由转换规则生成的代码不包含任何类型错误。这有效地确保了在翻译之前的初始类型检查可以排除生成代码中的类型错误。我们已经在PLT Redex中实现了一个核心系统,并且开发了system Fw的一个语法上可扩展的变体,我们使用let符号、一元do块和代数数据类型对其进行了扩展。我们的形式系统会自动验证每个扩展的正确性。
{"title":"Modular and automated type-soundness verification for language extensions","authors":"F. Lorenzen, Sebastian Erdweg","doi":"10.1145/2500365.2500596","DOIUrl":"https://doi.org/10.1145/2500365.2500596","url":null,"abstract":"Language extensions introduce high-level programming constructs that protect programmers from low-level details and repetitive tasks. For such an abstraction barrier to be sustainable, it is important that no errors are reported in terms of generated code. A typical strategy is to check the original user code prior to translation into a low-level encoding, applying the assumption that the translation does not introduce new errors. Unfortunately, such assumption is untenable in general, but in particular in the context of extensible programming languages, such as Racket or SugarJ, that allow regular programmers to define language extensions. In this paper, we present a formalism for building and automatically verifying the type-soundness of syntactic language extensions. To build a type-sound language extension with our formalism, a developer declares an extended syntax, type rules for the extended syntax, and translation rules into the (possibly further extended) base language. Our formalism then validates that the user-defined type rules are sufficient to guarantee that the code generated by the translation rules cannot contain any type errors. This effectively ensures that an initial type check prior to translation precludes type errors in generated code. We have implemented a core system in PLT Redex and we have developed a syntactically extensible variant of System Fw that we extend with let notation, monadic do blocks, and algebraic data types. Our formalism verifies the soundness of each extension automatically.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"26 1","pages":""},"PeriodicalIF":0.0,"publicationDate":"2013-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"89271454","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 27
Exploiting vector instructions with generalized stream fusion 利用广义流融合技术开发向量指令
G. Mainland, Roman Leshchinskiy, S. P. Jones
Stream fusion is a powerful technique for automatically transforming high-level sequence-processing functions into efficient implementations. It has been used to great effect in Haskell libraries for manipulating byte arrays, Unicode text, and unboxed vectors. However, some operations, like vector append, still do not perform well within the standard stream fusion framework. Others, like SIMD computation using the SSE and AVX instructions available on modern x86 chips, do not seem to fit in the framework at all. In this paper we introduce generalized stream fusion, which solves these issues. The key insight is to bundle together multiple stream representations, each tuned for a particular class of stream consumer. We also describe a stream representation suited for efficient computation with SSE instructions. Our ideas are implemented in modified versions of the GHC compiler and vector library. Benchmarks show that high-level Haskell code written using our compiler and libraries can produce code that is faster than both compiler- and hand-vectorized C.
流融合是一种将高级序列处理功能自动转换为高效实现的强大技术。它在Haskell库中用于操作字节数组、Unicode文本和未装箱向量,效果非常好。然而,一些操作,如向量追加,在标准的流融合框架内仍然不能很好地执行。其他的,比如使用现代x86芯片上可用的SSE和AVX指令的SIMD计算,似乎根本不适合这个框架。本文引入广义流融合,解决了这些问题。关键的见解是将多个流表示捆绑在一起,每个表示针对特定的流消费者类进行调优。我们还描述了一种适合于SSE指令高效计算的流表示。我们的想法在修改版本的GHC编译器和矢量库中实现。基准测试表明,使用我们的编译器和库编写的高级Haskell代码可以生成比编译器和手工矢量化C更快的代码。
{"title":"Exploiting vector instructions with generalized stream fusion","authors":"G. Mainland, Roman Leshchinskiy, S. P. Jones","doi":"10.1145/2500365.2500601","DOIUrl":"https://doi.org/10.1145/2500365.2500601","url":null,"abstract":"Stream fusion is a powerful technique for automatically transforming high-level sequence-processing functions into efficient implementations. It has been used to great effect in Haskell libraries for manipulating byte arrays, Unicode text, and unboxed vectors. However, some operations, like vector append, still do not perform well within the standard stream fusion framework. Others, like SIMD computation using the SSE and AVX instructions available on modern x86 chips, do not seem to fit in the framework at all. In this paper we introduce generalized stream fusion, which solves these issues. The key insight is to bundle together multiple stream representations, each tuned for a particular class of stream consumer. We also describe a stream representation suited for efficient computation with SSE instructions. Our ideas are implemented in modified versions of the GHC compiler and vector library. Benchmarks show that high-level Haskell code written using our compiler and libraries can produce code that is faster than both compiler- and hand-vectorized C.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"24 1","pages":""},"PeriodicalIF":0.0,"publicationDate":"2013-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"91093745","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 17
Interactive programming with dependent types 具有依赖类型的交互式编程
U. Norell
In dependently typed languages run-time values can appear in types, making it possible to give programs more precise types than in languages without dependent types. This can range from keeping track of simple invariants like the length of a list, to full functional correctness. In addition to having some correctness guarantees on the final program, assigning more precise types to programs means that you can get more assistance from the type checker while writing them. This is what I focus on here, demonstrating how the programming environment of Agda can help you when developing dependently typed programs.
在依赖类型语言中,运行时值可以出现在类型中,从而可以为程序提供比没有依赖类型的语言更精确的类型。这可以从跟踪简单的不变量(如列表的长度)到完整的函数正确性。除了对最终程序有一些正确性保证外,为程序分配更精确的类型意味着在编写程序时可以从类型检查器获得更多帮助。这是我在这里的重点,演示Agda的编程环境如何在开发依赖类型的程序时提供帮助。
{"title":"Interactive programming with dependent types","authors":"U. Norell","doi":"10.1145/2500365.2500610","DOIUrl":"https://doi.org/10.1145/2500365.2500610","url":null,"abstract":"In dependently typed languages run-time values can appear in types, making it possible to give programs more precise types than in languages without dependent types. This can range from keeping track of simple invariants like the length of a list, to full functional correctness. In addition to having some correctness guarantees on the final program, assigning more precise types to programs means that you can get more assistance from the type checker while writing them. This is what I focus on here, demonstrating how the programming environment of Agda can help you when developing dependently typed programs.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"38 1","pages":""},"PeriodicalIF":0.0,"publicationDate":"2013-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"78067956","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 5
Efficient divide-and-conquer parsing of practical context-free languages 实用的上下文无关语言的高效分治解析
Jean-Philippe Bernardy, Koen Claessen
We present a divide-and-conquer algorithm for parsing context-free languages efficiently. Our algorithm is an instance of Valiant's (1975), who reduced the problem of parsing to matrix multiplications. We show that, while the conquer step of Valiant's is O(n3) in the worst case, it improves to O(logn3), under certain conditions satisfied by many useful inputs. These conditions occur for example in program texts written by humans. The improvement happens because the multiplications involve an overwhelming majority of empty matrices. This result is relevant to modern computing: divide-and-conquer algorithms can be parallelized relatively easily.
我们提出了一种分而治之的算法来有效地解析上下文无关的语言。我们的算法是Valiant(1975)的一个实例,他将解析问题简化为矩阵乘法。我们表明,虽然Valiant的征服步长在最坏情况下是O(n3),但在许多有用输入满足的某些条件下,它提高到O(log3)。例如,这些情况发生在人类编写的程序文本中。这种改进是因为乘法涉及到绝大多数空矩阵。这个结果与现代计算相关:分治算法可以相对容易地并行化。
{"title":"Efficient divide-and-conquer parsing of practical context-free languages","authors":"Jean-Philippe Bernardy, Koen Claessen","doi":"10.1145/2500365.2500576","DOIUrl":"https://doi.org/10.1145/2500365.2500576","url":null,"abstract":"We present a divide-and-conquer algorithm for parsing context-free languages efficiently. Our algorithm is an instance of Valiant's (1975), who reduced the problem of parsing to matrix multiplications. We show that, while the conquer step of Valiant's is O(n3) in the worst case, it improves to O(logn3), under certain conditions satisfied by many useful inputs. These conditions occur for example in program texts written by humans. The improvement happens because the multiplications involve an overwhelming majority of empty matrices. This result is relevant to modern computing: divide-and-conquer algorithms can be parallelized relatively easily.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"38 1","pages":""},"PeriodicalIF":0.0,"publicationDate":"2013-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"73625735","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 7
Using circular programs for higher-order syntax: functional pearl 使用循环程序实现高阶语法:函数珍珠
E. Axelsson, Koen Claessen
This pearl presents a novel technique for constructing a first-order syntax tree directly from a higher-order interface. We exploit circular programming to generate names for new variables, resulting in a simple yet efficient method. Our motivating application is the design of embedded languages supporting variable binding, where it is convenient to use higher-order syntax when constructing programs, but first-order syntax when processing or transforming programs.
本文提出了一种从高阶接口直接构造一阶语法树的新技术。我们利用循环编程来生成新变量的名称,从而产生一个简单而有效的方法。我们的激励应用程序是支持变量绑定的嵌入式语言的设计,在构建程序时方便使用高阶语法,但在处理或转换程序时方便使用一阶语法。
{"title":"Using circular programs for higher-order syntax: functional pearl","authors":"E. Axelsson, Koen Claessen","doi":"10.1145/2500365.2500614","DOIUrl":"https://doi.org/10.1145/2500365.2500614","url":null,"abstract":"This pearl presents a novel technique for constructing a first-order syntax tree directly from a higher-order interface. We exploit circular programming to generate names for new variables, resulting in a simple yet efficient method. Our motivating application is the design of embedded languages supporting variable binding, where it is convenient to use higher-order syntax when constructing programs, but first-order syntax when processing or transforming programs.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"55 1","pages":""},"PeriodicalIF":0.0,"publicationDate":"2013-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"76877684","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 2
Simple and compositional reification of monadic embedded languages 单一嵌入语言的简单和组合具体化
Josef Svenningsson, Bo Joel Svensson
When writing embedded domain specific languages in Haskell, it is often convenient to be able to make an instance of the Monad class to take advantage of the do-notation and the extensive monad libraries. Commonly it is desirable to compile such languages rather than just interpret them. This introduces the problem of monad reification, i.e. observing the structure of the monadic computation. We present a solution to the monad reification problem and illustrate it with a small robot control language. Monad reification is not new but the novelty of our approach is in its directness, simplicity and compositionality.
当在Haskell中编写嵌入式领域特定语言时,通常能够创建Monad类的实例来利用do符号和广泛的Monad库是很方便的。通常情况下,需要对这些语言进行编译,而不仅仅是对它们进行解释。这就引入了单元具体化的问题,即观察单元计算的结构。我们提出了一种单实体化问题的解决方案,并用一种小型机器人控制语言来说明它。单一物化并不新鲜,但我们方法的新颖之处在于它的直接、简单和组合性。
{"title":"Simple and compositional reification of monadic embedded languages","authors":"Josef Svenningsson, Bo Joel Svensson","doi":"10.1145/2500365.2500611","DOIUrl":"https://doi.org/10.1145/2500365.2500611","url":null,"abstract":"When writing embedded domain specific languages in Haskell, it is often convenient to be able to make an instance of the Monad class to take advantage of the do-notation and the extensive monad libraries. Commonly it is desirable to compile such languages rather than just interpret them. This introduces the problem of monad reification, i.e. observing the structure of the monadic computation. We present a solution to the monad reification problem and illustrate it with a small robot control language. Monad reification is not new but the novelty of our approach is in its directness, simplicity and compositionality.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"5 1","pages":""},"PeriodicalIF":0.0,"publicationDate":"2013-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"79662450","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 1
Typed syntactic meta-programming 类型化语法元编程
Dominique Devriese, F. Piessens
We present a novel set of meta-programming primitives for use in a dependently-typed functional language. The types of our meta-programs provide strong and precise guarantees about their termination, correctness and completeness. Our system supports type-safe construction and analysis of terms, types and typing contexts. Unlike alternative approaches, they are written in the same style as normal programs and use the language's standard functional computational model. We formalise the new meta-programming primitives, implement them as an extension of Agda, and provide evidence of usefulness by means of two compelling applications in the fields of datatype-generic programming and proof tactics.
我们提出了一套新的元编程原语,用于依赖类型的函数式语言。我们的元程序的类型为它们的终止、正确性和完整性提供了强大而精确的保证。我们的系统支持类型安全的构造和术语、类型和类型上下文的分析。与其他方法不同,它们以与普通程序相同的风格编写,并使用该语言的标准函数计算模型。我们将新的元编程原语形式化,作为Agda的扩展实现它们,并通过数据类型泛型编程和证明策略领域的两个引人注目的应用程序提供有用性的证据。
{"title":"Typed syntactic meta-programming","authors":"Dominique Devriese, F. Piessens","doi":"10.1145/2500365.2500575","DOIUrl":"https://doi.org/10.1145/2500365.2500575","url":null,"abstract":"We present a novel set of meta-programming primitives for use in a dependently-typed functional language. The types of our meta-programs provide strong and precise guarantees about their termination, correctness and completeness. Our system supports type-safe construction and analysis of terms, types and typing contexts. Unlike alternative approaches, they are written in the same style as normal programs and use the language's standard functional computational model. We formalise the new meta-programming primitives, implement them as an extension of Agda, and provide evidence of usefulness by means of two compelling applications in the fields of datatype-generic programming and proof tactics.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"157 1","pages":""},"PeriodicalIF":0.0,"publicationDate":"2013-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"86608005","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 19
C-SHORe: a collapsible approach to higher-order verification C-SHORe:高阶验证的可折叠方法
Christopher H. Broadbent, Arnaud Carayol, M. Hague, O. Serre
Higher-order recursion schemes (HORS) have recently received much attention as a useful abstraction of higher-order functional programs with a number of new verification techniques employing HORS model-checking as their centrepiece. This paper contributes to the ongoing quest for a truly scalable model-checker for HORS by offering a different, automata theoretic perspective. We introduce the first practical model-checking algorithm that acts on a generalisation of pushdown automata equi-expressive with HORS called collapsible pushdown systems (CPDS). At its core is a substantial modification of a recently studied saturation algorithm for CPDS. In particular it is able to use information gathered from an approximate forward reachability analysis to guide its backward search. Moreover, we introduce an algorithm that prunes the CPDS prior to model-checking and a method for extracting counter-examples in negative instances. We compare our tool with the state-of-the-art verification tools for HORS and obtain encouraging results. In contrast to some of the main competition tackling the same problem, our algorithm is fixed-parameter tractable, and we also offer significantly improved performance over the only previously published tool of which we are aware that also enjoys this property. The tool and additional material are available from http://cshore.cs.rhul.ac.uk.
高阶递归方案(HORS)作为一种有用的高阶函数式程序抽象,近年来受到了广泛的关注,许多新的验证技术都以HORS模型检查为核心。本文通过提供不同的自动机理论视角,为HORS提供了一个真正可扩展的模型检查器。我们介绍了第一个实用的模型检查算法,该算法作用于具有HORS等表达的下推自动机的推广,称为可折叠下推系统(CPDS)。其核心是对最近研究的CPDS饱和算法的实质性修改。特别是,它能够使用从近似前向可达性分析中收集的信息来指导其向后搜索。此外,我们还介绍了一种在模型检查之前对CPDS进行修剪的算法,以及一种在负面实例中提取反例的方法。我们将我们的工具与最先进的HORS验证工具进行了比较,并获得了令人鼓舞的结果。与解决相同问题的一些主要竞争对手相比,我们的算法是固定参数可处理的,并且我们还提供了比我们所知的唯一先前发布的工具(也享有此属性)显着改进的性能。该工具和其他材料可从http://cshore.cs.rhul.ac.uk获得。
{"title":"C-SHORe: a collapsible approach to higher-order verification","authors":"Christopher H. Broadbent, Arnaud Carayol, M. Hague, O. Serre","doi":"10.1145/2500365.2500589","DOIUrl":"https://doi.org/10.1145/2500365.2500589","url":null,"abstract":"Higher-order recursion schemes (HORS) have recently received much attention as a useful abstraction of higher-order functional programs with a number of new verification techniques employing HORS model-checking as their centrepiece. This paper contributes to the ongoing quest for a truly scalable model-checker for HORS by offering a different, automata theoretic perspective. We introduce the first practical model-checking algorithm that acts on a generalisation of pushdown automata equi-expressive with HORS called collapsible pushdown systems (CPDS). At its core is a substantial modification of a recently studied saturation algorithm for CPDS. In particular it is able to use information gathered from an approximate forward reachability analysis to guide its backward search. Moreover, we introduce an algorithm that prunes the CPDS prior to model-checking and a method for extracting counter-examples in negative instances. We compare our tool with the state-of-the-art verification tools for HORS and obtain encouraging results. In contrast to some of the main competition tackling the same problem, our algorithm is fixed-parameter tractable, and we also offer significantly improved performance over the only previously published tool of which we are aware that also enjoys this property. The tool and additional material are available from http://cshore.cs.rhul.ac.uk.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"63 1","pages":""},"PeriodicalIF":0.0,"publicationDate":"2013-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"84688488","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 35
Testing noninterference, quickly 测试无干扰,快速
Catalin Hritcu, Leonidas Lampropoulos, Antal Spector-Zabusky, Arthur Azevedo de Amorim, Maxime Dénès, John Hughes, B. Pierce, Dimitrios Vytiniotis
Information-flow control mechanisms are difficult to design and labor intensive to prove correct. To reduce the time wasted on proof attempts doomed to fail due to broken definitions, we advocate modern random testing techniques for finding counterexamples during the design process. We show how to use QuickCheck, a property-based random-testing tool, to guide the design of a simple information-flow abstract machine. We find that both sophisticated strategies for generating well-distributed random programs and readily falsifiable formulations of noninterference properties are critically important. We propose several approaches and evaluate their effectiveness on a collection of injected bugs of varying subtlety. We also present an effective technique for shrinking large counterexamples to minimal, easily comprehensible ones. Taken together, our best methods enable us to quickly and automatically generate simple counterexamples for all these bugs.
信息流控制机制很难设计,而且证明其正确性需要大量的劳动。为了减少由于定义不一致而注定失败的证明尝试所浪费的时间,我们提倡在设计过程中使用现代随机测试技术来寻找反例。我们展示了如何使用QuickCheck,一个基于属性的随机测试工具,来指导一个简单的信息流抽象机器的设计。我们发现生成分布良好的随机程序的复杂策略和易于证伪的非干涉性质公式都是至关重要的。我们提出了几种方法,并评估了它们在不同微妙的注入错误集合上的有效性。我们还提出了一种有效的技术,将大型反例缩小到最小的,易于理解的反例。总的来说,我们最好的方法使我们能够快速、自动地为所有这些错误生成简单的反例。
{"title":"Testing noninterference, quickly","authors":"Catalin Hritcu, Leonidas Lampropoulos, Antal Spector-Zabusky, Arthur Azevedo de Amorim, Maxime Dénès, John Hughes, B. Pierce, Dimitrios Vytiniotis","doi":"10.1145/2500365.2500574","DOIUrl":"https://doi.org/10.1145/2500365.2500574","url":null,"abstract":"Information-flow control mechanisms are difficult to design and labor intensive to prove correct. To reduce the time wasted on proof attempts doomed to fail due to broken definitions, we advocate modern random testing techniques for finding counterexamples during the design process. We show how to use QuickCheck, a property-based random-testing tool, to guide the design of a simple information-flow abstract machine. We find that both sophisticated strategies for generating well-distributed random programs and readily falsifiable formulations of noninterference properties are critically important. We propose several approaches and evaluate their effectiveness on a collection of injected bugs of varying subtlety. We also present an effective technique for shrinking large counterexamples to minimal, easily comprehensible ones. Taken together, our best methods enable us to quickly and automatically generate simple counterexamples for all these bugs.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"43 1","pages":""},"PeriodicalIF":0.0,"publicationDate":"2013-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"85290892","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 57
期刊
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
全部 Acc. Chem. Res. ACS Applied Bio Materials ACS Appl. Electron. Mater. ACS Appl. Energy Mater. ACS Appl. Mater. Interfaces ACS Appl. Nano Mater. ACS Appl. Polym. Mater. ACS BIOMATER-SCI ENG ACS Catal. ACS Cent. Sci. ACS Chem. Biol. ACS Chemical Health & Safety ACS Chem. Neurosci. ACS Comb. Sci. ACS Earth Space Chem. ACS Energy Lett. ACS Infect. Dis. ACS Macro Lett. ACS Mater. Lett. ACS Med. Chem. Lett. ACS Nano ACS Omega ACS Photonics ACS Sens. ACS Sustainable Chem. Eng. ACS Synth. Biol. Anal. Chem. BIOCHEMISTRY-US Bioconjugate Chem. BIOMACROMOLECULES Chem. Res. Toxicol. Chem. Rev. Chem. Mater. CRYST GROWTH DES ENERG FUEL Environ. Sci. Technol. Environ. Sci. Technol. Lett. Eur. J. Inorg. Chem. IND ENG CHEM RES Inorg. Chem. J. Agric. Food. Chem. J. Chem. Eng. Data J. Chem. Educ. J. Chem. Inf. Model. J. Chem. Theory Comput. J. Med. Chem. J. Nat. Prod. J PROTEOME RES J. Am. Chem. Soc. LANGMUIR MACROMOLECULES Mol. Pharmaceutics Nano Lett. Org. Lett. ORG PROCESS RES DEV ORGANOMETALLICS J. Org. Chem. J. Phys. Chem. J. Phys. Chem. A J. Phys. Chem. B J. Phys. Chem. C J. Phys. Chem. Lett. Analyst Anal. Methods Biomater. Sci. Catal. Sci. Technol. Chem. Commun. Chem. Soc. Rev. CHEM EDUC RES PRACT CRYSTENGCOMM Dalton Trans. Energy Environ. Sci. ENVIRON SCI-NANO ENVIRON SCI-PROC IMP ENVIRON SCI-WAT RES Faraday Discuss. Food Funct. Green Chem. Inorg. Chem. Front. Integr. Biol. J. Anal. At. Spectrom. J. Mater. Chem. A J. Mater. Chem. B J. Mater. Chem. C Lab Chip Mater. Chem. Front. Mater. Horiz. MEDCHEMCOMM Metallomics Mol. Biosyst. Mol. Syst. Des. Eng. Nanoscale Nanoscale Horiz. Nat. Prod. Rep. New J. Chem. Org. Biomol. Chem. Org. Chem. Front. PHOTOCH PHOTOBIO SCI PCCP Polym. Chem.
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
0
微信
客服QQ
Book学术公众号 扫码关注我们
反馈
×
意见反馈
请填写您的意见或建议
请填写您的手机或邮箱
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
现在去查看 取消
×
提示
确定
Book学术官方微信
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术
文献互助 智能选刊 最新文献 互助须知 联系我们:info@booksci.cn
Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。
Copyright © 2023 Book学术 All rights reserved.
ghs 京公网安备 11010802042870号 京ICP备2023020795号-1