Hat jemand jemals ein System geschrieben (Software oder detaillierte Erklärung auf Papier mit einfachen Beispielen), das Computerprogramme generiert? Ich gebe und es wird ein Programm erstellt, das die Primzahlen kleiner als 10 auflistet. ist einfach definiert als Professoren sagen, dass sie es können, aber niemand gibt tatsächliche vollständige Beispiele.
17
Antworten:
Dies ist ein sehr aktives Forschungsthema, das vielversprechend ist, obwohl die vollständige Automatisierung der Programmerstellung wahrscheinlich intrinsische Einschränkungen aufweist (aber sind Menschen besser?). Die Idee ist jedoch nach wie vor sehr nützlich, um die Programmerstellung erheblich zu unterstützen, indem viele Schritte mechanisiert und die Richtigkeit der Programmerstellung automatisch überprüft werden.
Es hängt stark mit einem Ergebnis in der Logik zusammen, das als Curry-Howard-Korrespondenz (oder Isomorphismus) bezeichnet wird und zeigt, dass Computerprogramme und mathematische Beweise sehr ähnlich sind.
Die Idee ist also, dass das System Ihre Programmspezifikation als zu beweisenden Satz verwendet. Im Fall Ihres Beispiels wäre es ungefähr (informell): "Es gibt eine Menge aller Primzahlen, die kleiner als 10 sind".
Dann werden Sie versuchen, diesen Satz zu beweisen, und bestehende Systeme werden Sie dabei unterstützen, den Beweis zu führen, einige Teile, möglicherweise den gesamten Beweis, zu automatisieren und sicherzustellen, dass Sie niemals Fehler machen.
Aus diesem Beweis kann man dann ein Programm extrahieren, das tatsächlich die gewünschte Liste von Primzahlen berechnet, die ursprünglich spezifiziert worden waren.
In der Vergangenheit wurden mehrere Systeme entwickelt, um diese Ideen zu erläutern. Eines der bekannteren war LCF von Robin Milner , der die Sprache ML zu diesem Zweck kreierte . Eines der derzeit fortschrittlichsten Systeme ist Coq .
Es gibt Beispiele, die zum Teil recht komplex sind. Möglicherweise finden Sie einige in dem folgenden Artikel , obwohl dies in keiner Weise eine einfache Lektüre ist und fortgeschrittene Kenntnisse der Logik voraussetzt.
quelle
Die wag Antwort: Ja, aber zum Zeitpunkt des Schreibens scheinen die Spezifikationen für die meisten nicht-trivialen Programme genauso schwer zu schreiben und zu debuggen wie die Programme.
Im Ernst, Babous Antwort ist gut, aber ich werde auch vorschlagen, den Bereich der abhängigen Typen zu untersuchen. Es gibt ein ziemlich gutes Buch mit Coq (vollständiger Haftungsausschluss: von einem Freund von mir geschrieben), aber es gibt auch Epigram, Agda und Idris. Isabelle / HOL ist auch einen Besuch wert.
Diese basieren alle auf der Konstruktionsrechnung. Wenn Sie die theoretischen Grundlagen kennenlernen möchten, schlagen Sie die Martin-Löf-Typentheorie nach. Es gibt einige großartige Einführungen.
quelle
In dieser Hinsicht gibt es Programmgeneratoren (dh Systeme, die etwas auf hoher Ebene in einer bestimmten Sprache beschreiben) schon seit Ewigkeiten. Jeder Compiler ist einer davon, genau wie jeder der vielen Parser-Generatoren. Früher waren Systeme mit der Bezeichnung "Sprachen der dritten Generation" beliebt, die (den größten Teil) des Codes einer typischen Geschäftsanwendung mit einer allgemeinen Beschreibung und einem Katalog verfügbarer Daten generierten.
quelle
Bei der Logikprogrammierung und allgemein bei der deklarativen Programmierung wird genau das vorausgesetzt, was Sie vorschlagen: Geben Sie aus einer logischen Spezifikation ein Ergebnis zurück, das diese Spezifikation erfüllt.
Ein Bereich, der sich speziell mit dem von Ihnen angegebenen Beispiel "Primzahlen unter 10" zu befassen scheint, ist die Einschränkungsprogrammierung, die versucht, Lösungen für Probleme zu finden, die bestimmte Einschränkungen beinhalten, einschließlich ganzzahliger Einschränkungen, wie die, die Sie angegeben haben.
Möglicherweise möchten Sie ECLiPSe für eine bestimmte (Open Source-) Implementierung eines solchen Systems ausprobieren .
quelle