EDBT 2026 Demo / reviewers in the wild / expert
Jan Midtgaard
dblp:03/5231
· DBLP profile ↗
21ranked-venue papers
13as first author
1since 2021 · last 2025
0000-0002-6506-5468ORCID · verified
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 17 · 12 first-author · 1 since 2021Theory of computation · 7 · 3 first-authorDatabases, data management, data science and information retrieval · 1
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.
| Software engineering, system software, and programming languages
3 papers |
Program analysis · 69% Programming languages and type systems · 24% Compilers and program optimization · 4% |
Topics — the 7 heaviest of 9, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Program analysis › static analysis
abstract interpretation |
0.3 | 2 | 2013 | Monadic abstract interpreters · PLDI 2013 Control-flow analysis of function calls and returns by abstract interpretation · Inf. Comput. 2012 |
Program analysis
control flow analysis |
0.3 | 2 | 2012 | Control-flow analysis of function calls and returns by abstract interpretation · Inf. Comput. 2012 Flow-sensitive type recovery in linear-log time · OOPSLA 2011 |
Programming languages and type systems › computational effects
monads |
0.2 | 1 | 2013 | Monadic abstract interpreters · PLDI 2013 |
Program analysis
static analysis |
0.2 | 1 | 2013 | Monadic abstract interpreters · PLDI 2013 |
Programming languages and type systems
type inference |
0.1 | 1 | 2011 | Flow-sensitive type recovery in linear-log time · OOPSLA 2011 |
Program analysis › static analysis › pointer analysis
context-sensitive pointer analysis |
0.0 | 1 | 2013 | Monadic abstract interpreters · PLDI 2013 |
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation |
0.0 | 1 | 2011 | Flow-sensitive type recovery in linear-log time · OOPSLA 2011 |
Methods — techniques the papers use, named apart from their topics
monadic semantics · 0.2sub-0CFA · 0.1linear-log-time algorithm · 0.1
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2025 | Dynamic Verification of OCaml Software with Gospel and Ortac/QCheck-STMabstractAbstract This paper introduces the QCheck-STM plugin for Ortac, a framework for dynamic verification of OCaml code. Ortac/QCheck-STM consumes OCaml module signatures annotated with behavioural specification contracts expressed in the Gospel language, extracts a functional model of a mutable data structure from it, and generates code for automated runtime assertion checking. We report on the implementation of the tool, the structure of the generated code, and on errors found in established OCaml libraries. Nikolaus Huber, Naomi Spargo, Nicolas Osborne, Samuel Hym, Jan Midtgaard |
TACAS (3) | 5 |
| 2020 | Stack-Driven Program Generation of WebAssembly
Árpád Perényi, Jan Midtgaard |
APLAS | 2 |
| 2018 | Developments in property-based testing (invited talk)abstractProperty-based testing (aka. QuickCheck) is a successful au- tomated testing approach originating in the programming language community (Claessen-Hughes:ICFP00). It unites the well-known idea of randomized testing with that of en- suring program-specific properties akin to those encoun- tered within verification and theorem proving. Starting as a Haskell library the approach has grown to become language independent with ports to over 30 different programming languages. Over the years property-based testing has been used to pinpoint an impressive amount of software errors in a multitude of settings, initially within academia but more and more so also in the software industry. In this talk I will first recall the basic concepts of property- based testing and then cover a couple of recent applications, while sharing some of the folklore and community know- how. This includes quite a bit of symbolic program manipu- lation at the heart of the PEPM community. I will then offer a personal perspective on the approach, both in terms of programming language theory and software engineering. Jan Midtgaard |
PEPM | 1 |
| 2018 | Process-Local Static Analysis of Synchronous Processes
Jan Midtgaard, Flemming Nielson, Hanne Riis Nielson |
SAS | 1 |
| 2017 | Effect-driven QuickChecking of compilersabstractHow does one test a language implementation with QuickCheck (aka. property-based testing)? One approach is to generate programs following the grammar of the language. But in a statically-typed language such as OCaml too many of these candidate programs will be rejected as ill-typed by the type checker. As a refinement Pałka et al. propose to generate programs in a goal-directed, bottom-up reading up of the typing relation. We have written such a generator. However many of the generated programs has output that depend on the evaluation order, which is commonly under-specified in languages such as OCaml, Scheme, C, C++, etc. In this paper we develop a type and effect system for conservatively detecting evaluation-order dependence and propose its goal-directed reading as a generator of programs that are independent of evaluation order. We illustrate the approach by generating programs to test OCaml's two compiler backends against each other and report on a number of bugs we have found doing so. Jan Midtgaard, Mathias Nygaard Justesen, Patrick Kasting, Flemming Nielson, Hanne Riis Nielson |
Proc. ACM Program. Lang. | 1 |
| 2017 | QuickChecking static analysis propertiesabstractSummary A static analysis can check programs for potential errors. A natural question that arises is therefore: who checks the checker? Researchers have given this question varying attention, ranging from basic testing techniques, informal monotonicity arguments, thorough pen‐and‐paper soundness proofs, to verified fixed point checking. In this paper, we demonstrate how quickchecking can be useful to test a range of static analysis properties with limited effort. We show how to check a range of algebraic lattice properties, to help ensure that an implementation follows the formal specification of a lattice. Moreover, we offer a number of generic, type‐safe combinators to check transfer functions and operators on lattices, to help ensure that these are, eg, monotone, strict, or invariant. We substantiate our claims by quickchecking a type analysis for the Lua programming language. Jan Midtgaard, Anders Møller |
Softw. Test. Verification Reliab. | 1 |
| 2016 | Iterated process analysis over lattice-valued regular expressionsabstractWe present an iterated approach to statically analyze programs of two processes communicating by message passing. Our analysis operates over a domain of lattice-valued regular expressions, and computes increasingly better approximations of each process's communication behavior. Overall the work extends traditional semantics-based program analysis techniques to automatically reason about message passing in a manner that can simultaneously analyze both values of variables as well as message order, message content, and their interdependencies. Jan Midtgaard, Flemming Nielson, Hanne Riis Nielson |
PPDP | 1 |
| 2016 | A Parametric Abstract Domain for Lattice-Valued Regular Expressions
Jan Midtgaard, Flemming Nielson, Hanne Riis Nielson |
SAS | 1 |
| 2015 | QuickChecking Static Analysis PropertiesabstractA static analysis can check programs for potential errors. A natural question that arises is therefore: who checks the checker? Researchers have given this question varying attention, ranging from basic testing techniques, informal monotonicity arguments, thorough pen-and-paper soundness proofs, to verified fixed point checking. In this paper we demonstrate how quickchecking can be useful for testing a range of static analysis properties with limited effort. We show how to check a range of algebraic lattice properties, to help ensure that an implementation follows the formal specification of a lattice. Moreover, we offer a number of generic, type-safe combinators to check transfer functions and operators on lattices, to help ensure that these are, e.g., monotone, strict, or invariant. We substantiate our claims by quickchecking a type analysis for the Lua programming language. Jan Midtgaard, Anders Møller |
ICST | 1 |
| 2015 | Systematic derivation of correct variability-aware program analyses
Jan Midtgaard, Aleksandar S. Dimovski, Claus Brabrand, Andrzej Wasowski |
Sci. Comput. Program. | 1 |
| 2013 | Monadic abstract interpretersabstractRecent developments in the systematic construction of abstract interpreters hinted at the possibility of a broad unification of concepts in static analysis. We deliver that unification by showing context-sensitivity, polyvariance, flow-sensitivity, reachability-pruning, heap-cloning and cardinality-bounding to be independent of any particular semantics. Monads become the unifying agent between these concepts and between semantics. For instance, by plugging the same "context-insensitivity monad" into a monadically-parameterized semantics for Java or for the lambda calculus, it yields the expected context-insensitive analysis. Ilya Sergey, Dominique Devriese, Matthew Might, Jan Midtgaard, David Darais, Dave Clarke 0001, Frank Piessens |
PLDI | 4 |
| 2013 | Engineering definitional interpretersabstractA definitional interpreter should be clear and easy to write, but it may run 4--10 times slower than a well-crafted bytecode interpreter. In a case study focused on implementation choices, we explore ways of making definitional interpreters faster without expending much programming effort. We implement, in OCaml, interpreters based on three semantics for a simple subset of Lua. We compile the OCaml to x86 native code, and we systematically investigate hundreds of combinations of algorithms and data structures. In this experimental context, our fastest interpreters are based on natural semantics; good algorithms and data structures make them 2--3 times faster than naïve interpreters. Our best interpreter, created using only modest effort, runs only 1.5 times slower than a mature bytecode interpreter implemented in C. Jan Midtgaard, Norman Ramsey, Bradford Larsen |
PPDP | 1 |
| 2012 | Calculating Graph Algorithms for Dominance and Shortest Path
Ilya Sergey, Jan Midtgaard, Dave Clarke 0001 |
MPC | 2 |
| 2012 | A Structural Soundness Proof for Shivers's Escape Technique - A Case for Galois Connections
Jan Midtgaard, Michael D. Adams 0001, Matthew Might |
SAS | 1 |
| 2012 | Control-flow analysis of function calls and returns by abstract interpretation
Jan Midtgaard, Thomas P. Jensen |
Inf. Comput. | 1 |
| 2011 | Flow-sensitive type recovery in linear-log timeabstractThe flexibility of dynamically typed languages such as JavaScript, Python, Ruby, and Scheme comes at the cost of run-time type checks. Some of these checks can be eliminated via control-flow analysis. However, traditional control-flow analysis (CFA) is not ideal for this task as it ignores flow-sensitive information that can be gained from dynamic type predicates, such as JavaScript's 'instanceof' and Scheme's 'pair?', and from type-restricted operators, such as Scheme's 'car'. Yet, adding flow-sensitivity to a traditional CFA worsens the already significant compile-time cost of traditional CFA. This makes it unsuitable for use in just-in-time compilers. In response, we have developed a fast, flow-sensitive type-recovery algorithm based on the linear-time, flow-insensitive sub-0CFA. The algorithm has been implemented as an experimental optimization for the commercial Chez Scheme compiler, where it has proven to be effective, justifying the elimination of about 60% of run-time type checks in a large set of benchmarks. The algorithm processes on average over 100,000 lines of code per second and scales well asymptotically, running in only O(n log n) time. We achieve this compile-time performance and scalability through a novel combination of data structures and algorithms. Michael D. Adams 0001, Andrew W. Keep, Jan Midtgaard, Matthew Might, Arun Chauhan 0001, R. Kent Dybvig |
OOPSLA | 3 |
| 2009 | Control-flow analysis of function calls and returns by abstract interpretationabstractWe derive a control-flow analysis that approximates the interprocedural control-flow of both function calls and returns in the presence of first-class functions and tail-call optimization. In addition to an abstract environment, our analysis computes for each expression an abstract control stack, effectively approximating where function calls return across optimized tail calls. The analysis is systematically calculated by abstract interpretation of the stack-based CaEK abstract machine of Flanagan et al. using a series of Galois connections. Abstract interpretation provides a unifying setting in which we 1) prove the analysis equivalent to the composition of a continuation-passing style (CPS) transformation followed by an abstract interpretation of a stack-less CPS machine, and 2) extract an equivalent constraint-based formulation, thereby providing a rational reconstruction of a constraint-based control-flow analysis from abstract interpretation principles. Jan Midtgaard, Thomas P. Jensen |
ICFP | 1 |
| 2008 | A Calculational Approach to Control-Flow Analysis by Abstract Interpretation
Jan Midtgaard, Thomas P. Jensen |
SAS | 1 |
| 2005 | A functional correspondence between monadic evaluators and abstract machines for languages with computational effects
Mads Sig Ager, Olivier Danvy, Jan Midtgaard |
Theor. Comput. Sci. | 3 |
| 2004 | A functional correspondence between call-by-need evaluators and lazy abstract machines
Mads Sig Ager, Olivier Danvy, Jan Midtgaard |
Inf. Process. Lett. | 3 |
| 2003 | A functional correspondence between evaluators and abstract machinesabstractWe bridge the gap between functional evaluators and abstract machines for the λ-calculus, using closure conversion, transformation into continuation-passing style, and defunctionalization.We illustrate this approach by deriving Krivine's abstract machine from an ordinary call-by-name evaluator and by deriving an ordinary call-by-value evaluator from Felleisen et al.'s CEK machine. The first derivation is strikingly simpler than what can be found in the literature. The second one is new. Together, they show that Krivine's abstract machine and the CEK machine correspond to the call-by-name and call-by-value facets of an ordinary evaluator for the λ-calculus.We then reveal the denotational content of Hannan and Miller's CLS machine and of Landin's SECD machine. We formally compare the corresponding evaluators and we illustrate some degrees of freedom in the design spaces of evaluators and of abstract machines for the λ-calculus with computational effects.Finally, we consider the Categorical Abstract Machine and the extent to which it is more of a virtual machine than an abstract machine. Mads Sig Ager, Dariusz Biernacki, Olivier Danvy, Jan Midtgaard |
PPDP | 4 |