Results 1 
8 of
8
Imperative functional programming with isabelle/hol
 In TPHOLs ’08: Proceedings of the 21st International Conference on Theorem Proving in Higher Order Logics
, 2008
"... Abstract. We introduce a lightweight approach for reasoning about programs involving imperative data structures using the proof assistant Isabelle/HOL. It is based on shallow embedding of programs, a polymorphic heap model using enumeration encodings and type classes, and a stateexception monad sim ..."
Abstract

Cited by 17 (3 self)
 Add to MetaCart
Abstract. We introduce a lightweight approach for reasoning about programs involving imperative data structures using the proof assistant Isabelle/HOL. It is based on shallow embedding of programs, a polymorphic heap model using enumeration encodings and type classes, and a stateexception monad similar to known counterparts from Haskell. Existing proof automation tools are easily adapted to provide a verification environment. The framework immediately allows for correct code generation to ML and Haskell. Two case studies demonstrate our approach: An arraybased checker for resolution proofs, and a more efficient bytecode verifier. 1
Verification of BDD normalization
 In TPHOLs
, 2005
"... Abstract. We present the verification of the normalization of a binary decision diagram (BDD). The normalization follows the original algorithm presented by Bryant in 1986 and transforms an ordered BDD in a reduced, ordered and shared BDD. The verification is based on Hoare logics and is carried out ..."
Abstract

Cited by 8 (2 self)
 Add to MetaCart
Abstract. We present the verification of the normalization of a binary decision diagram (BDD). The normalization follows the original algorithm presented by Bryant in 1986 and transforms an ordered BDD in a reduced, ordered and shared BDD. The verification is based on Hoare logics and is carried out in the theorem prover Isabelle/HOL. The work is both a case study for verification of procedures on a complex pointer structure, as well as interesting on its own, since it is the first proof of functional correctness of the pointer based normalization process we are aware of. 1
Inductive invariants for nested recursion
 Theorem Proving in Higher Order Logics (TPHOLS'03), volume 2758 of LNCS
, 2003
"... Abstract. We show that certain inputoutput relations, termed inductive invariants are of central importance for termination proofs of algorithms defined by nested recursion. Inductive invariants can be used to enhance recursive function definition packages in higherorder logic mechanizations. We d ..."
Abstract

Cited by 4 (2 self)
 Add to MetaCart
Abstract. We show that certain inputoutput relations, termed inductive invariants are of central importance for termination proofs of algorithms defined by nested recursion. Inductive invariants can be used to enhance recursive function definition packages in higherorder logic mechanizations. We demonstrate the usefulness of inductive invariants on a large example of the BDD algorithm Apply. Finally, we introduce a related concept of inductive fixpoints with the property that for every functional in higherorder logic there exists a largest partial function that is such a fixpoint. 1
D.: Partial Clock Functions in ACL2
 5th ACL2 Workshop. (2004
, 2004
"... Abstract J Moore has discovered an elegant approach for verifying state invariants of imperative programs without having to write a verification condition generator (VCG) or clock function. Users need only make assertions about selected cutpoint instructions of a program, such as loop tests and subr ..."
Abstract

Cited by 4 (3 self)
 Add to MetaCart
Abstract J Moore has discovered an elegant approach for verifying state invariants of imperative programs without having to write a verification condition generator (VCG) or clock function. Users need only make assertions about selected cutpoint instructions of a program, such as loop tests and subroutine entry and exit points. ACL2's rewriter is then used to automatically propagate these assertions through the intervening instructions.
Verifying haskell programs by combining testing and proving
 In Proceedings of the Third International Conference on Quality Software
"... We propose a method for improving confidence in the correctness of Haskell programs by combining testing and proving. Testing is used for debugging programs and specification before a costly proof attempt. During a proof development, testing also quickly eliminates wrong conjectures. Proving helps u ..."
Abstract

Cited by 4 (0 self)
 Add to MetaCart
We propose a method for improving confidence in the correctness of Haskell programs by combining testing and proving. Testing is used for debugging programs and specification before a costly proof attempt. During a proof development, testing also quickly eliminates wrong conjectures. Proving helps us to decompose a testing task in a way that is guaranteed to be correct. To demonstrate the method we have extended the Agda/Alfa proof assistant for dependent type theory with a tool for random testing. As an example we show how the correctness of a BDDalgorithm written in Haskell is verified by testing properties of component functions. We also discuss faithful translations from Haskell to type theory.
Adapting Functional Programs to HigherOrder Logic
"... Abstract. Higherorder logic proof systems combine functional programming with logic, providing functional programmers with a comfortable setting for the formalization of programs, specifications, and proofs. However, a possibly unfamiliar aspect of working in such an environment is that formally es ..."
Abstract

Cited by 2 (1 self)
 Add to MetaCart
Abstract. Higherorder logic proof systems combine functional programming with logic, providing functional programmers with a comfortable setting for the formalization of programs, specifications, and proofs. However, a possibly unfamiliar aspect of working in such an environment is that formally establishing program termination is necessary. In many cases, termination can be automatically proved, but there are useful programs that diverge and others that always terminate but have difficult termination proofs. We discuss techniques that support the expression of such programs as logical functions. 1.
Testing and Proving in Dependent Type Theory (Part II: Verifying Haskell Programs by Combining Testing and Proving)
 CHALMERS UNIVERSITY OF TECHNOLOGY AND GOTEBORG UNIVERSITY
, 2003
"... ..."
A Prototype Embedding of Bluespec SystemVerilog in the PVS Theorem Prover
"... Bluespec SystemVerilog (BSV) is a Hardware Description Language based on the guarded action model of concurrency. It has an elegant semantics, which makes it well suited for formal reasoning. To date, a number of BSV designs have been verified with hand proofs, but little work has been conducted on ..."
Abstract
 Add to MetaCart
Bluespec SystemVerilog (BSV) is a Hardware Description Language based on the guarded action model of concurrency. It has an elegant semantics, which makes it well suited for formal reasoning. To date, a number of BSV designs have been verified with hand proofs, but little work has been conducted on the application of automated reasoning. We present a prototype shallow embedding of BSV in the PVS theorem prover. Our embedding is compatible with the PVS model checker, which can automatically prove an important class of theorems, and can also be used in conjunction with the powerful proof strategies of PVS to verify a broader class of properties than can be achieved with model checking alone. 1