Stefan Blom

dblp:44/699 · also Stefan C. C. Blom · DBLP profile ↗
← Back
27ranked-venue papers
19as first author
1since 2021 · last 2021
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 20 · 15 first-author · 1 since 2021Theory of computation · 10 · 9 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Theoretical computer science
4 papers
Automated reasoning and model checking · 53% Logic in computer science · 47%
Software engineering, system software, and programming languages
1 paper
Program verification · 87% Concurrent programming · 13%
Computer architecture, parallel and distributed computing, and storage systems
1 paper
Electronic design automation · 100%

Topics — the 12 heaviest of 12, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program verification
concurrent program verification
0.212014
The VerCors Tool for Verification of Concurrent Programs · FM 2014
Program verification
deductive verification
0.212014
The VerCors Tool for Verification of Concurrent Programs · FM 2014
Electronic design automation › model checking
distributed model checking
0.112010
LTSmin: Distributed and Symbolic Reachability · CAV 2010
Automated reasoning and model checking
model checking
0.112010
LTSmin: Distributed and Symbolic Reachability · CAV 2010
Automated reasoning and model checking
reachability
0.112010
LTSmin: Distributed and Symbolic Reachability · CAV 2010
Logic in computer science
process algebra
0.122003
On the Axiomatizability of Ready Traces, Ready Simulation, and Failure Traces · ICALP 2003
µCRL: A Toolset for Analysing Algebraic Specifications · CAV 2001
Concurrent programming
concurrency verification
0.112014
The VerCors Tool for Verification of Concurrent Programs · FM 2014
Logic in computer science › process algebra
behavioral equivalence
0.012003
On the Axiomatizability of Ready Traces, Ready Simulation, and Failure Traces · ICALP 2003
Logic in computer science › process algebra › behavioral equivalence
ready simulation
0.012003
On the Axiomatizability of Ready Traces, Ready Simulation, and Failure Traces · ICALP 2003
Logic in computer science › concurrency theory › trace monoids
trace languages
0.012003
On the Axiomatizability of Ready Traces, Ready Simulation, and Failure Traces · ICALP 2003
Automated reasoning and model checking › model checking
state space reduction
0.012002
State Space Reduction by Proving Confluence · CAV 2002
Logic in computer science
algebraic specification
0.012001
µCRL: A Toolset for Analysing Algebraic Specifications · CAV 2001

Methods — techniques the papers use, named apart from their topics

