Korrekte Software: Grundlagen und Methoden Vorlesung 1 vom 02.04.19
Einführung
Serge Autexier, Christoph Lüth Universität Bremen Sommersemester 2019
11:27:18 2019-07-04 1 [22]
Organisatorisches
IVeranstalter:
Christoph Lüth christoph.lueth@dfki.de
MZH 4186, Tel. 59830
Serge Autexier serge.autexier@dfki.de Cartesium 1.49, Tel. 59834 ITermine:
IVorlesung: Dienstag, 12 – 14, MZH 1100 IÜbung: Donnerstag, 12 – 14, MZH 1450 IWebseite:
http://www.informatik.uni-bremen.de/~cxl/lehre/ksgm.ss19
Korrekte Software 2 [22]
Übungsbetrieb
I“Leichtgewichtige” Übungsblätter, diein der Übungbearbeitet und schnellkorrigiert werden können.
IÜbungsblättervertiefenVorlesungsstoff, Bewertung gibt Feedback.
IÜbungsbetrieb:
IGruppen bis zu drei Studierende IAusgabe: Donnerstag in der Übung IBearbeitung: in der Übung IAbgabe: Donnerstag abend
Korrekte Software 3 [22]
Prüfungsform und Übungsbetrieb
I10 Übungsblätter (geplant) IBewertung:
IA (sehr gut, 1.3) — nichts zu meckern, keine/kaum Fehler IB (gut, 2.3) — kleine Fehler, sonst gut
IC (befriedigend, 3.3) — größere Fehler oder Mängel INicht bearbeitet — oder zu viele Fehler
IPrüfungsleistung:
IMündliche Prüfung
IEinzelprüfung ca. 20– 30 Minuten
IÜbungsbetrieb (bis zu 20% Bonuspunkte, keine Voraussetzung)
Korrekte Software 4 [22]
Warum Korrekte Software?
Korrekte Software 5 [22]
Software-Disaster I: Therac-25
Korrekte Software 6 [22]
Software-Disasters II: Space
Mariner 1 (27.08.1962), Mars Climate Orbiter (1999), Ariane 5 (04.06.1996)
Korrekte Software 7 [22]
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 ; }
Korrekte Software 8 [22]
Software-Disaster IV: Airbus A400M
Sevilla, 09.05.2015
Korrekte Software 9 [22]
Inhalt der Vorlesung
Korrekte Software 10 [22]
Themen
Korrekte Software im Lehrbuch:
ISpielzeugsprache IWenig Konstrukte IKleine Beispiele
Korrekte Software im Einsatz:
IRichtige Programmiersprache IMehr als nur ganze Zahlen ISkalierbarkeit — wie können
große Programme verifiziert werden?
Korrekte Software 11 [22]
Inhalt
IGrundlagen:
IBeweis derKorrektheitvon Programmen: derFloyd-Hoare-Kalkül IBedeutungvon Programmen:Semantik
IBetrachtete Programmiersprache: “C0” (erweiterte Untermenge von C)
IErweiterung der Programmkonstrukte und des Hoare-Kalküls:
1 Referenzen (Zeiger)
2 Funktion und Prozeduren (Modularität) 3 ReicheDatenstrukturen(Felder,struct)
Korrekte Software 12 [22]
Fahrplan
IEinführung
IOperationale Semantik IDenotationale Semantik
IÄquivalenz der Operationalen und Denotationalen Semantik IDer Floyd-Hoare-Kalkül
IInvarianten und die Korrektheit des Floyd-Hoare-Kalküls IStrukturierte Datentypen
IVerifikationsbedingungen IVorwärts mit Floyd und Hoare IModellierung
ISpezifikation von Funktionen IReferenzen und Speichermodelle
IFunktionsaufrufe und das Framing-Problem IAusblick und Rückblick
Korrekte Software 13 [22]
Warum Semantik?
Korrekte Software 14 [22]
Idee
IWas wird hier berechnet?p=n!
IWarum? Wie können wir das beweisen?
IWir 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]
Semantik von Programmiersprachen
Drei wesentliche Möglichkeiten:
IOperationale Semantik:
Ausführung auf einerabstraktenMaschine IDenotationale Semantik:
Abbildung in einmathematisches Objekt IAxiomatische Semantik:
Beschreibung durch eines Programmes durch seineEigenschaften
Korrekte Software 16 [22]
Unsere Sprache C0
IC0 ist eineUntermengeder Sprache C IC0-Programme sindausführbareC-Programme IErste Ausbaustufe:
IZuweisungen, Fallunterscheidungen, Schleifen IDatentypen: ganze Zahlen mit Arithmetik IRelationen: Vergleich (=,≤)
IBoolsche Operatoren: Konjunktion, Disjunktion, Negation I1. Ausbaustufe: Felder und Strukturen
I2. Ausbaustufe: Funktionen und Prozeduren (nur Ausblick) I3. Ausbaustufe: Referenzen (nur Ausblick)
IFehlt:union,goto, . . .
Korrekte Software 17 [22]
Operationale Semantik
IKernkonzept: Zustandstandsübergänge einer abstrakten Maschine IAbstrakte Maschine hatimpliziten Zustand
IZustand ordnetAdressenveränderlicheWertezu IKonkretes Beispiel:n7→3,pundcundefiniert
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
Korrekte Software 18 [22]
Denotationale Semantik
IKernkonzept: Abbildung von Programmen auf mathematisches Gegenstück (Denotat)
IPartielleFunktionen zwischen Zuständen [[c]] :σ * σ IBeispiel:
p = 1 ; c = 1 ; //p1
w h i l e ( c <= n ) { p = p ∗ c ; c = c + 1 ; //p2
} //p3
[[p1]](σ) =σ(p7→1)(c7→1)
[[p2]](σ) =σ(p7→σ(p)∗σ(c))(c7→σ(c) + 1)
[[p3]](σ)[[p3]] =???fix(Γ([[c≤n]])[[p2]]))([[p1]](σ))fix(Γ([[c≤n]])([[p2]]))◦[[p1]]
Γ([[c≤n]])([[p2]])(ϕ)(σ) =
(σ if [[c≤n]](σ) = 0
(ϕ◦[[p2]])(σ) if [[c≤n]](σ) = 1 Γ(β)(ρ)(ϕ)(σ) =
(σ ifβ(σ) = 0 (ϕ◦ρ)(σ) ifβ(σ) = 1
Korrekte Software 19 [22]
Axiomatische Semantik
IKernkonzept: Charakterisierung von Programmen durch Zusicherungen
IZusicherungen sind zustandsabhängige Prädikate IBeispiel (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
p= (c−1)!∧n= 3
(5) p= 6∧c= 4∧n= 3
Korrekte Software 20 [22]
Drei Semantiken — Eine Sicht
p = 1;
c := 1;
while (c <= n) { p= p * c;
c= c + 1;
}
Operational
Axiomatisch Denotational
Programm
Korrekte Software 21 [22]
Zusammenfassung
IWir wollen dieBedeutung(Semantik) von Programmen beschreiben, um ihre Korrektheit beweisen zu können.
IDazu gibt es verschiedene Ansätze, die wir betrachten werden.
INächste Woche geht es mit dem ersten los:operationaleSemantik
Korrekte Software 22 [22]
Korrekte Software: Grundlagen und Methoden Vorlesung 2 vom 09.04.19
Operationale Semantik
Serge Autexier, Christoph Lüth Universität Bremen Sommersemester 2019
11:27:19 2019-07-04 1 [26]
Fahrplan
IEinführung
IOperationale Semantik IDenotationale Semantik
IÄquivalenz der Operationalen und Denotationalen Semantik IDer Floyd-Hoare-Kalkül
IInvarianten und die Korrektheit des Floyd-Hoare-Kalküls IStrukturierte Datentypen
IVerifikationsbedingungen IVorwärts mit Floyd und Hoare IModellierung
ISpezifikation von Funktionen IReferenzen und Speichermodelle
IFunktionsaufrufe und das Framing-Problem IAusblick und Rückblick
Korrekte Software 2 [26]
Zutaten
// 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 ; }
IProgramme berechnenWerte IBasierend auf
I Werte sindVariablenzugewiesen I Evaluation vonAusdrücken IFolgt dem Programmablauf
Korrekte Software 3 [26]
Unsere Programmiersprache
Wir betrachten einen Ausschnitt der ProgrammierspracheC(C0).
Ausbaustufe 1 kennt folgende Konstrukte:
ITypen:int;
IAusdrücke: Variablen, Literale (für ganze Zahlen), arithmetische Operatoren (für ganze Zahlen), Relationen (==, <, . . . ), boolsche Operatoren (&&, || );
IAnweisungen:
IFallunterscheidung (if. . .else. . . ), Iteration (while), Zuweisung, Blöcke;
ISequenzierung und leere Anweisung sind implizit
Korrekte Software 4 [26]
C0: Ausdrücke und Anweisungen
Aexp a::=Z|Idt|a1+a2|a1−a2|a1∗a2|a1/a2 Bexp b::=1|0|a1==a2|a1<a2|!b|b1&&b2|b1||b2
Expe:=a|b Stmt c::= Idt=Exp
| if(b)c1 elsec2
| while(b)c
| c1;c2
| { } NB: Nicht diekonkreteSyntax.
Korrekte Software 5 [26]
Eine Handvoll Beispiele
a = (3+ y )∗x+5∗b ; a = ((3+ y )∗x )+(5∗b ) ; a = 3+y∗x+5∗b ;
p = 1 ; c = 1 ;
w h i l e ( c <= n ) { p= p∗ c ; c= c+ 1 ; }
Korrekte Software 6 [26]
Semantik von C0
IDie (operationale) Semantik einer imperativen Sprache wie C0 ist ein Zustandsübergang: das System hat einen impliziten Zustand, der durch Zuweisung vonWertenanAdressengeändert werden kann.
Systemzustände
IAusdrücke werten zuWertenV(hier ganze Zahlen) aus.
IAdressenLocsind hier Programmvariablen (Namen):Loc=Idt IEinSystemzustandbildet Adressen auf Werte ab: Σ =Loc*V IEin Programm bildet einen Anfangszustandmöglicherweiseauf einen
Endzustand ab (wenn esterminiert).
Korrekte Software 7 [26]
Partielle, endliche Abbildungen
Zustände sindpartielle, endliche Abbildungen(finite partial maps) f :X*A
Notation:
If(x) für den Wert vonxinf (lookup) If(x) =⊥wennxnicht inf (undefined)
If[n/x] für den Update an der Stellexmit dem Wertn:
f[n/x](y)=def
(n ifx=y f(y) otherwise
Ihx7→n,y7→miu.ä. für konkrete Abbildungen.
Ihiist die leere (überall undefinierte Abbildung):
hi(x) =⊥
Korrekte Software 8 [26]
Operationale Semantik: Arithmetische Ausdrücke
Ein arithmetischer Ausdruckawertet unter gegebenen Zustandσzu einer ganzen Zahln(Wert) aus oder zu einem Fehler⊥.
IAexpa::=Z|Idt|a1+a2|a1−a2|a1∗a2|a1/a2 ha, σi →Aexpn| ⊥ Regeln:
hn, σi →Aexpn x∈Idt,x∈Dom(σ), σ(x) =v
hx, σi →Aexpv
x∈Idt,x6∈Dom(σ) hx, σi →Aexp⊥
Korrekte Software 9 [26]
Operationale Semantik: Arithmetische Ausdrücke
IAexpa::=Z|Idt|a1+a2|a1−a2|a1∗a2|a1/a2 ha, σi →Aexpn| ⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nSummen1undn2 ha1+a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1+a2, σi →Aexp⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nDiff.n1undn2 ha1−a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1−a2, σi →Aexp⊥
Korrekte Software 10 [26]
Operationale Semantik: Arithmetische Ausdrücke
IAexpa::=Z|Idt|a1+a2|a1−a2|a1∗a2|a1/a2 ha, σi →Aexpn| ⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nProduktn1undn2
ha1∗a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1∗a2, σi →Aexp⊥
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,n26= 0,nQuotientn1,n2
ha1/a2, σi →Aexpn
ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥,n2=⊥odern2= 0 ha1/a2, σi →Aexp⊥
Korrekte Software 11 [26]
Beispiel-Ableitungen
Seiσdef=hx7→6,y7→5i.
hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11
hx, σi →Aexp6 hy, σi →Aexp5 hx−y, σi →Aexp1 h(x+y)∗(x−y), σi →Aexp11
hx, σi →Aexp6 hx, σi →Aexp6 hx∗x, σi →Aexp36
hy, σi →Aexp5 hy, σi →Aexp5 hy∗y, σi →Aexp25 h(x∗x)−(y∗y), σi →Aexp11
Korrekte Software 12 [26]
Operationale Semantik: Boolesche Ausdrücke
IBexpb::= 0|1|a1==a2|a1 <a2|!b|b1&&b2|b1 || b2 hb, σi →Bexptrue|false| ⊥
Regeln:
h1, σi →Bexptrue h0, σi →Bexpfalse ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni6=⊥,n1undn2gleich
ha1==a2, σi →Bexptrue
ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni6=⊥,n1undn2ungleich ha1==a2, σi →Bexpfalse
ha1, σi →Aexpn1 ha2, σi →Aexpn2 n1=⊥orn2=⊥ ha1==a2, σi →Bexp⊥
Korrekte Software 13 [26]
Operationale Semantik: Boolesche Ausdrücke
IBexpb::= 0|1|a1==a2|a1 <a2|!b|b1&&b2|b1 || b2 hb, σi →Bexptrue|false| ⊥
Regeln:
hb, σi →Bexptrue h!b, σi →Bexpfalse
hb, σi →Bexpfalse h!b, σi →Bexptrue
hb, σi →Bexp⊥ h!b, σi →Bexp⊥ hb1, σi →Bexpt1 hb2, σi →Bexpt2
hb1&&b2, σi →Bexpt
wobei t=truewennt1=t2=true;
t=falsewennt1=falseoder (t1=trueundt2=false);
t=⊥sonst
Korrekte Software 14 [26]
Operationale Semantik: Boolesche Ausdrücke
IBexpb::= 0|1|a1==a2|a1 <a2|!b|b1&&b2|b1 || b2 hb, σi →Bexptrue|false| ⊥
Regeln:
hb1, σi →Bexpt1 hb2, σi →Bexpt2 hb1||b2, σi →Bexpt wobei t=falsewennt1=t2=false;
t=truewennt1=trueoder (t1=falseundt2=true);
t=⊥sonst
Korrekte Software 15 [26]
Operationale Semantik: Anweisungen
IStmtc::=Idt=Exp|if(b)c1 elsec2|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 alley6=x
Korrekte Software 16 [26]
Operationale Semantik: Anweisungen
IStmtc::=Idt=Exp|if(b)c1 else c2|while(b)c|c1;c2| { } Regeln:
h{ }, σi →Stmtσ ha, σi →Aexpn∈Z
hx=a, σi →Stmtσ[n/x]
ha, σi →Aexp⊥ hx=a, σi →Stmt⊥ hc1, σi →Stmtσ06=⊥ hc2, σ0i →Stmtσ006=⊥
hc1;c2, σi →Stmtσ00 hc1, σi →Stmt⊥ hc1;c2, σi →Stmt⊥
hc1, σi →Stmtσ06=⊥ hc2, σ0i →Stmt⊥ hc1;c2, σi →Stmt⊥
Korrekte Software 17 [26]
Operationale Semantik: Anweisungen
IStmtc::=Idt=Exp|if(b)c1 elsec2|while(b)c|c1;c2| { } Regeln:
hb, σi →Bexptrue hc1, σi →Stmtσ0 hif(b)c1 elsec2, σi →Stmtσ0 hb, σi →Bexpfalse hc2, σi →Stmtσ0
hif(b)c1 elsec2, σi →Stmtσ0 hb, σi →Bexp⊥ hif(b)c1 elsec2, σi →Stmt⊥
Korrekte Software 18 [26]
Operationale Semantik: Anweisungen
IStmtc::=Idt=Exp|if(b)c1 else c2|while(b)c|c1;c2| { } Regeln:
hb, σi →Bexpfalse hwhile(b)c, σi →Stmtσ
hb, σi →Bexptrue hc, σi →Stmtσ0 hwhile(b)c, σ0i →Stmtσ00 hwhile(b)c, σi →Stmtσ00
hb, σi →Bexptrue hc, σi →Stmt⊥ hwhile(b)c, σi →Stmt⊥
hb, σi →Bexp⊥ hwhile(b)c, σi →Stmt⊥
Korrekte Software 19 [26]
Beispiel
x = 1 ;
w h i l e ( y != 0 ) { y = y− 1 ; x = 2 ∗ x ; }
//x= 2y σdef=hy7→3i
Korrekte Software 20 [26]
Äquivalenz arithmetischer Ausdrücke
Gegeben zwei Aexpa1anda2 ISind sie gleich?
a1∼Aexpa2gdw∀σ,n.ha1, σi →Aexpn⇔ ha2, σi →Aexpn ( x∗x ) + 2∗x∗y + ( y∗y ) und ( x+y ) ∗ ( x+y )
IWann sind sie gleich?
∀σ,n.ha1, σi →Aexpn⇔ ha2, σi →Aexpn
x∗x und 8∗x+9
x∗x und x∗x+1
Korrekte Software 21 [26]
Äquivalenz Boolscher Ausdrücke
Gegeben zwei Bexp-Ausdrückeb1andb2 ISind sie gleich?
b1∼Bexpb2iff∀σ,b.hb1, σi →Bexpb⇔ hb2, σi →Bexpb A | | (A && B) und A
Korrekte Software 22 [26]
Beweisen
Zwei Programmec0,c1sind äquivalent gdw. sie die gleichen Zustandsveränderungen bewirken. Formal definieren wir Definition
c0∼c1iff∀σ, σ0.hc0, σi →Stmtσ0⇔ hc1, σi →Stmtσ0
Ein einfaches Beispiel:
Lemma
Sei w≡while(b)c mit b∈Bexp, c∈Stmt.
Dann gilt: w∼if(b){c;w} else{ }
Korrekte Software 23 [26]
Beweis
Gegeben beliebiger Programmzustandσ. Zu zeigen ist, dass sowohlw also auchif(b){c;w} else{ }zu dem selben Programmzustand auswerten oder beide zu einem Fehler. Der Beweis geht per Fallunterscheidung über die Auswertung von Teilausdrücken bzw.
Teilprogrammen.
1 hb, σi →Bexp⊥:
hwhile(b)c, σi →Stmt⊥ hif(b){c;w} else{ }, σi →Stmt⊥
2 hb, σi →Bexpfalse:
hwhile(b)c, σi →Stmtσ
hif(b){c;w} else{ }, σi →Stmth{ }, σi →Stmtσ
Korrekte Software 24 [26]
Beweis II
3 hb, σi →Bexptrue:
1 hc, σi →Stmtσ0 h
w
z }| {
while(b)c, σi →Stmthc, σi →Stmtσ0 hw, σ0i →Stmtσ00
hif(b){c;w}else{ }, σi →Stmth{c;w}, σi →Stmthc, σi →Stmtσ0 hw, σ0i →Stmtσ00
2 hc, σi →Stmt⊥ h
w
z }| {
while(b)c, σi →Stmthc, σi →Stmt⊥
hif(b){c;w}else{ }, σi →Stmth{c;w}, σi →Stmthc, σi →Stmt⊥
Korrekte Software 25 [26]
Zusammenfassung
IOperationale Semantik als ein Mittel zur Beschreibung der Semantik
IAuswertungsregeln arbeiten entlang der syntaktischen Struktur
IWerten Ausdrücke zu Werten aus und Programme zu Zuständen (zu gegebenen Zustand)
IFragen zu Programmen: Gleichheit
Korrekte Software 26 [26]
Korrekte Software: Grundlagen und Methoden Vorlesung 3 vom 11.04.19
Denotationale Semantik
Serge Autexier, Christoph Lüth Universität Bremen Sommersemester 2019
11:27:20 2019-07-04 1 [27]
Fahrplan
IEinführung
IOperationale Semantik IDenotationale Semantik
IÄquivalenz der Operationalen und Denotationalen Semantik IDer Floyd-Hoare-Kalkül
IInvarianten und die Korrektheit des Floyd-Hoare-Kalküls IStrukturierte Datentypen
IVerifikationsbedingungen IVorwärts mit Floyd und Hoare IModellierung
ISpezifikation von Funktionen IReferenzen und Speichermodelle
IFunktionsaufrufe und das Framing-Problem IAusblick und Rückblick
Korrekte Software 2 [27]
Überblick
IKleinster Fixpunkt
IDenotationale Semantik für C0
Korrekte Software 3 [27]
Fixpunkt
ISeif :A*Aeine partielle Funktion. EinFixpunktvonf ist ein a∈A, so dassf(a) =a.
IBeispiele
IFixpunkte vonf(x) =√
xsind 0 und 1; ebenfalls fürf(x) =x2. IFür die Sortierfunktion sind alle sortierten Listen Fixpunkte
Korrekte Software 4 [27]
Regeln und Regelinstanzen
Definition
SeiReine Menge von Regelnx1...xy n,n≥0.
Die Anwendung einer Regel auf spezifischea1. . .anist eine Regelinstanz IBetrachte folgende RegelmengeR
− 22
− 23
n m
n·m
IRegelinstanzen sind
− 4
− 8
4 8
32
4 4
16
16 32 512
3 5
15 . . .
Korrekte Software 5 [27]
Induktive Definierte Mengen
Definition
SeitReine Menge von Regelinstanzen undBeine Menge. Dann definieren wir
R(B) =ˆ {y| ∃x1, . . . ,xk⊆B.x1, . . . ,xk y ∈R}und Rˆ0(B) =Bund ˆRi+1(B) = ˆR( ˆRi(B))
Korrekte Software 6 [27]
Beispiel
IBetrachte folgende RegelmengeR
− 22
− 23
n m
n·m
IWas sind Rˆ0(∅) =∅
Rˆ1(∅) = ˆR(∅) ={4,8}
Rˆ2(∅) =?{16,32,64,4,8}
Rˆ3(∅) =?{128,256,512,1024,2048,4096,16,32,64,4,8}
Rˆi+1(∅) =?{22k+3l|1≤k+l≤2i}
Korrekte Software 7 [27]
Induktive Definierte Mengen
Definition
SeitReine Menge von Regelinstanzen undBeine Menge. Dann definieren wir
R(B) =ˆ {y| ∃x1, . . . ,xk⊆B.x1, . . . ,xk y ∈R}und Rˆ0(B) =Bund ˆRi+1(B) = ˆR( ˆRi(B))
Definition (Abgeschlossen und Monoton)
IEine MengeSisabgeschlossen unterR(R-abgeschlossen)gdw.
R(S)ˆ ⊆S
IEine Operationf ist monotongdw.
∀A,B.A⊆B⇒f(A)⊆f(B)
Korrekte Software 8 [27]
Kleinster Fixpunkt Operator
Lemma
Für jede Menge von Regelinstanzen R ist die induzierte OperationRˆ monoton.
Lemma
Sei Ai= ˆRi(∅)für alle i∈Nund A=S
i∈NAi. Dann gilt (a)A ist R-abgeschlossen,
(b)R(A) =ˆ A, und
(c)A ist die kleinste R-abgeschlossene Menge.
Korrekte Software 9 [27]
Beweis von Lemma (a).
AistR-abgeschlossen:
Seix1,...,xy k ∈Rundx1, . . . ,xk⊆A.
DaA=S
i∈NAigibt es einjso dassx1, . . . ,xk⊆Aj. Also auch:
y∈R(Aˆ j) = ˆR( ˆRj(∅))
= ˆRj+1(∅)
=Aj+1⊆A.
Korrekte Software 10 [27]
Beweis von Lemma (b): ˆR(A) =A.
IR(A)ˆ ⊆A:
DaA R-abgeschlossen gilt auch ˆR(A)⊆A.
IA⊆R(A):ˆ
Seiy∈A. Dann∃n>0.y∈Anundy6∈An−1. Folglich muss es eine Regelinstanzx1,...,xy k∈Rgeben mit x1, . . . ,xk⊆An−1⊆A.
Da ˆRmonoton gilt ˆR(An−1)⊆R(A).ˆ Day∈An= ˆR(An−1) folgt darausy∈R(A).ˆ
Korrekte Software 11 [27]
Beweis von Lemma (c).
Aist die kleinsteR-abgeschlossene Menge, d.h. für jede R-abgeschlossene MengeBgiltA⊆B.
Beweis per Induktion überndass giltAn⊆B:
IBasisfall:
A0=∅ ⊆B IInduktionsschritt:
DaB R-abgeschlossen ist gilt: ˆR(B)⊆B.
Induktionsannahme:An⊆B.
Dann giltAn+1= ˆR(An)⊆R(B)ˆ ⊆Bweil ˆRmonoton undBist R-abgeschlossen.
Korrekte Software 12 [27]
Kleinster Fixpunkt Operator
Definition
fix( ˆR) =[ n∈N
Rˆn(∅) ist derkleinste Fixpunkt.
Korrekte Software 13 [27]
Kleinster Fixpunkt
IBetrachte folgende RegelmengeR
− 22
− 23
n m
n·m
IWas sind
Rˆ1(∅) = ˆR(∅) ={4,8}
Rˆ2(∅) =?
Rˆ3(∅) =?
Rˆi+1(∅) =?
IWie siehtfix( ˆR) aus?
Korrekte Software 14 [27]
Denotationale Semantik — Motivation
IOperationale Semantik
Eine Menge von Regeln, die einen Zustand und ein Programm in einen neuen Zustand oder Fehler überführen
hc, σi →Stmtσ0|⊥
IDenotationale Semantik
Eine Menge von Regeln, die ein Programm in einepartielle Funktion
| {z } Denotat von Zustand nach Zustand überführen
C[[c]] : Σ*Σ
Korrekte Software 15 [27]
Denotationale Semantik — Motivation
Zwei Programme sind äquivalent gdw. sie immer zum selben Zustand (oder Fehler) auswerten
c0∼c1iff (∀σ, σ0.hc0, σi →Stmtσ0⇔ hc1, σi →Stmtσ0) oder
Zwei Programme sind äquivalent gdw. sie dieselbe partielle Funktion denotieren
c0∼c1iff{(σ, σ0)|hc0, σi →Stmtσ0}={(σ, σ0)|hc1, σi →Stmtσ0}
Korrekte Software 16 [27]
Denotierende Funktionen
Ijedera:Aexpdenotiert eine partielle Funktion Σ*Z Ijederb:Bexpdenotiert eine partielle Funktion Σ*B Ijedesc:Stmtdenotiert eine partielle Funktion Σ*Σ
Definition (Partielle Funktion)
Einepartielle Funktionf :X*Y ist eine Relationf ⊆X×Y so dass wenn (x,y1)∈f und (x,y2)∈f danny1=y2(Rechtseindeutigkeit) Notation: fürf:X*Y, (x,y)∈f ⇐⇒f(x) =y.
Korrekte Software 17 [27]
Denotat von Aexp
A[[a]] :Aexp→(Σ*Z) A[[n]] = {(σ,n)|σ∈Σ}
A[[x]] = {(σ, σ(x))|σ∈Σ,x∈Dom(σ)}
A[[a0+a1]] = {(σ,n0+n1)|(σ,n0)∈ A[[a0]]∧(σ,n1)∈ A[[a1]]}
A[[a0−a1]] = {(σ,n0−n1)|(σ,n0)∈ A[[a0]]∧(σ,n1)∈ A[[a1]]}
A[[a0∗a1]] = {(σ,n0∗n1)|(σ,n0)∈ A[[a0]]∧(σ,n1)∈ A[[a1]]}
A[[a0/a1]] = {(σ,n0/n1)|(σ,n0)∈ A[[a0]]∧(σ,n1)∈ A[[a1]]∧n16= 0}
Korrekte Software 18 [27]
Denotat von Bexp
B[[a]] :Bexp→(Σ*B) B[[1]] = {(σ,true)|σ∈Σ}
B[[0]] = {(σ,false)|σ∈Σ}
B[[a0==a1]] = {(σ,true)|σ∈Σ,(σ,n0)∈ A[[a0]](σ), (σ,n1)∈ A[[a1]],n0=n1}
∪{(σ,false)|σ∈Σ,(σ,n0)∈ A[[a0]](σ), (σ,n1)∈ A[[a1]],n06=n1} B[[a0<a1]] = {(σ,true)|σ∈Σ,(σ,n0)∈ A[[a0]](σ),
(σ,n1)∈ A[[a1]],n0<n1}
∪{(σ,false)|σ∈Σ,(σ,n0)∈ A[[a0]](σ), (σ,n1)∈ A[[a1]],n0≥n1}
Korrekte Software 19 [27]
Denotat von Bexp
B[[a]] :Bexp→(Σ*B) B[[!b]] = {(σ,true)|σ∈Σ,(σ,false)∈ B[[b]]}
∪{(σ,false)|σ∈Σ,(σ,true)∈ B[[b]]}
B[[b1&&b2]] = {(σ,false)|σ∈Σ,(σ,false)∈ B[[b1]]}
∪{(σ,t2)|σ∈Σ,(σ,true)∈ B[[b1]],(σ,t2)∈ B[[b2]]}
B[[b1||b2]] = {(σ,true)|σ∈Σ,(σ,true)∈ B[[b1]]}
∪{(σ,t2)|σ∈Σ,(σ,false)∈ B[[b1]],(σ,t2)∈ B[[b2]]}
Korrekte Software 20 [27]
Denotat von Stmt
C[[.]] :Stmt→(Σ*Σ)
C[[x=a]] = {(σ, σ[n/x])|σ∈Σ∧(σ,n)∈ A[[a]]}
C[[c1;c2]] = C[[c2]]◦ C[[c1]] Komposition von Relationen C[[{ }]] = Id Id:={(σ, σ)|σ∈Σ}
C[[if(b)c0 elsec1]] = {(σ, σ0)|(σ,true)∈ B[[b]]∧(σ, σ0)∈ C[[c0]]}
∪{(σ, σ0)|(σ,false)∈ B[[b]]∧(σ, σ0)∈ C[[c1]]}
Aber was ist
C[[while(b)c]] =??
Korrekte Software 21 [27]
Denotationale Semantik für while
Seiw≡while(b)c(undσ∈Σ). Operational gilt:
w ∼ if(b){c;w} else{ } C[[w]] =? C[[if(b){c;w} else{ }]]
Konstruktion: Auffalten der Schleife
Γ(s)def=C[[if(b){c;s} else{ }]]
Γ0(s)def=s,Γi+1(s)def= Γ(Γi(s)) Semantik vonw: Beliebig oft auffalten
C[[w]] =[ n∈N
Γn(?) =fix(Γ) Was ist?
Korrekte Software 22 [27]
Denotationale Semantik von while
Formale Konstruktion (sist einDenotat):
Γ(s)def=C[[if(b){c;s} else{ }]]
Γ(s)def={(σ, σ0)| ∃σ00.(σ,true)∈ B[[b]]∧(σ, σ00)∈ C[[c]]∧(σ00, σ0)∈s}
∪ {(σ, σ)|(σ,false)∈ B[[b]]}
Γ ist wie ˆR, mitRdefiniert wie folgt:
R= (σ00, σ0)
(σ, σ0) |(σ,true)∈ B[[b]]∧(σ, σ00)∈ C[[c]]
∪
(σ, σ)|(σ,false)∈ B[[b]]
Dann istC[[w]] der Fixpunkt von Γ:
C[[w]] =fix(Γ)
Korrekte Software 23 [27]
Denotation für Stmt
C[[.]] :Stmt→(Σ*Σ)
C[[x=a]] = {(σ, σ[n/x])|σ∈Σ∧(σ,n)∈ A[[a]]}
C[[c1;c2]] = C[[c2]]◦ C[[c1]] Komposition von Relationen C[[{ }]] = Id Id:={(σ, σ)|σ∈Σ}
C[[if(b)c0 elsec1]] = {(σ, σ0)|(σ,true)∈ B[[b]]∧(σ, σ0)∈ C[[c0]]}
∪ {(σ, σ0)|(σ,false)∈ B[[b]]∧(σ, σ0)∈ C[[c1]]}
C[[while(b)c]] = fix(Γ) mit
Γ(ψ) = {(σ, σ0)|(σ,true)∈ B[[b]]∧(σ, σ0)∈ψ◦ C[[c]]}
∪ {(σ, σ)|(σ,false)∈ B[[b]]}
Korrekte Software 24 [27]
Der Fixpunkt bei der Arbeit
Beispielprogramme:
x= 0 ;
w h i l e ( n > 0 ) { x= x+n ; n= n−1;
}
x= 0 ; w h i l e ( 1 ) {
x= x +1;
}
x= 0 ;
w h i l e ( n < 0 ) { x= x +1;
}
Korrekte Software 25 [27]
Weitere Intuition zur Fixpunkt Konstruktion
ISeiw≡while(b)c
IZur Erinnerung: Wir haben begonnen mitw∼if(b){c;w} else{ } IDann müsste auch gelten
C[[w]]=!C[[if(b){c;w}else { }]]
IBeweis an der Tafel.
IEs müsste ferner gelten
(σ, σ0)∈ C[[w]] =⇒(σ0,false)∈ B[[b]]
IBeweis an der Tafel.
Korrekte Software 26 [27]
Zusammenfassung
IDie denotationale Semantik bildet Programme (Ausdrücke) auf partielle FunktionenΣ*Σ ab.
IZentral ist der Begriff deskleinsten Fixpunktes, der die Semantik der while-Schleife bildet.
IUndefiniertheit wirdimplizitbehandelt (durch die Partialität von Σ*Σ).
INicht-Termination und Undefiniertheit sind semantisch äquivalent.
IGenaues Verhältnis zuroperationalen Semantik? Nächste Vorlesung
Korrekte Software 27 [27]
Korrekte Software: Grundlagen und Methoden Vorlesung 4 vom 23.04.19
Äquivalenz der Operationalen und Denotationalen Semantik
Serge Autexier, Christoph Lüth Universität Bremen Sommersemester 2019
11:27:21 2019-07-04 1 [16]
Fahrplan
IEinführung
IOperationale Semantik IDenotationale Semantik
IÄquivalenz der Operationalen und Denotationalen Semantik IDer Floyd-Hoare-Kalkül
IInvarianten und die Korrektheit des Floyd-Hoare-Kalküls IStrukturierte Datentypen
IVerifikationsbedingungen IVorwärts mit Floyd und Hoare IModellierung
ISpezifikation von Funktionen IReferenzen und Speichermodelle
IFunktionsaufrufe und das Framing-Problem IAusblick und Rückblick
Korrekte Software 2 [16]
Operationale vs. denotationale Semantik
Operationalha, σi →Aexpn DenotationalA[[a]]
m∈Z hm, σi →Aexpm {(σ,m)|σ∈Σ}
x∈Loc x∈Dom(σ)
hx, σi →Aexpσ(x) {(σ, σ(x))|σ∈Σ,x∈ Dom(σ)}
x6∈Dom(σ) hx, σi →Aexp⊥
a1◦a2
ha1, σi →Aexpn ha2, σi →Aexpm n,m6=⊥
ha1◦a2, σi →Aexpn◦Im {(σ,n◦Im)|σ∈Σ,(σ,n)∈ A[[a1]],(σ,m)∈ A[[a2]]}
ha1, σi →Aexpn ha2, σi →Aexpm n=⊥oderm=⊥ ha1◦a2, σi →Aexp⊥
◦ ∈ {+,∗,−}
Korrekte Software 3 [16]
Operationale vs. denotationale Semantik
Operationalha, σi →Aexpn DenotationalA[[a]]
a1/a2
ha1, σi →Aexpn ha2, σi →Aexpm m6= 0 m,n6=⊥
ha1◦a2, σi →Aexpn◦Im {(σ,n/m)|σ∈Σ,(σ,n)∈ A[[a1]],(σ,m)∈ A[[a2]],m6=
0}
ha1, σi →Aexpn ha2, σi →Aexpm n=⊥,m=⊥oderm= 0
ha1/a2, σi →Aexp⊥
Korrekte Software 4 [16]
Äquivalenz operationale und denotationale Semantik
IFür allea∈Aexp, für allen∈Z, für alle Zuständeσ:
ha, σi →Aexpn⇔(σ,n)∈ A[[a]]
ha, σi →Aexp⊥ ⇔σ6∈Dom(A[[a]])
IBeweis Prinzip?per struktureller Induktion übera. (Warum?)
Korrekte Software 5 [16]
Operationale vs. denotationale Semantik
Operationalhb, σi →Bexp0|1 DenotationalB[[b]]
1 h1, σi →Bexp1 {(σ,1)|σ∈Σ}
0 h0, σi →Bexp0 {(σ,0)|σ∈Σ}
Korrekte Software 6 [16]
Operationale vs. denotationale Semantik
Operat.hb, σi →Bexpt DenotationalB[[b]]
a0==a1
ha0, σi →Aexpn ha1, σi →Aexpm n,m6=⊥ n=m ha0==a1, σi →Bexp1
ha0, σi →Aexpn ha1, σi →Aexpm n,m6=⊥ n6=m ha0==a1, σi →Bexp0
ha0, σi →Aexpn ha1, σi →Aexpm n=⊥oderm=⊥ ha0==a1, σi →Bexp⊥
{(σ,1)|σ∈Σ, (σ,n0)∈ A[[a0]], (σ,n1)∈ A[[a1]], n0=n1}
∪
{(σ,0)|σ∈Σ, (σ,n0)∈ A[[a0]], (σ,n1)∈ A[[a1]], n06=n1}
a1<=a2 analog
Korrekte Software 7 [16]
Operationale vs. denotationale Semantik
Operationalha, σi →Bexpb DenotationalB[[b]]
b1&&b0
hb1, σi →Bexp0
hb1&&b2, σi →0 {(σ,0)|(σ,0)∈ B[[b1]]}
hb1, σi →Bexp1 hb2, σi →Bexpb
hb1&&b2, σi →b {(σ,b)|(σ,1)∈ B[[b1]],(σ,b)∈ B[[b2]]}
hb1, σi →Bexp⊥ hb1&&b2, σi → ⊥
b1||b2 analog
!n . . .
Korrekte Software 8 [16]
Äquivalenz operationale und denotationale Semantik
IFür alleb∈Bexp, für allet∈B, for alle Zuständeσ:
hb, σi →Bexpt⇔(σ,t)∈ B[[b]]
hb, σi →Bexp⊥ ⇔σ6∈Dom(B[[b]])
IBeweis Prinzip?per struktureller Induktion überb(unter Verwendung der Äquivalenz für AExp). (Warum?)
Korrekte Software 9 [16]
Operationale vs. denotationale Semantik
Operational hc, σi →Stmtσ0|⊥
DenotationalC[[c]]
{ } h{}, σi →Stmtσ C[[{ }]] =Id
c1;c2
hc1, σi →Stmtσ06=⊥ hc2, σ0i →Stmtσ00 hc1;c2, σi →Stmtσ00
hc1, σi →Stmt⊥ hc1;c2, σi →Stmt⊥
C[[c2]]◦ C[[c1]]
x=a ha, σi →Aexpn hx=a, σi →Stmtσ[n/x]
ha, σi →Aexp⊥ hx=a, σi →Stmt⊥
{(σ, σ[n/x])|(σ,n)∈ A[[a]]}
Korrekte Software 10 [16]
Operationale vs. denotationale Semantik
Operational hc, σi →Stmtσ0|⊥
DenotationalC[[c]]
if(b)c0
hb, σi →Bexp⊥ hc, σi →Stmt⊥ hb, σi →Bexp1 hc0, σi →Stmtσ0 hc, σi →Stmtσ0
{(σ, σ0)|(σ,1)∈ B[[b]],(σ, σ0)∈ C[[c0]]}
elsec1
hb, σi →Bexp0 hc1, σi →Stmtσ0
hc, σi →Stmtσ0 {(σ, σ0)|(σ,0)∈ B[[b]],(σ, σ0)∈ C[[c1]]}
Korrekte Software 11 [16]
Operationale vs. denotationale Semantik
Operational hc, σi →Stmtσ0|⊥
DenotationalC[[c]]
while(b)c
| {z } w
hb, σi →Bexp0 hw, σi →Stmtσ
hb, σi →Bexp⊥ hw, σi →Stmt⊥
hb, σi →Bexp1 hc, σi →Stmtσ06=⊥ hw, σ0i →Stmtσ00 hw, σi →Stmtσ00
fix(Γ)
hb, σi →Bexp1 hc, σi →Stmt⊥ hw, σi →Stmt⊥ mit
Γ(ϕ) = {(σ, σ0)|(σ,1)∈ B[[b]],(σ, σ0)∈ϕ◦ C[[c]]}
∪{(σ, σ)|(σ,0)∈ B[[b]]}
Korrekte Software 12 [16]
Äquivalenz operationale und denotationale Semantik
IFür allec∈Stmt, für alle Zuständeσ, σ0: hc, σi →Stmtσ0⇔(σ, σ0)∈ C[[c]]
hc, σi →Stmt⊥ ⇒σ6∈Dom(C[[c]]) I⇒Beweis Prinzip?per Induktion über die Ableitung in der
operationalen Semantik (Warum?)
I⇐Beweis Prinzip?per struktureller Induktion überc(Verwendung der Äquivalenz für arithmetische und boolsche Ausdrücke). Für die While-Schleife Rückgriff auf Definition des Fixpunkts und Induktion über die Teilmengen Γi(∅) des Fixpunkts. (Warum?)
Korrekte Software 13 [16]
Knackpunkt
C[[w]] =fix(Γ) = Γ(fix(Γ)) = Γ([
i≥0
Γi(∅)) =[
i≥0
Γ(Γi(∅))
=[
i≥0
{(σ, σ0)|(σ,1)∈ B[[b]],(σ, σ00)∈ C[[c]],(σ00, σ0)∈Γi(∅)}
∪ {(σ, σ)|(σ,0)∈ B[[b]]}
mitw≡while(b)cInduktion überi≥0 {(σ, σ0)|(σ,1)∈ B[[b]]
| {z }
hb,σi→Bexp1
, (σ, σ00)∈ C[[c]]
| {z }
(strukt.IH)hc,σi→Stmtσ0
, (σ00, σ0)∈Γi(∅)
| {z }
(≤i IH)hw,σ00i→Stmtσ0
∪{(σ, σ)|(σ,0)∈ B[[b]]
| {z }
hw,σi→Stmtσ
}
hw, σi →Stmtσ0
Korrekte Software 14 [16]
Äquivalenz operationale und denotationale Semantik
IFür allec∈Stmt, für alle Zuständeσ, σ0: hc, σi →Stmtσ0⇔(σ, σ0)∈ C[[c]]
hc, σi →Stmt⊥ ⇒σ6∈Dom(C[[c]])
IGegenbeispiel für⇐in der zweiten Aussage: wählec≡while(1){}:
C[[c]] =∅aberhc, σi →Stmt⊥gilt nicht (sondern?).
Korrekte Software 15 [16]
Fahrplan
IEinführung
IOperationale Semantik IDenotationale Semantik
IÄquivalenz der Operationalen und Denotationalen Semantik IDer Floyd-Hoare-Kalkül
IInvarianten und die Korrektheit des Floyd-Hoare-Kalküls IStrukturierte Datentypen
IVerifikationsbedingungen IVorwärts mit Floyd und Hoare IModellierung
ISpezifikation von Funktionen IReferenzen und Speichermodelle
IFunktionsaufrufe und das Framing-Problem IAusblick und Rückblick
Korrekte Software 16 [16]
Korrekte Software: Grundlagen und Methoden Vorlesung 5 vom 07.05.19
Die Floyd-Hoare-Logik
Serge Autexier, Christoph Lüth Universität Bremen Sommersemester 2019
11:27:22 2019-07-04 1 [23]
Fahrplan
IEinführung
IOperationale Semantik IDenotationale Semantik
IÄquivalenz der Operationalen und Denotationalen Semantik IDer Floyd-Hoare-Kalkül
IInvarianten und die Korrektheit des Floyd-Hoare-Kalküls IStrukturierte Datentypen
IVerifikationsbedingungen IVorwärts mit Floyd und Hoare IModellierung
ISpezifikation von Funktionen IReferenzen und Speichermodelle
IFunktionsaufrufe und das Framing-Problem IAusblick und Rückblick
Korrekte Software 2 [23]
Drei Semantiken — Eine Sicht
p = 1;
c := 1;
while (c <= n) { p= p * c;
c= c + 1;
}
Operational
Axiomatisch Denotational
Programm
Korrekte Software 3 [23]
Floyd-Hoare-Logik: Idee
IWas wird hier berechnet?p=n!
IWarum? Wie können wir das beweisen?
IWir 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 ; }
IOperationale/denotionale Semantik nicht fürKorrektheitsbeweise geeignet: Ausdrücke werden zu groß, skaliert nicht.
IAbstraktionnötig.
IGrundidee:Zusicherungenüber den Zustand an bestimmten Punkten im Programmablauf.
Korrekte Software 4 [23]
Bob Floyd und Tony Hoare
Bildquelle: Stanford University
Robert Floyd 1936 – 2001
Bildquelle: Wikipedia
Sir Anthony Charles Richard Hoare
∗1934
Korrekte Software 5 [23]
Grundbausteine der Floyd-Hoare-Logik
IZusicherungenüber den Zustand IBeispiele:
I(B): Hier giltp=c= 1
I(D): Hier istcist um eines größer als der Wert voncan Punkt (C) IGesamtaussage: Wenn am Punkt(A)
der Wert vonn≥0, dann ist am Punkt (E)p=n!.
// (A) p= 1 ; c= 1 ; // (B)
w h i l e ( c <= n ) { p= p ∗ c ; // (C) c= c + 1 ; // (D) } // (E)
Korrekte Software 6 [23]
Grundbausteine der Floyd-Hoare-Logik
ILogische Variablen(zustandsfrei) undProgrammvariablen IZusicherungenmit logischen und Programmvariablen IFloyd-Hoare-Tripel{P}c{Q}
IVorbedingungP(Zusicherung) IProgrammc
INachbedingungQ(Zusicherung)
IFloyd-Hoare-Logik abstrahiert Programme durch logische Formeln.
Korrekte Software 7 [23]
Zusicherungen (Assertions)
IErweiterung vonAexpandBexpdurch
ILogischeVariablenVar v:=N,M,L,U,V,X,Y,Z IDefinierte Funktionen und Prädikate überAexp n!,Pn
i=1i, . . . IImplikation und Quantoren b1−→b2,∀v. .b,∃v. .b IFormal:
Aexpv a::= Z|Idt|Var|a1+a2|a1−a2|a1×a2
|f(e1, . . . ,en) Assn b::=
1|0|a1==a2|a1! =a2|a1<=a2
|!b|b1∧b2|b1||b2
|b1−→b2|p(e1, . . . ,en)|forallv;b|existsv;b Assn b::= true|false|a1=a2|a16=a2|a1≤a2
| ¬b|b1∧b2|b1∨b2
|b1−→b2|p(e1, . . . ,en)| ∀v. .b| ∃v. .b
Korrekte Software 8 [23]