Jan Midtgaard

ORCID: 0000-0002-6506-5468
Publications
Citations
Views
---
Saved
---
About
Contact & Profiles
Research Areas
  • Logic, programming, and type systems
  • Formal Methods in Verification
  • Software Testing and Debugging Techniques
  • Logic, Reasoning, and Knowledge
  • Software Engineering Research
  • Advanced Software Engineering Methodologies
  • Advanced Malware Detection Techniques
  • Parallel Computing and Optimization Techniques
  • Distributed systems and fault tolerance
  • Software Reliability and Analysis Research
  • Service-Oriented Architecture and Web Services
  • Security and Verification in Computing
  • Natural Language Processing Techniques
  • Computability, Logic, AI Algorithms
  • Fluid Dynamics and Turbulent Flows
  • Numerical Methods and Algorithms
  • semigroups and automata theory
  • Advanced Algebra and Logic
  • Model-Driven Software Engineering Techniques
  • Cellular Automata and Applications
  • Model Reduction and Neural Networks
  • Advanced Database Systems and Queries
  • Software Engineering Techniques and Practices
  • Auction Theory and Applications

University of Southern Denmark
2017-2020

Maersk (Denmark)
2018-2020

Technical University of Denmark
2015-2017

Compute Canada
2016

Aarhus University
2003-2015

Roskilde University
2009

Inria Rennes - Bretagne Atlantique Research Centre
2008

Institut national de recherche en informatique et en automatique
2007-2008

Institut de Recherche en Informatique et Systèmes Aléatoires
2007

Danish National Research Foundation
2003

We bridge the gap between functional evaluators and abstract machines for lambda-calculus, using closure conversion, transformation into continuation-passing style, defunctionalization of continuations.<br /> <br />We illustrate this by deriving Krivine's machine from an ordinary call-by-name evaluator call-by-value Felleisen et al.'s CEK machine. The first derivation is strikingly simpler than what can be found in literature. second one new. Together, they show that correspond...

10.7146/brics.v10i13.21783 article EN cc-by-nc-nd BRICS Report Series 2003-03-06

We bridge the gap between functional evaluators and abstract machines for λ-calculus, using closure conversion, transformation into continuation-passing style, defunctionalization.We illustrate this approach by deriving Krivine's machine from an ordinary call-by-name evaluator call-by-value Felleisen et al.'s CEK machine. The first derivation is strikingly simpler than what can be found in literature. second one new. Together, they show that correspond to facets of λ-calculus.We then reveal...

10.1145/888251.888254 article EN 2003-08-27

We show how to derive a compiler and virtual machine from compositional interpreter. first illustrate the derivation with two evaluation functions normalization functions. obtain Krivine's machine, Felleisen et al.'s CEK generalization of these machines performing strong normalization, which is new. observe that several existing compilers machines--e.g., Categorical Abstract Machine (CAM), Schmidt's VEC Leroy's Zinc abstract machine--are already in derived form we present corresponding...

10.7146/brics.v10i14.21784 article EN cc-by-nc-nd BRICS Report Series 2003-03-06

We derive a control-flow analysis that approximates the interprocedural of both function calls and returns in presence first-class functions tail-call optimization. In addition to an abstract environment, our computes for each expression control stack, effectively approximating where return across optimized tail calls. The is systematically calculated by interpretation stack-based CaEK machine Flanagan et al. using series Galois connections. Abstract provides unifying setting which we 1)...

10.1145/1596550.1596592 article EN 2009-08-31

Recent developments in the systematic construction of abstract interpreters hinted at possibility a broad unification concepts static analysis. We deliver that by showing context-sensitivity, polyvariance, flow-sensitivity, reachability-pruning, heap-cloning and cardinality-bounding to be independent any particular semantics. Monads become unifying agent between these For instance, plugging same "context-insensitivity monad" into monadically-parameterized semantics for Java or lambda...

10.1145/2491956.2491979 article EN 2013-06-11

