Florian Haftmann

Learn More
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 state-exception monad similar to known counterparts from Haskell. Existing proof automation(More)
We reconsider the well-known concept of Haskell-style type classes within the logical framework of Isabelle. So far, axiomatic type classes in Isabelle merely account for the logical aspect as predicates over types, while the operational part is only a convention based on raw overloading. Our more elaborate approach to constructive type classes provides a(More)
If you browse through the articles of www.junit.org, you will find only one article that contains the word database in its abstract. This observation is shocking because, of course, testing is just as important for database applications as for any other application. The sad truth is that JUnit simply does not work for database applications, and there are no(More)
We present a novel compiled approach to Normalization by Evaluation (NBE) for ML-like languages. It supports efficient normalization of open λ-terms w.r.t. β-reduction and rewrite rules. We have implemented NBE and show both a detailed formal model of our implementation and its verification in Isabelle. Finally we discuss how NBE is turned into a proof rule(More)
Regression testing is an important software maintenance activity to ensure the integrity of a software after modification. However, most methods and tools developed for software testing today do not work well for database applications; these tools only work well if applications are stateless or tests can be designed in such a way that they do not alter the(More)
The proof assistant Isabelle has recently acquired a “local theory” concept that integrates a variety of mechanisms for structured specifications into a common framework. We explicitly separate a local theory “target”, i.e. a fixed axiomatic specification consisting of parameters and assumptions, from its “body” consisting of arbitrary definitional(More)
A very rigorous weapon against implementation errors in software systems is formal verification: both the desired behaviour (abstract specification) and the implementation (executable specification) are formalised in a suitable logical calculus, and the equivalence of both is proved. The numerous technical details involved in such a procedure suggest to let(More)