I am a PhD student at MPI-SWS in the group for Automated Verification and Approximation lead by Eva Darulova. In general I have a strong interest in static analysis and compilers for finite-precision programs. For these tools my main focus is on establishing rigorous correctness proofs of their behaviours.
We are currently working on verified compilation of floating-point programs in the presence of optimizing compilers. So far we have designed a new semantics called Icing that is able to model floating-point optimizations in a verified compiler.
In a second project we worked on building a certification backend for my supervisors previous work in the Daisy framework. We have developed a checker for Daisy's results in both Coq and HOL4. The checker certifies correctness for a single run of the Daisy static analyzer.
Advised Nathaniel Bos during his DAAD-funded internship. The goal of the internship was to develop a natural language interface for proofs in the HOL4 interactive theorem prover.
Teaching assistant for blockseminar on "Advanced Program Analysis"
Co-advising Joachim Bard during his Masters at MPI-SWS.
Co-advised Nikita Zyuzin during his Masters at MPI-SWS. The goal of the master thesis was to extend FloVer with a formalization of affine arithmetic and implement new certificate checking functions that use affine arithmetic to compute tighter bounds.
Co-advised Raphael Monat during his internship at MPI-SWS. The goal of the internship was to extend FloVer with support for mixed-precision verification.
Teaching assistant for Static Program Analysis course
Student assistant for lecture Programmierung 2
Preparatory Phase of the Graduate School of Computer Science at Saarland University
Master studies at Saarland University
Bachelor studies, Bachelor thesis on Verified SMT-based Translation Validation. Supervised by Prof. Dr. Sebastian Hack and Sigurd Schneider
When compared to idealized, real-valued arithmetic, finite precision arithmetic introduces unavoidable errors, for which numerous tools compute sound upper bounds. To ensure soundness, providing formal guarantees on these complex tools is highly valuable. In this paper we extend one such formally verified tool, FloVer. First, we extend FloVer with an SMT-based domain using results from an external SMT solver as an oracle. Second, we implement interval subdivision on top of the existing analyses. Our evaluation shows that these extensions allow FloVer to efficiently certify more precise bounds for nonlinear expressions.
Verified compilers like CompCert and CakeML offer increasingly sophisticated optimizations. However, their deterministic source semantics and strict IEEE 754 compliance prevent the verification of "fast-math" style floating-point optimizations. Developers often selectively use these optimizations in mainstream compilers like GCC and LLVM to improve the performance of computations over noisy inputs or for heuristics by allowing the compiler to perform intuitive but IEEE 754-unsound rewrites. We designed, formalized, implemented, and verified a compiler for Icing, a new language which supports selectively applying fast-math style optimizations in a verified compiler. Icing's semantics provides the first formalization of fast-math in a verified compiler. We show how the Icing compiler can be connected to the existing verified CakeML compiler and verify the end-to-end translation by a sequence of refinement proofs from Icing to the translated CakeML. We evaluated Icing by incorporating several of GCC's fast-math rewrites. While Icing targets CakeML's source language, the techniques we developed are general and could also be incorporated in lower-level intermediate representations.
Being able to soundly estimate roundoff errors in finite-precision computations is important for many applications in embedded systems and scientific computing. Due to the unintuitive nature of finite-precision arithmetic, automated static analysis tools are highly valuable for this task. The results, however, are only as correct as the implementations of the static analysis tools. This paper presents a formally verified and modular tool which fully automatically checks the correctness of finite-precision roundoff error bounds encoded in a certificate. We present implementations of certificate generation and checking for both Coq and HOL4 and evaluate it on a number of examples from the literature. The experiments use both in-logic evaluation of Coq and HOL4, and execution of extracted code outside of the logics. We benchmark Coq extracted unverified OCaml code and a CakeML-generated verified binary.
Recent renewed interest in optimizing and analyzing floating-point programs has lead to a diverse array of new tools for numerical programs. These tools are often complementary, each focusing on a distinct aspect of numerical programming. Building reliable floating point applications typically requires addressing several of these aspects, which makes easy composition essential. This paper describes the composition of two recent floating-point tools; Herbie, which performs accuracy optimization, and Daisy, which performs accuracy verification. We find that the combination provides numerous benefits to users, such as being able to use Daisy to check whether Herbie's unsound optimizations improved the worst-case roundoff error, as well as benefits to tool authors, including uncovering a number of bugs in both tools. The combination also allowed us to compare the different program rewriting techniques implemented by these tools for the first time. The paper lays out a road map for combining other floating-point tools and for surmounting common challenges.