How does one test a language implementation with QuickCheck (aka. property-based testing)? One approach is to generate programs following the grammar of language. But in statically-typed such as OCaml too many these candidate will be rejected ill-typed by type checker. As refinement Pałka et al. propose goal-directed, bottom-up reading up typing relation. We have written generator. However generated has output that depend on evaluation order, which commonly under-specified languages OCaml,...

10.1145/3110259 article EN Proceedings of the ACM on Programming Languages 2017-08-29

Summary A static analysis can check programs for potential errors. natural question that arises is therefore: who checks the checker? Researchers have given this varying attention, ranging from basic testing techniques, informal monotonicity arguments, thorough pen‐and‐paper soundness proofs, to verified fixed point checking. In paper, we demonstrate how quickchecking be useful test a range of properties with limited effort. We show algebraic lattice properties, help ensure an implementation...

10.1002/stvr.1640 article EN Software Testing Verification and Reliability 2017-08-30

A recent line of work lifts particular verification and analysis methods to Software Product Lines (SPL). In an effort generalize such case-by-case approaches, we develop a systematic methodology for lifting program analyses SPLs using abstract interpretation. Abstract interpretation is classical framework deriving static in compositional, step-by-step manner. We show how take expressed as lift each the steps family programs. This includes schemes domain types, combinators Galois...

10.1145/2577080.2577091 article EN 2014-04-22

We extend our correspondence between evaluators and abstract machines from the pure setting of lambda-calculus to impure computational lambda-calculus. show how derive new monadic for Starting (1) a generic evaluator parameterized by monad (2) specifying effect, we inline components in obtain an written style that is specific this effect. then corresponding machine closure-converting, CPS-transforming, defunctionalizing evaluator. illustrate construction first with identity monad, obtaining...

10.7146/brics.v11i28.21853 article EN cc-by-nc-nd BRICS Report Series 2004-12-11

A static analysis can check programs for potential errors. natural question that arises is therefore: who checks the checker? Researchers have given this varying attention, ranging from basic testing techniques, informal monotonicity arguments, thorough pen-and-paper soundness proofs, to verified fixed point checking. In paper we demonstrate how quickchecking be useful a range of properties with limited effort. We show algebraic lattice properties, help ensure an implementation follows...

10.1109/icst.2015.7102603 article EN 2015-04-01

We present a survey of control-flow analysis functional programs, which has been the subject extensive investigation throughout past 25 years. Analyses control flow programs have formulated in multiple settings and led to many different approximations, starting with seminal works Jones, Shivers, Sestoft. In this paper we by structuring multitude formulations approximations comparing them.

10.7146/brics.v14i18.21936 article EN cc-by-nc-nd BRICS Report Series 2007-12-12

The flexibility of dynamically typed languages such as JavaScript, Python, Ruby, and Scheme comes at the cost run-time type checks. Some these checks can be eliminated via control-flow analysis. However, traditional analysis (CFA) is not ideal for this task it ignores flow-sensitive information that gained from dynamic predicates, JavaScript's 'instanceof' Scheme's 'pair?', type-restricted operators, 'car'. Yet, adding flow-sensitivity to a CFA worsens already significant compile-time CFA....

10.1145/2048066.2048105 article EN 2011-10-22

We extend our correspondence between evaluators and abstract machines from the pure setting of lambda-calculus to impure computational lambda-calculus. Specifically, we show how derive new monadic for Starting a evaluator given monad, inline components monad in corresponding machine by closure-converting, CPS-transforming, defunctionalizing this inlined interpreter. illustrate construction first with identity obtaining yet again CEK machine, then state an exception combination both.<br...

10.7146/brics.v10i35.21803 article EN cc-by-nc-nd BRICS Report Series 2003-11-06

10.1016/j.ic.2011.11.005 article EN publisher-specific-oa Information and Computation 2011-12-24

No abstract available.

10.1145/1995376.1995399 article FR Communications of the ACM 2011-08-30
Coming Soon ...