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