Ein Fundament für Verifizierte Softwareentwicklungssysteme
Ein Fundament für Verifizierte Softwareentwicklungssysteme
Ein Fundament für Verifizierte Softwareentwicklungssysteme
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Ein</strong> <strong>Fundament</strong> <strong>für</strong> <strong>Verifizierte</strong><br />
<strong>Softwareentwicklungssysteme</strong><br />
Christoph Kreitz<br />
Fachgebiet Intellektik, Fachbereich Informatik, Technische Hochschule Darmstadt<br />
Alexanderstr. 10, 64283 Darmstadt<br />
· Problemfeld: Rechnergestützte Softwareentwicklung<br />
· Repräsentation von Konzepten und Methoden<br />
· <strong>Verifizierte</strong> Realisierung von Synthesestrategien<br />
– am Beispiel “Entwicklung von Globalsuchalgorithmen”<br />
· Forschungsziele – Ausblick
Problemfeld<br />
• Software-Krise – ungelöst seit 25 Jahren<br />
– Kosten/Zeitaufwand: Erstellung, Wartung, Modifikation<br />
– Zuverlässigkeit: Korrektheit nicht testbar<br />
• Softwareentwicklung benötigt<br />
Kreativität<br />
+ logische Schlußfolgerungen<br />
+ Verarbeitung von Wissen (Erfahrung)<br />
+ sorgfältige Codierung (Disziplin)<br />
⇒ Kooperation zwischen Mensch und Maschine sinnvoll<br />
– Programmierer: Steuerung des Entwicklungsprozesses<br />
– Computer: Korrektheitsgarantie <strong>für</strong> erzeugte Software<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 1 Ziele
Rechnerunterstützung bei Softwareentwicklung<br />
• CASE, Objektorientierung<br />
– Hilfe bei Systementwurf, Strukturierung, Spezifikation,<br />
– Wiederverwendbarkeit<br />
– Korrektheitsgarantie fehlt<br />
• Verifikation<br />
– Korrektheitsbeweis durch Rekonstruktion der Programmidee<br />
– Unterstützung bei Entwurf und Implementierung fehlt<br />
• Programmsynthese (‘Wissensbasierte Softwareentwicklung’)<br />
= Programmierung durch logische Schlußfolgerungsprozesse<br />
↦→ Implementierung schnell + garantiert korrekt<br />
+ Dokumentation des Entwicklungsprozesses<br />
↦→ Wartung / Modifikation leicht<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 2 Ziele
Programmsynthese<br />
• Praktisch orientierte Syntheseverfahren<br />
– theoretische Untersuchungen + ad hoc Codierung<br />
↦→ Prototypen erfolgreich: schnellere Entwicklung + schnellere Software<br />
KIDS: US-Army Transport Scheduling Algorithmus um Faktor 2000 (!!) schneller<br />
– Fehler bei Codierung des Verfahrens möglich<br />
↦→ keine echte Korrektheitsgarantie<br />
• Beweisbasierte Syntheseverfahren<br />
– Steuerung von Regeln eines ausdrucksstarken mathematischen Kalküls<br />
↦→ Korrektheitsgarantie <strong>für</strong> erzeugter Software<br />
– niedriges Abstraktionsniveau (elementare formale Logik)<br />
↦→ <strong>für</strong> Programmierer schwer verständlich (Kooperation unmöglich)<br />
↦→ nur “Spielbeispiele” praktisch lösbar<br />
Integration der Stärken beider Vorgehensweisen möglich?<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 3 Ziele
Ansatz: Integration durch Abstraktion<br />
• Ziel: verständliche logische Schlüsse<br />
– Schlußfolgerungen auf Ebene der Programmierkonzepte ↦→ praktisch nutzbar<br />
– Abstützung auf mathematisch gesichertem Kalkül ↦→ Korrektheitsgarantie<br />
• Ausgangspunkt: ausdrucksstarker logischer Basiskalkül<br />
⇒ Formalisierung der Grundkonstrukte vorhanden<br />
+ Interaktives Beweisentwicklungssystem (NuPRL)<br />
• Erweiterung: Formale Theorie der Programmierung<br />
– Formalisierung von Anwendungsbereichen + Programmierkonzepten<br />
– Verifikation bekanntes Wissens durch formale Lemmata & Theoreme<br />
– Erzeugung abgeleiteter Inferenzregeln auf hohem Abstraktionsniveau<br />
⇒ Kontrolle formaler Inferenzen durch Menschen möglich<br />
⇒ flexible, effiziente, zuverlässige Implementierung von Synthesesystemen<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 4 Ziele
Formalisierung von Programmiergrundwissen<br />
• Erweiterung des Kalküls auf Standard-Anwendungsbereiche<br />
– Definitionen <strong>für</strong> Operationen auf Zahlen, Tupeln, Folgen, Mengen, Bäumen. . .<br />
– Abstrakte Datentypen: Extraktion aus Formationstheorem<br />
– Faktenwissen: formal bewiesene Lemmata über Eigenschaften von Operationen<br />
⇒ <strong>Verifizierte</strong> Wissensbank<br />
• Leitlinie: Grundlehrbücher mit Standardwissen der Informatik<br />
– ca. 500 Definitionen / 4000 Lemmata (1/4 bereits vorhanden)<br />
• Display formaler Theorien ähnlich zur Textbuchform<br />
– mathematische Fonts, optionale Unterdrückung von Details, variable Displayform<br />
– Notation austauschbar durch NuPRL’s Display-Mechanismus<br />
· mathematisch: x ∈ S, S∪S’, {f(x)|x ∈ S ∧ p(x)} . . .<br />
· Programmiersprache: element(x,S), union(S,S’), mapfilter(f,S,p). . .<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 5 Repräsentation durch Definition
Grundkonzepte der Programmierung<br />
• Repräsentation: Datentypen & Prädikate höherer Stufe<br />
SPECS ≡ D:TYPES × R:TYPES × D→IB × D×R→IB<br />
PROGRAMS ≡ spec:SPECS × D(spec)→R(spec)<br />
program is correct ≡ let ((D,R,I,O), body) = program in<br />
∀x:D. I(x) ⇒ O(x,body(x))<br />
spec is satisfiable ≡ let... ∃body:D→R. (spec,body) is correct<br />
+ Notationen <strong>für</strong> komplexe Strukturen:<br />
FUNCTION f(x: D ): R WHERE I (x) RETURNS y SUCH THAT O (x,y) = body (x)<br />
FUNCTION f(x: D ):Set( R ) WHERE I (x) RETURNS { z | O (x,z)} = body (x)<br />
⇓<br />
Programmynthese ˆ= ⊢ specification is satisfiable<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 6 Repräsentation durch Definition
Repräsentation von Synthesestrategien<br />
• Strategie ˆ= semantisch motivierbare Umformung + syntaktische Suche<br />
• Semantische <strong>Ein</strong>sicht ˆ= Metatheorem (innerhalb der Theorie)<br />
∀ parameters involved in the context. | ∀spec=(D,R,I,O):SPECS.<br />
main goal | spec is satisfiable<br />
⇐ precondition 1 | ⇐ ∀x:D. I(x) ⇒ ∃y:R.O(x,y)<br />
. |<br />
∧ precondition n |<br />
↦→ logisch-formale und verständliche Repräsentation<br />
+ formale Verifikation außerhalb des eigentlichen Syntheseprozesses<br />
+ abgeleitete Inferenzregel auf hohem Abstraktionsniveau<br />
– korrekt, verständlich & effizient (keine run-time Verifikation)<br />
+ implizites Verfahren zur Algorithmenkonstruktion<br />
– effiziente generierte Programme<br />
• Suchverfahren ˆ= Parameterbestimmung <strong>für</strong> Theorem<br />
⇒ verifizierte Implementierung durch Theoremaufruf<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 7 Repräsentation durch formale Theoreme
Entwurf von Globalsuch-Algorithmen:<br />
Manipulation von Kandidatenmengen zur Bestimmung aller Lösungen<br />
Allgemeine Programmstruktur: (mathematische Notation)<br />
FUNCTION F(x:D):Set(R) WHERE I(x) RETURNS { z | O(x,z)}<br />
= if Φ(x,s 0 (x)) then Fgs(x,s 0 (x)) else ∅<br />
FUNCTION Fgs(x,s:D×S):Set(R) WHERE I(x) ∧ J(x,s) ∧ Φ(x,s)<br />
RETURNS { z | O(x,z) ∧ sat(z,s)}<br />
= { z | z ∈ ext(s) ∧ O(x,z) } ∪ ∪{ Fgs(x,t) | t ∈ split(x,s) ∧ Φ(x,t) }<br />
• Deskriptoren s ∈ S <strong>für</strong> Kandidatenmengen<br />
J(x,s) : s sinnvoll <strong>für</strong> x — sat(z,s) : z gehört zur “Menge” s<br />
• Initialdeskriptor s 0 (x) ∈ S – umfaßt alle Lösungen<br />
• Direkte Extraktion ext(s) ∈ Set(R) von Lösungskandidaten<br />
• Suche: rekursive Aufspaltung split(x,s) ∈ Set(S) von Deskriptoren<br />
• notwendige Filter Φ(x,s) – Elimination unnötiger Deskriptoren<br />
+ 5 Axiome <strong>für</strong> Korrektheit und Terminierung<br />
⇒ wohlfundierte “Globalsuchtheorie” liefert korrekte Lösung<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 8 Globalsuch-Strategie
GS-Theorie und Filter: Beispiele<br />
gs seq(α) ≡ D ↦→ Set(α)<br />
R ↦→ Seq(α)<br />
I ↦→ λS. true<br />
O ↦→λS, L. range(L)⊆S<br />
S ↦→ Seq(α)<br />
J ↦→λS, V. range(V)⊆S<br />
s 0 ↦→ λS. []<br />
sat ↦→λL, V. V⊑L<br />
split↦→λS, V. {V·i|i ∈ S}<br />
ext ↦→ λV. {V}<br />
Lemma: ∀α:TYPES. ∀k:IN.<br />
- gs seq(α) is a GS theory<br />
- λS,V.|V|≤k wf-filter for gs seq(α)<br />
- λS,V.|V|≤k*length(S) wf-filter for gs seq(α)<br />
- λS,V.nodups(V) wf-filter for gs seq(α)<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 9 Globalsuch-Strategie
GS-Theorien: Formalisierung von Struktur und Axiomen<br />
GS ≡ spec:SPECS × S:TYPES × D×S→IB × ...<br />
G is a GS-theory<br />
≡ let ((D,R,I,O), S, J, s 0 , sat, split, ext) = G in<br />
∀x:D. I(x) ⇒ s 0 (x) halts ∧ J(x,s 0 (x))<br />
∧ ∀x:D.∀s:S. I(x) ∧ J(x,s) ⇒ ∀t ∈ split(x,s).J(x,t)<br />
∧ ∀x:D.∀z:R. I(x) ∧ O(x,z) ⇒ sat(z,s 0 (x))<br />
∧ ∀x:D.∀s:S. I(x) ∧ J(x,s) ⇒ ∀z:R.O(x,z) ⇒<br />
sat(z,s) ⇔ ∃k:IN.∃t ∈ split k (x,s). z ∈ ext(t)<br />
Filters(G)<br />
≡ let ...=G in D×S→IB<br />
Φ necessary for G<br />
≡ let ...=G in ∀x:D.∀s:S. ∃z:R. sat(z,s) ∧ O(x,z) ⇒ Φ(x,s)<br />
Φ wf-filter for G<br />
≡ let ...=G in ∀x:D.∀s:S. I(x) ∧ J(x,s) ⇒<br />
∃k:IN. splitΦ k (x,s) = ∅<br />
G generalizes spec with θ<br />
≡ let ...=G. and (D’,R’,I’,O’)=spec in<br />
R’⊂R ∧<br />
Gθ(spec) ...<br />
.<br />
∀x:D’. I’(x) ⇒ I(θ(x)) ∧ ∀z:R’. O’(x,z) ⇒ O(θ(x),z)<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 10 Globalsuch-Strategie
Entwurfsstrategie: Formalisierung als Theorem<br />
∀spec=(D,R,I,O):SPECS.<br />
FUNCTION F(x:D):Set(R) WHERE I(x) RETURNS {z | O(x,z)} is satisfiable<br />
⇐ ∃G:GS. G is a GS-Theory<br />
∧ ∃θ:D→DG. G generalizes spec with θ<br />
∧ ∃Φ:Filters(G). Φ wf-filter for G ∧ Φθ necessary for Gθ(spec)<br />
∧ ∃Ψ:Filters(Gθ(spec)). Ψ necessary for Gθ(spec)<br />
Beweisskizze:<br />
Gegeben: G = ((D’,R’,I’,O’), S, J, s 0 , sat, split, ext), θ, Φ, und Ψ.<br />
Lösungsprogramm: Instantiierung des Standard-Globalsuchalgorithmus (mathematische Notation)<br />
letrec fgs(x,s) = { z | z ∈ ext(s) ∧ O(x,z) }<br />
∪ ∪{ fgs(x,t) | t ∈ split(θ(x),s) ∧ Φ(θ(x),t) ∧ Ψ(x,t) }<br />
in<br />
if Φ(θ(x),s 0 (θ(x))) ∧ Ψ(x,s 0 (θ(x))) then fgs(x,s 0 (θ(x))) else ∅<br />
Korrektheit: Induktion (Anzahl Rekursionsschritte bis Splitting unmöglich) + Wohlfundiertheit<br />
(Formaler Beweis mit NuPRL)<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 11 Globalsuch-Strategie
Entwurfsstrategie: Theoremanwendung + Folgeschritte<br />
1. Formuliere Syntheseproblem als Beweisziel<br />
⊢ FUNCTION F(x: D ):Set( R ) WHERE I(x) RETURNS {z | O(x,z) }<br />
is satisfiable<br />
2. Wende Synthesetheorem an wie eine Inferenzregel<br />
3. Als Unterziel bestimme G, θ, Φ und Ψ.<br />
(a) Wähle GS-theorie G aus Wissensbank (enthält 6-10 GS-theorien)<br />
mit Bildbereich R oder einer Obermenge davon<br />
(b) Bestimme Substitution θ<br />
Direkt oder Extraktion aus konstruktivem Beweis der Generalisierung<br />
(c) Wähle wf-filter Φ <strong>für</strong> G aus Wissensbank (3-4 Möglichkeiten)<br />
Zeige: Φθ notwendig <strong>für</strong> Gθ(spec)<br />
(d) Bestimme zusätzlichen Filter Ψ heuristisch<br />
Eigenschaften von x und s, die leicht aus sat(z,s) ∧ O(x,z) ableitbar sind<br />
⇒ ENDE: System extrahiert Instanz des Standard-Globalsuchalgorithmus<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 12 Globalsuch-Strategie
Costas Arrays Synthese: Problemstellung<br />
Costas Array der Größe n: Permutation von {1..n} ohne doppelte Elemente in<br />
den Zeilen der Differenzentafel<br />
1 4 2 3<br />
-3 2 -1<br />
-1 1<br />
-2<br />
Ziel: Berechnung aller Costas Arrays der Größe n<br />
0. Formalisiere unbekannte Begriffe:<br />
perm(L,S) ≡ nodups(L) ∧ range(L)=S<br />
dtrow(L,j) ≡ [L[i]-L[i+j] | i ∈ [1..length(L)-j] ]<br />
1. Formalisiere Syntheseproblem als Beweisziel<br />
FUNCTION Costas(n: Z):Set( Seq( Z) ) WHERE n≥1<br />
RETURNS {p | perm(p,{1..n}) ∧ ∀j ∈ dom(p).nodups(dtrow(p,j))}<br />
is satisfiable<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 13 Costas Arrays Synthese
# top<br />
Costas Arrays Synthese 2: Zentraler Schritt<br />
⊢ FUNCTION Costas(n: Z):Set( Seq( Z) ) WHERE n≥1<br />
RETURNS {p | perm(p,{1..n}) ∧ ∀j ∈ dom(p).nodups(dtrow(p,j))}<br />
is satisfiable<br />
BY call ‘GS-theorem‘<br />
1. ⊢ ∃G. G is a GS-Theory<br />
∧ ∃θ. G generalizes spec with θ<br />
∧ ∃Φ. Φ wf-filter for G ∧ Φθ necessary for Gθ(spec)<br />
∧ ∃Ψ. Ψ necessary for Gθ(spec)<br />
where spec = ( Z, Seq( Z), λn. n≥1,<br />
λn,p. perm(p,{1..n}) ∧ ∀j ∈ dom(p).nodups(dtrow(p,j)) )<br />
Typinformation zugunsten der Lesbarkeit unterdrückt (Display-Mechanismus)<br />
Restliche Aufgabe: Bestimmung von G, θ, Φ und Ψ.<br />
– Extraktion des Algorithmus automatisch nach Lösung dieses Ziels<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 14 Costas Arrays Synthese
# top 1<br />
Costas Arrays Synthese 3(a): Wahl der GS-Theorie<br />
⊢ ∃G. G is a GS-Theory<br />
∧ ∃θ. G generalizes spec with θ<br />
∧ ∃Φ. Φ wf-filter for G ∧ Φθ necessary for Gθ(spec)<br />
∧ ∃Ψ. Ψ necessary for Gθ(spec)<br />
where spec = ( Z, Seq( Z), λn. n≥1,<br />
λn,p. perm(p,{1..n}) ∧ ∀j ∈ dom(p).nodups(dtrow(p,j)) )<br />
BY ∃-intro gs seq( Z) THEN unfold ‘perm‘<br />
1. ⊢ gs seq( Z) is a GS-Theory<br />
2. ⊢ ∃θ. gs seq( Z) generalizes spec with θ<br />
∧ ∃Φ. Φ wf-filter for gs seq( Z) ∧ Φθ necessary for gs seq( Z)θ(spec)<br />
∧ ∃Ψ. Ψ necessary for gs seq( Z)θ(spec)<br />
where spec = ( Z, Seq( Z), λn. n≥1,<br />
λn,p. nodups(p) ∧ range(p)={1..n} ∧ ∀j ∈ dom(p).nodups(dtrow(p,j)) )<br />
Teilziel 1 ˆ= Lemma der Wissensbank<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 15 Costas Arrays Synthese
# top 1 2<br />
Costas Arrays Synthese 3(b): Bestimmung der Substitution θ<br />
⊢ ∃θ. gs seq( Z) generalizes spec with θ<br />
∧ ∃Φ. Φ wf-filter for gs seq( Z) ∧ Φθ necessary for gs seq( Z)θ(spec)<br />
∧ ∃Ψ. Ψ necessary for gs seq( Z)θ(spec)<br />
where spec = ( Z, Seq( Z), λn. n≥1,<br />
λn,p. nodups(p) ∧ range(p)={1..n} ∧ ∀j ∈ dom(p).nodups(dtrow(p,j)) )<br />
BY ∃-intro λn.{1..n}<br />
1. ⊢ gs seq( Z) generalizes spec with λn.{1..n}<br />
where spec = ......<br />
2. ⊢ ∃Φ. Φ wf-filter for gs seq( Z) ∧ Φθ necessary for gs seq( Z)λn.{1..n}(spec)<br />
∧ ∃Ψ. Ψ necessary for gs seq( Z)λn.{1..n}(spec)<br />
where spec = ......<br />
Teilziel 1 lösbar durch einfachen Beweiser<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 16 Costas Arrays Synthese
# top 1 2 2<br />
Costas Arrays Synthese 3(c): Wahl des Filters Φ<br />
⊢ ∃Φ. Φ wf-filter for gs seq( Z) ∧ Φθ necessary for gs seq( Z)λn.{1..n}(spec)<br />
∧ ∃Ψ. Ψ necessary for gs seq( Z)λn.{1..n}(spec)<br />
where spec = ( Z, Seq( Z), λn. n≥1,<br />
λn,p. nodups(p) ∧ range(p)={1..n} ∧ ∀j ∈ dom(p).nodups(dtrow(p,j)) )<br />
BY ∃-intro λS,V.nodups(V)<br />
1. ⊢ λS,V.nodups(V) wf-filter for gs seq( Z)<br />
2. ⊢ λn,V.nodups(V) necessary for gs seq( Z)λn.{1..n}(spec)<br />
where spec = ......<br />
3. ⊢ ∃Ψ. Ψ necessary for gs seq( Z)λn.{1..n}(spec)<br />
where spec = ......<br />
Teilziel 1 ˆ= Lemma der Wissensbank<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 17 Costas Arrays Synthese
Costas Arrays Synthese 3(c/d): Φθ notwendig/ Wahl von Ψ<br />
# top 1 2 2 2<br />
⊢ λn,V.nodups(V) necessary for gs seq( Z)λn.{1..n}(spec)<br />
where spec = ( Z, Seq( Z), λn. n≥1,<br />
λn,p. nodups(p) ∧ range(p)={1..n} ∧ ∀j ∈ dom(p).nodups(dtrow(p,j)) )<br />
BY undo abstractions THEN unfold ‘specialize‘ THEN unfold ‘necessary‘<br />
1. ⊢ ∀n.∀V. (∃p. nodups(p) ∧ range(p)={1..n} ∧ ∀j ∈ dom(p).nodups(dtrow(p,j)) ∧ V⊑p)<br />
⇒ nodups(V)<br />
* BY autotactic<br />
# top 1 2 2 3<br />
⊢ ∃Ψ. Ψ necessary for gs seq( Z)λn.{1..n}(spec)<br />
where spec = ......<br />
(autotactic zerlegt logisch und konsultiert dabei Fakten der Wissensbank)<br />
BY undo abstractions THEN unfold ‘specialize‘ THEN unfold ‘necessary‘<br />
1. ⊢ ∃Ψ.∀n.∀V. (∃p. nodups(p) ∧ range(p)={1..n} ∧ ∀j ∈ dom(p).nodups(dtrow(p,j)) ∧ V⊑p)<br />
⇒ Ψ(n,V)<br />
* BY ∃-intro λn,V. ∀j ∈ dom(V).nodups(dtrow(V,j) THEN autotactic<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 18 Costas Arrays Synthese
Costas Arrays Synthese: generiertes ausführbares Programm<br />
FUNCTION Costas(n: Z):Set( Seq( Z) ) WHERE n≥1<br />
RETURNS {p | perm(p,{1..n}) ∧ ∀j ∈ dom(p).nodups(dtrow(p,j))}<br />
=<br />
letrec Costasgs(n,V) =<br />
{ p | p ∈ {V} ∧ perm(p,{1..n}) ∧ ∀j ∈ dom(p).nodups(dtrow(p,j))}<br />
∪ ∪ { Costasgs(n,W) | W ∈ {V·i|i ∈ {1..n}} ∧ nodups(W)<br />
∧ ∀j ∈ dom(W).nodups(dtrow(W,j)) }<br />
in<br />
if nodups([]) ∧ ∀j ∈ dom([]).nodups(dtrow([],j))<br />
then Costasgs(n,[]) else ∅<br />
Nach elementaren Optimierungen (weitere sind möglich)<br />
FUNCTION Costas(n: Z):Set( Seq( Z) ) WHERE n≥1<br />
RETURNS {p | perm(p,{1..n}) ∧ ∀j ∈ dom(p).nodups(dtrow(p,j))}<br />
=<br />
letrec Costasgs(n,V) =<br />
(if perm(V,{1..n}) ∧ ∀j ∈ dom(V).nodups(dtrow(V,j)) then {V} else ∅)<br />
∪ ∪ { Costasgs(n,V·i) | i ∈ {1..n} ∧ nodups(V·i) ∧<br />
∀j ∈ dom(V·i).nodups(dtrow(V·i,j)) }<br />
in<br />
Costasgs(n,[])<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 19 Costas Arrays Synthese
Laufende / geplante Forschungsarbeiten<br />
• Effiziente verifizierten Wissensbank<br />
– Computerrealisierung bisher formalisierter Anwendungsbereiche (900 Objekte, in Arbeit)<br />
– Formalisierung/Realisierung neuer Bereiche (ca. 4000 Objekte/Lehrbücher)<br />
– Automatische Instantiierung von Theoremen (Teilterm-matching 2. Stufe, in Erprobung)<br />
– Effiziente Organisation (eleganter Zugriff auf Lemmata) (Strukturierungsmethoden)<br />
• Repräsentation von Synthesestrategien<br />
– Globalsuch-Algorithmen, LOPS (Computerrealisierung in Arbeit)<br />
– Algorithmische Theorien (Divide& Conquer, Lokalsuche, . . . )<br />
– Synthese durch Beweisplanung (Rippling, . . . ) (↦→ Diplomarbeiten)<br />
• Automatisierung konzeptionell einfacher Schlüsse<br />
– Matrix-basierte Beweisprozedur <strong>für</strong> konstruktive Logik (in Arbeit / Doktoranden)<br />
– anwendungsspezifische Beweistaktiken<br />
• Exemplarische Erprobung (Testbeispiele)<br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 20 Ausblick / Forschungsrichtungen
Ausblick<br />
• Formales Schließen auf sehr hohem Abstraktionsniveau<br />
– keine Abhängigkeit vom speziellen Kalkül (NuPRL)<br />
– Synthesen auch bei geringer automatischer Unterstützung möglich<br />
⇒ tatsächliche Kooperation zwischen Mensch und Maschine<br />
• Formale Theorie: Bindeglied zwischen ‘informaler’ Beschreibung und<br />
Realisierung von Strategien<br />
– Formulierung nahezu identisch mit Papierversion<br />
– Realisierung mit Beweiseditor ohne Modifikation<br />
⇒ verifizierte und effiziente Implementierung<br />
⇒ Integration verschiedener Programmsyntheseverfahren möglich<br />
– Erweiterbar auf andere Bereiche der Deduktion (Planen, Beweisen, . . . )<br />
⇓<br />
<strong>Fundament</strong> <strong>für</strong> flexible, praktisch nutzbare<br />
und zuverlässige <strong>Softwareentwicklungssysteme</strong><br />
<strong>Verifizierte</strong> <strong>Softwareentwicklungssysteme</strong> 21 Ausblick / Forschungsrichtungen