• Keine Ergebnisse gefunden

Korrekte Software: Grundlagen und Methoden Vorlesung 1 vom 04.04.18: Einführung

N/A
N/A
Protected

Academic year: 2022

Aktie "Korrekte Software: Grundlagen und Methoden Vorlesung 1 vom 04.04.18: Einführung"

Copied!
404
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Serge Autexier, Christoph Lüth

Universität Bremen

Sommersemester 2018

11:50:38 2018-06-05 1 [22]

(2)

Organisatorisches

I Veranstalter:

Christoph Lüth christoph.lueth@dfki.de

MZH 4186, Tel. 59830

Serge Autexier serge.autexier@dfki.de

Cartesium 2.11, Tel. 59834

I Termine:

I Vorlesung: Dienstag, 12 – 14, MZH 6210

I Übung: Donnerstag, 12 – 14, MZH 1110

I Webseite:

http://www.informatik.uni-bremen.de/~cxl/lehre/ksgm.ss18

(3)

I “Leichtgewichtige” Übungsblätter, diein der Übungbearbeitet und schnellkorrigiert werden können.

I ÜbungsblättervertiefenVorlesungsstoff, Bewertung gibt Feedback.

I Übungsbetrieb:

I Gruppen bis zu drei Studierende

I Ausgabe: Donnerstag in der Übung

I Bearbeitung: in der Übung

I Abgabe: Donnerstag abend

Korrekte Software 3 [22]

(4)

Prüfungsform und Übungsbetrieb

I 10 Übungsblätter (geplant)

I Bewertung:

I A (sehr gut, 1.3) — nichts zu meckern, keine/kaum Fehler

I B (gut, 2.3) — kleine Fehler, sonst gut

I C (befriedigend, 3.3) — größere Fehler oder Mängel

I Nicht bearbeitet — oder zu viele Fehler

I Prüfungsleistung:

I Mündliche Prüfung

I Einzelprüfung ca. 20– 30 Minuten

I Übungsbetrieb (bis zu 20% Bonuspunkte, keine Voraussetzung)

(5)

Korrekte Software 5 [22]

(6)

Software-Disaster I: Therac-25

(7)

Mariner 1 (27.08.1962), Mars Climate Orbiter (1999), Ariane 5 (04.06.1996)

Korrekte Software 7 [22]

(8)

Software-Disaster III: AT&T (15.01.1990)

