Példa: Dinteger = {..., -1,0,1,...}; Dboolean = {true, false}; DT1...Tn T = DT1...DTn DT ; Az összes függvény halmaza, amelyek a DT1,...,DTn halmazokból DT halmazra képeznek le. l(c) értelmezés: Az alaptípusok minden konstansa saját magának az értelmezett értéke: ha c alaptípusú, akkor l(c) = c. Példa: Az 1 integer konstans értelmezi az 1 integer számot. A true boolean konstans értelmezi a true boolean értéket.
A determinisztikus program: egy szimbólumokból képezett string. Kulcsszavak: if, then, else, fi, while, do, od. A programot generáló grammatika: S::= skip | u:= t | S1; S2 | if B then S1 else S2 fi | while B do S od. u: egyszerű, vagy indexes változó; t: kifejezés; u és t típusa megegyezik. B: kvantor-független logikai kifejezés; if B then S fi if B then S else skip fi; Az S,S1,S2 programok változói: egyszerű, vagy indexes változók.
Az S determinisztikus program jelentése: M[S] A megfelelő (kezdő) állapotok halmazáról megfelelő (vég-)állapotok halmazára történő leképezés. Divergencia végállapotának jele: . Szemantika definiálása. Detonációs szemantika-definíciós módszer. Operációs szemantika-definíciós módszer. (minden programtípusra kézenfekvő). Adva az absztrakt gép. Adva a program: S. Adva a megfelelő állapothalmaz: . Az absztrakt gép konfigurációja: S, ; ; A program végrehajtása konfigurációk közötti átmenetek sorozata.
Konfigurációk közötti átmeneti reláció (transition relation): konf1 konf2 S, R, ; , ; R: maradék program; Befejeződés: A program végrehajtásának befejeződésének eredménye: R, ; RE : üres program; A program befejeződik a állapotban.
A nyelvi szerkezetek szemantikája: Axiómák: 1. Üres utasítás: 2. Értékadás: skip, E, ; u := t, E, (u := (t)) ; Következtetési szabályok: 1. Szekvencia: S1;S2. S1, S2, S1;S, S2;S, 2. Feltételes elágazás: if then S1 else S2 fi, if then S1 else S2 fi, S1, ha () = T; if then S1 else S2 fi, S2, ha () = F;
Bool kifejezés kiértékelése. 3.) iteráció: while B do S od; while B do S od, S; while B do S od, ; ha (B) = T; while B do S od, E, ; ha (B) = F; Megszakítás nélkül végrehajtódnak: Skip; Értékadás; Bool kifejezés kiértékelése.
Definíciók: a) b) c) d) Az S program állapottal kezdődő tranzakciós sorozata: Si,i, (i 0) konfigurációk véges, vagy végtelen sorozata. S, = S0,0 S1,1 . . . Si,i ... Az S program állapottal kezdődő kiszámítása egy olyan tranzakciós sorozat, amely nem bővíthető. Az S program állapottal kezdődő kiszámítása állapotban befejeződik, ha a sorozat véges és annak utolsó konfigurációja: Ü,; Ü: üres program. Az S program kezdő állapottal kezdődő kiszámítása divergens, ha a sorozat végtelen.
Az S program kiszámítása egy adott kezdő állapottal: : S, S1,1 ... Sn-1,n-1 Sn,n ; Ha a program végrehajtása véges és eredményesen befejeződik: : S, S1,1 ... Sn-1,n-1 Sn,n ; val() = n, n, és Sn = T : üres program. Rövid jelölés: : S, * Sn,n ; Ha a program végrehajtása véges, Sn = E üres program, de E = T, akkor a program végrehajtása hibás: : S, * E,fail ; val() = fail , Sn = E: üres program, E = T.
Az S program kiszámítása egy adott kezdő állapottal: : S, S1,1 ... Sn-1,n-1 Sn,n ; Ha a program végrehajtása véges és eredményesen befejeződik: : S, * Sn,n ; val() = n, n, és Sn = T : üres program. Ha a program végrehajtása véges, Sn = E üres program, de E = T, akkor a program végrehajtása hibás: : S, * E,fail ; val() = fail , Sn = E: üres program, E = T.
Lemma. Minden S determinisztikus programhoz adott megfelelő állapot mellett pontosan egy kiszámítás tartozik. Indoklás: Minden konfigurációnak pontosan egy rákövetkezője van a sorozatban. Definíció. Blokkolás mentesség: ha S E, és minden esetén létezik olyan S1, konfiguráció, melyre S, S1,; akkor a programot blokkolás mentesnek nevezzük. Lemma. Minden determinisztikus program blokkolás mentes. Indoklás: Ha S E, akkor minden S, konfigurációra létezik egy rákövetkező konfiguráció a reláció szerint.
A determinisztikus program szemantikája. Parciális helyességi szemantika: M[S] : P(); M[s]() = {|S, *E,}. Teljes helyességi szemantika: Mtot[S] : P( {}); Mtot[s]()= M[s]() { | S divergálhat kezdeti értékkel }.
x:= x+1; while a[x]0 do x:= x+1 od, ' Példa. S a[1]:=1; a[1]:=0; while a[x]0 do x:= x+1 od; Legyen , amelyben x=0; Determinizmus alapján egy kiszámítás létezik S, kezdőértékkel. { x=0} a[0]:=1; a[1]:=0; while a[x]0 do x:= x+1 od, ; {x=0a[0]=1} a[1]:=0; while a[x]0 do x:= x+1 od, [a[0]:=1] while a[x]0 do x:= x+1 od, ' (': [a[0]:=1][a[1]:=0]; ami a ismételt aktualizálását jelenti), x:= x+1; while a[x]0 do x:= x+1 od, ' while a[x]0 do x:= x+1 od, '[x:=1] E, '[x:= 1] . M[S]() = Mtot[S]() = { '[x:= 1] } ;
Példa. Legyen olyan állapot, amelynél x=2 és i = 2,3,..., a[i]=1; S a[0]:=1; a[1]:=0; while a[x]0 do x:= x+1 od; Induláskor: S, a[1]:=0; while a[x]0 do x:= x+1 od, [a[0]:=1] while a[x]0 do x:= x+1 od, ' (': [a[0]:=1][a[1]:=0]; ami a ismételt aktualizálását jelenti). x:= x+1; while a[x]0 do x:= x+1 od, ' while a[x]0 do x:= x+1 od, '[x:= (x)+1] . . . while a[x]0 do x:= x+1 od, '[x:= (x)+k] ... S végrehajtása divergens: M[S]() = ; Mtot[S]() = { } ;
A szemantika tulajdonságai: Legyen az üres determinisztikus program: ()M[]() = ; Pl. while true do skip od. Az iteráció induktív definíciója: (while B do S od)0 = , (while B do S od)k+1 = if B then S; (while B do S od)k else skip fi; M[S]() = ; Mtot[S]() = {}; és X {} esetén, Jelölés: N[S]: M[S], Mtot[S]; N[S](X) = N[S](); X
1. 2. 3. 4. 5. N[S] monoton: Tekintsük az adott program utasításainak halmazát: ha X Y {}, akkor N[S](X) N[S](Y); N[S1; S2](X) = N[S2](N[S1](X)); N[(S1; S2); S3](X) = N[(S1; (S2; S3)](X); N[if B then S1 else S2 fi)](X) = N[S1](X {B}) N[S2](X {~B}) { X and N = Mtot); k= M[while B do S od] = k=0M[(while B do S od)k].
k= 5. M[while B do S od] = k=0M[(while B do S od)k]. Mtot szemantika esetére ez nem igaz. Tegyük fel hogy igaz. Mivel minden esetén Mtot[]() = {}; Ezért k= k=0Mtot[(while B do S od)k](), minden while B do S od program esetén. Ámde van olyan while B do S od amelyre Mtot[while B do S od]() ! Ellentmondás!
Szekvenciális tranzakciós diagram: a program vezérlési szerkezetét írja le. A szerkezet: A program végrehajtási pontjait és a pontok közötti átmeneteket (transitions) tartalmazza. Végrehajtási hely: a program számlálónak (counter) a helyzetét mutatja. Átmenet: a tranzakció az utasítás végrehajtásának a hatását adja meg a programszámláló új értékének a formájában. Egy utasítás végrehajtása: állapot transzformáció formájában valósul meg: állapot a memória tartalmát fejezi ki; állapot transzformációk a memória cellákhoz a végrehajtott operációk eredményeit rendelik.
A program vezérlési szerkezete: címkékkel ellátott irányított gráf. A gráf csomópontjai: végrehajtási helyeket fejeznek ki. Az irányított élek ezeket a csomópontokat kötik össze. Az entry csomópont egy kitüntetett csomópont ahol a végrehajtás kezdődik. Címkéje s. Az exit csomópont olyan kitüntetett csomópont, amelyből nem mutat kifelé él. Címkéje t. A gráfban minden élhez egy utasítás tartozik címkeként: c f; c: bool feltétel; f: állapot transzformáció.
Definíció. (bool feltétel, állapot transzformáció). Adott , és . Bool feltétel egy bool függvény, amely a szóban forgó állapothoz az igaz értéket rendeli: bool. Az f állapot transzformáció a leképezések egy eleme. Szemantika hozzárendelése a változókhoz. Adva a program változóinak egy sorozata: x=(x1,...,xn); és a megfelelő d =(d1,...,dn); értékek egy sorozata. A megfeleltetés: di ha y = xi, (:xd)(y) = (y) ha y = xi; i = 1,...,n; Szemantikailag az állapot hozzárendelése a változókhoz: : x d;
A program vezérlési szerkezete: címkékkel ellátott irányított gráf. A gráf csomópontjai a program állapotai, amelyeket címkék azonosítanak. l Az élek az állapotátmenetek, amelyekhez a leképezések tartoznak: c f l l' A tranzakciós diagram: T = (L,T,s,t); L: állapotokat azonosító címkék halmaza: lL. (l, c f, l') T; állapotátmenetek halmaza. s: Az indulási állapotot azonosító címke. t: A befejező állapotot azonosító címke.
Adva P =(L,T,s,t); A P tranzakciós diagram egy végrehajtása (kiszámítása) a 0 kezdőértékkel a kezdő l0 címkétől: li,i ; konfigurációk egy sorozata: : l0,0 l1,1 l2,2 ... ahol l0=s. Minden tranzakcióhoz c f úgy, hogy c(i) = true; és i+1= f(i); l l' A sorozat nem bővíthető: ha véges, akkor az utolsó konfigurációnak nincs rákövetkezője.
utolsó konfiguráció: t, ; val() = ; ; 1.) Ha a sorozat véges: utolsó konfiguráció: t, ; val() = ; ; 2.) Ha a sorozat véges: utolsó konfiguráció: ln, ; ln t; val() = fail; 3.) Ha a sorozat végtelen: val() = ; , fail ; comp(P)(): az olyan kiszámítások halmaza, amelyeknek kiindulási állapota . A P tranzakciós diagram jelentése: M[p]() = {val()|comp[P]()};