204 research outputs found
Modeling Algorithms in SystemC and ACL2
We describe the formal language MASC, based on a subset of SystemC and
intended for modeling algorithms to be implemented in hardware. By means of a
special-purpose parser, an algorithm coded in SystemC is converted to a MASC
model for the purpose of documentation, which in turn is translated to ACL2 for
formal verification. The parser also generates a SystemC variant that is
suitable as input to a high-level synthesis tool. As an illustration of this
methodology, we describe a proof of correctness of a simple 32-bit radix-4
multiplier.Comment: In Proceedings ACL2 2014, arXiv:1406.123
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
Proving and Computing: Applying Automated Reasoning to the Verification of Symbolic Computation Systems
The application of automated reasoning to the formal verification
of symbolic computation systems is motivated by the need of
ensuring the correctness of the results computed by the system, beyond
the classical approach of testing. Formal verification of properties of the
implemented algorithms require not only to formalize the properties of
the algorithm, but also of the underlying (usually rich) mathematical
theory.
We show how we can use ACL2, a first-order interactive theorem
prover, to reason about properties of algorithms that are typically implemented
as part of symbolic computation systems. We emphasize two
aspects. First, how we can override the apparent lack of expressiveness we
have using a first-order approach (at least compared to higher-order logics).
Second, how we can execute the algorithms (efficiently, if possible)
in the same setting where we formally reason about their correctness.
Three examples of formal verification of symbolic computation algorithms
are presented to illustrate the main issues one has to face in this
task: a Gr¨obner basis algorithm, a first-order unification algorithm based
on directed acyclic graphs, and the Eilenberg-Zilber algorithm, one of
the central components of a symbolic computation system in algebraic
topology
A Logic-Independent IDE
The author's MMT system provides a framework for defining and implementing
logical systems. By combining MMT with the jEdit text editor, we obtain a
logic-independent IDE. The IDE functionality includes advanced features such as
context-sensitive auto-completion, search, and change management.Comment: In Proceedings UITP 2014, arXiv:1410.785
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
Verifying the bridge between simplicial topology and algebra: the Eilenberg–Zilber algorithm
The Eilenberg–Zilber algorithm is one of the central components of the computer algebra system called Kenzo, devoted to
computing in Algebraic Topology. In this article we report on a complete formal proof of the underlying Eilenberg–Zilber
theorem, using the ACL2 theorem prover. As our formalization is executable, we are able to compare the results of the
certified programme with those of Kenzo on some universal examples. Since the results coincide, the reliability of Kenzo is
reinforced. This is a new step in our long-term project towards certified programming for Algebraic Topology.Ministerio de Ciencia e Innovación MTM2009-13842European Union’s 7th Framework Programme [243847] (ForMath)
Proof Pearl: a Formal Proof of Higman’s Lemma in ACL2
Higman’s lemma is an important result in infinitary combinatorics, which
has been formalized in several theorem provers. In this paper we present a formalization
and proof of Higman’s Lemma in the ACL2 theorem prover. Our formalization
is based on a proof by Murthy and Russell, where the key termination argument
is justified by the multiset relation induced by a well-founded relation. To our
knowledge, this is the first mechanization of this proof.Ministerio de Ciencia e Innovación MTM2009-13842-C02-0
Proving Calculational Proofs Correct
Teaching proofs is a crucial component of any undergraduate-level program
that covers formal reasoning. We have developed a calculational reasoning
format and refined it over several years of teaching a freshman-level course,
"Logic and Computation", to thousands of undergraduate students. In our
companion paper, we presented our calculational proof format, gave an overview
of the calculational proof checker (CPC) tool that we developed to help users
write and validate proofs, described some of the technical and implementation
details of CPC and provided several publicly available proofs written using our
format. In this paper, we dive deeper into the implementation details of CPC,
highlighting how proof validation works, which helps us argue that our proof
checking process is sound.Comment: In Proceedings ACL2-2023, arXiv:2311.0837
Exploring formal verification methodology for FPGA-based digital systems.
Abstract Not Provide
Implementing and reasoning about hash-consed data structures in Coq
We report on four different approaches to implementing hash-consing in Coq
programs. The use cases include execution inside Coq, or execution of the
extracted OCaml code. We explore the different trade-offs between faithful use
of pristine extracted code, and code that is fine-tuned to make use of OCaml
programming constructs not available in Coq. We discuss the possible
consequences in terms of performances and guarantees. We use the running
example of binary decision diagrams and then demonstrate the generality of our
solutions by applying them to other examples of hash-consed data structures
- …