w h i l e ( ! empty ( r i n g _ r c v _ b u f f e r )

&& ! empty ( s i d e _ b u f f e r empty ) ) { i n i t i a l i z e p o i n t e r t o f i r s t m e s s a g e b u f f e r ; g e t c o p y o f b u f f e r ;

s w i t c h ( m e s s a g e ) {

c a s e ( i n c o m i n g _ m e s s a g e ) :

i f ( s e n d e r i s o u t _ o f _ s e r v i c e ) { i f ( empty ( r i n g _ w r t _ b u f f e r ) ) {

s e n d " i n s e r v i c e " t o s t a t u s map ; } e l s e {

break; }

p r o c e s s i n c o m i n g message , s e t up p o i n t e r s ; break;

} }

do o p t i o n a l p a r a m e t e r work ;

(9)

Sevilla, 09.05.2015

Korrekte Software 9 [22]

(10)

Inhalt der Vorlesung

(11)

Korrekte Software im Lehrbuch:

I Spielzeugsprache

I Wenig Konstrukte

I Kleine Beispiele

Korrekte Software im Einsatz:

I Richtige Programmiersprache

I Mehr als nur ganze Zahlen

I Skalierbarkeit — wie können große Programme verifiziert werden?

Korrekte Software 11 [22]

(12)

Inhalt

I Grundlagen:

I Beweis derKorrektheitvon Programmen: derFloyd-Hoare-Kalkül

I Bedeutungvon Programmen:Semantik

I Betrachtete Programmiersprache: “C0” (erweiterte Untermenge von C)

I Erweiterung der Programmkonstrukte und des Hoare-Kalküls:

1. Referenzen (Zeiger)

2. Funktion und Prozeduren (Modularität) 3. ReicheDatenstrukturen(Felder,struct)

(13)

I Operationale Semantik

I Denotationale Semantik

I Äquivalenz der Operationalen und Denotationalen Semantik

I Die Floyd-Hoare-Logik

I Invarianten und die Korrektheit des Floyd-Hoare-Kalküls

I Strukturierte Datentypen

I Modellierung und Spezifikation

I Verifikationsbedingungen

I Vorwärts mit Floyd und Hoare

I Funktionen und Prozeduren

I Referenzen

I Ausblick und Rückblick

Korrekte Software 13 [22]

(14)

Warum Semantik?

(15)

Idee

I Was wird hier berechnet?

I Wir berechnen symbolisch, welche Werte Variablen über den

Programmverlauf annehmen.

p= 1 ; c= 1 ;

w h i l e ( c <= n ) { p = p c ; c = c + 1 ; }

Korrekte Software 15 [22]

(16)

Idee

I Was wird hier berechnet?p =n!

I Warum? Wie können wir das beweisen?

I Wir berechnen symbolisch, welche Werte Variablen über den

Programmverlauf annehmen.

p= 1 ; c= 1 ;

w h i l e ( c <= n ) { p = p c ; c = c + 1 ; }

(17)

I Was wird hier berechnet?p =n!

I Warum? Wie können wir das beweisen?

I Wir berechnen symbolisch, welche Werte Variablen über den

Programmverlauf annehmen.

p= 1 ; c= 1 ;

w h i l e ( c <= n ) { p = p c ; c = c + 1 ; }

Korrekte Software 15 [22]

(18)

Semantik von Programmiersprachen

Drei wesentliche Möglichkeiten:

I Operationale Semantik:

Ausführung auf einerabstraktenMaschine

I Denotationale Semantik:

Abbildung in ein mathematisches Objekt

I Axiomatische Semantik:

Beschreibung durch eines Programmes durch seineEigenschaften

(19)

I C0 ist eineUntermengeder Sprache C

I C0-Programme sindausführbare C-Programme

I Erste Ausbaustufe:

I Zuweisungen, Fallunterscheidungen, Schleifen

I Datentypen: ganze Zahlen mit Arithmetik

I Relationen: Vergleich (=,≤)

I Boolsche Operatoren: Konjunktion, Disjunktion, Negation

I 1. Ausbaustufe: Funktionen und Prozeduren

I 2. Ausbaustufe: Felder und Strukturen

I 3. Ausbaustufe: Referenzen (Pointer)

I Fehlt:union,goto, . . .

Korrekte Software 17 [22]

(20)

Operationale Semantik

I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine

I Abstrakte Maschine hatimpliziten Zustand

I Zustand ordnetAdressen veränderlicheWerten zu

I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;

c = 1 ;

w h i l e( c <= n ) { p = p c ; c = c + 1 ; }

p ? c ? n 3

p 1 c ? n 3

p 1 c 1 n 3

p 1 c 1 n 3

p 1 c 2 n 3

p 2 c 2 n 3

p 2 c 3 n 3

p 6 c 3 n 3

p 6 c 4 n 3

(21)

Operationale Semantik

I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine

I Abstrakte Maschine hatimpliziten Zustand

I Zustand ordnetAdressen veränderlicheWerten zu

I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;

c = 1 ;

w h i l e( c <= n ) { p = p c ; c = c + 1 ; }

p ? c ? n 3

p 1 c ? n 3

p 1 c 2 n 3

p 2 c 2 n 3

p 2 c 3 n 3

p 6 c 3 n 3

p 6 c 4 n 3

Korrekte Software 18 [22]

(22)

Operationale Semantik

I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine

I Abstrakte Maschine hatimpliziten Zustand

I Zustand ordnetAdressen veränderlicheWerten zu

I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;

c = 1 ;

w h i l e( c <= n ) { p = p c ; c = c + 1 ; }

p ? c ? n 3

p 1 c ? n 3

p 1 c 1 n 3

p 1 c 1 n 3

p 1 c 2 n 3

p 2 c 2 n 3

p 2 c 3 n 3

p 6 c 3 n 3

p 6 c 4 n 3

(23)

Operationale Semantik

I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine

I Abstrakte Maschine hatimpliziten Zustand

I Zustand ordnetAdressen veränderlicheWerten zu

I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;

c = 1 ;

w h i l e( c <= n ) { p = p c ; c = c + 1 ; }

p ? c ? n 3

p 1 c ? n 3

p 1 c 1 n 3

p 1 c 1 n 3

Korrekte Software 18 [22]

(24)

Operationale Semantik

I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine

I Abstrakte Maschine hatimpliziten Zustand

I Zustand ordnetAdressen veränderlicheWerten zu

I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;

c = 1 ;

w h i l e( c <= n ) { p = p c ; c = c + 1 ; }

p ? c ? n 3

p 1 c ? n 3

p 1 c 1 n 3

p 1 c 1 n 3

p 1 c 2 n 3

p 2 c 2 n 3

p 2 c 3 n 3

p 6 c 3 n 3

p 6 c 4 n 3

(25)

Operationale Semantik

I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine

I Abstrakte Maschine hatimpliziten Zustand

I Zustand ordnetAdressen veränderlicheWerten zu

I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;

c = 1 ;

w h i l e( c <= n ) { p = p c ; c = c + 1 ; }

p ? c ? n 3

p 1 c ? n 3

p 1 c 1 n 3

p 1 c 1 n 3

p 1 c 2 n 3

p 2 c 2 n 3

Korrekte Software 18 [22]

(26)

Operationale Semantik

I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine

I Abstrakte Maschine hatimpliziten Zustand

I Zustand ordnetAdressen veränderlicheWerten zu

I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;

c = 1 ;

w h i l e( c <= n ) { p = p c ; c = c + 1 ; }

p ? c ? n 3

p 1 c ? n 3

p 1 c 1 n 3

p 1 c 1 n 3

p 1 c 2 n 3

p 2 c 2 n 3

p 2 c 3 n 3

p 6 c 3 n 3

p 6 c 4 n 3

(27)

Operationale Semantik

I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine

I Abstrakte Maschine hatimpliziten Zustand

I Zustand ordnetAdressen veränderlicheWerten zu

I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;

c = 1 ;

w h i l e( c <= n ) { p = p c ; c = c + 1 ; }

p ? c ? n 3

p 1 c ? n 3

p 1 c 1 n 3

p 1 c 1 n 3

p 1 c 2 n 3

p 2 c 2 n 3

p 2 c 3 n 3

p 6 c 3 n 3

Korrekte Software 18 [22]

(28)

Operationale Semantik

I Kernkonzept: Zustandstandsübergänge einer abstrakten Maschine

I Abstrakte Maschine hatimpliziten Zustand

I Zustand ordnetAdressen veränderlicheWerten zu

I Konkretes Beispiel:n7→3,p und c undefiniert p = 1 ;

c = 1 ;

w h i l e( c <= n ) { p = p c ; c = c + 1 ; }

p ? c ? n 3

p 1 c ? n 3

p 1 c 1 n 3

p 1 c 1 n 3

p 1 c 2 n 3

p 2 c 2 n 3

p 2 c 3 n 3

p 6 c 3 n 3

p 6 c 4 n 3

(29)

I Kernkonzept: Abbildung von Programmen auf mathematisches Gegenstück (Denotat)

I PartielleFunktionen zwischen Zuständen [[c]] :σ * σ

I Beispiel:

p = 1 ; c = 1 ; // p1 w h i l e ( c <= n ) {

p = p c ; c = c + 1 ; // p2 }

// p3

[[p1]](σ) =σ(p 7→1)(c 7→1)

[[p2]](σ) =σ(p 7→σ(p)σ(c))(c 7→σ(c) + 1) [[p3]](σ) = ???

Korrekte Software 19 [22]

(30)

Denotationale Semantik

I Kernkonzept: Abbildung von Programmen auf mathematisches Gegenstück (Denotat)

I PartielleFunktionen zwischen Zuständen [[c]] :σ * σ

I Beispiel:

p = 1 ; c = 1 ; // p1 w h i l e ( c <= n ) {

p = p c ; c = c + 1 ; // p2 }

// p3

[[p1]](σ) =σ(p 7→1)(c 7→1)

[[p2]](σ) =σ(p 7→σ(p)σ(c))(c 7→σ(c) + 1) [[p3]](σ) =fix([[p2]])([[p1]](σ))

(31)

I Kernkonzept: Abbildung von Programmen auf mathematisches Gegenstück (Denotat)

I PartielleFunktionen zwischen Zuständen [[c]] :σ * σ

I Beispiel:

p = 1 ; c = 1 ; // p1 w h i l e ( c <= n ) {

p = p c ; c = c + 1 ; // p2 }

// p3

[[p1]](σ) =σ(p 7→1)(c 7→1)

[[p2]](σ) =σ(p 7→σ(p)σ(c))(c 7→σ(c) + 1) [[p3]] =fix([[p2]])◦[[p1]]

Korrekte Software 19 [22]

(32)

Axiomatische Semantik

I Kernkonzept: Charakterisierung von Programmen durch Zusicherungen

I Zusicherungen sind zustandsabhängige Prädikate

I Beispiel (mitn= 3) // (1)

p = 1 ; // (2) c = 1 ; // (3) w h i l e( c <= n ) {

// (4) p = p c ; c = c + 1 ; } // (5)

(1) n= 3

(2) p = 1∧n = 3

(3) p = 1∧c = 1∧n= 3 (4) ???

(5) p = 6∧c = 4∧n= 3

(33)

I Kernkonzept: Charakterisierung von Programmen durch Zusicherungen

I Zusicherungen sind zustandsabhängige Prädikate

I Beispiel (mitn= 3) // (1)

p = 1 ; // (2) c = 1 ; // (3) w h i l e( c <= n ) {

// (4) p = p c ; c = c + 1 ; } // (5)

(1) n= 3

(2) p = 1∧n = 3

(3) p = 1∧c = 1∧n= 3

(4) (p = 1∧c = 1∨p= 1∧c = 2∨ p = 2∧c = 3∨p= 6∧c = 4)

n= 3

(5) p = 6∧c = 4∧n= 3

Korrekte Software 20 [22]

(34)

Axiomatische Semantik

I Kernkonzept: Charakterisierung von Programmen durch Zusicherungen

I Zusicherungen sind zustandsabhängige Prädikate

I Beispiel (mitn= 3) // (1)

p = 1 ; // (2) c = 1 ; // (3) w h i l e( c <= n ) {

// (4) p = p c ; c = c + 1 ; } // (5)

(1) n= 3

(2) p = 1∧n = 3

(3) p = 1∧c = 1∧n= 3 (4) p = (c −1)!∧n= 3

(5) p = 6∧c = 4∧n= 3

(35)

p = 1;

c := 1;

while (c <= n) { p= p * c;

c= c + 1;

}

Operational

Axiomatisch Denotational

Programm

Korrekte Software 21 [22]

(36)

Zusammenfassung

I Wir wollen dieBedeutung(Semantik) von Programmen beschreiben, um ihre Korrektheit beweisen zu können.

I Dazu gibt es verschiedene Ansätze, die wir betrachten werden.

I Nächste Woche geht es mit dem ersten los:operationaleSemantik

(37)

Serge Autexier, Christoph Lüth

Universität Bremen

Sommersemester 2018

14:15:47 2018-06-22 1 [26]

(38)

Fahrplan

I Einführung

I Operationale Semantik

I Denotationale Semantik

I Äquivalenz der Operationalen und Denotationalen Semantik

I Die Floyd-Hoare-Logik

I Invarianten und die Korrektheit des Floyd-Hoare-Kalküls

I Strukturierte Datentypen

I Modellierung und Spezifikation

I Verifikationsbedingungen

I Vorwärts mit Floyd und Hoare

I Funktionen und Prozeduren

I Referenzen

(39)

// GGT(A,B)

i f ( a == 0 ) r = b ; e l s e {

w h i l e ( b != 0 ) { i f ( a <= b )

b = b a ; e l s e a = a b ; }

r = a ; }

I Programme berechnenWerte

I Basierend auf

I Werte sindVariablenzugewiesen

I Evaluation vonAusdrücken

I Folgt dem Programmablauf

Korrekte Software 3 [26]

(40)

Unsere Programmiersprache

Wir betrachten einen Ausschnitt der ProgrammierspracheC(C0).

Ausbaustufe 1 kennt folgende Konstrukte:

I Typen: int;

I Ausdrücke: Variablen, Literale (für ganze Zahlen), arithmetische Operatoren (für ganze Zahlen), Relationen (==,<, . . . ), boolsche Operatoren (&&, ||);

I Anweisungen:

I Fallunterscheidung (if. . .else. . . ), Iteration (while), Zuweisung, Blöcke;

I Sequenzierung und leere Anweisung sind implizit

(41)

I Die (operationale) Semantik einer imperativen Sprache wie C0 ist ein Zustandsübergang: das System hat einen impliziten Zustand, der durch Zuweisung vonWertenan Adressen geändert werden kann.

Systemzustände

I Ausdrücke werten zuWerten V(hier ganze Zahlen) aus.

I AdressenLocsind hier Programmvariablen (Namen)

I EinSystemzustandbildet Adressen auf Werte ab: Σ =Loc*V

I Ein Programm bildet einen Anfangszustandmöglicherweiseauf einen Endzustand ab (wenn esterminiert).

I Zusicherungen sind Prädikate über dem Systemzustand.

Korrekte Software 5 [26]

(42)

C0: Ausdrücke und Anweisungen

Aexp a::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1/a2

Bexp b ::=1|0|a1==a2 |a1<a2|!b |b1&&b2 |b1||b2 Exp e :=a|b

Stmt c ::= Idt=Exp

| if(b) c1 else c2

| while (b) c

| c1;c2

| { }

NB: Nicht diekonkrete Syntax.

(43)

x = 1 ;

w h i l e ( y != 0 ) { y = y−1;

x = 2∗x ; }

// {x = 2Y}

// {a0b0}

r = b ; q = 0 ;

w h i l e ( b <= r ) { r = r−a ;

q = q +1;

}

// {a=bq+rr <b}

c = 1 ;

w h i l e ( c<=n ) { c = c +1;

p = p∗c ; }

//{p=n!}

//{0a}

t = 1 ; s = 1 ; i = 0 ;

w h i l e ( s <= a ) { t = t + 2 ; s = s + t ; i = i + 1 ; }

//{i2aa<(i+ 1)2}

Korrekte Software 7 [26]

(44)

Operationale Semantik: Arithmetische Ausdrücke

Ein arithmetischer Ausdruck a wertet unter gegebenen Zustandσ zu einer ganzen Zahl n (Wert) aus oder zu einem Fehler⊥.

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2

I Zustände bilden Adressen/Programmvariablen auf Werte ab (σ)

ha, σi →Aexp n|⊥

Regeln:

hn, σi →Aexp n xLoc,xDom(σ), σ(x) =v

hx, σi →Aexp v

xLoc,x6∈Dom(σ) hx, σi →Aexp

(45)

Operationale Semantik: Arithmetische Ausdrücke

Ein arithmetischer Ausdruck a wertet unter gegebenen Zustandσ zu einer ganzen Zahl n (Wert) aus oder zu einem Fehler⊥.

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2

I Zustände bilden Adressen/Programmvariablen auf Werte ab (σ)

ha, σi →Aexp n|⊥

Regeln:

hn, σi →Aexp n

Korrekte Software 8 [26]

(46)

Operationale Semantik: Arithmetische Ausdrücke

Ein arithmetischer Ausdruck a wertet unter gegebenen Zustandσ zu einer ganzen Zahl n (Wert) aus oder zu einem Fehler⊥.

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2

I Zustände bilden Adressen/Programmvariablen auf Werte ab (σ)

ha, σi →Aexp n|⊥

Regeln:

hn, σi →Aexp n xLoc,xDom(σ), σ(x) =v

hx, σi →Aexp v

xLoc,x6∈Dom(σ) hx, σi →Aexp

(47)

Operationale Semantik: Arithmetische Ausdrücke

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2 ha, σi →Aexp n⊥¯

ha1, σi →Aexp n1 ha2, σi →Aexp n2 niZ,n Summe n1 undn2 ha1+a2, σi →Aexp n

ha1, σi →Aexp n1 ha2, σi →Aexp n2 falls n1 =⊥oder n2 =⊥ ha1+a2, σi →Aexp

ha1, σi →Aexp n1 ha2, σi →Aexp n2 fallsn1 =⊥oder n2 =⊥ ha1a2, σi →Aexp

Korrekte Software 9 [26]

(48)

Operationale Semantik: Arithmetische Ausdrücke

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2 ha, σi →Aexp n⊥¯

ha1, σi →Aexp n1 ha2, σi →Aexp n2 niZ,n Summe n1 undn2 ha1+a2, σi →Aexp n

ha1, σi →Aexp n1 ha2, σi →Aexp n2 falls n1 =⊥oder n2 =⊥ ha1+a2, σi →Aexp

ha1, σi →Aexp n1 ha2, σi →Aexp n2 niZ,n Diff.n1 und n2 ha1a2, σi →Aexp n

ha1, σi →Aexp n1 ha2, σi →Aexp n2 falls n1 =⊥oder n2 =⊥ ha1a2, σi →Aexp

(49)

Operationale Semantik: Arithmetische Ausdrücke

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2

ha, σi →Aexpn|⊥

ha1, σi →Aexpn1 ha2, σi →Aexpn2 niZ,nProduktn1und n2

ha1a2, σi →Aexpn

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=oder n2= ha1a2, σi →Aexp

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥,n2=odern2= 0 ha1/a2, σi →Aexp

Korrekte Software 10 [26]

(50)

Operationale Semantik: Arithmetische Ausdrücke

I Aexpa::=Z|Idt|a1+a2 |a1a2 |a1a2 |a1 / a2

ha, σi →Aexpn|⊥

ha1, σi →Aexpn1 ha2, σi →Aexpn2 niZ,nProduktn1und n2

ha1a2, σi →Aexpn

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=oder n2= ha1a2, σi →Aexp

ha1, σi →Aexpn1 ha2, σi →Aexpn2 niZ,n26= 0,nQuotientn1,n2

ha1/a2, σi →Aexp n

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥,n2=odern2= 0 ha1/a2, σi →Aexp

(51)

Sei σ(x) = 6, σ(y) = 5.

h(x+y)(xy), σi →Aexp

Korrekte Software 11 [26]

(52)

Beispiel-Ableitungen

Sei σ(x) = 6, σ(y) = 5.

hx+y, σi →Aexp hxy, σi →Aexp

h(x+y)(xy), σi →Aexp

(53)

Sei σ(x) = 6, σ(y) = 5.

hx, σi →Aexp6

hx+y, σi →Aexp hxy, σi →Aexp

h(x+y)(xy), σi →Aexp

Korrekte Software 11 [26]

(54)

Beispiel-Ableitungen

Sei σ(x) = 6, σ(y) = 5.

hx, σi →Aexp6 hy, σi →Aexp 5

hx+y, σi →Aexp hxy, σi →Aexp

h(x+y)(xy), σi →Aexp

(55)

Sei σ(x) = 6, σ(y) = 5.

hx, σi →Aexp6 hy, σi →Aexp 5

hx+y, σi →Aexp11 hxy, σi →Aexp

h(x+y)(xy), σi →Aexp

Korrekte Software 11 [26]

(56)

Beispiel-Ableitungen

Sei σ(x) = 6, σ(y) = 5.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp

h(x+y)(xy), σi →Aexp

(57)

Sei σ(x) = 6, σ(y) = 5.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp 1 h(x+y)(xy), σi →Aexp

Korrekte Software 11 [26]

(58)

Beispiel-Ableitungen

Sei σ(x) = 6, σ(y) = 5.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp 1 h(x+y)(xy), σi →Aexp11

(59)

Sei σ(x) = 6, σ(y) = 5.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp 1 h(x+y)(xy), σi →Aexp11

h(xx)(yy), σi →Aexp

Korrekte Software 11 [26]

(60)

Beispiel-Ableitungen

Sei σ(x) = 6, σ(y) = 5.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp 1 h(x+y)(xy), σi →Aexp11

hx, σi →Aexp 6 hx, σi →Aexp6 hxx, σi →Aexp 36 h(xx)(yy), σi →Aexp

(61)

Sei σ(x) = 6, σ(y) = 5.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp 1 h(x+y)(xy), σi →Aexp11

hx, σi →Aexp6 hx, σi →Aexp6 hxx, σi →Aexp36

hy, σi →Aexp5 hy, σi →Aexp 5 hyy, σi →Aexp25 h(xx)(yy), σi →Aexp

Korrekte Software 11 [26]

(62)

Beispiel-Ableitungen

Sei σ(x) = 6, σ(y) = 5.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp 5 hxy, σi →Aexp 1 h(x+y)(xy), σi →Aexp11

hx, σi →Aexp6 hx, σi →Aexp6 hxx, σi →Aexp36

hy, σi →Aexp5 hy, σi →Aexp 5 hyy, σi →Aexp25 h(xx)(yy), σi →Aexp11

(63)

Regeln:

hb, σi →Bexp1|0|⊥

h1, σi →Bexp1 h0, σi →Bexp0

ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni 6=⊥,n1 und n2 gleich ha1 ==a2, σi →Bexp1

ha1, σi →Aexp n1 ha2, σi →Aexp n2 ni 6=⊥,n1 und n2 ungleich ha1 ==a2, σi →Bexp0

ha1, σi →Aexp n1 ha2, σi →Aexp n2 n1 =⊥ orn2=⊥ ha1 ==a2, σi →Bexp

Korrekte Software 12 [26]

(64)

Operationale Semantik: Boolesche Ausdrücke

I Bexpb::= 0|1|a1 ==a2 |a1 <a2 |!b |b1&&b2|b1 || b2 Regeln:

hb, σi →Bexp1|0|⊥

hb, σi →Bexp1 h!b, σi →Bexp 0

hb, σi →Bexp 0 h!b, σi →Bexp1

hb, σi →Bexp ⊥ h!b, σi →Bexp⊥ hb1, σi →Bexp t1 hb2, σi →Bexpt2

hb1&&b2, σi →Bexpt

wobei t = 1 wennt1 =t2 = 1;

t = 0 wennt1 = 0 oder (t1 = 1 und t2= 0);

t =⊥sonst

(65)

Bexpb::= 0|1|a1 ==a2 |a1 <a2 |!b |b1&&b2|b1 || b2 Regeln:

hb, σi →Bexp1|0|⊥

hb1, σi →Bexp t1 hb2, σi →Bexpt2

hb1||b2, σi →Bexpt

wobei t = 0 wennt1 =t2 = 0;

t = 1 wennt1 = 1 oder (t1= 0 und t2= 1);

t =⊥ sonst

Korrekte Software 14 [26]

(66)

Operationale Semantik: Anweisungen

I Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Beispiel:

hc, σi →Stmt σ0|⊥

hx = 5, σi →Stmt σ0

wobei σ0(x) = 5 undσ0(y) =σ(y) für alle y6=x

(67)

Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Regeln:

Definiere:

σ[m/x](y) :=

( m ifx =y σ(y) sonst

hx= 5, σi →Stmt σ[5/x]

Es gilt:

∀σ,n,m,∀x,y .x 6=yσ[n/x][m/y] =σ[m/y][n/x]

∀σ,n,m,∀x . σ[n/x][m/x] =σ[m/x]

Korrekte Software 16 [26]

(68)

Operationale Semantik: Anweisungen

I Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Regeln:

h{ }, σi →Stmt σ ha, σi →Aexp nZ

hx =a, σi →Stmt σ[n/x]

ha, σi →Aexp ⊥ hx =a, σi →Stmt ⊥ hc1, σi →Stmt σ0 6=⊥ hc2, σ0i →Stmt σ006=⊥

hc1;c2, σi →Stmt σ00 hc1, σi →Stmt ⊥ hc1;c2, σi →Stmt

hc1, σi →Stmt σ06=⊥ h{c2}, σ0i →Stmt

(69)

Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Regeln:

hb, σi →Bexp1 hc1, σi →Stmt σ0 hif(b) c1 else c2, σi →Stmt σ0 hb, σi →Bexp0 hc2, σi →Stmt σ0

hif(b) c1 else c2, σi →Stmt σ0 hb, σi →Bexp

hif(b) c1 else c2, σi →Stmt

Korrekte Software 18 [26]

(70)

Operationale Semantik: Anweisungen

I Stmtc ::=Idt=Exp|if (b) c1 else c2|while(b)c |c1;c2| { } Regeln:

hb, σi →Bexp0 hwhile (b) c, σi →Stmt σ

hb, σi →Bexp1 hc, σi →Stmt σ0 hwhile (b) c, σ0i →Stmt σ00 hwhile (b) c, σi →Stmt σ00

hb, σi →Bexp1 hc, σi →Stmt ⊥ hwhile(b) c, σi →Stmt

hb, σi →Bexp⊥ hwhile(b) c, σi →Stmt

(71)

x = 1 ;

w h i l e ( y != 0 ) { y = y 1 ; x = 2 x ; }

// x = 2y σ(y) = 3

Korrekte Software 20 [26]

(72)

Äquivalenz arithmetischer Ausdrücke

Gegeben zwei Aexp a1 anda2

I Sind sie gleich?

a1Aexp a2 gdw ∀σ,n.ha1, σi →Aexp n⇔ ha2, σi →Aexp n ( xx ) + 2xy + ( yy ) und ( x+y ) ( x+y )

I Wann sind sie gleich?

∃σ,n.ha1, σi →Aexp n⇔ ha2, σi →Aexp n

x∗x und 9∗x+22

x∗x und xx+1

(73)

Gegeben zwei Bexp-Ausdrückeb1 and b2 I Sind sie gleich?

b1Bexp b2 iff ∀σ,b.hb1, σi →Bexpb ⇔ hb2, σi →Bexp b A | | (A && B) und A

Korrekte Software 22 [26]

(74)

Beweisen

Zwei Programmec0,c1 sind äquivalent gdw. sie die gleichen Zustandsveränderungen bewirken. Formal definieren wir Definition

c0c1 iff ∀σ, σ0.hc0, σi →Stmt σ0 ⇔ hc1, σi →Stmt σ0

Ein einfaches Beispiel:

Lemma

Sei wwhile(b) c mit bBexp, cStmt.

Dann gilt: wif(b){c;w} else { } Beweis an der Tafel

Referenzen

ÄHNLICHE DOKUMENTE

I Die (operationale) Semantik einer imperativen Sprache wie C0 ist ein Zustandsübergang: das System hat einen impliziten Zustand, der durch Zuweisung von Werten an Adressen

Zu zeigen ist, dass sowohl w also auch if (b) {c; w} else { } zu dem selben Programmzustand auswerten oder beide zu

Korrekte Software: Grundlagen und Methoden Vorlesung 3 vom 17.04.18: Denotationale Semantik.. Serge Autexier,

[r]

Korrekte Software: Grundlagen und Methoden Vorlesung 8 vom 22.05.17: Funktionen und Prozeduren. Serge Autexier,

I Trait (Mix-ins): abstrakte Klassen, Interfaces; Haskell: Typklassen. I „Abstrakte Klasse

sie die gleichen

Korrekte Software: Grundlagen und Methoden Vorlesung 4 vom 24.04.17: Denotationale Semantik.. Serge Autexier,