Network


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

Hotspot


Dive into the research topics where Thomas Ströder is active.

Publication


Featured researches published by Thomas Ströder.


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.


Theory and Practice of Logic Programming | 2010

Automated termination analysis for logic programs with cut

Peter Schneider-Kamp; Jürgen Giesl; Thomas Ströder; Alexander Serebrenik; René Thiemann

Termination is an important and well-studied property for logic programs. However, almost all approaches for automated termination analysis focus on definite logic programs, whereas real-world Prolog programs typically use the cut operator. We introduce a novel pre-processing method which automatically transforms Prolog programs into logic programs without cuts, where termination of the cut-free program implies termination of the original program. Hence after this pre-processing, any technique for proving termination of definite logic programs can be applied. We implemented this pre-processing in our termination prover AProVE and evaluated it successfully with extensive experiments.


principles and practice of declarative programming | 2012

Symbolic evaluation graphs and term rewriting: a general methodology for analyzing logic programs

Jürgen Giesl; Thomas Ströder; Peter Schneider-Kamp; Fabian Emmes; Carsten Fuhs

There exist many powerful techniques to analyze termination and complexity of term rewrite systems (TRSs). Our goal is to use these techniques for the analysis of other programming languages as well. For instance, approaches to prove termination of definite logic programs by a transformation to TRSs have been studied for decades. However, a challenge is to handle languages with more complex evaluation strategies (such as Prolog, where predicates like the cut influence the control flow). In this paper, we present a general methodology for the analysis of such programs. Here, the logic program is first transformed into a symbolic evaluation graph which represents all possible evaluations in a finite way. Afterwards, different analyses can be performed on these graphs. In particular, one can generate TRSs from such graphs and apply existing tools for termination or complexity analysis of TRSs to infer information on the termination or complexity of the original logic program.


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 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.


logic based program synthesis and transformation | 2010

Dependency triples for improving termination analysis of logic programs with cut

Thomas Ströder; Peter Schneider-Kamp; Jürgen Giesl

In very recent work, we introduced a non-termination preserving transformation from logic programs with cut to definite logic programs. While that approach allows us to prove termination of a large class of logic programs with cut automatically, in several cases the transformation results in a non-terminating definite logic program. In this paper we extend the transformation such that logic programs with cut are no longer transformed into definite logic programs, but into dependency triple problems. By the implementation of our new method and extensive experiments, we empirically evaluate the practical benefit of our contributions.


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.

Collaboration


Dive into the Thomas Ströder's collaboration.

Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Jera Hensel

RWTH Aachen University

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

Carsten Fuhs

University College London

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Researchain Logo
Decentralizing Knowledge