• Keine Ergebnisse gefunden

Semantik von Programmiersprachen – SS 2019

N/A
N/A
Protected

Academic year: 2022

Aktie "Semantik von Programmiersprachen – SS 2019"

Copied!
5
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Lehrstuhl für Programmierparadigmen

Sebastian Ullrich Max Wagner

sebastian.ullrich@kit.edu maximilian.wagner@kit.edu

Semantik von Programmiersprachen – SS 2019

http://pp.ipd.kit.edu/lehre/SS2019/semantik

Lösungen zu Blatt 12: Continuations Besprechung: 15.07.2019

1. Welche der folgenden Aussagen sind richtig, welche falsch? (H)

(a) raise X; x := y - z; try skip catch X skipist ein WhileX-Programm.

(b) raise Xund while (true) do skipsind semantisch äquivalent.

(c) Alle partiellen Korrektheitseigenschaften sind zulässig.

(d) Strikte Funktionenϕ: (D,v)→(B,≤) (wobeiff≤tt) sind zulässige Prädikate Lösung:

(1a) Richtig. raiseX-Aufrufe müssen nicht innerhalb vontry _ catch X _-Blöcken stehen.

(1b) Das hängt von der Semantikdefinition ab, die man nimmt. In den Big-Step- und Small-Step- Semantiken der Vorlesung sind sie es nicht:

hraiseX, (None, σ)i ⇓(X, σ) aber hwhile (true) do skip, (None, σ)i 6⇓

hraise X, σi→1 hraise X, σi 6→1 aber hwhile (true) do skip, σi→1 In der Fortsetzungssemantik der Vorlesung auch erst einmal nicht:

CJraise XKsSσ=S(X)(σ) aber CJwhile (true) do skipKsSσ=⊥ Nimmt man aber fürS die anfängliche FortsetzungS0(X)(σ) =⊥, so sind sie gleich.

(1c) Richtig – obwohl hier vordergründig Begriffe aus verschiedenen Semantiken vermischt werden.

Eine partielle Korrektheitseigenschaftϕ hat die Form: Für allef :: Σ *Σ undσ,σ0 mit f(σ) =σ0 folgt aus P(σ), dass Q(σ0) gilt.

Sei also Y Kette in unserer Approximationsordnung (Σ*Σ,v).

Zu zeigen: Wennϕ(f) für alle f ∈Y, dann gilt auchϕ(F Y).

Seien alsoσ und σ0 beliebig mitF

Y(σ) =σ0 undP(σ). Zu zeigen:Q(σ0).

WegenF

Y(σ) =σ0 gibt es nach Definition einf ∈Y mitf(σ) =σ0. Damitϕ(f)und wegen P(σ) folgt darausQ(σ0).

(1d) Falsch. Strikte Funktionen müssen auch die Schranke von leeren Ketten erhalten:

ϕG

=G

ϕ(∅) =G

∅=ff

Andererseits ist ∅ eine Kette mitϕ(d) für alle d∈ ∅. Zulässigkeit würde also ϕ(F∅) =tt verlangen.

Entsprechend ist auch Kettenstetigkeit im Allgemeinen nicht mit Zulässigkeit vergleichbar:

ϕ(d) =ffist kettenstetig, aber nicht zulässig. Umgekehrt seiD=N mit der natürlichen Ordnung und

ϕ(n) = (n= 0∨n=∞) Dann istϕ zulässig, aber nicht einmal monoton!

(2)

2. Kompositionalität der Fortsetzungsemantik (H)

In dieser Aufgabe sollen die Kompositionalitätsbetrachtungen fürDJ·Kauf die Fortsetzungsse- mantikCJ·Kübertragen werden.

(a) Erweitern Sie die Definition der Kontexte auf WhileX. Passen Sie die Kontextfüllfunktion

·[·]an die Erweiterung an.

(b) Definieren Sie die FortsetzungssemantikKJKKeines Kontexts K analog zuKJKK.

(c) Formulieren Sie ein Kompositionalitätstheorem für CJ·K und KJ·K analog zu Thm. 115.

Beweisen Sie es.

Lösung:

(2a) Man braucht zwei neue Kontextproduktionen fürtry c catch X c0, da dies zwei Teilanwei- sungen enthalten kann. Fürraise X gibt es keine neue Kontextproduktion:

