论文标题
ACL2S系统编程
ACL2s Systems Programming
论文作者
论文摘要
ACL2提供了一个系统编程功能,该功能允许一个人编写代码,该代码在ACL2的内部使用并扩展了ACL2。但是,出于健全的原因,ACL2禁止使用某些类型的编程结构,例如破坏性更新,高阶功能,评估和任意宏。 我们设计了一种用通用LISP编写代码的方法,该方法允许一个人以统一的方式访问ACL2,ACL2和常见的LISP功能。我们在开发ACL2轿车(ACL2S)的过程中达到了这种方法,并将其用作与游戏化验证,教育,证明检查,与外部定理掠夺和安全相关的正式项目中的关键组成部分。该方法包括一个用于执行Common LISP的ACL2查询的库,以及有助于满足共同需求的准则和公用事业。我们将此方法称为“ ACL2S系统编程”,以将其与ACL2系统编程区分开。我们展示了我们的方法论如何轻松开发与ACL2和ACL2交互的工具,并在研究中描述我们使用它的经验。
ACL2 provides a systems programming capability that allows one to write code that uses and extends ACL2 inside of ACL2. However, for soundness reasons, ACL2 bars the unrestricted use of certain kinds of programming constructs, like destructive updates, higher-order functions, eval, and arbitrary macros. We devised a methodology for writing code in Common Lisp that allows one to access ACL2, ACL2s, and Common Lisp functionality in a unified way. We arrived at this methodology in the process of developing the ACL2 Sedan (ACL2s) and using it as a key component in formal-methods-enabled projects relating to gamified verification, education, proof checking, interfacing with external theorem provers and security. The methodology includes a library for performing ACL2 queries from Common Lisp, as well as guidelines and utilities that help address common needs. We call this methodology "ACL2s systems programming," to distinguish it from ACL2 systems programming. We show how our methodology makes it possible to easily develop tools that interface with ACL2 and ACL2s, and describe our experience using it in our research.