symbolic reachability · 0.2separation logic · 0.2permission-based verification · 0.2
YearPublicationVenuePosition
2021 Correct program parallelisations
abstract
Abstract A commonly used approach to develop deterministic parallel programs is to augment a sequential program with compiler directives that indicate which program blocks may potentially be executed in parallel. This paper develops a verification technique to reason about such compiler directives, in particular to show that they do not change the behaviour of the program. Moreover, the verification technique is tool-supported and can be combined with proving functional correctness of the program. To develop our verification technique, we propose a simple intermediate representation (syntax and semantics) that captures the main forms of deterministic parallel programs. This language distinguishes three kinds of basic blocks: parallel, vectorised and sequential blocks, which can be composed using three different composition operators: sequential, parallel and fusion composition. We show how a widely used subset of OpenMP can be encoded into this intermediate representation. Our verification technique builds on the notion of iteration contract to specify the behaviour of basic blocks; we show that if iteration contracts are manually specified for single blocks, then that is sufficient to automatically reason about data race freedom of the composed program. Moreover, we also show that it is sufficient to establish functional correctness on a linearised version of the original program to conclude functional correctness of the parallel program. Finally, we exemplify our approach on an example OpenMP program, and we discuss how tool support is provided.
Stefan Blom, Saeed Darabi, Marieke Huisman, Mohsen Safari
Int. J. Softw. Tools Technol. Transf.1
2018 Program Correctness by Transformation
Marieke Huisman, Stefan Blom, Saeed Darabi, Mohsen Safari
ISoLA (1)2
2017 The VerCors Tool Set: Verification of Parallel and Concurrent Software
Stefan Blom, Saeed Darabi, Marieke Huisman, Wytse Oortwijn
IFM1
2016 VerCors: A Layered Approach to Practical Verification of Concurrent Software
abstract
This paper discusses how several concurrent program verification techniques can be combined in a layered approach, where each layer is especially suited to verify one aspect of concurrent programs, thus making verification of concurrent programs practical. At the bottom layer, we use a combination of implicit dynamic frames and CSL-style resource invariants, to reason about data race freedom of programs. We illustrate this on the verification of a lock-free queue implementation. On top of this, layer 2 enables reasoning about resource invariants that express a relationship between thread-local and shared variables. This is illustrated by the verification of a reentrant lock implementation, where thread-locality is used to specify for a thread which locks it holds, while there is a global notion of ownership, expressing for a lock by which thread it is held. Finally, the top layer adds a notion of histories to reason about functional properties. We illustrate how this is used to prove that the lock-free queue preserves the order of elements, without having to reverify the aspects related to data race freedom.
Afshin Amighi, Stefan Blom, Marieke Huisman
PDP2
2015 Verification of Loop Parallelisations
Stefan Blom, Saeed Darabi, Marieke Huisman
FASE1
2015 Specification and Verification of Atomic Operations in GPGPU Programs
Afshin Amighi, Saeed Darabi, Stefan Blom, Marieke Huisman
SEFM3
2015 History-Based Verification of Functional Behaviour of Concurrent Programs
Stefan Blom, Marieke Huisman, Marina Zaharieva-Stojanovski
SEFM1
2015 LTSmin: High-Performance Language-Independent Model Checking
Gijs Kant, Alfons Laarman, Jeroen Meijer, Jaco van de Pol, Stefan Blom, Tom van Dijk
TACAS5
2015 Witnessing the elimination of magic wands
abstract
This paper discusses static verification of programs that have been specified using separation logic with magic wands. Magic wands are used to specify incomplete resources in separation logic, i.e., if missing resources are provided, a magic wand allows one to exchange these for the completed resources. One of the applications of the magic wand operator is to describe loop invariants for algorithms that traverse a data structure, such as the imperative version of the tree delete problem (Challenge 3 from the VerifyThis@FM2012 Program Verification Competition), which is the motivating example for our work. Most separation logic-based static verification tools do not provide support for magic wands, possibly because validity of formulas containing the magic wand is, by itself, undecidable. To avoid this problem, in our approach the program annotator has to provide a witness for the magic wand, thus circumventing undecidability due to the use of magic wands. A witness is an object that encodes both instructions for the permission exchange that is specified by the magic wand and the extra resources needed during that exchange. We show how this witness information is used to encode a specification with magic wands as a specification without magic wands. Concretely, this approach is used in the VerCors tool set: annotated Java programs are encoded as Chalice programs. Chalice then further translates the program to BoogiePL, where appropriate proof obligations are generated. Besides our encoding of magic wands, we also discuss the encoding of other aspects of annotated Java programs into Chalice, and in particular, the encoding of abstract predicates with permission parameters. We illustrate our approach on the tree delete algorithm, and on the verification of an iterator of a linked list.
Stefan Blom, Marieke Huisman
Int. J. Softw. Tools Technol. Transf.1
2014 Resource Protection Using Atomics - Patterns and Verification
Afshin Amighi, Stefan Blom, Marieke Huisman
APLAS2
2014 Verifying Functional Behaviour of Concurrent Programs
abstract
Specifying the functional behaviour of a concurrent program can often be quite troublesome: it is hard to provide a stable method contract that can not be invalidated by other threads. In this paper we propose a novel modular technique for specifying and verifying behavioural properties in concurrent programs. Our approach uses history-based specifications. A history is a process algebra term built of actions, where each action represents an update over a heap location. Instead of describing the object's precise state, a method contract may describe the method's behaviour in terms of actions recorded in the history. The client class can later use the history to reason about the concrete state of the object.
Marina Zaharieva-Stojanovski, Marieke Huisman, Stefan Blom
FTfJP@ECOOP3
2014 The VerCors Tool for Verification of Concurrent Programs
Stefan Blom, Marieke Huisman
FM1
2014 Formal Specifications for Java's Synchronisation Classes
abstract
This paper discusses formal specification and verification of the synchronisation classes of the Java API. In many verification systems for concurrent programs, synchronisation is treated as a primitive operation. As a result, verification rules for synchronisation are hard-coded in the logic, and not verified. These rules describe the concrete semantics of the given synchronisation primitive, and manage how resources are protected by synchronisation. In contrast, this paper describes several synchronisation primitives at the specification level, by specifying the behaviour of synchronisation routines from the Java API at method level using permission-based Separation Logic. This gives a generalised, high-level, and easily extendable approach to formalisation of arbitrary synchronisation mechanisms, which allows for modular treatment of synchronisation in verification. Notably, our approach does not only apply to locks, but also to other synchronisation mechanisms such as semaphores and latches that we also discuss. Finally, we used the verification tool that we are developing and successfully verified (so far simplified) implementations of all presented synchronisers, the paper discusses the verification of one of them.
Afshin Amighi, Stefan Blom, Marieke Huisman, Wojciech Mostowski, Marina Zaharieva-Stojanovski
PDP2
2014 Specification and verification of GPGPU programs
Stefan Blom, Marieke Huisman, Matej Mihelcic
Sci. Comput. Program.1
2013 How Do Developers Use APIs? A Case Study in Concurrency
abstract
With the omnipresent usage of APIs in software development, it has become important to analyse how the routines and functionalities of APIs are actually used. This information is in particular useful for API developers, to make decisions about future updates of the API. However, also for developers of static analysis and verification tools this information is highly important, because it indicates where and how to put the most efficient effort in annotating APIs, to make them usable for the static analysis and verification tools. This paper presents an analysis of the usage of the routines and functionalities of the Java concurrency library java. util. concurrent. It discusses the Histogram tool that we developed for this purpose, i.e., to efficiently analyse a large collection of bytecode classes. The Histogram tool is used on a representative benchmark set, the Qualitas Corpus. The paper discusses the results of the analysis of this benchmark set in detail. This covers both an analysis of the important classes and methods used by the current releases of the benchmark collection, as well as an analysis of the time it took for the Java concurrency library to start being used in released software.
Stefan Blom, Joseph Kiniry, Marieke Huisman
ICECCS1
2011 A Database Approach to Distributed State-Space Generation
abstract
We study distributed state-space generation on a cluster of workstations. It is explained why state-space partitioning by a global hash function is problematic when states contain variables from unbounded domains, such as lists or other recursive data types. Our solution is to introduce a database which maintains a global numbering of state values. We also describe tree compression, a technique of recursive state folding, and show that it is superior to manipulating plain state vectors. This solution is implemented and linked to the µCRL toolset, where state values are implemented as maximally shared terms (ATerms). However, it is applicable to other models as well, e.g. PROMELA or LOTOS models. Our experiments show the trade-offs between keeping the database global, replicated or local, depending on the available network bandwidth and latency.
Stefan Blom, Bert Lisser, Jaco van de Pol, Michael Weber 0002
J. Log. Comput.1
2010 LTSmin: Distributed and Symbolic Reachability
Stefan Blom, Jaco van de Pol, Michael Weber 0002
CAV1
2008 Symbolic Reachability for Process Algebras with Recursive Data Types
Stefan Blom, Jaco van de Pol
ICTAC1
2008 Simulated time for host-based testing with TTCN-3
abstract
Abstract Prior to testing embedded software in a target environment, it is usually tested in a host environment used for developing the software. When a system is tested in a host environment, its real‐time behaviour is affected by the use of simulators, emulation and monitoring. In this paper, the authors provide a semantics for host‐based testing with simulated time and propose a simulated‐time solution for distributed testing with TTCN‐3, which is a standardized language for specifying and executing test suites. The paper also presents the application of testing with simulated time to two real‐life systems. Copyright © 2007 John Wiley & Sons, Ltd.
Stefan Blom, Thomas Deiß, Natalia Ioustinova, Ari Kontio, Jaco van de Pol, Axel Rennoch, Natalia Sidorova
Softw. Test. Verification Reliab.1
2007 Distributed Analysis with mu CRL: A Compendium of Case Studies
Stefan Blom, Jens R. Calamé, Bert Lisser, Simona Orzan, Jun Pang 0001, Jaco van de Pol, Muhammad Torabi Dashti, Anton Wijs
TACAS1
2005 A distributed algorithm for strong bisimulation reduction of state spaces
Stefan Blom, Simona Orzan
Int. J. Softw. Tools Technol. Transf.1
2005 Distributed state space minimization
Stefan Blom, Simona Orzan
Int. J. Softw. Tools Technol. Transf.1
2004 An Approximation Based Approach to Infinitary Lambda Calculi
Stefan Blom
RTA1
2003 On the Axiomatizability of Ready Traces, Ready Simulation, and Failure Traces
Stefan Blom, Wan J. Fokkink, Sumit Nain
ICALP1
2002 State Space Reduction by Proving Confluence
Stefan Blom, Jaco van de Pol
CAV1
2002 Skew confluence and the lambda calculus with letrec
Zena M. Ariola, Stefan Blom
Ann. Pure Appl. Log.2
2001 µCRL: A Toolset for Analysing Algebraic Specifications
Stefan Blom, Wan J. Fokkink, Jan Friso Groote, Izak van Langevelde, Bert Lisser, Jaco van de Pol
CAV1