154 research outputs found
Enhancements to ACL2 in Versions 6.2, 6.3, and 6.4
We report on improvements to ACL2 made since the 2013 ACL2 Workshop.Comment: In Proceedings ACL2 2014, arXiv:1406.123
Fix Your Types
When using existing ACL2 datatype frameworks, many theorems require type
hypotheses. These hypotheses slow down the theorem prover, are tedious to
write, and are easy to forget. We describe a principled approach to types that
provides strong type safety and execution efficiency while avoiding type
hypotheses, and we present a library that automates this approach. Using this
approach, types help you catch programming errors and then get out of the way
of theorem proving.Comment: In Proceedings ACL2 2015, arXiv:1509.0552
Formal proofs about rewriting using ACL2
We present an application of the ACL2 theorem prover to reason about rewrite systems
theory. We describe the formalization and representation aspects of our work using the firstorder,
quantifier-free logic of ACL2 and we sketch some of the main points of the proof effort.
First, we present a formalization of abstract reduction systems and then we show how this
abstraction can be instantiated to establish results about term rewriting. The main theorems
we mechanically proved are Newman’s lemma (for abstract reductions) and Knuth–Bendix
critical pair theorem (for term rewriting).Ministerio de Educación y Ciencia TIC2000-1368-CO3-0
Data Definitions in the ACL2 Sedan
We present a data definition framework that enables the convenient
specification of data types in ACL2s, the ACL2 Sedan. Our primary motivation
for developing the data definition framework was pedagogical. We were teaching
undergraduate students how to reason about programs using ACL2s and wanted to
provide them with an effective method for defining, testing, and reasoning
about data types in the context of an untyped theorem prover. Our framework is
now routinely used not only for pedagogical purposes, but also by advanced
users.
Our framework concisely supports common data definition patterns, e.g. list
types, map types, and record types. It also provides support for polymorphic
functions. A distinguishing feature of our approach is that we maintain both a
predicative and an enumerative characterization of data definitions.
In this paper we present our data definition framework via a sequence of
examples. We give a complete characterization in terms of tau rules of the
inclusion/exclusion relations a data definition induces, under suitable
restrictions. The data definition framework is a key component of
counterexample generation support in ACL2s, but can be independently used in
ACL2, and is available as a community book.Comment: In Proceedings ACL2 2014, arXiv:1406.123
Functional Big-step Semantics
When doing an interactive proof about a piece of software, it is important that the underlying programming language’s semantics does not make the proof unnecessarily difficult or unwieldy. Both smallstep and big-step semantics are commonly used, and the latter is typically given by an inductively defined relation. In this paper, we consider an alternative: using a recursive function akin to an interpreter for the language. The advantages include a better induction theorem, less duplication, accessibility to ordinary functional programmers, and the ease of doing symbolic simulation in proofs via rewriting. We believe that this style of semantics is well suited for compiler verification, including proofs of divergence preservation. We do not claim the invention of this style of semantics: our contribution here is to clarify its value, and to explain how it supports several language features that might appear to require a relational or small-step approach. We illustrate the technique on a simple imperative language with C-like for-loops and a break statement, and compare it to a variety of other approaches. We also provide ML and lambda-calculus based examples to illustrate its generality
A verified Common Lisp implementation of Buchberger's algorithm in ACL2
In this article, we present the formal verification of a Common
Lisp implementation of Buchberger's algorithm for computing
Gröbner bases of polynomial ideals. This work is carried out in
ACL2, a system which provides an integrated environment where
programming (in a pure functional subset of Common Lisp) and
formal verification of programs, with the assistance of a theorem
prover, are possible. Our implementation is written in a real
programming language and it is directly executable within the
ACL2 system or any compliant Common Lisp system. We provide
here snippets of real verified code, discuss the formalization details
in depth, and present quantitative data about the proof effort
- …