Detailseite
Projekt Druckansicht

Automatische Terminierungs- und Komplexitätsanalyse imperativer Programme

Fachliche Zuordnung Theoretische Informatik
Förderung Förderung von 2013 bis 2025
Projektkennung Deutsche Forschungsgemeinschaft (DFG) - Projektnummer 235950644
 
Erstellungsjahr 2024

Zusammenfassung der Projektergebnisse

Die Terminierungs- und Komplexitätsanalyse imperativer Programme ist ein zentraler Punkt der Programmverifikation. Hierzu wurde folgender Ansatz verwendet: Das Front-End erzeugt aus dem Programm einen symbolischen Auswertungsgraph, der alle Programmläufe repräsentiert. Daraus wird ein Programm in einer einfachen Sprache generiert, z.B. ein Termersetzungssystem (TRS) oder ein Integer Transitionssystem (ITS), dessen Terminierung oder Komplexität (im Back-End) untersucht wird. Folgende Resultate wurden erzielt: (A) Terminierungsanalyse: Basierend auf unseren Vorarbeiten zur Terminierung von Java wurde ein Verfahren zur Terminierungsanalyse von C Programmen entwickelt, um sowohl maschinennahe Speicheroperationen als auch Konzepte wie Datenstrukturen, Rekursion und Bitvektor-Zahlen zu behandeln. Während Terminierung im Allgemeinen unentscheidbar ist, wurden Klassen von Programmen identifiziert, bei denen Fragen der Terminierung oder Komplexität entscheidbar sind und entsprechende vollständige Techniken vorgestellt. Zur Verbesserung des Back-Ends wurden mehrere Beiträge zur Terminierung von TRSen entwickelt. Dies betrifft neue Ansätze zur relativen Terminierung und zur “fast sicheren” Terminierung von probabilistischen TRSen sowie den Einsatz der Terminierungsanalyse von TRSen zur Minimierung von Beweisen in Beschreibungslogiken. (B) Komplexitätsanalyse (Obere Schranken): Terminierungs-Techniken lassen sich modifizieren, um damit obere Schranken für die Laufzeit von Programmen zu berechnen. Dies betrifft sowohl die Front-Ends für Java und C also auch die Back-Ends für TRSe und ITSe. Insbesondere wurde ein modulares Verfahren zur Komplexitätsanalyse von ITSen entwickelt, das Schranken für die Laufzeit und die Werte der Programmvariablen für einzelne Teilprogramme berechnet. Um seine Mächtigkeit zu erhöhen, wurden vollständige Verfahren für Teilprogramme mit berechenbaren Schranken (wie in (A)) integriert. Der Ansatz wurde auch auf die Berechnung erwarteter Laufzeitschranken für probabilistische ITSe erweitert. (C) Komplexitätsanalyse (Untere Schranken): Zur Fehlersuche wurden Techniken zur Berechnung unterer Laufzeitschranken für Back-End Programme entwickelt. Für ITSe beruhen diese auf einer Loop Acceleration, die Schleifen in nichtdeterministische Instruktionen übersetzt. Hierzu wurden neue Kalküle vorgestellt, die Loop Acceleration mit der Suche nach Gegenbeispielen verbinden. Diese lassen sich auch für NichtTerminierungsbeweise und zur Erfüllbarkeitsanalyse von Constraint Horn Clauses verwenden (um Sicherheitseigenschaften von Programmen zu untersuchen). Da Loop Acceleration oft exponentielle Ausdrücke erzeugt, wurde auch eine entsprechende Erweiterung von SMT Solvern entwickelt. (D) Implementierung: Alle Resultate wurden in unseren Tools AProVE (für den Gesamt-Ansatz), KoAT und LoAT (für obere und untere Schranken bei ITSen) und SwInE (für SMT modulo exponentieller Arithmetik) implementiert und in umfangreichen Experimenten und Wettbewerben evaluiert.

Link zum Abschlussbericht

https://doi.org/10.34657/17569

Projektbezogene Publikationen (Auswahl)

 
 

Zusatzinformationen

Textvergrößerung und Kontrastanpassung