5 research outputs found

    Ein kombinierter analytischer und suchbasierter Ansatz zur induktiven Synthese funktionaler Programme

    Get PDF
    This thesis is concerned with the inductive synthesis of recursive declarative programs and in particular with the analytical inductive synthesis of functional programs. Program synthesis addresses the problem of (semi-)automatically generating computer programs from specifications. In inductive program synthesis, recursive programs are constructed by generalizing over incomplete specifications such as finite sets of input/output examples (I/O examples). Classical methods for induction of functional programs are analytical, that is, a recursive function definition is derived by detecting and generalizing recurrent patterns between the given I/O examples. Most recent methods, on the other side, are generate-and-test based, that is, they repeatedly generate programs independently from the provided I/O examples until a program is found that correctly computes the examples. Analytical methods are much faster than generate-and-test methods, because they do not rely on search in a program space. Therefore, however, the schemas that generatable programs conform to, must be much more restricted. This thesis at first provides a comprehensive overview of current approaches and methods to inductive program synthesis. Then we present a new algorithm to the inductive synthesis of functional programs that generalizes the analytical approach and combines it with search in a program space. Thereby, the strong restrictions of analytical methods can be resolved for the most part. At the same time, applying analytical techniques allows for pruning large parts of the problem space so that solutions can often be found faster than with generate-and-test methods. By means of several experiments with an implementation of the described algorithm, we demonstrate its capabilities.Diese Arbeit befasst sich mit der induktiven Synthese rekursiver deklarativer Programme und speziell mit der analytischen induktiven Synthese funktionaler Programme. Die Programmsynthese beschäftigt sich mit der (semi-)automatischen Konstruktion von Computer-Programmen aus Spezifikationen. In der induktiven Programmsynthese werden rekursive Programme durch das Generalisieren über unvollständige Spezifikationen, wie zum Beispiel endliche Mengen von Eingabe/Ausgabe Beispielen (E/A-Beispielen), generiert. Klassische Methoden der induktiven Synthese funktionaler Programme sind analytisch; eine rekursive Funktionsdefinition wird generiert, indem rekurrente Strukturen zwischen den einzelnen E/A-Beispielen gefunden und generalisiert werden. Die meisten aktuellen Ansätze basieren hingegen auf erzeugen und testen, das heißt, es werden unabhängig von den bereitgestellten E/A-Beispielen solange Programme einer Klasse generiert, bis schließlich ein Programm gefunden wurde das alle Beispiele korrekt berechnet. Analytische Methoden sind sehr viel schneller, weil sie nicht auf Suche in einem Programmraum beruhen. Allerdings müssen dafür auch die Schemata, denen die generierbaren Programme gehorchen, sehr viel beschränkter sein. Diese Arbeit bietet zunächst einen umfassenden Überblick über bestehende Ansätze und Methoden der induktiven Programmsynthese. Anschließend wird ein neuer Algorithmus zur induktiven Synthese funktionaler Programme beschrieben, der den analytischen Ansatz generalisiert und mit Suche in einem Programmraum kombiniert. Dadurch lassen sich die starken Restriktionen des analytischen Ansatzes zu großen Teilen überwinden. Gleichzeitig erlaubt der Einsatz analytischer Techniken das Beschneiden großer Teile des Problemraums, so dass Lösungsprogramme oft schneller gefunden werden können als mit Methoden, die auf erzeugen und testen beruhen. Mittels einer Reihe von Experimenten mit einer Implementation des beschriebenen Algorithmus' werden seine Möglichkeiten gezeigt

    Schemagesteuerte Induktive Funktionale Programmsynthese durch Automatische Erkennung von Typmorphismen

    Get PDF
    Inductive functional programming systems can be characterised by two diametric approaches: Either they apply exhaustive program enumeration which uses input/output examples (IO) as test cases, or they perform an analytical, data-driven structural generalisation of the IO examples. Enumerative approaches ignore the structural information provided with the IO examples, but use type information to guide and restrict the search. They use higher-order functions which capture recursion schemes during their enumeration, but apply them randomly in a uninformed manner. Analytical approaches on the other side heavily exploit this structural information, but have ignored the benefits of a strong type system so far and use only recursion schemes either fixed and built in, or selected by an expert user. In category theory universal constructs, such as natural transformations or type morphisms, describe recursion schemes which can be defined on any inductively defined data type. They can be characterised by specific universal properties. Those type morphisms and related concepts provide a categorical approach to functional programming, which is often called categorical programming. This work shows how categorical programming can be applied to Inductive Programming and how universal constructs, such as catamorphisms, paramorphisms, and type functors, can be used as recursive program schemes for inductive functional programming. The use of program schemes for Inductive Programming is not new. The special appeal and novelty of this work is that, contrary to previous approaches, the program schemes are neither fixed, nor selected by an expert user: The applicability of those recursion schemes can be automatically detected in the given IO examples of a target function by checking the universal properties of the corresponding type morphisms. Applying this to the analytical system Igor2, both the capabilities and the expressiveness can be extended without a decrease in efficiency. An extension of the analytical functional inductive programming system Igor2 is proposed and its algorithms described. An empirical evaluation demonstrates the improvements with respect to efficiency and effectiveness that can be achieved by the use of type morphisms for Igor2 due to a reduction in search space complexity.Systeme zur induktiven Programmsynthese können bezüglich zweier gegensätzlicher Ansätze beschrieben werden: Enumerative Systeme zählen Programme vollständig auf und verwenden Eingabe/Ausgabe Beispiele (E/A) lediglich zum Testen; analytische, datengetriebene Systeme hingegegen generieren ein Programm durch strukturelle Generalisierung der E/A Beispiele. Aufzählende Ansätze ignorieren die in den E/A Beispielen enthaltene strukturelle Information völlig, benutzen aber Typinformation, um den Suchraum zu beschränken und die Suche zu steuern. Sie verwenden Funktionen höherer Ordnung als rekursive Programmschemata während der Aufzählung, wenden diese aber beliebig und nicht zielgerichtet an. Analytische Ansätze hingegen nutzen extensiv die strukturelle Information der E/A Beispiele, vernachlässigen aber die Vorzüge eines starken Typsystems. Programmschemata verwenden sie lediglich starr und fest codiert oder durch Auswahl eines Experten. In der Kategorientheorie beschreiben universelle Konstrukte wie zum Beispiel natürliche Transformationen und Typmorphismen Rekursionsschemata auf beliebigen, induktiv definierten Datentypen. Diese Konstrukte zeichnen sich durch spezifische, universelle Eigenschaften aus. Derartige Typmorphismen bieten einen kategorientheoretischen Zugang zur funktionalen Programmierung. Diese Arbeit zeigt, wie Catamorphismen, Paramorphismen und Typfunktoren als universelle Konstrukte in der induktiven Programmsynthese als rekursive Programmschemata verwendet werden können. Die Verwendung von Schemata in der induktiven Programmierung ist an sich nichts Neues, die Innovation liegt jedoch in der Art und Weise der Einführung der Schemata. Im Gegensatz zu herkömmlichen Ansätzen wird weder ein festes Schema verwendet, noch wählt ein Experte ein Schema aus. Die vorliegende Arbeit zeigt, dass die Anwendbarkeit eines bestimmten Schemas sich aus den E/A Beispielen einer konkreten Zielfunktion ableiten lässt, wenn man die universellen Eigenschaften das dem Programmschema entsprechenden Typmorphismus in den Beispielen erfüllen kann. Im Folgenden wird eine Erweiterung des funktionalen, induktiven Programmsynthesesystems Igor2 vorgestellt und der neue Algorithmus beschrieben. Ein empirischer Vergleich untermauert die Vorzüge der Erweiterung und macht die Steigerung der Effizienz und der Effektivität, die durch die Verwendung von Typmorphismen durch Komplexitätsreduktion des Suchraums erzielt werden kann, deutlich

    Systematic Synthesis of Functions

    Get PDF
    Contains fulltext : 35333.pdf (author's version ) (Open Access

    Systematic Synthesis of Functions

    No full text
    corecore