Tartalom Csatorna:... 2 Jelölések:... 2 Megjegyzés:... 2 műveletei:... 2 Tulajdonságai:... 3 split:... 4 Definíció:... 4 Létezik-e split?... 4... 4 Feltételek:... 4 Program specifikáció:... 5 Program:... 5 Megfelel- e a program a specifikációnak?... 5 1
Csatorna: P1 P2 x P1, P2 folyamatok, az x a csatorna, amely a P1 folyamat outputját kapja meg és a P2 inputjának teszi ozzáféretővé az adatokat. Maga a csatorna aszinkron üzenetküldés tárolására alkalma eszköz. Jelölések: C(IH) : IH almazbeli elemek tárolására alkalmas csatorna. Megjegyzés: Sosem írunk le csatornaváltozót egymagába. Mindig kell egy x csatornáról (papíron) tárolni az aktuális tartalmát, mostantól ez lesz az x és kell a története, az x ami azt mutatja, ogy a keletkezése óta milyen elemek voltak rajta. Az x -re csak rakni leet és az értékadás jobb oldalára csak saját magának való értékadás esetén kerület: x : x; e Előbbiekből következik, ogy az implementációból ki leet agyni. Ezt csak a bizonyítások egyszerűsítésére/feltétel bizonyítatóságára asználjuk. Kiagyása a elyességet nem rontja el, és nem kell foglalkoznunk azzal a neézséggel, ogy ogyan implementáljunk egy megszámlálató osszú sort. A csatorna sor adatszerkezetű, teát műveletei: lf számítása x:=<> x lf(x:=<>, R) = R, x x:=iext(x,e) x lf(x:=iext(x,e),r) = R x; e, x x; e x:=lorem(x) lf(x:=lorem(x) a x <>, R) = ( x R x lorem(x) ) ( x R ) x.lov x.dom~ x utolsó elemét az x-nek visszaadja, a van a nincs elszál x elemszáma // a x;e jelölés az x-ez jobbról ozzáfőzi az e-t 2
Tulajdonságai: 1. Az x mindig az x prefixe 2. x -lorem(x) = ( x - x); x.lov 3
split: split: C(IH) x C(IH) x C(IH) IL Definíció: 1. split(<>, <>, <>) = 2. split(a, b, c) x IH: split(a;x, b;x, c) split(a;x, b, c;x) 3. A split a legszűkebb 1, 2 tulajdonságú függvény A 3-dik feltételre azért van szükség, ogy például a mindenre igazat visszaadó függvény ne feleljen meg a definíciónak. /* a logikai függvények jellemezetők az igazságalmazukkal, és a legszűkebb az lesz amelyiknek az igazságalmaza a legkisebb.*/ Létezik-e split? Olyan függvény van ami az 1, 2 tulajdonságokkal rendelkezik, de van-e legszűkebb? Van-e a metszetnek közös eleme? Van, mert az 1 tulajdonsággal rendelkeznie kell Van-e legkisebb? Van. Bizonyítás: 1. lépés: split 1 (<>, <>, <>) = split 1 2(<>, <>, <>) = split 2 (<>, <>, <>) = 2. lépés: tegyük fel, ogy valamely a, b, c IH - ra: split 1 (a, b, c) split 2 (a, b, c) teljesül split 2. tulajdonsága miatt x IH: split 1 (a;x, b;x, c) split 1 (a;x, b, c;x) x IH: split 2 (a;x, b;x, c) split 2 (a;x, b, c;x) split 1 2(a, b, c) x y z Feltételek: adat ne vesszen el adat ne keletkezzen legyen sorrendtartó mindig dolgozzon, a van x-en adat. 4
Program specifikáció: A= C(IH) x C(IH) x C(IH) x C(IH) x C(IH) x C(IH) x x y y z z B= C(IH) x C(IH) x C(IH) x C(IH) x C(IH) x C(IH) x x y y z z Q=( x x x x y y y y z z z z ) INIT 1) K = split( x x, y, z ) inv (Q) 2) x k y z k /* Vegyük észre, ogy nem feltétlenül kell mind a két csatornára rakni elemet */ Program: S = (SKIP, { ) } x, y := lorem(x), iext(y, x.lov), a x x, z := lorem(x), iext(z, x.lov), a x /* Vegyük észre, ogy a program sem feltétlenül rak mind a két csatornára, még feltétlenül pártatlan ütemezés mellet sem. */ Megfelel- e a program a specifikációnak? 1) invariáns Q lf(s 0, K) = K = split( x x, y, z ) <>-<>,<>,<> <> K lf(s, K) feltétel átviető, SKIP elagyató s 1 ) split( x x, y, z ) x <> split( x - lorem(x), y ; x.lov, z ) s 2 ) split 2. tulajdonsága miatt: x - lorem(x) = ( x -x); x.lov split 2. def split( x x, y, z ) x <> split( x - lorem(x), y, z ; x.lov) split 2. tulajdonsága miatt x - lorem(x) = ( x -x); x.lov split 2. def split(<>,<>,<>) = //split 1. def. 5
2) aladás: x k y z k x k S y + z k K variáns függvény tétele: t=k-( y + z ) x k ( y + z <k) t>0 k-( k-nál kisebb szám ) > 0 x k ( y + z <k) t = m S ( x k t < m ) y + z k Azt mondom, ogy én tudnám bizonyítani: x k ( y + z <k) t = m S x k t < m Amiből: 1. stabillal metszéssel: x k ( y + z <k) t = m S x k t < m 2. definíció első pontja alapján: x k ( y + z <k) t = m S x k t < m 3. Jobb oldal gyengítésével: x k ( y + z <k) t = m S ( x k t < m ) y + z k teát a kívánt tulajdonság. x k ( y + z <k) t = m S x k t < m: s 1 (s 2 is jó lenne) Nézzük először meg a P Q t áta egyszerűsítető. ( x k ( y + z <k) t = m) ( x < k t m) ( x k ( y + z <k) t = m x < k) ( x k ( y + z <k) t = m t m) A sárga ellentmondás, így az a része a vagy ágnak elagyató, A kékkel írt közül a t = m a szűkebb teát a másik elagyató. feltétel teljesülése esetén: Feltétel átviető x k ( y + z <k) t = m x <> x k (k ( y ;x.lov )+ z <m) Az y ;x.lov = y +1 k ( y + z ) 1 < k ( y + z ) = m 6
SKIP ág: lemma: split(a, b, c) a = b + c x k ( y + z <k) t = m x = <> aol K = split( x x, y, z ) de x = <> teát split( x, y, z ) Így split( x, y, z ) x k ( y + z <k) t = m x = <> ami lemma szerint x k = y + z <k Ellentmondás SKIP mindig igaz S s 2 belátató s 2 re is Így a S - re is kész. Lemma bizonyítása: strukturális indukció: alapeset: a=<>, b=<>, c=<> 0 = 0 + 0 Tf.: split(a, b, c) a = b + c teljesül, aol a n kell split(a, b, c) a = b + c, ogy a = n + 1 a:=d;x és d =n két eset leetséges: a. split(d, k, c) split(d; x, k; x, c) aol k; x = b b. split(d, b, k) split(d; x, b, k; x) aol k; x = c 7