Network


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

Hotspot


Dive into the research topics where Florian Frohn is active.

Publication


Featured researches published by Florian Frohn.


international joint conference on automated reasoning | 2014

Proving Termination of Programs Automatically with AProVE

Jürgen Giesl; Marc Brockschmidt; Fabian Emmes; Florian Frohn; Carsten Fuhs; Carsten Otto; Martin Plücker; Peter Schneider-Kamp; Thomas Ströder; Stephanie Swiderski; René Thiemann

AProVE is a system for automatic termination and complexity proofs of Java, C, Haskell, Prolog, and term rewrite systems (TRSs). To analyze programs in high-level languages, AProVE automatically converts them to TRSs. Then, a wide range of techniques is employed to prove termination and to infer complexity bounds for the resulting TRSs. The generated proofs can be exported to check their correctness using automatic certifiers. For use in software construction, we present an AProVE plug-in for the popular Eclipse software development environment.


Journal of Automated Reasoning | 2017

Analyzing Program Termination and Complexity Automatically with AProVE

Jürgen Giesl; Cornelius Aschermann; Marc Brockschmidt; Fabian Emmes; Florian Frohn; Carsten Fuhs; Jera Hensel; Carsten Otto; Martin Plücker; Peter Schneider-Kamp; Thomas Ströder; Stephanie Swiderski; René Thiemann

In this system description, we present the tool AProVE for automatic termination and complexity proofs of Java, C, Haskell, Prolog, and rewrite systems. In addition to classical term rewrite systems (TRSs), AProVE also supports rewrite systems containing built-in integers (int-TRSs). To analyze programs in high-level languages, AProVE automatically converts them to (int-)TRSs. Then, a wide range of techniques is employed to prove termination and to infer complexity bounds for the resulting rewrite systems. The generated proofs can be exported to check their correctness using automatic certifiers. To use AProVE in software construction, we present a corresponding plug-in for the popular Eclipse software development environment.


international joint conference on automated reasoning | 2014

Proving Termination and Memory Safety for Programs with Pointer Arithmetic

Thomas Ströder; Jürgen Giesl; Marc Brockschmidt; Florian Frohn; Carsten Fuhs; Jera Hensel; Peter Schneider-Kamp

Proving termination automatically for programs with explicit pointer arithmetic is still an open problem. To close this gap, we introduce a novel abstract domain that can track allocated memory in detail. We use it to automatically construct a symbolic execution graph that represents all possible runs of the program and that can be used to prove memory safety. This graph is then transformed into an integer transition system, whose termination can be proved by standard techniques. We implemented this approach in the automated termination prover AProVE and demonstrate its capability of analyzing C programs with pointer arithmetic that existing tools cannot handle.


tools and algorithms for construction and analysis of systems | 2015

AProVE: Termination and Memory Safety of C Programs

Thomas Ströder; Cornelius Aschermann; Florian Frohn; Jera Hensel; Jürgen Giesl

AProVE is a system for automatic termination and complexity proofs of C, Java, Haskell, Prolog, and term rewrite systems. The particular strength of AProVE when analyzing C is its capability to reason about pointer arithmetic combined with direct memory accesses as, e.g., in standard implementations of string algorithms. As a prerequisite for termination, AProVE also proves memory safety of C programs.


international joint conference on automated reasoning | 2016

Lower Runtime Bounds for Integer Programs

Florian Frohn; Matthias Naaf; Jera Hensel; Marc Brockschmidt; Juergen Giesl

We present a technique to infer lower bounds on the worst-case runtime complexity of integer programs. To this end, we construct symbolic representations of program executions using a framework for iterative, under-approximating program simplification. The core of this simplification is a method for under-approximating program acceleration based on recurrence solving and a variation of ranking functions. Afterwards, we deduce asymptotic lower bounds from the resulting simplified programs. We implemented our technique in our tool LoAT and show that it infers non-trivial lower bounds for a large number of examples.


international conference on software engineering | 2016

Proving Termination of Programs with Bitvector Arithmetic by Symbolic Execution

Jera Hensel; Jürgen Giesl; Florian Frohn; Thomas Ströder

In earlier work, we developed an approach for automated termination analysis of C programs with explicit pointer arithmetic, which is based on symbolic execution. However, similar to many other termination techniques, this approach assumed the program variables to range over mathematical integers instead of bitvectors. This eases mathematical reasoning but is unsound in general. In this paper, we extend our approach in order to handle fixed-width bitvector integers. Thus, we present the first technique for termination analysis of C programs that covers both byte-accurate pointer arithmetic and bit-precise modeling of integers. We implemented our approach in the automated termination prover AProVE and evaluate its power by extensive experiments.


rewriting techniques and applications | 2015

Inferring Lower Bounds for Runtime Complexity

Florian Frohn; Jürgen Giesl; Jera Hensel; Cornelius Aschermann; Thomas Ströder

We present the first approach to deduce lower bounds for innermost runtime complexity of term rewrite systems (TRSs) automatically. Inferring lower runtime bounds is useful to detect bugs and to complement existing techniques that compute upper complexity bounds. The key idea of our approach is to generate suitable families of rewrite sequences of a TRS and to find a relation between the length of such a rewrite sequence and the size of the first term in the sequence. We implemented our approach in the tool AProVE and evaluated it by extensive experiments.


Journal of Automated Reasoning | 2017

Lower Bounds for Runtime Complexity of Term Rewriting

Florian Frohn; Jürgen Giesl; Jera Hensel; Cornelius Aschermann; Thomas Ströder

We present the first approach to deduce lower bounds for (worst-case) runtime complexity of term rewrite systems (TRSs) automatically. Inferring lower runtime bounds is useful to detect bugs and to complement existing methods that compute upper complexity bounds. Our approach is based on two techniques: the induction technique generates suitable families of rewrite sequences and uses induction proofs to find a relation between the length of a rewrite sequence and the size of the first term in the sequence. The loop detection technique searches for “decreasing loops”. Decreasing loops generalize the notion of loops for TRSs, and allow us to detect families of rewrite sequences with linear, exponential, or infinite length. We implemented our approach in the tool AProVE and evaluated it by extensive experiments.


integrated formal methods | 2017

Complexity Analysis for Java with AProVE

Florian Frohn; Jürgen Giesl

While AProVE is one of the most powerful tools for termination analysis of Java since many years, we now extend our approach in order to analyze the complexity of Java programs as well. Based on a symbolic execution of the program, we develop a novel transformation of (possibly heap-manipulating) Java programs to integer transition systems (ITSs). This allows us to use existing complexity analyzers for ITSs to infer runtime bounds for Java programs. We demonstrate the power of our implementation on an established standard benchmark set.


tools and algorithms for construction and analysis of systems | 2017

AProVE: Proving and Disproving Termination of Memory-Manipulating C Programs

Jera Hensel; Frank Emrich; Florian Frohn; Thomas Ströder; Jürgen Giesl

AProVE is a system for automatic termination and complexity analysis of C, Java, Haskell, Prolog, and several forms of rewrite systems. The new contributions in this version of AProVE are its capabilities to prove non-termination of C programs and to handle recursive C programs, even if these programs use pointer arithmetic combined with direct memory accesses. Moreover, in addition to mathematical integers, AProVE can now also handle fixed-width bitvector integers.

Collaboration


Dive into the Florian Frohn's collaboration.

Top Co-Authors

Avatar
Top Co-Authors

Avatar

Jera Hensel

RWTH Aachen University

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Carsten Fuhs

University College London

View shared research outputs
Top Co-Authors

Avatar

Peter Schneider-Kamp

University of Southern Denmark

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Researchain Logo
Decentralizing Knowledge