h1

h2

h3

h4

h5
h6
http://join2-wiki.gsi.de/foswiki/pub/Main/Artwork/join2_logo100x88.png

Automated complexity analysis of rewrite systems = Automatische Komplexitätsanalyse von Reduktionssystemen



Verantwortlichkeitsangabevorgelegt von Florian Frohn, Master of Science

ImpressumAachen 2018

Umfang1 Online-Ressource (282 Seiten) : Illustrationen


Dissertation, RWTH Aachen University, 2018

Veröffentlicht auf dem Publikationsserver der RWTH Aachen University 2019


Genehmigende Fakultät
Fak01

Hauptberichter/Gutachter
;

Tag der mündlichen Prüfung/Habilitation
2018-12-11

Online
DOI: 10.18154/RWTH-2018-231555
URL: http://publications.rwth-aachen.de/record/751705/files/751705.pdf

Einrichtungen

  1. Lehr- und Forschungsgebiet Informatik 2 (Programmiersprachen und Verifikation) (121420)
  2. Fachgruppe Informatik (120000)

Inhaltliche Beschreibung (Schlagwörter)
Integer-Transitionssysteme (frei) ; Komplexitätsanalysse (frei) ; Termersetzung (frei) ; Verifikation (frei)

Thematische Einordnung (Klassifikation)
DDC: 004

Kurzfassung
Neben Korrektheit ist Effizienz eine der wichtigsten Voraussetzungen für den Erfolg von Software: Das gesuchte Ergebnis muss nicht nur korrekt, sondern auch rechtzeitig berechnet werden. Deshalb ist es in der Praxis unverzichtbar, die Laufzeitkomplexität von Software zu analysieren. Allerdings ist es unpraktikabel, die Komplexität von Programmen manuell zu analysieren. Folglich werden automatische Techniken benötigt. So können Performance-Probleme genauso automatisiert gefunden werden wie andere Fehler, die von Tools zur statischen Analyse erkannt werden. Jedoch bringt es etliche Probleme mit sich, die Komplexität realistischer Programme statisch zu analysieren. Zum Beispiel haben die meisten Programmiersprachen keine formale Semantik. Zudem unterscheiden sich verschiedene Sprachen mitunter stark, sodass statische Analysen für eine Sprache oft nicht auf andere übertragbar sind. Eine verbreitete Lösung ist, Programme in Reduktionssysteme, insbesondere Term- oder Integer-Ersetzungssysteme, zu übersetzen und deren Komplexität zu analysieren. Leider haben aktuelle Techniken zur Analyse von Reduktionssystemen zahlreiche Einschränkungen. Zunächst sind die meisten Techniken auf die Inferenz oberer Schranken für die Worst-Case-Komplexität beschränkt. Außerdem können aktuelle Tools ihre Stärken nur unter der Annahme einer strikten Auswertungsstrategie voll ausspielen. Schließlich unterstützenviele Techniken für Integer-Ersetzung ausschließlich Endrekursion. Diese Arbeit überwindet die genannten Limitierungen teilweise. Sie stellt unter anderem die ersten Techniken zur Inferenz unterer Schranken für die Worst-Case-Komplexität vor. Eine wichtige Anwendung für solche Schranken ist das Finden von Denial-of-Service-Angriffsmöglichkeiten, die entstehen, wenn die Laufzeit eines Programms größer ist als erwartet. Bezüglich oberer Schranken zeigt diese Arbeit, wie Techniken für Termersetzung, die eine strikte Auswertungsstrategie erfordern, genutzt werden können, ohne eine bestimmte Strategie vorauszusetzen. Ebenso zeigt sie, wie Techniken für Integer-Ersetzung, die auf Endrekursion eingeschränkt sind, auch für nicht endrekursive Systeme genutzt werden können. Somit können Übersetzungen in Reduktionssysteme nun für ausdrucksstärkere Klassen von Programmen und neue Anwendungsfälle eingesetzt werden, z.B. die Erkennung von Denial-of-Service-Angriffsmöglichkeiten. Dies gilt insbesondere für Programme, die auf Integern oder baumförmigen Datenstrukturen arbeiten, da sich diese auf natürliche Art und Weise in Integer- bzw. Termersetzung übersetzen lassen. Folglich deckt diese Arbeit große Teile der Features realistischer Programmiersprachen ab. Die präsentierten Techniken wurden in den Tools AProVE und LoAT implementiert, die die Komplexität von Reduktionssystemen vollautomatisch analysieren können. Ausführliche Experimente demonstrieren ihre praktische Anwendbarkeit.

Besides functional correctness, one of the most important prerequisites for the success of a piece of software is efficiency: The desired results need to be computed not only correctly, but also in time. Thus, analyzing the runtime complexity of software is indispensable in practice. On the other hand, analyzing the complexity of large programs manually is infeasible. Hence, automated complexity analysis techniques are needed. In this way, performance pitfalls can be highlighted automatically like other bugs which can nowadays be found by compilers or static analyzers. However, statically analyzing the complexity of real-world programs poses several problems. For example, most programming languages lack formal semantics. Moreover, different programming languages offer different features, so static analyses for one language do not necessarily apply to others. A common solution for these problems is to transform programs into low-level formalisms like term or integer rewrite systems that can be analyzed without worrying about language-specific peculiarities. Unfortunately, state-of-the-art complexity analysis techniques for rewrite systems have several limitations. Firstly, most of them are restricted to the inference of upper bounds on the worst-case complexity. Moreover, existing complexity analyzers only reach their full potential if an eager evaluation strategy is fixed, which is sometimes undesired in practice. Finally, many techniques for integer rewriting just support tail recursion. This thesis partially overcomes these limitations. To this end, the first techniques for the inference of lower bounds on the worst-case complexity are introduced. One important use case of such lower bounds is to witness denial-of-service vulnerabilities (whose absence can be proven via upper bounds), which arise if the runtime of a program exceeds expectations. Regarding upper bounds, this thesis shows how complexity analysis techniques for term rewriting which require an eager evaluation strategy can also be used without assuming eager evaluation. Similarly, it shows how complexity analysis techniques for integer rewriting which are restricted to tail recursion can also be used to analyze non-tail-recursive systems. Consequently, complexity-preserving transformations to rewrite systems can now be used for more applications - like the detection of denial-of-service vulnerabilities - and richer classes of programs. This is true for both programs operating on integers as well as programs operating on tree-shaped data, which can naturally be transformed to integer and term rewrite systems, respectively. Hence, this thesis covers a large subset of the features provided by real-world programming languages. The presented techniques were implemented in the tools AProVE and LoAT, which can analyze the complexity of rewrite systems fully automatically. Extensive experiments demonstrate the feasibility of the presented techniques in practice.

OpenAccess:
Download fulltext PDF
(additional files)

Dokumenttyp
Dissertation / PhD Thesis

Format
online

Sprache
English

Externe Identnummern
HBZ: HT019908837

Interne Identnummern
RWTH-2018-231555
Datensatz-ID: 751705

Beteiligte Länder
Germany

 GO


OpenAccess

QR Code for this record

The record appears in these collections:
Document types > Theses > Ph.D. Theses
Faculty of Mathematics, Computer Science and Natural Sciences (Fac.1) > Department of Computer Science
Publication server / Open Access
Public records
Publications database
120000
121420

 Record created 2018-12-13, last modified 2023-04-08


OpenAccess:
Download fulltext PDF
(additional files)
Rate this document:

Rate this document:
1
2
3
 
(Not yet reviewed)