Context K ::=. . .|try K catch X c|try c catch X K Entsprechend die Definition für·[·]:

(try K catch X c) c0

=try K c0

catch X c (try c catch X K)

c0

=try c catch X K c0

(2b) Die SemantikfunktionKJ·Khat nun den Typ

Context→(Cont→(Xcp→Cont)→Cont)→(Cont→(Xcp→Cont)→Cont)

entsprechend dem TypCom→Cont→(Xcp→Cont)→Contder SemantikfunktionCJ·K. Die Definition fürKJ·Kfolgt dem Muster der Definition vonCJ·K, man ersetzt CJcKdurch KJKKf an den Stellen, die dem Kontext entsprechen.

KJ[]Kf s S = f(s)(S)

KJK; cKf s S = KJKKf (CJcKs S) S KJc; KKf s S = CJcK(KJKKf s S) S

KJif (b) then K else cKf s S = IF BJbK, KJKKf s S, CJcKs S KJif (b) then c else KKf s S = IF BJbK, CJcKs S, KJKKf s S

KJwhile (b) do KKf s S = FIX λg. IF BJbK, KJKKf g S, s KJtry K catch X cKf s S = KJKKf s (S[X7→ CJcKs S])

KJtry c catch X KKf s S = CJcKs(S[X7→ KJKKf s S]) (2c) Kompositionalitätsaussage:

Cq K

c0y

s S =KJKK(Cq c0y

)s S

Beweis. Analog zu Thm. 115 durch Induktion überK (sund S beliebig) und ausrechnen:

• Fall []:CJ[] [c0]Ks S=CJc0Ks S =KJ[]K(CJc0K)s S

• Fall K; c:

Cq

(K; c) c0y

s S =Cq K

c0

; cy

s S=Cq K

c0y

(CJcKs S) S

IH= KJKK(Cq c0y

)(CJcKs S)S =KJK; cK(Cq c0y

) s S

• Fall c; K:

Cq

(c; K) c0y

s S =Cq

c; (K c0

)y

s S=CJcK(Cq K

c0y s S) S

IH= CJcK(KJKK(Cq c0y

) s S) S =KJc; KK(Cq c0y

) s S

(3)

• Fall if (b) then K else c:

Cq

(if (b) then K else c) c0y

s S=Cq

if (b) then K c0

else cy s S =

= IF BJbK, Cq K

c0y

s S, CJcKs S

IH= IF BJbK, KJKK(Cq c0y

) s S, CJcKs S

=KJif (b) then K else cK(Cq c0y

) s S

• Fall if (b) then c else K: Analog.

• Fall while (b) do K:

Cq

(while (b) do K) c0y

s S =Cq

while (b) do (K c0

)y s S

= FIX λg. IF BJbK, Cq K

c0y

g S, s

IH= FIX λg. IF BJbK, KJKK(Cq c0y

) g S, s

=KJwhile (b) do KK(Cq c0y

) s S

• Fall try K catch X c:

Cq

(try K catch X c) c0y

s S =Cq

try K c0

catch X cy s S

=Cq K

c0y

s(S[X7→ CJcKs S])

IH= KJKK(Cq c0y

)s(S[X7→ CJcKs S])

=KJtry K catch X cK(Cq c0y

) s S

• Fall try c catch X K:

Cq

(try c catch X K) c0y

s S =Cq

try c catch X K c0y

s S

=CJcKs(S[X7→ Cq K

c0y s S])

IH= CJcKs(S[X7→ KJKK(Cq c0y

)s S])

=KJtry c catch X KK(Cq c0y

) s S

3. Semantik für ASM(Ü)

In Kap. 5.1 wurde eine Small-Step-Semantik für die idealisierte Assembler-SpracheASMangegeben.

In dieser Aufgabe sollen Sie nun eine denotationale Fortsetzungssemantik fürASM angeben. Dazu soll jeder Indexposition in der InstruktionslisteP eine Fortsetzung zugeordnet werden, die in einer UmgebungIEnv=Z→(Σ*Σ) gespeichert werden.

(a) Geben Sie eine FunktionIJ·, ·K: (Z×Asm)→IEnv→(Σ*Σ)mit folgender Bedeutung an: Sindieine Indexposition, I eine Instruktion undE eine Umgebung mit Fortsetzungen, dann beschreibtIJi, IKE die Ausführung der Instruktion I mit Indexpositionizusammen mit der Forsetzung ausE(n), wobeindie Indexposition der Instruktion angibt, die nachI auszuführen wäre.

