10.10.2013 Aufrufe

Ein Fundament für Verifizierte Softwareentwicklungssysteme

Ein Fundament für Verifizierte Softwareentwicklungssysteme

Ein Fundament für Verifizierte Softwareentwicklungssysteme

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!