1 Opsumering fra tidligere Hvis A er kontekstfrit, S er der et p > 0 s Alle s A hvor s p kan splittes op som s = uvxyz så argument 1-3 holder A er ikke kontekstfrit, hvis for ethvert bud på p kan findes en s A, s p så ingen opsplitning overholder 1-3. Der ligger en eksemplarisk løsning af opgaverne fra sidste gang på SS siden. 2 Dagsorden Statements/kommandoer (Stm) i bims programtilstande Aexp-semantik (nu med variabler) Big-step-semantik for Stm Et stort deriviationstræ! small-step-semantik for Stm Terminering/ikke terminering ækvivalenten af big-step og small-step 3 BIMS 3.1 Abstrakt syntaks for bims n Num x, y V ar a Aexp, a ::= n x a 1 + a 2 a 1 a 2 a 1 a 2 (a 1 ) b Bexp, b ::= a 1 = a 2 a 1 < a 2 b 1 b b 2 (b 1 ) S Stm, S ::= skip x := a S 1 ; S 2 if b then S 1 else S 2 while b do S 1 4 Programtilstande Noget om Hans mor... Programtilstande er en fortegnelse over variablens værdier; hverken mere eller mindre! Intuitivt: En program tilstand er en fortegnelse over variablers værdier. 1
Definition: En tilstand s er en partiel funktion så: s : V ar Z Mængden af tilstande: states = V ar Z Husk fra kapitel 2: En partiel funktion f : A B, er en funktion der ikke nødvendigvis er defineret for alle variabler i A Definition (opdatering) S[x v] (S, bortset fra at x bindes til v) er tilstanden s givet ved { s v y = sy y = x ellers Tit skriver vi tilstande som en liste af bindinger: [x 2, y 3, z 484000] (1) 4.1 Bigstepsemantik for Aexp med variabler Transitioner er på formen: S a v Transitionssystem (Γ,, T ) hvor Γ = Aexp Z T = Z er givet ved regler [var] s x v hvor sx = v hvor at hvis jeg slår op i s, så får jeg at vide at x er bundet til v. [plus] s a 1 v 1 s a 2 v 2 s a 1 +a 2 v hvor v = v 1 + v 2 5 Stm semantik - ny og forbedret udgave; nu med variabler(bigstep) Transitions-system: er på form S, s s givet en kommando og en tilstand, finder jeg den nye tilstand. En kommando(statement) kan ændre på en tilstand. En kommando kan ændre variablers værdier. Transitionssystem: (Γ,,T ) Γ = stm states states T = states givet ved regler Der skal være regler for hver eneste tilstand vi kan forestille os. Skip er en statement der intet gør!. [skip] skip, s s 2
[ass] x := a, s s[x v] hvor s a a v [comp] S 1,s s S 2,s s S 1 ;S 2,s s [if-true] [if-false] S 1,s s if b then S 1 else S 2,s s hvor s b b tt S 2,s s if b then S 1 else S 2,s s hvor s b b ff [while-true] S,s s while b do S,s s while b do S,s s [while-false] while b do S, s s hvor s b b ff hvor s b b tt Husk at alt evaluere til noget! While-løkker (true) er ikke kompositionel (også selvom vi ikke syntes om det), det betyder at den ikke nødvendigvis terminerer. 3
4 Figur 1: Big Step Deriviationstræ
6 Small-step-semantik for Stm Givet et statement og en tilstand, kan jeg få en ny statement og tilstand - eller jeg kan få en tilstand (vi er færdige). Henholdsvis: S, s S, s eller S, s s Transitionssystem: (Γ,,T ) Γ = stm states states T = states givet ved regler [skip] skip, s s [ass] x := a, s s[x v] hvor s a a v [comp 1 ] [comp 2 ] S 1,s S 1,s S 1 ;S 2,s S 1 ;S 2,s S 1,s s S 1 ;S 2,s S 2,s [if-true] if b then S 1 else S 2, s S 1, s hvor s b b tt [if-false] if b then S 1 else S 2, s S 2, s hvor s b b ff [while] while b do S, s if b then S; while b do S; else skip, s Eksempel på small-step for Stm x := x + 2, s = s[x 2] s = [x 0] x := x + 2; While x 0 do x := x 2, s While x 0 do x := x 2, s[x 2] if x 0 then x := x 2; While x 0 do x := x 2 else skip, s[x 2] x := x 2, s = s[x 0] x := x 2; While x 0 do x := x 2, s[x 2] While x 0 do x := x 2, s[x 0] if x 0 then x := x 2; While x 0 do x := x 2 else skip, s[x 0] skip, s[x 0] s[x 0] 7 Ikke terminering I small-step semantik, der ser vi at ikke terminering beskrives som en uendelige transitionsfølge: while 0 = 0 do skip, s if 0 = 0 then skip; while 0 = 0 do skip else skip, s 5
skip; while 0 = 0 do skip, s while 0 = 0 do skip, s I big-step-semantikken bliver vi aldrig færdige med at bygge et deriviationstræ: skip, s s while 0 = 0 do skip, s s skip, s s while 0 = 0 do skip, s s while 0 = 0 do skip, s s Dvs. at der er INGEN transition while 0 = 0 do skip, s s, der kan ikke være nogen transition når vi ikke kan bygge et deriviationstræ. Small-step; ikke terminering er en uendelig transitionsfølge. Big-step; ikke terminering er fravær af en transition. 8 Ækvivalens af big-step og small-step (ADVARSEL; dette er kun et resultat for dagens semantik!; perverse semantikker er mulige der gør at det ikke gælder) Der er en sætning der siger at big-step og small-step for Stm er ækvivalente. Det vil sige at for alle S Stm (statements) og for alle s States (states), så gælder det at vi har en transition i big-step-semantikken S, s s hvis og kun hvis - S i et antal skridt kan blive til s S, s a Definition (et antal transitionskridt) S, s k γ γ hvis k = 0 og γ = S, s eller k > 0 og S, s k γ γ Vi skriver S, s γ hvis der er et k så S, s k γ Hvilket vil sige at S, s kan i k skridt nå frem til konfigurationen γ Bevis(skitse) for ækvivalens Vi skal vise: A: Hvis vi har en big-step-transition ( S, s s ), så kan vi konstruere en transitionsfølge i small-step der havner i s ( S, s a ). Vi skal altså kunne vise hvordan man kan simulere big-step-reglerne med small-step-reglerne. B: Derudover skal det vises at der for enhver transitionsfølge ( S, s a ) findes et transitionstræ med et tilsvarende resultat ( S, s s ). Vi skal altså kunne vise hvordan et big-step-derivationstræ rummer skridt fra small-stepsemantikken. A vises ved induktion i højden af deriviationstræet for hver big-step transition ( S, s s ) B vises ved induktion i længden af transitionsfølgen for s ( S, s a ). 6