(b) Geben Sie ein FunktionalF :Asmlist→IEnv→IEnv an, das für eine Instruktionsliste P und einer FortsetzungsumgebungE dieses E wie folgt erweitert: FJPKE enthält für jede Instruktionspositionndie Fortsetzung, die zuerst die Instruktion an Stellenausführt und danach mit der entsprechenden Fortsetzung ausEfortfährt. Verwenden Sie dazu die Funktion IJ·, ·K.

(c) Geben Sie die SemantikJPKeiner InstruktionslisteP an, wobeiJ·K:Asm list→(Σ* Σ).

Verwenden Sie dazu den kleinsten Fixpunkt des Funktionals F.

(4)

(d) Wie könnte man die Existenz und Eindeutigkeit dieses kleinsten Fixpunkts beweisen?

(e) Ist diese Semantik kompositional? Diskutieren Sie!

Lösung:

(3a) Definition vonIJi, IKE durch Fallunterscheidung über Asm:

IJi, ASSNx aKE σ = E(i+ 1)(σ[x7→ AJaKσ]) IJi, JMPkKE σ = E(i+k)σ

IJi, JMPFk bKE σ =

(E(i+ 1)σ fallsBJbKσ =tt E(i+k)σ fallsBJbKσ =ff (3b)

FJPKE n=

(IJn, PnKE falls0≤n <|P|

id sonst

(3c)

JPK= FIX (FJPK) (0)

(3d) Entsprechend der Fixpunkttheorie aus dem Skript: IEnv muss eine ccpo sein und das FunktionalFJPKmonoton und kettenstetig.

Nach Lemma 122 istIEnv=Z→(Σ*Σ)eine ccpo bezüglich der punktweisen Ordnungv0. FJPK hat den Typ IEnv → IEnv, ist also für die Fixpunktberechnung geeignet. Für den Fixpunktsatz muss man also noch zeigen, dassFJPKmonoton und kettenstetig ist.

• IJi, IK ist monoton.

Beweis. SeiE1 v0 E2. Zu zeigen:IJi, IKE1 v IJi, IKE2.

Seien alsoσundσ0mitIJi, IKE1σ =σ0Zu zeigen:IJi, IKE2σ =σ0. Fallunterscheidung nach I:

• Fall I =ASSNx a: Es gilt IJi, IKE1σ = E1(i+ 1)(σ[x7→ AJaKσ]) = σ0. Wegen E1v0 E2 gilt E1(i+ 1)vE2(i+ 1)und damit auch E2(i+ 1)(σ[x7→ AJaKσ]) =σ0. Damit nach DefinitionIJi, IKE2σ=σ0.

• Fall I =JMPFk b: Fallunterscheidung nachBJbKσ:

– Fall tt: Es gilt IJi, IKE1σ =E1(i+ 1)σ =σ0. WegenE1 v0 E2 istE1(i+ 1)v E2(i+ 1)und somit E2(i+ 1)σ=σ0, alsoIJi, IKE2σ =σ0.

– Fall ff: Es giltIJi, IKE1σ=E1(i+k)σ =σ0. Wegen E1 v0 E2 istE1(i+k)v E2(i+k) und somit E2(i+k)σ=σ0, also IJi, IKE2σ=σ0.

• Fall I =JMP k: Analog.

• FJPKist monoton.

Beweis. Sei E1 v0 E2. Zu zeigen: FJPKE1 v0 FJPKE2. Sei also n ∈ Z beliebig. Für 0≤n <|P|gilt

FJPKE1 n=IJn, PnKE1 v IJn, PnKE2 =FJPKE2 n

und für sonstigengilt

FJPKE1 n=id vid =FJPKE2 n

• IJi, IK ist kettenstetig.

Beweis. SeiY nichtleere Kette in(IEnv,v0). Zu zeigen:

IJi, IK G0

Y vG

{ IJi, IKE|E ∈Y }

Sei also σ, σ0 mit IJi, IK F0

Y

σ = σ0. Zu zeigen: (F

{ IJi, IKE|E ∈Y })(σ) = σ0. Fallunterscheidung nachI:

(5)

• Fall I =ASSNx a: Dann gilt IJi, IK F0

Y

σ= F0

Y

(i+ 1)(σ[x7→ AJaKσ]) =σ0. Nach Definition vonF0

Y folgt:(F

{E(i+ 1)|E ∈Y}) (σ[x7→ AJaKσ]) =σ0. Damit gibt es also einE∈Y mitE(i+ 1)(σ[x7→ AJaKσ]) =σ0 nach Definition von F

·auf (Σ*Σ,v).

WegenE ∈Y istλσ. E(i+ 1)(σ[x7→ AJaKσ])vF

{ IJi, IKE|E∈Y }, somit folgt die Behauptung.

• FälleI =JMPF k b undI =JMP k: Entsprechend.

• FJPKist kettenstetig.

Beweis. SeiY nichtleere Kette in(IEnv,v0).

Zu zeigen: FJPK F0

Y

v0F{FJPKE|E∈Y} Sein∈Zbeliebig. Nach Definition zu zeigen:FJPK

F0

Y

nv(F

{FJPKE|E ∈Y }) (n).

Es gilt:

FJPK G0

Y

n=

(IJn, PnK F0

Y

falls0≤n <|P|

id sonst

v

(F{IJn, PnKE|E ∈Y }

id = (G

{FJPKE|E ∈Y })(n)

(3e) Kompositionalität hängt vom Verständnis der Komponenten bzw. des Kontexts ab. Sieht man als Komponenten eines Programms die arithmetischen und booleschen Formeln an, so ist die Definition offensichtlich kompositional, da lediglich die SemantikfunktionenAJ·Kund BJ·Kverwendet werden.

Die Semantikdefinition ist jedoch nicht kompositional in Bezug auf Listenkonkatenation:

Die Semantik des Programms P++P0 lässt sich nicht aus der Semantik von P und P0 rekonstruieren – schon gar nicht, wenn manJ·Kals Semantik zu Grunde legt, da diese jegliche Information über die Semantik der einzelnen Inzides außer dem ersten verwirft. Dies entspricht der Einschränkung der Continuation-Semantik fürWhileX auf feste Start-Fortsetzungen, für die auch keine Kompositionalität besteht (siehe oben).

Auch beim uneingeschränkten FixpunktFIX (FJPK) hat man keine direkte Kompositionali- tät, da das FunktionalFJPKbei Sprüngen an Stellen außerhalb der Instruktionsliste einfach aufhört. Wenn man allerdings zwei abgeschlossene Programme hintereinandersetzt, sollte FIX (FJPK) kompositional sein, ganz enstprechend zu den Verschiebung- und Aufteilungs- slemmata bei der Compilerverifikation.

Über Kompositionalität im Sinne derWhile-Sprache zu reden, macht an dieser Stelle keinen Sinn, da man dann die Komponentendiskussion auf vom Compiler generierte Programme einschränken müsste, die eine ganz spezielle Form haben.

Referenzen

ÄHNLICHE DOKUMENTE

Die in der Vorlesung vorgestelle Big-Step-Semantik für Prozeduren mit einem Parameter wertet den übergebenen Parameter beim Aufruf aus und übergibt nur den Wert an die

6.3 haben wir die While-Sprache um Blöcke mit lokalen Variablen erweitert und operationale Semantiken

In einer früheren Aufgabe haben wir schon die operationale Semantik einer repeat -Schleife

In der Vorlesung haben wir bereits die Big-Step- und Small-Step-Semantiken darauf erweitert, hier sollen Sie nun eine denotationale Erweiterung entwickeln. Statt höchstens

Berechnen Sie ein paar einfache Beispiele und versuchen Sie herauszufinden, in welcher Beziehung m, n und k zueinander stehen.. Schnelle

Zeichen Sie dazu den Ableitungsbaum einer Ausf¨ uhrung des Programms gem¨ aß der Big-Step-Semantik f¨ ur n = −4.. Z¨ ahlschleife (

Die in der Vorlesung vorgestelle Big-Step-Semantik f¨ ur Prozeduren mit einem Parameter wertet den ¨ ubergebenen Parameter beim Aufruf aus und ¨ ubergibt nur den Wert an die

Berechnen Sie ein paar einfache Beispiele und versuchen Sie herauszufinden, in welcher Beziehung m, n und k zueinander stehen.. Schnelle Division (