Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Koen Claessen is active.

Publication


Featured researches published by Koen Claessen.


international conference on functional programming | 2000

QuickCheck: a lightweight tool for random testing of Haskell programs

Koen Claessen; John Hughes

QuickCheck is a tool which aids the Haskell programmer in formulating and testing properties of programs. Properties are discribed 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 suffuces to obtain good coverage of the definition under test.


international conference on functional programming | 1998

Lava: hardware design in Haskell

Per Bjesse; Koen Claessen; Mary Sheeran; Satnam Singh

Lava 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.


formal methods in computer aided design | 2000

SAT-Based Verification without State Space Traversal

Per Bjesse; Koen Claessen

Binary Decision Diagrams (BDDs) have dominated the area of symbolic model checking for the past decade. Recently, the use of satisfiability (SAT) solvers has emerged as an interesting complement to BDDs. SAT-based methods are capable of coping with some of the systems that BDDs are unable to handle.The most challenging problem that has to be solved in order to adapt standard symbolic model checking to SAT-solvers is the boolean quanti fication necessary for traversing the state space. A possible approach to extending the applicability of SAT-based model checkers is therefore to reduce the amount of traversal.In this paper, we investigate a BDD-based verification algorithm due to van Eijk. Van Eijks algorithm tries to compute information that is sufficient to prove a given safety property directly. When this is not possible, the computed information can be used to reduce the amount of traversal needed by standard model checking algorithms. We convert van Eijks algorithm to use a SAT-solver instead of BDDs. We also make a number of improvements to the original algorithm, such as combining it with recently developed variants of induction. The result is a collection of substantially strengthened and complete verification methods that do not require state space traversal.


symposium on principles of programming languages | 2009

Static contract checking for Haskell

Dana N. Xu; Simon L. Peyton Jones; Koen Claessen

Program 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.


Lecture Notes in Computer Science | 1999

Observable Sharing for Functional Circuit Description

Koen Claessen; David Sands

Pure functional programming languages have been proposed as a vehicle to describe, simulate and manipulate circuit specifications. We propose an extension to Haskell to solve a standard problem when manipulating data types representing circuits in a lazy functional language. The problem is that circuits are finite graphs - but viewing them as an algebraic (lazy) datatype makes them indistinguishable from potentially infinite regular trees. However, implementations of Haskell do indeed represent cyclic structures by graphs. The problem is that the sharing of nodes that creates such cycles is not observable by any function which traverses such a structure. In this paper we propose an extension to call-by-need languages which makes graph sharing observable. The extension is based on non updatable reference cells and an equality test (sharing detection) on this type. We show that this simple and practical extension has well-behaved semantic properties, which means that many typical source-to-source program transformations, such as might be performed by a compiler, are still valid in the presence of this extension.


formal methods | 2010

Feldspar: A domain specific language for digital signal processing algorithms

Emil Axelsson; Koen Claessen; Gergely Dévai; Zoltán Horváth; Karin Keijzer; Bo Lyckegård; Anders Persson; Mary Sheeran; Josef Svenningsson; András Vajdax

A 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.


symposium/workshop on haskell | 2008

A library for light-weight information-flow security in haskell

Alejandro Russo; Koen Claessen; John Hughes

Protecting 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.


automation of software test | 2011

Testing an optimising compiler by generating random lambda terms

Michal Palka; Koen Claessen; Alejandro Russo; John Hughes

This paper considers random testing of a compiler, using randomly generated programs as inputs, and comparing their behaviour with and without optimisation. Since the generated programs must compile, then we need to take into account syntax, scope rules, and type checking during our random generation. Doing so, while attaining a good distribution of test data, proves surprisingly subtle; the main contribution of this paper is a workable solution to this problem. We used it to generate typed functions on lists, which we compiled using the Glasgow Haskell compiler, a mature production quality Haskell compiler. After around 20,000 tests we triggered an optimiser failure, and automatically simplified it to a program with just a few constructs.


international conference on functional programming | 2009

Finding race conditions in Erlang with QuickCheck and PULSE

Koen Claessen; Michal Palka; Nicholas Smallbone; John Hughes; Hans Svensson; Thomas Arts; Ulf T. Wiger

We 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.


Journal of Functional Programming | 1999

A poor man's concurrency monad

Koen Claessen

Without 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.

Collaboration


Dive into the Koen Claessen's collaboration.

Top Co-Authors

Avatar

Mary Sheeran

Chalmers University of Technology

View shared research outputs
Top Co-Authors

Avatar

Nicholas Smallbone

Chalmers University of Technology

View shared research outputs
Top Co-Authors

Avatar

John Hughes

Chalmers University of Technology

View shared research outputs
Top Co-Authors

Avatar

Dan Rosén

Chalmers University of Technology

View shared research outputs
Top Co-Authors

Avatar

Michal Palka

Chalmers University of Technology

View shared research outputs
Top Co-Authors

Avatar

Emil Axelsson

Chalmers University of Technology

View shared research outputs
Top Co-Authors

Avatar

Hans Svensson

Chalmers University of Technology

View shared research outputs
Top Co-Authors

Avatar

Moa Johansson

Chalmers University of Technology

View shared research outputs
Top Co-Authors

Avatar

Jan-willem Roorda

Chalmers University of Technology

View shared research outputs
Top Co-Authors

Avatar

Joel Bo Svensson

Chalmers University of Technology

View shared research outputs
Researchain Logo
Decentralizing Knowledge