VLDB 2026 Research / reviewers in the wild / expert
Koen Claessen
dblp:74/2610
· DBLP profile ↗
57ranked-venue papers
27as first author
8since 2021 · last 2026
0000-0002-8113-4478ORCID · verified
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 45 · 20 first-author · 5 since 2021Theory of computation · 20 · 11 first-author · 2 since 2021Artificial intelligence and machine learning · 11 · 8 first-author · 1 since 2021Systems, architecture and hardware · 2 · 1 since 2021
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2026 | QuickChecking Convergence of Rewriting Systems (Functional Pearl)abstractTerm rewriting systems are a common tool in automated reasoning and semantics of programming languages, and many practical applications require these systems to be convergent. While automated tools and theory exist to establish convergence, this paper is concerned with a practical method for testing it to quickly find useful counterexamples. Standard property-based testing approaches struggle here: exhaustively computing all normal forms is fundamentally flawed and too slow, while generating random normal forms makes counterexample minimization (shrinking) fragile due to dependencies on earlier generated test data. To solve this, we introduce a QuickCheck testing method based on generating and shrinking random execution traces. By checking if the first and last terms of a generated trace share the same deterministic normal form, we remove the data dependency between generators. This approach yields a property that efficiently finds counterexamples and enables fast, robust shrinking. We demonstrate the effectiveness of this method on various examples, ranging from group theory equations to distributed process calculus. Koen Claessen |
Proc. ACM Program. Lang. | 1 |
| 2024 | Story of Your Lazy Function's Life: A Bidirectional Demand Semantics for Mechanized Cost Analysis of Lazy ProgramsabstractLazy evaluation is a powerful tool that enables better compositionality and potentially better performance in functional programming, but it is challenging to analyze its computation cost. Existing works either require manually annotating sharing, or rely on separation logic to reason about heaps of mutable cells. In this paper, we propose a bidirectional demand semantics that allows for extrinsic reasoning about the computation cost of lazy programs without relying on special program logics. To show the effectiveness of our approach, we apply the demand semantics to a variety of case studies including insertion sort, selection sort, Okasaki’s banker’s queue, and the implicit queue. We formally prove that the banker’s queue and the implicit queue are both amortized and persistent using the Rocq Prover (formerly known as Coq). We also propose the reverse physicist’s method, a novel variant of the classical physicist’s method, which enables mechanized, modular and compositional reasoning about amortization and persistence with the demand semantics. Li-yao Xia, Laura Israel, Maite Kramarz, Nicholas Coltharp, Koen Claessen, Stephanie Weirich, Yao Li 0004 |
Proc. ACM Program. Lang. | 5 |
| 2023 | HasTEE: Programming Trusted Execution Environments with HaskellabstractTrusted Execution Environments (TEEs) are hardware enforced memory isolation units, emerging as a pivotal security solution for security-critical applications. TEEs, like Intel SGX and ARM TrustZone, allow the isolation of confidential code and data within an untrusted host environment, such as the cloud and IoT. Despite strong security guarantees, TEE adoption has been hindered by an awkward programming model. This model requires manual application partitioning and the use of error-prone, memory-unsafe, and potentially information-leaking low-level C/C++ libraries. Abhiroop Sarkar, Robert Krook, Alejandro Russo, Koen Claessen |
Haskell | 4 |
| 2023 | The Verse Calculus: A Core Calculus for Deterministic Functional Logic ProgrammingabstractFunctional logic languages have a rich literature, but it is tricky to give them a satisfying semantics. In this paper we describe the Verse calculus, VC, a new core calculus for deterministic functional logic programming. Our main contribution is to equip VC with a small-step rewrite semantics, so that we can reason about a VC program in the same way as one does with lambda calculus; that is, by applying successive rewrites to it. We also show that the rewrite system is confluent for well-behaved terms. Lennart Augustsson, Joachim Breitner, Koen Claessen, Ranjit Jhala, Simon L. Peyton Jones, Olin Shivers, Guy L. Steele Jr., Tim Sweeney |
Proc. ACM Program. Lang. | 3 |
| 2022 | Creating a Language for Writing Real-Time Applications for the Internet of ThingsabstractWe describe the development of a new programming language Scoria and its compiler. Scoria is a high-level reactive real-time language based on the sparse synchronous model (SSM), designed to produce time- and power-efficient low-level C code that can run on small IoT devices. While the compiler is not yet in a state where it is meaningful to measure power usage, we carefully profile the timing behaviour and identify bottlenecks that can improve performance. The language and compiler are implemented as an Embedded Domain-Specific Language (EDSL) on top of Haskell. Robert Krook, John Hui, Bo Joel Svensson, Stephen A. Edwards, Koen Claessen |
MEMOCODE | 5 |
| 2022 | Testing Cyber-Physical Systems Using a Line-Search Falsification MethodabstractCyber-physical systems (CPSs) are complex and exhibit both continuous and discrete dynamics, hence it is difficult to guarantee that they satisfy given specifications, i.e., the properties that must be fulfilled by the system. Falsification of temporal logic properties is a testing approach that searches for counterexamples of a given specification that can be used to increase the confidence that a CPS does fulfill its specifications. Falsification can be done using random search methods or optimization methods, both of which have their own benefits and drawbacks. This article introduces two methods that exploit randomness to different degrees: 1) the optimization-free Hybrid-Corner-Random (HCR) and 2) the direct-search method Line-Search Falsification (LSF). HCR combines randomly chosen parameter values with extreme parameter values, which performs surprisingly well on benchmark evaluations. The gradient-free optimization-based LSF optimizes over line segments through a vector of inputs in the$n$-dimensional parameter space. The two methods are compared to the Nelder-Mead and SNOBFIT methods, using a well-known set of benchmark problems and LSF shows better performance than any of the evaluated methods. Zahra Ramezani, Koen Claessen, Nicholas Smallbone, Martin Fabian, Knut Åkesson |
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst. | 2 |
| 2021 | SAT modulo discrete event simulation applied to railway design capacity analysisabstractAbstract This paper proposes a new method of combining SAT with discrete event simulation. This new integration proved useful for designing a solver for capacity analysis in early phase railway construction design. Railway capacity is complex to define and analyze, and existing tools and methods used in practice require comprehensive models of the railway network and its timetables. Design engineers working within the limited scope of construction projects report that only ad-hoc, experience-based methods of capacity analysis are available to them. Designs often have subtle capacity pitfalls which are discovered too late, only when network-wide timetables are made—there is a mismatch between the scope of construction projects and the scope of capacity analysis, as currently practiced. We suggest a language for capacity specifications suited for construction projects, expressing properties such as running time, train frequency, overtaking and crossing. Such specifications can be used as contracts in the interface between construction projects and network-wide capacity analysis. We show how these properties can be verified fully automatically by building a special-purpose solver which splits the problem into two: an abstracted SAT-based dispatch planning, and a continuous-domain dynamics with timing constraints evaluated using discrete event simulation. The two components communicate in a CEGAR loop (counterexample-guided abstraction refinement). This architecture is beneficial because it clearly distinguishes the combinatorial choices on the one hand from continuous calculations on the other, so that the simulation can be extended by relevant details as needed. We describe how loops in the infrastructure can be handled to eliminate repeating dispatch plans, and use case studies based on data from existing infrastructure and ongoing construction projects to show that our method is fast enough at relevant scales to provide agile verification in a design setting. Similar SAT modulo discrete event simulation combinations could also be useful elsewhere where one or both of these methods are already applicable such as in bioinformatics or hardware/software verification. Bjørnar Luteberget, Koen Claessen, Christian Johansen, Martin Steffen |
Formal Methods Syst. Des. | 2 |
| 2021 | Handling Transitive Relations in First-Order Automated ReasoningabstractAbstract We present a number of alternative ways of handling transitive binary relations that commonly occur in first-order problems, in particular equivalence relations, total orders, and transitive relations in general. We show how such relations can be discovered syntactically in an input theory, and how they can be expressed in alternative ways. We experimentally evaluate different such ways on problems from the TPTP, using resolution-based reasoning tools as well as instance-based tools. Our conclusions are that (1) it is beneficial to consider different treatments of binary relations as a user, and that (2) reasoning tools could benefit from using a preprocessor or even built-in support for certain types of binary relations. Koen Claessen, Ann Lillieström |
J. Autom. Reason. | 1 |
| 2020 | Enhancing Temporal Logic Falsification With Specification Transformation and Valued BooleansabstractCyber-physical systems (CPSs) are systems with both physical and software components, for example, cars and industrial robots. Since these systems exhibit both discrete and continuous dynamics, they are complex and it is thus difficult to verify that they behave as expected. Falsification of temporal logic properties is an approach to find counterexamples to CPSs by means of simulation. In this article, we propose two additions to enhance the capability of falsification and make it more viable in a large-scale industrial setting. The first addition is a framework for transforming specifications from a signal-based model into signal temporal logic. The second addition is the use of valued Booleans and an additive robust semantics in the falsification process. We evaluate the performance of the additive robust semantics on a set of benchmark models, and we can see that which semantics are preferable depend both on the model and on the specification. Johan Lidén Eddeland, Koen Claessen, Nicholas Smallbone, Zahra Ramezani, Sajed Miremadi, Knut Åkesson |
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst. | 2 |
| 2019 | Automated Drawing of Railway Schematics Using Numerical Optimization in SAT
Bjørnar Luteberget, Koen Claessen, Christian Johansen |
IFM | 2 |
| 2018 | Design-Time Railway Capacity Verification using SAT modulo Discrete Event SimulationabstractRailway capacity is complex to define and analyze, and existing tools and methods used in practice require comprehensive models of the railway network and its timetables. Design engineers working within the limited scope of construction projects report that only ad-hoc, experience-based methods of capacity analysis are available to them. Designs have subtle capacity pitfalls which are discovered too late, only when network-wide timetables are made - there is a mismatch between the scope of construction projects and the scope of capacity analysis, as currently practiced.We suggest a language for capacity specifications suited for construction projects, expressing properties such as running time, train frequency, overtaking and crossing. Verifying these properties amounts to solving a planning problem constrained by discrete control system logic, network topology, laws of motion, and sparse communication. To describe train dynamics one uses second-order linear differential equations which when solved analytically give rise to non-linear equations over real variables.We argue that reasoning over the whole discrete/continuous solution space is not efficient with current state-of-the-art solvers. Instead, we have solved the problem by building a special-purpose solver which splits the problem into two: an abstracted SAT-based dispatch planning, and continuous-domain dynamics and timing constraints evaluated using discrete event simulation. The two components communicate in a CEGAR-loop (counterexample-guided abstraction refinement). We show that our method is fast enough at relevant scales to provide agile verification in a design setting, and we present case studies based on data from existing infrastructure and ongoing construction projects. Bjørnar Luteberget, Koen Claessen, Christian Johansen |
FMCAD | 2 |
| 2017 | QuickSpec: a lightweight theory exploration tool for programmers (system demonstration)abstractThis document gives the outline of a system demonstration for the QuickSpec theory exploration tool. Maximilian Algehed, Koen Claessen, Moa Johansson 0001, Nicholas Smallbone |
Haskell | 2 |
| 2017 | Quick specifications for the busy programmerabstractAbstract QuickSpec is a theory exploration system which tests a Haskell program to find equational properties of it, automatically. The equations can be used to help understand the program, or as lemmas to help prove the program correct. QuickSpec is largely automatic: the user just supplies the functions to be tested and QuickCheck data generators. Previous theory exploration systems, including earlier versions of QuickSpec itself, scaled poorly. This paper describes a new architecture for theory exploration with which we can find vastly more complex laws than before, and much faster. We demonstrate theory exploration in QuickSpec on problems both from functional programming and mathematics. Nicholas Smallbone, Moa Johansson 0001, Koen Claessen, Maximilian Algehed |
J. Funct. Program. | 3 |
| 2016 | The Key monad: type-safe unconstrained dynamic typingabstractWe present a small extension to Haskell called the Key monad. With the Key monad, unique keys of different types can be created and can be tested for equality. When two keys are equal, we also obtain a concrete proof that their types are equal. This gives us a form of dynamic typing, without the need for Typeable constraints. We show that our extension allows us to safely do things we could not otherwise do: it allows us to implement the ST monad (inefficiently), to implement an embedded form of arrow notation, and to translate parametric HOAS to typed de Bruijn indices, among others. Although strongly related to the ST monad, the Key monad is simpler and might be easier to prove safe. We do not provide such a proof of the safety of the Key monad, but we note that, surprisingly, a full proof of the safety of the ST monad also remains elusive to this day. Hence, another reason for studying the Key monad is that a safety proof for it might be a stepping stone towards a safety proof of the ST monad. Atze van der Ploeg, Koen Claessen, Pablo Buiras |
Haskell | 2 |
| 2016 | Analysing Constraint Grammars with a SAT-solver
Inari Listenmaa, Koen Claessen |
LREC | 2 |
| 2015 | Making Random Judgments: Automatically Generating Well-Typed Terms from the Definition of a Type-System
Burke Fetscher, Koen Claessen, Michal H. Palka, John Hughes 0001, Robert Bruce Findler |
ESOP | 2 |
| 2015 | Practical principled FRP: forget the past, change the future, FRPNow!abstractWe present a new interface for practical Functional Reactive Programming (FRP) that (1) is close in spirit to the original FRP ideas, (2) does not have the original space-leak problems, without using arrows or advanced types, and (3) provides a simple and expressive way for performing IO actions from FRP code. We also provide a denotational semantics for this new interface, and a technique (using Kripke logical relations) for reasoning about which FRP functions may "forget their past", i.e. which functions do not have an inherent space-leak. Finally, we show how we have implemented this interface as a Haskell library called FRPNow. Atze van der Ploeg, Koen Claessen |
ICFP | 2 |
| 2015 | SAT Modulo Intuitionistic Implications
Koen Claessen, Dan Rosén |
LPAR | 1 |
| 2015 | TIP: Tons of Inductive Problems
Koen Claessen, Moa Johansson 0001, Dan Rosén, Nicholas Smallbone |
CICM | 1 |
| 2015 | Linearly Ordered Attribute Grammar Scheduling Using SAT-Solving
Jeroen Bransen, L. Thomas van Binsbergen, Koen Claessen, Atze Dijkstra |
TACAS | 3 |
| 2015 | Efficient parallel and incremental parsing of practical context-free languagesabstractAbstract We present a divide-and-conquer algorithm for parsing context-free languages efficiently. Our algorithm is an instance of Valiant's (1975; General context-free recognition in less than cubic time. J. Comput. Syst. Sci. 10 (2), 308–314), who reduced the problem of parsing to matrix multiplications. We show that, while the conquer step of Valiant's is O ( n 3 ), it improves to O (log 2 n ) under certain conditions satisfied by many useful inputs that occur in practice, and if one uses a sparse representation of matrices. The improvement happens because the multiplications involve an overwhelming majority of empty matrices. This result is relevant to modern computing: divide-and-conquer algorithms with a polylogarithmic conquer step can be parallelized relatively easily. Jean-Philippe Bernardy, Koen Claessen |
J. Funct. Program. | 2 |
| 2015 | Generating constrained random data with uniform distributionabstractAbstract We present a technique for automatically deriving test data generators from a given executable predicate representing the set of values we are interested in generating. The distribution of these generators is uniform over values of a given size. To make the generation efficient, we rely on laziness of the predicate, allowing us to prune the space of values quickly. In contrast, implementing test data generators by hand is labour intensive and error prone. Moreover, handwritten generators often have an unpredictable distribution of values, risking that some values are arbitrarily underrepresented. We also present a variation of the technique that has better performance, but where the distribution is skewed in a limited, albeit predictable way. Experimental evaluation of the techniques shows that the automatically derived generators are much easier to define than handwritten ones, and their performance, while lower, is adequate for some realistic applications. Koen Claessen, Jonas Duregård, Michal H. Palka |
J. Funct. Program. | 1 |
| 2014 | A seamless, client-centric programming model for type safe web applicationsabstractWe propose a new programming model for web applications which is (1) seamless; one program and one language is used to produce code for both client and server, (2) client-centric; the programmer takes the viewpoint of the client that runs code on the server rather than the other way around, (3) functional and type-safe, and (4) portable; everything is implemented as a Haskell library that implicitly takes care of all networking code. Our aim is to improve the painful and error-prone experience of today's standard development methods, in which clients and servers are coded in different languages and communicate with each other using ad-hoc protocols. We present the design of our library called Haste.App, an example web application that uses it, and discuss the implementation and the compiler technology on which it depends. Anton Ekblad, Koen Claessen |
Haskell | 2 |
| 2014 | Hipster: Integrating Theory Exploration in a Proof Assistant
Moa Johansson 0001, Dan Rosén, Nicholas Smallbone, Koen Claessen |
CICM | 4 |
| 2013 | Automating Inductive Proofs Using Theory Exploration
Koen Claessen, Moa Johansson 0001, Dan Rosén, Nicholas Smallbone |
CADE | 1 |
| 2013 | Model-Checking Signal Transduction Networks through Decreasing Reachability Sets
Koen Claessen, Jasmin Fisher, Samin Ishtiaq, Nir Piterman, Qinsi Wang |
CAV | 1 |
| 2013 | A circuit approach to LTL model checking
Koen Claessen, Niklas Eén, Baruch Sterin |
FMCAD | 1 |
| 2013 | Splittable pseudorandom number generators using cryptographic hashingabstractWe propose a new splittable pseudorandom number generator (PRNG) based on a cryptographic hash function. Splittable PRNGs, in contrast to linear PRNGs, allow the creation of two (seemingly) independent generators from a given random number generator. Splittable PRNGs are very useful for structuring purely functional programs, as they avoid the need for threading around state. We show that the currently known and used splittable PRNGs are either not efficient enough, have inherent flaws, or lack formal arguments about their randomness. In contrast, our proposed generator can be implemented efficiently, and comes with a formal statements and proofs that quantify how 'random' the results are that are generated. The provided proofs give strong randomness guarantees under assumptions commonly made in cryptography. Koen Claessen, Michal H. Palka |
Haskell | 1 |
| 2013 | Using circular programs for higher-order syntax: functional pearlabstractThis pearl presents a novel technique for constructing a first-order syntax tree directly from a higher-order interface. We exploit circular programming to generate names for new variables, resulting in a simple yet efficient method. Our motivating application is the design of embedded languages supporting variable binding, where it is convenient to use higher-order syntax when constructing programs, but first-order syntax when processing or transforming programs. Emil Axelsson, Koen Claessen |
ICFP | 2 |
| 2013 | Efficient divide-and-conquer parsing of practical context-free languagesabstractWe present a divide-and-conquer algorithm for parsing context-free languages efficiently. Our algorithm is an instance of Valiant's (1975), who reduced the problem of parsing to matrix multiplications. We show that, while the conquer step of Valiant's is O(n3) in the worst case, it improves to O(logn3), under certain conditions satisfied by many useful inputs. These conditions occur for example in program texts written by humans. The improvement happens because the multiplications involve an overwhelming majority of empty matrices. This result is relevant to modern computing: divide-and-conquer algorithms can be parallelized relatively easily. Jean-Philippe Bernardy, Koen Claessen |
ICFP | 2 |
| 2013 | HALO: haskell to logic through denotational semanticsabstractEven well-typed programs can go wrong in modern functional languages, by encountering a pattern-match failure, or simply returning the wrong answer. An increasingly-popular response is to allow programmers to write contracts that express semantic properties, such as crash-freedom or some useful post-condition. We study the static verification of such contracts. Our main contribution is a novel translation to first-order logic of both Haskell programs, and contracts written in Haskell, all justified by denotational semantics. This translation enables us to prove that functions satisfy their contracts using an off-the-shelf first-order logic theorem prover. Dimitrios Vytiniotis, Simon L. Peyton Jones, Koen Claessen, Dan Rosén |
POPL | 3 |
| 2012 | A liveness checking algorithm that counts
Koen Claessen, Niklas Sörensson |
FMCAD | 1 |
| 2012 | Shrinking and showing functions: (functional pearl)abstractAlthough quantification over functions in QuickCheck properties has been supported from the beginning, displaying and shrinking them as counter examples has not. The reason is that in general, functions are infinite objects, which means that there is no sensible show function for them, and shrinking an infinite object within a finite number of steps seems impossible. This paper presents a general technique with which functions as counter examples can be shrunk to finite objects, which can then be displayed to the user. The approach turns out to be practically usable, which is shown by a number of examples. The two main limitations are that higher-order functions cannot be dealt with, and it is hard to deal with terms that contain functions as subterms. Koen Claessen |
Haskell | 1 |
| 2012 | The TPTP Typed First-Order Form with Arithmetic
Geoff Sutcliffe, Stephan Schulz 0001, Koen Claessen, Peter Baumgartner 0001 |
LPAR | 3 |
| 2011 | The Anatomy of Equinox - An Extensible Automated Reasoning Tool for First-Order Logic and Beyond - (Talk Abstract)
Koen Claessen |
CADE | 1 |
| 2011 | Sort It Out with Monotonicity - Translating between Many-Sorted and Unsorted First-Order Logic
Koen Claessen, Ann Lillieström, Nicholas Smallbone |
CADE | 1 |
| 2011 | Automated Inference of Finite Unsatisfiability
Koen Claessen, Ann Lillieström |
J. Autom. Reason. | 1 |
| 2010 | Testing Polymorphic Properties
Jean-Philippe Bernardy, Patrik Jansson, Koen Claessen |
ESOP | 3 |
| 2010 | Feldspar: A domain specific language for digital signal processing algorithmsabstractA new language, Feldspar, is presented, enabling high-level and platform-independent description of digital signal processing (DSP) algorithms. Feldspar is a pure functional language embedded in Haskell. It offers a high-level dataflow style of programming, as well as a more mathematical style based on vector indices. The key to generating efficient code from such descriptions is a high-level optimization technique called vector fusion. Feldspar is based on a low-level, functional core language which has a relatively small semantic gap to machine-oriented languages like C. The core language serves as the interface to the back-end code generator, which produces C. For very small examples, the generated code performs comparably to hand-written C code when run on a DSP target. While initial results are promising, to achieve good performance on larger examples, issues related to memory access patterns and array copying will have to be addressed. Emil Axelsson, Koen Claessen, Gergely Dévai, Zoltán Horváth, Karin Keijzer, Bo Lyckegård, Anders Persson, Mary Sheeran, Josef Svenningsson, András Vajda |
MEMOCODE | 2 |
| 2009 | The Twilight Zone: From Testing to Formal Specifications and Back Again
Koen Claessen |
APLAS | 1 |
| 2009 | Automated Inference of Finite Unsatisfiability
Koen Claessen, Ann Lillieström |
CADE | 1 |
| 2009 | Finding race conditions in Erlang with QuickCheck and PULSEabstractWe address the problem of testing and debugging concurrent, distributed Erlang applications. In concurrent programs, race conditions are a common class of bugs and are very hard to find in practice. Traditional unit testing is normally unable to help finding all race conditions, because their occurrence depends so much on timing. Therefore, race conditions are often found during system testing, where due to the vast amount of code under test, it is often hard to diagnose the error resulting from race conditions. We present three tools (QuickCheck, PULSE, and a visualizer) that in combination can be used to test and debug concurrent programs in unit testing with a much better possibility of detecting race conditions. We evaluate our method on an industrial concurrent case study and illustrate how we find and analyze the race conditions. Koen Claessen, Michal H. Palka, Nicholas Smallbone, John Hughes 0001, Hans Svensson, Thomas Arts, Ulf T. Wiger |
ICFP | 1 |
| 2009 | Static contract checking for HaskellabstractProgram errors are hard to detect and are costly both to programmers who spend significant efforts in debugging, and for systems that are guarded by runtime checks. Static verification techniques have been applied to imperative and object-oriented languages, like Java and C#, but few have been applied to a higher-order lazy functional language, like Haskell. In this paper, we describe a sound and automatic static verification framework for Haskell, that is based on contracts and symbolic execution. Our approach is modular and gives precise blame assignments at compile-time in the presence of higher-order functions and laziness. Dana N. Xu, Simon L. Peyton Jones, Koen Claessen |
POPL | 3 |
| 2008 | A library for light-weight information-flow security in haskellabstractProtecting confidentiality of data has become increasingly important for computing systems. Information-flow techniques have been developed over the years to achieve that purpose, leading to special-purpose languages that guarantee information-flow security in programs. However, rather than producing a new language from scratch, information-flow security can also be provided as a library. This has been done previously in Haskell using the arrow framework. In this paper, we show that arrows are not necessary to design such libraries and that a less general notion, namely monads, is sufficient to achieve the same goals. We present a monadic library to provide information-flow security for Haskell programs. The library introduces mechanisms to protect confidentiality of data for pure computations, that we then easily, and modularly, extend to include dealing with side-effects. We also present combinators to dynamically enforce different declassification policies when release of information is required in a controlled manner. It is possible to enforce policies related to what, by whom, and when information is released or a combination of them. The well-known concept of monads together with the light-weight characteristic of our approach makes the library suitable to build applications where confidentiality of data is an issue. Alejandro Russo, Koen Claessen, John Hughes 0001 |
Haskell | 2 |
| 2008 | Finding Counter Examples in Induction Proofs
Koen Claessen, Hans Svensson |
TAP | 1 |
| 2007 | A Coverage Analysis for Safety Property ListsabstractWe present a coverage analysis that can be used in property-based verification. The analysis helps identifying "forgotten cases"; scenarios where the property list under analysis does not constrain a certain output at a certain point in time. These scenarios can then be manually investigated, possibly leading to new, previously forgotten properties being added. As there often exist cases in which outputs are not supposed to be specified, we also provide means for the specificier to annotate properties in order to control what cases are supposed to be underconstrained. Two main differences with earlier proposed similar analyses exist: The presented analysis is design-independent, and it makes an explicit distinction between intentionally and unintentionally underspecified behavior. Koen Claessen |
FMCAD | 1 |
| 2006 | SAT-Based Assistance in Abstraction Refinement for Symbolic Trajectory Evaluation
Jan-Willem Roorda, Koen Claessen |
CAV | 2 |
| 2004 | An Operational Semantics for Weak PSL
Koen Claessen, Johan Mårtensson |
FMCAD | 1 |
| 2004 | Parallel Parsing ProcessesabstractWe derive a combinator library for non-deterministic parsers with a monadic interface, by means of successive refinements starting from a specification. The choice operator of the parser implements a breadth-first search rather than the more common depth-first search, and can be seen as a parallel composition between two parsing processes. The resulting library is simple and efficient for “almost deterministic” grammars, which are typical for programming languages and other computing science applications. Koen Claessen |
J. Funct. Program. | 1 |
| 2003 | Using Lava to design and verify recursive and periodic sorters
Koen Claessen, Mary Sheeran, Satnam Singh |
Int. J. Softw. Tools Technol. Transf. | 1 |
| 2002 | Testing monadic code with QuickCheckabstractQuickCheck is a previously published random testing tool for Haskell programs. In this paper we show how to use it for testing monadic code, and in particular imperative code written using the ST monad. QuickCheck tests a program against a specification: we show that QuickCheck's specification language is sufficiently powerful to represent common forms of specifications: algebraic, model-based (both functional and relational), and pre-/post-conditional. Moreover, all these forms of specification can be used directly for testing. We define a new language of monadic properties, and make a link between program testing and the notion of observational equivalence. Koen Claessen, John Hughes 0001 |
Haskell | 1 |
| 2000 | SAT-Based Verification without State Space Traversal
Per Bjesse, Koen Claessen |
FMCAD | 2 |
| 2000 | QuickCheck: a lightweight tool for random testing of Haskell programsabstractQuick Check is a tool which aids the Haskell programmer in formulating and testing properties of programs. Properties are described as Haskell functions, and can be automatically tested on random input, but it is also possible to define custom test data generators. We present a number of case studies, in which the tool was successfully used, and also point out some pitfalls to avoid. Random testing is especially suitable for functional programs because properties can be stated at a fine grain. When a function is built from separately tested components, then random testing suffices to obtain good coverage of the definition under test. Koen Claessen, John Hughes 0001 |
ICFP | 1 |
| 1999 | A Poor Man's Concurrency MonadabstractWithout adding any primitives to the language, we define a concurrency monad transformer in Haskell. This allows us to add a limited form of concurrency to any existing monad. The atomic actions of the new monad are lifted actions of the underlying monad. Some extra operations, such as fork, to initiate new processes, are provided. We discuss the implementation, and use some examples to illustrate the usefulness of this construction. Koen Claessen |
J. Funct. Program. | 1 |
| 1998 | Lava: Hardware Design in HaskellabstractLava is a tool to assist circuit designers in specifying, designing, verifying and implementing hardware. It is a collection of Haskell modules. The system design exploits functional programming language features, such as monads and type classes, to provide multiple interpretations of circuit descriptions. These interpretations implement standard circuit analyses such as simulation, formal verification and the generation of code for the production of real circuits.Lava also uses polymorphism and higher order functions to provide more abstract and general descriptions than are possible in traditional hardware description languages. Two Fast Fourier Transform circuit examples illustrate this. Per Bjesse, Koen Claessen, Mary Sheeran, Satnam Singh |
ICFP | 2 |
| 1997 | Graphs in Compilation
Koen Claessen |
ICFP | 1 |
| 1997 | Structuring Graphical Paradigms in TkGoferabstractIn this paper we describe the implementation of several graphical programming paradigms (Model View Controller, Fudgets, and Functional Animations) using the GUI library TkGofer. This library relies on a combination of monads and multiple-parameter type classes to provide an abstract, type safe interface to Tcl/Tk. We show how choosing the right abstractions makes the given implementations surprisingly concise and easy to understand. 1 Introduction In his article `Why Functional Programming Matters' [7], John Hughes explains that an important feature of a programming language is the way in which a language provides glue for combining building blocks to form larger structures. The better the glue, the more modular programs can be made. He argues that functional languages offer very powerful kinds of glue like higher order functions and lazy evaluation. Further research evolved a new kind of glue: type and constructor classes [9]. Unfortunately, there used to be a separation between th... Koen Claessen, Ton Vullinghs, Erik Meijer 0001 |
ICFP | 1 |