当前位置: X-MOL 学术J. Autom. Reason. › 论文详情
Our official English website, www.x-mol.net, welcomes your feedback! (Note: you will need to create a separate account there.)
Limited Second-Order Functionality in a First-Order Setting
Journal of Automated Reasoning ( IF 1.1 ) Pub Date : 2018-12-17 , DOI: 10.1007/s10817-018-09505-9
Matt Kaufmann , J Strother Moore

We describe how we have defined in ACL2 a weak version of the Common Lisp functional apply , which takes a function and list of actuals and applies the function to the actuals. Our version, called apply$ , does not operate on functions but on ordinary objects—symbols and lists representing lambda expressions—some of which are interpreted as functions. We define a syntactic notion of “tameness” to identify the interpretable objects. This makes our apply$ weaker than a true second-order functional but we believe apply$ is powerful enough for many uses in ACL2. To maintain soundness and the conservativity of our Definitional Principle we require that certain hypotheses, called “warrants”, be present in any theorem relying on the behavior of apply$ on non-primitives. Within these constraints we can define “functionals” such as sum and foldr which map tame “functions” over lists and accumulate the results. This allows the ACL2 user to avoid defining specialized recursive functions for each such application. We can prove and use general-purpose lemmas about these “functionals.” We describe the formalization, explain how we keep the Definitional Principle conservative, show examples of useful functions using apply$ and theorems about them, sketch the proof that there is a model of any extension of the system using the new primitives, discuss issues arising in making these functions executable, and show some preliminary performance results.

中文翻译:

一阶设置中的有限二阶功能

我们描述了如何在 ACL2 中定义 Common Lisp 函数 apply 的弱版本,它接受一个函数和实际值列表,并将函数应用于实际值。我们的版本称为 apply$ ,它不操作函数,而是操作普通对象——代表 lambda 表达式的符号和列表——其中一些被解释为函数。我们定义了“驯服”的句法概念来识别可解释的对象。这使得我们的 apply$ 比真正的二阶函数弱,但我们相信 apply$ 在 ACL2 中的许多用途都足够强大。为了保持我们的定义原则的稳健性和保守性,我们要求在任何依赖于非原语上的 apply$ 行为的定理中都存在某些称为“保证”的假设。在这些约束中,我们可以定义“函数”,例如 sum 和 foldr,它们将“函数”映射到列表上并累积结果。这允许 ACL2 用户避免为每个此类应用程序定义专门的递归函数。我们可以证明和使用关于这些“泛函”的通用引理。我们描述了形式化,解释了我们如何保持定义原则的保守性,展示了使用 apply$ 的有用函数的例子和关于它们的定理,草图证明存在使用新原语的系统的任何扩展的模型,讨论出现的问题使这些函数可执行,并显示一些初步的性能结果。我们可以证明和使用关于这些“泛函”的通用引理。我们描述了形式化,解释了我们如何保持定义原则的保守性,展示了使用 apply$ 的有用函数的例子和关于它们的定理,草图证明存在使用新原语的系统的任何扩展的模型,讨论出现的问题使这些函数可执行,并显示一些初步的性能结果。我们可以证明和使用关于这些“泛函”的通用引理。我们描述了形式化,解释了我们如何保持定义原则的保守性,展示了使用 apply$ 的有用函数的例子和关于它们的定理,草图证明存在使用新原语的系统的任何扩展的模型,讨论出现的问题使这些函数可执行,并显示一些初步的性能结果。
更新日期:2018-12-17
down
wechat
bug