Detailseite
Projekt Druckansicht

Beobachtungskorrektheit von Programmiersprachenübersetzungen

Fachliche Zuordnung Theoretische Informatik
Softwaretechnik und Programmiersprachen
Förderung Förderung von 2015 bis 2024
Projektkennung Deutsche Forschungsgemeinschaft (DFG) - Projektnummer 289510568
 
Erstellungsjahr 2020

Zusammenfassung der Projektergebnisse

Das Projekt behandelte die Korrektheit von Übersetzungen und Transformationen von Programmiersprachen. Hierbei wurden syntaktisch umfangreiche Metasprachen zur Darstellung der Programmiersprachenmodelle entworfen und ein Werkzeug entwickelt, welches den Korrektheitsnachweis für Transformationen mithilfe syntaktischer Methoden (Unifikation, Matching und Rewriting) automatisiert nachweisen kann. Als wichtige Neuerung wurden hierbei sogenannte Non-Capture-Constraints als Repräsentationsmittel eingeführt. Diese bestehen aus Paaren von Metaausdrücken und Metakontexten. Sie können die Menge der repräsentierten Programme einschränken, da sie nur für jene Instanziierungen erfüllt sind, für die gilt: Der Kontext fängt keine Variablen des Ausdrucks ein, wenn der Ausdruck in den Kontext eingesetzt wird. Mit diesen Non-Capture-Constraints können viele gebräuchliche Nebenbedingungen für Transformationen und Übersetzungen leicht dargestellt werden. Die benötigten Unifikations- und Matchingverfahren wurden entwickelt, als korrekt und vollständig nachgewiesen und bezüglich ihrer Komplexität analysiert. Die zugehörigen Entscheidungsprobleme wurden als Letrec-Unifikationsproblem und -Matchingproblem formuliert und deren NP-vollständig konnte jeweils nachgewiesen werden. Da die konsistente Umbenennung von gebundenen Variablen mit frischen Variablen dabei benötigt wurde, wurden auch hierzu Methoden entwickelt, um diese auf der Metasprache symbolisch zu repräsentieren und durchzuführen. Damit war es u.a. möglich für eine Kernsprache von Haskell einer größere Menge von Programmtransformationen automatisch als korrekt nachweisen zu lassen. Mit dem Ziel der Automatisierung weiterer solcher Beweise wurde auch der Stand der Technik zur sogenannten nominalen Unifikation erweitert, so dass diese Terme mit Atomvariablen und mit Metasymbolen für Kontexte (mit linearem Vorkommen) behandeln kann. Dabei wurden sogenannte Distinct-Variable-Constraints in die Inferenzprozedur aufgenommen, welche die Menge von erlaubten Ausdrücken auf solche einschränken, deren Variablennamen einer gewissen Variablenkonvention unterliegen: Gebundene und freie Variablen sind verschieden und gebundene Variablen sind untereinander ebenfalls verschieden. Für das Unifikationsproblem mit nominalen Termen und Atomvariablen konnte dessen NP-Vollständigkeit nachgewiesen werden. Für das um Kontextvariablen erweiterte Problem könnte ein Algorithmus angegeben werden, der ohne Erfüllbarkeitsprüfung der Distinct-Variable-Constraints nichtdeterministische Polynomialzeit benötigt. Für die Erfüllbarkeitsprüfung wurde ein in nichtdeterministischer Exponentialzeit arbeitender Algorithmus angegeben. Neben der automatischen Widerlegung von Übersetzungen und einem entsprechenden Werkzeug dazu, wurden im Projekt mehrere korrekte Übersetzungen zur Einbettung des π-Kalküls in die Programmiersprache Concurrent Haskell entworfen und als korrekt nachgewiesen. Schließlich trug das Projekt (auch mithilfe korrekter Übersetzungen) dazu bei, Verbesserungseigenschaften von Programmtransformationen für funktionale Programmiersprachen nachzuweisen und neue korrekte und vollständige Verfahren zum Terminierungsnachweis sogenannter Kreisersetzungssysteme zu entwerfen.

Projektbezogene Publikationen (Auswahl)

 
 

Zusatzinformationen

Textvergrößerung und Kontrastanpassung