Generierungsregeln In der Informatik werden oft Datenstrukturen

Werbung
cont. zu 4.1 Generierungsregeln
Vorlesung Programmverifikation
4. Zur Spezifikation von Eigenschaften mittels
Prädikatenlogik mit Generiertheit
Prof. Dr. Uwe Petermann
Dept. of Computer Science
University of Applied Sciences Leipzig
P.O.B. 300066
D-04251 Leipzig (Germany)
[email protected]
Zur Konstruktion werden als Konstruktoren bezeichnete
Funktionen benutzt.
(1) Bei der Beschreibung der einfachsten Fälle der Datenstruktur
kommt kein Bezug der Konstruktoren auf sich selbst vor.
(2) Bei der Konstruktion der komplexen Fälle der Datenstruktur ausgehend von einfacheren
beziehen sich die Konstruktoren auf sich selbst.
5. November 2003
Man sagt, die betreffende Sorte sei durch die Konstruktoren
(endlich) generiert.
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
4.1
1
ProgrammVerifikation für 00I
Generierungsregeln
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
3
ProgrammVerifikation für 00I
cont. zu 4.1 Generierungsregeln
In der Informatik werden oft Datenstrukturen verwendet,
die aus endlich aber unbeschränkt vielen Bestandteilen bestehen.
Um wieder auf Bestandteile einer komplexeren Struktur zuzugreifen, werden als Selektoren bezeichnete Funktionen
benutzt.
Ihre Struktur wird durch Generierungsregeln beschrieben.
(1) Selektoren werden benutzt, um die Eigenschaften der
Konstruktoren zu beschreiben.
Diese
• definieren die einfachsten Fälle der Datenstruktur und
(2) Sind nach Anwendung eines Konstruktors seine Argumente stets mittels Selektorfunktionen rekonstruierbar,
spricht man von freier Generiertheit.
• beschreiben die Konstruktion komplexer Fälle der Datenstruktur ausgehend von einfacheren.
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
2
ProgrammVerifikation für 00I
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
4
ProgrammVerifikation für 00I
cont. zu 4.1 Generierungsregeln
4.2
Die Generiertheit einer Sorte ermöglicht es,
beim Nachweis von Eigenschaften von Elementen dieser
Sorte
das Prinzip der Induktion zu nutzen.
noch zu Bäumen
Überlegen Sie, ob Bäume durch die Konstruktoren auch als
frei generiert dargestellt werden können.
Welche Vorteile bringt die Darstellung als frei generierte
Datenstruktur?
Beispiel:
Die Sorte der Binärbäume ist durch folgende Konstruktoroperationen generiert:
constants
@ : tree;
functions
node : elem × tree × tree → tree ;
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
5
ProgrammVerifikation für 00I
Beispielspezifikation (Ausschnitt) mit Generierungsregeln
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
4.3
7
ProgrammVerifikation für 00I
Folgen
In Folgen werden Elemente gleicher Sorte gespeichert.
Strukturierungsmerkmal: Reihenfolge der Elemente
bin-tree-new =
specification
sorts tree, elem;
constants @ : tree;
functions
node : elem × tree × tree → tree ;
...
variables
z2, z1, z0, z, y2, y1, y0, y, x2, x1, x0, x: tree;
c2, c1, c0, c, b2, b1, b0, b, a2, a1, a0, a: elem;
Die Sorte der Folgen hat folgende Konstanten, Operationen
und Prädikate. (vgl. [1])
constants
empty;
functions
⊙, postfix, last, lead,
predicates
isempty ;
axioms
tree generated by @, node;
...
prefix, first, rest
;
end specification
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
6
ProgrammVerifikation für 00I
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
8
ProgrammVerifikation für 00I
Zu 4.5 Folgen:
4.3.2
Eigenschaften:
Warteschlangen als Sonderfall von Folgen
Beschränkung auf folgende Teilsignatur:
axioms
axioms
isempty(empty) ;
isempty(empty) ;
isempty(x ⊙ y) ↔ isempty(x) ∧ isempty(y) ;
postfix(x,a) = x ⊙ a ’ ;
last(postfix(x,a)) = a ;
lead(postfix(x,a)) = x ;
prefix(a,x) = a ’ ⊙ x ;
first(prefix(a,x)) = a ;
x ⊙ empty = x ;
isempty(x) →
first(postfix(x,a)) = a ;
∧ rest(postfix(x,a)) = x ;
¬ isempty(x) →
first(postfix(x,a)) = first(x) ;
∧
rest(prefix(a,x)) = x ;
empty ⊙ x = x ;
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
4.3.1
constants
empty;
functions
postfix, first, rest ;
predicates
isempty ;
9
ProgrammVerifikation für 00I
Stapel als Sonderfall von Folgen
isempty(empty) ;
¬ isempty(x) →
prefix(first(x),rest(x)) = x ;
first(prefix(a,x)) = a ;
rest(prefix(a,x)) = x ;
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
11
ProgrammVerifikation für 00I
Felder
In Felder werden Elemente gleicher Sorte gespeichert. Auf
Elemente wird über deren Position zugegriffen.
Strukturierungsmerkmal: Reihenfolge der Elemente
axioms
constants
empty;
functions
prefix, first, rest ;
predicates
isempty ;
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
4.4
Beschränkung auf folgende Teilsignatur:
rest(postfix(x,a))
= postfix(rest(x),a) ;
10
ProgrammVerifikation für 00I
Die Sorte der Folgen hat folgende Operationen und Prädikate.
functions
size, get, new, put
predicates
isempty ;
;
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
12
ProgrammVerifikation für 00I
Zu 4.5 Feldern:
Zu 4.5 Binärbäume:
Eigenschaften:
Eigenschaften:
axioms
axioms
size(new(i,a))=i ;
i < n → get(new(n,a),i)=a ;
left(build(a,x,y)) = x ;
size(put(x,i,a))=size(x) ;
right(build(a,x,y)) = y ;
i < size(x) → get(put(x,i,a),i)=a ;
root(build(a,x,y)) = a ;
i < size(x) ∧ ¬ i=j → get(put(x,i,a),j)=get(x,j) ;
x = empty
∨ build(root(x),left(x),right(x)) = x ;
Überlegen Sie, ob Felder durch die Konstruktoren auch als
frei generiert dargestellt werden können.
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
4.5
13
ProgrammVerifikation für 00I
Binärbäume
15
ProgrammVerifikation für 00I
Übungen
In Binärbäumen
werden Elemente gleicher Sorte gespeichert.
Strukturierungsmerkmal: Verzweigte Struktur. Lineare Struktur der Elemente entlang von Zweigen.
Die Sorte der Binärbäume hat folgende Konstanten, Operationen und Prädikate.
constants
empty;
functions
build, root, left, right ;
predicates
isempty ;
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
Formulieren Sie für die betrachteten Datenstrukturen weitere Eigenschaften
z.B.: “ein Element a kommt in Feld x vor”.
Suchen Sie in der library von KIV nach Datenstrukturen,
die den vorgenannten entsprechen.
Wie könnten Sie weitere Datenstrukturen beschreiben, die
Sie kennen?
14
ProgrammVerifikation für 00I
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
16
ProgrammVerifikation für 00I
Literatur
[1] F. Kröger. Algorithmen Entwicklung. Springer-Lehrbuch. Springer, Berlin, 1987.
[2] H. Langmaack. Contribution to Goodenough’s and Gerhart’s Theory of Software
Testing and Verification: Relation between Strong Compiler Test and Compiler
Implementation Verification. Foundations of Computer Science: Potential-TheoryCognition. LNCS, 1337:321–335, 1997.
[3] U. Petermann. Towards dependable development tools for embedded systems
a case study in software verification. Journal on Experimental and Theoretical
Artificial Intelligence, 2000.
[4] A. Pnueli, O. Shtrichman, and M. Siegel. Translation validation for synchronous
languages. Lecture Notes in Computer Science, 1443:235–246, 1998.
[5] W. Reif. Verification of large software systems. Lecture Notes in Computer
Science, 652:241–??, 1992.
[6] W. Reif and G. Schellhorn. Theorem proving in large theories. In Proceedings of the 14-th International Conference on Automated Deduction (CADE-14).
Springer-Verlag, 1997. LNAI.
c U. Petermann, Leipzig University of Applied Sciences, Dept. of Computer Science
17
ProgrammVerifikation für 00I
Herunterladen