meta–synthese - Institut für Informatik

Werbung
META–SYNTHESE
Synthese von Programmen, die Programme generieren
Christoph Kreitz
Fachgebiet Intellektik, Fachbereich Informatik, TH Darmstadt
Alexanderstraße 10, 6100 Darmstadt
ÜBERSICHT
1. Rechnergestützte Software-Entwicklung
(a) Ziele und Realität
(b) Wozu Meta-Synthese?
2. Formalisierung von Software-Entwicklung
(a) Objektwissen
(b) Grundbegriffe der Programmierung
(c) Syntheseparadigmen
(d) Synthesestrategien
3. Ausblick
(a) Verwendbarkeit von Formalisierung
(b) Zukünftige Forschungsrichtungen
SOFTWARE-KRISE
Kommerzielle Software wird “von Hand” und direkt
in einer gegebenen Programmiersprache entwickelt.
• Schnelle Produktion von Software
• Hohe Kosten für Erstellung und Wartung
• Modifikationen und Erweiterungen schwierig
– keine Dokumentation des Programmierprozesses
• Mangelnde Zuverlässigkeit mit fatalen Folgen
– Tests sind nicht aussagekräftig
– Korrektheitsbeweise undurchführbar
SYSTEMATISCHE
SOFTWARE-ENTWICKLUNG
• Programmierung ist logisches Schließen
• Programmierung verarbeitet Wissen
über Programme, Anwendungsbereiche, Programmiermethoden
• Menschen machen Fehler im Detail
• Formalisierung und Automatisierung nötig
• CASE-tools sind nicht genug
Softwareproduktion braucht
Wissensbasiertes Software-Engineering
PROGRAMMSYNTHESE
Automatisierte Entwicklung validierter Software
• Algorithmen-Synthese aus formalen Spezifikationen
• Hilfe beim Entwurf formaler Spezifikationen
• Hilfsmittel zur
– algorithmischen Optimierung,
– Implementierung abstrakter Datentypen
– sprachabhängigen Compilierung / Optimierung
...
• Dokumentation getroffener Entscheidungen
• Verfahren zum Erwerb von Synthesewissen
PROGRAMMSYNTHESE –
KALKÜLE
• Regeln für syntaktische Manipulation von Formeln
ersetzen semantisch-logisches Schließen
• Absolut formal, wohlbekannte Eigenschaften
• Ausdruckstark genug zur Formalisierung
der gesamten Mathematik und Programmierung
• Abstraktionsniveau gering: Einzelschritte zu atomar
• Wenige praktische Ergebnisse
• Forschung richtet sich auf theoretische Eigenschaften
PROGRAMMSYNTHESE –
SYSTEME
• “Halb-formale” Beschreibung auf dem Papier
• Implementierung erfolgreich an Beispielen getestet
• Bald verwendbar für Routineprogrammierung ?
• Einsatz in der Lehre möglich ?
• Implementierung “ad hoc”
• Gleiche Probleme wie konventionelle Software:
– tatsächliches Verhalten unklar
– Wartung und Modifikation schwierig
– Korrektheit nicht gesichert
META-SYNTHESE – ZIELE
Systeme für rechnergestützte Software-Entwicklung
müssen systematisch entwickelt werden.
• Formalisiere die Objekt- und Meta-Theorie
der Programmierung in einheitlichem Rahmen.
• Durch Abstraktion schließe Lücke zwischen formalen Kalkülen
und semi-formalen Syntheseverfahren.
• Beweise Eigenschaften von deduktiven Methoden
und erzeugten Programmen als formale Theoreme.
• Realisiere Formalisierung mit einem Beweiseditor
für den zugrundeliegenden logischen Kalkül.
• Leite Implementierungen deduktiver Methoden ab aus
Theoremen über Erfüllbarkeit von Spezifikationen.
VERWANDTE GEBIETE
• Formale Kalküle und ihre Implementierung
Intuitionistische Typentheorie (Martin-Löf),
Kalkül der Konstruktionen (Huet/Coquand),
System F, Fω , Lineare Logik (Girard), . . .
• Strategien für automatische Programmsynthese
KIDS (Kestrel Institute), PRECOMAS (Franova),
LOPS (Bibel), OYSTER-CLAM (Bundy), . . .
+ Formale Methoden des Software-Engineering (VDM)
• Meta-programmierung (“taktisches Beweisen”)
LCF (Edinburgh / Cambridge), NuPRL (Cornell),
KIV (Heisel/Reif/Stephan), DEVA (GMD Karlsruhe)
OYSTER-CLAM, . . .
• Meta-Reasoning und Logical Frameworks
Isabelle (Paulson, Cambridge), λ-Prolog (Felty/Miller)
LF (Edinburgh), Elf (Pfenning), FOL (Weyrauch)
INTUITIONISTISCHE
TYPEN-THEORIE
Basiskalkül für Logik, Datentypen und Berechnung
• Sortierte Logik höherer Stufe
• Gleichheitsbegriff abhängig vom Datentyp
• Funktionale Programmiersprache
• Viele Datentyp-Konstrukte vordefiniert:
– Zahlen, Strings, Funktionenräume, Produkträume,
– disjunkte Vereinigung, Listen, Sub-Typen, Faktorisierung,
– Rekursive Datentypen, Partiell-rekursive Funktionen.
• Top-Down Sequenzenkalkül (ca. 150 Regeln)
• NuPRL: Interaktives Theorie-Entwicklungs-System
– Beweiseditor
– Programmextraktion aus Beweisen
– Definitionsmechanismus (Textmacros mit Parametern)
– Meta-level Programmierung von Beweisstrategien
– Bibliothek
DARSTELLUNG VON
OBJEKTWISSEN
Begriffe prägen – Eigenschaften als Lemmata beweisen
• Explizit definierte Operationen und Konzepte
– Implementiert durch direkte Definition
– Zugriff durch Instantiierung der Definition
• Formal verifizierte Lemmata
(elementare Eigenschaften der Kombination von Operationen)
• Definition abstrakter Datentypen
(endliche Sequenzen, Mengen, Abbildungen, Arrays, . . . )
– Definition von Signaturen und Axiomen
– Implementiert durch Theorem über Erfüllbarkeit
– Zugriff nur auf Axiome
Zur Zeit ca. 150 Definitionen, 650 Lemmata
ABSTRAKTER DATENTYP: Menge
Abstrakte Definition:
FINITE SETS(α)
≡
TYPES
Set(α)
OPERATIONS
∅: Set(α)
+: Set(α)×
×α → Set(α)
∈:
AXIOMS
α×
×Set(α) → Bool
∀S:Set(α).∀x,a:α.
a 6∈ ∅
∧
x ∈ (S+a) ⇔ (x=a
∧
(S+a)+x = (S+x)+a
∧
(S+a)+a = S+a
∧
∀P:PROP(Set(α)).
P(∅)
⇒
∧
∨
x ∈ S)
∀S:Set(α).∀a:α. P(S) ⇒ P(S+a)
∀S:Set(α).P(S)
Implementierungstheorem:
∀α:TYPES. FINITE SETS(α) has a model
PROGRAMMIERUNG: Grundbegriffe
Eine Spezifikation besteht aus Ein- und Ausgabetypen D und R, einer
Eingabebedingung I und einer Ausgabebedingung O.
Ein Programm besteht aus einer Spezifikation (DD,RR,I,O) und einer
(berechenbaren, partiellen) Funktion body:DD6→R.
Formale Definitionen:
SPECIFICATIONS
≡ D:TYPES × R:TYPES × PROP(DD) × PROP(DD× R)
DOM(spec)
≡ let spec=(DD,RR,I,O) in {x:DD | I(x)}
PROGRAMS
≡ spec:SPECIFICATIONS × DOM(spec)→RR(spec)
consistent(p)≡ let p=( (DD,RR,I,O), body) in
∀x:DD. I(x) ⇒ O(x,body(x))
spec is satisfiable ≡ ∃body:DOM(spec)→RR(spec).
consistent(spec,body)
Programmsynthese = Beweis von spec is satisfiable
Notation mit Schlüsselwörtern:
FUNCTION f (x:DD):RR
RETURNS y
= body(x)
WHERE I(x)
SUCH THAT O(x,y)
METHODEN als METATHEOREME
“Erzeuge korrektes Programm für Spezifikation spec
durch den Nachweis bestimmter Bedingungen”
• Formalisierung: Formulierung eines Metatheorems
‘‘spec is satisfiable
⇐
Bedingungen’’
• Validierung: Beweis des Metatheorems
• Implementierung des Ableitungsschrittes:
Anwendung des computerisierten Metatheorems
• Implementierung der Algorithmenkonstruktion:
Enthalten im computerisierten konstruktiven Beweis
SYNTHESEPARADIGMEN
•
Beweise als Programme
– Extraktion aus konstruktivem Beweis eines Theorems
•
Synthese durch Transformationen
– Äquivalenzumformung in ausführbare Form
•
Algorithmenschemata
– Wissensbasierte Verfeinerung von Standardlösungen
für algorithmische Grundstrukturen
Unterscheiden sich durch
– Interne Aufgabenstellung (Darstellung des Problems)
– Interne Lösungsmethode (Art der Inferenz)
– Konstruktion des Algorithmus aus interner Lösung
Individuelle Notationen und Heuristiken variieren stark.
ÄQUIVALENZ DER PARADIGMEN
Formales Meta-Theorem:
∀spec=(DD,RR,I,O):SPECIFICATIONS.
spec
is satisfiable
⇔ ∀x:DD. ∃y:RR. I(x) ⇒ O(x,y)
is provable
⇔ ∃OD :PROP(DD× Seq(DD)). ∃OC :PROP(DD× Seq(DD)×
×Seq(RR)×
×R).
∀x,y. O(x,y) ⇔ ∃x̄,ȳ. OD (x,x̄)
∧
O∗ (x̄,ȳ)
∧
OD is a well-founded relation
∧
( D, Seq(DD), I, OD )
is satisfiable
∧
( D× D× R, R, I, OC )
is satisfiable
∧
OC (x,x̄,ȳ,y)
⇔ ∃A:THEORIES.∃A:Models(A).
A is an algorithm theory
∧
A extends spec
Macht individuelle Ansätze zur Programmsynthese
originalgetreu darstellbar, korrekt implementierbar,
vergleichbar und integrierbar
SYNTHESE-STRATEGIEN
Formalisierung repräsentiert, verfeinert, verbessert und
implementiert Beschreibungen existierender Strategien.
LOPS (Bibel, 1980 . . . )
• Ausformulierung der verbalen Beschreibung
• Verifikation von Teilstrategien
• Grundlage für Neuimplementierung
KIDS (Kestrel Institute, 1985 . . . )
• Verfeinerung einer Formalisierung
• Aufdeckung kleiner Fehler
• Schließen von Lücken durch neue Konzepte
Implementierung einer Strategie wird identisch
mit ihrer textueller Beschreibung
SYNTHESE von GS-ALGORITHMEN
Berechnung aller Lösungen eines Problems
GLOBALSUCHE:
– Manipulation von Mengen von Lösungskandidaten
– Verallgemeinerung von Binärsuche, Backtracking, etc.
– Vollständig
Synthese durch Analyse der Struktur
• Darstellung durch “space descriptors” s ∈ S
J(x,s): s ist ein sinnvoller Deskriptor für x
sat(z,s): z ist in der durch s beschriebenen Menge
• Initialdeskriptor s0(x) ∈ S umfaßt alle Lösungen
• Direkte Extraktion ext(s) ∈ Set(RR) von Kandidaten
• Aufspaltung von Deskriptoren split(x,s) ∈ Set(S)
• Elimination von Deskriptoren durch Filter Φ(x,s)
• Rekursion bis kein Splitting mehr möglich ist
FORMALE GS-SCHEMATA
G is a GS-theory
≡ let G=((DD,RR,I,O), S, J, s0, sat, split, ext) in
consistent((DD,RR,S,J), s0)
∧
∀x:DD.I(x) ⇒ ∀s:S. J(x,s) ⇒ ∀t ∈ split(x,s).J(x,t)
∧
∀x:DD.I(x) ⇒ ∀z:R. O(x,z) ⇒ sat(z,s0(x))
∧
∀x:DD.I(x) ⇒ ∀s:S. J(x,s) ⇒ ∀z:R.
sat(z,s) ⇔ ∃k:IN.∃t ∈ splitk (x,s). z ∈ ext(t)
splitk (x,s)
≡ if k=0 then {s} else
S
{splitk−1 (x,t)|t ∈ split(x,s)})
G is well-founded
≡ let G=((DD,RR,I,O), S, J, s0, sat, split, ext) in
∀x:D.∀s:S. ∃k:IN. splitk (x,s) = ∅
G extends spec
≡ let G=((DD,RR,I,O), S, J, s0, sat, split, ext) in
spec = (DD,RR,I,O) in SPECIFICATIONS
GS-STRATEGIE
Eine Spezifikation wird synthetisiert durch Einbettung in
ein wohlfundiertes Globalsuch-Schema. (Smith, 1988)
Implementierungstheorem:
∀spec=(DD,RR,I,O):SPECIFICATIONS.
FUNCTION f (x:DD):Set(RR)
RETURNS S
WHERE I(x)
SUCH THAT S={y:RR|O(x,y)}
is satisfiable
⇐ ∃G. G is a GS-theory
∧
∧
G is well-founded
G extends spec
Beweis durch explizite Angabe des Lösungsschemas
Sei G=((DD,RR,I,O), S, J, s0, sat, split, ext)
Setze f (x)
:= Fgs (x,s0(x))
Fgs (x,s) :=
{z|z ∈ ext(s) ∧ O(x,z)}
∪
S
{Faux (x,t)| t ∈ split(x,s)}
Verifiziere Schema durch Induktion über die Anzahl
der Schritte bis kein Splitting mehr möglich ist.
GS-STRATEGIE – verfeinert
Synthetisiere durch Spezialisierung eines GS-Schemas und
eines Wohlfundiertheits-Filters aus der Wissensbank.
Implementierungstheorem:
∀spec=(DD,RR,I,O):SPECIFICATIONS.
FUNCTION f (x:DD):Set(RR)
RETURNS S
WHERE I(x)
SUCH THAT S={y:RR|O(x,y)}
is satisfiable
⇐ ∃G.∃Φ. G is a GS-theory
∧
∧
Φ is a wf-filter for G
G generalizes spec
G generalizes spec
≡ let G=((DD,RR,I,O), S, J, s0, sat, split, ext)
and spec=(DD’,RR,I’,O’)
in
∀x:DD. I(x) ⇒ ∃x’:DD’. I’(x’)
∧
∀z:RR. O(x,z) ⇒ O’(x’,z)
Φ is a wf-filter for G
≡ let G=((DD,RR,I,O), S, J, s0, sat, split, ext) in
∀x:DD.∀s:S. I(x) ∧ J(x,s) ⇒ ∃k:IN. splitΦ k (x,s) = ∅
splitΦ ≡ λx,s.{t|t ∈ split(x,s) ∧ Φ(x,t)}
ZUSAMMENFASSUNG
Logisch-formale Theorie der Programmentwicklung
• Einheitliche Behandlung von Objekt- und Metalevel
• Hohes Abstraktionsniveau
• Erfaßt alle Aspekte der Programmierung
• Erweiterbar auf andere Gebiete der Deduktion
• Vollständig formal
• Ohne Modifikationen implementierbar
Ermöglicht
• Verifizierte Implementierung von Synthesestrategien
• Integration verschiedenartiger Strategien
• Integration einer Vielfalt von Komponenten
Fundament der Inferenzmaschine innerhalb einer
Umgebung für wissensbasiertes Software-Engineering
FORSCHUNGSRICHTUNGEN
• Interface zwischen Mensch und formaler Theorie
• Entwurf formaler Spezifikationen
• Darstellung von Planungs- und Beweismethoden
• Vergleich und Integration von Designstrategien
• Systematischen Optimierung von Algorithmen
• Datentyp-Verfeinerung
• Automatische Entwicklung von Standardwissen
• Rechnergestützte Synthese von Strategien
Herunterladen