270 likes | 614 Views
Specifikāciju valoda Z. Specifikāciju valodas. Z: ievada piezīmes. Z - sistēma strukturētu matemātisku teoriju veidošanai, izmantojama programmatūras specifikācijā; Matemātiskā notācija: kopu teorija, kopu operācijas, attiecības (relācijas) starp kopām, klasiskā matemātiskā loģika;
E N D
Specifikāciju valoda Z Specifikāciju valodas
Z: ievada piezīmes • Z - sistēma strukturētu matemātisku teoriju veidošanai, izmantojama programmatūras specifikācijā; • Matemātiskā notācija: kopu teorija, kopu operācijas, attiecības (relācijas) starp kopām, klasiskā matemātiskā loģika; • Programmatūras specifikācija: abstrakto mašīnu modelis (stāvoklis, operācijas, ieejas un izejas parametri, invariants); • Z specifikācijas pamata struktūras bloks - shēma: • satur deklarācijas daļu kopā ar predikātu daļu; • izmantota gan programmas stāvokļa, gan arī stāvokļu maiņas aprakstam; • valoda Z piedāvā līdzekļus shēmu kombinācijai • Z notācija: attīstījusies ilgākā laika posmā, pirmās publikācijas ap 1980.gadu, ISO standarts 2002.gadā (dažādā literatūrā var būt pieejamas dažādas Z "variācijas") • Z: pieejams plašs resursu klāsts tīmeklī (t.sk. reference manual, arī mācību grāmatas).
Z specifikācijas: objekti un tipi Z - sistēma strukturētu matemātisku teoriju veidošanai Matemātiskais pamats: kopu teorijas konstrukcijas, attiecības starp kopām, utt. Katram objektam, katrai izteiksmei valodā Z – noteikts tips. Tipu sistēma – palīdz izvairīties no kopu teorijas līmeņa paradoksiem. Tips – dotas (lietotāja ieviestas) kopas vārds, vai izteiksme, kas uzkonstruēta no tiem, izmantojot tipu veidošanas operācijas. Katrs tips specifikācijā ir arī kopa. Katra kopa specifikācijā ir apakškopa kādai kopai, kas ir tips. Dotās kopas – struktūra specifikācijas ietvaros netiek precizēta. [STUDENT] Iebūvētais tips – Z, veselo skaitļu kopa. Tipu konstruēšanas līdzekļi: Kopas tips. PZP STUDENT Korteža tips (Dekarta reizinājumi). Z×Z Shēmas tipi, satur kā elementus saistījumus (bindings) A [ x: Z, y: Z ]
Tipu konstruēšanas līdzekļi, elementu piemēri Iebūvētais tips – Z, veselo skaitļu kopa. Izmantojamas arī dotās kopas (struktūru neprecizē). Tipu konstruēšanas līdzekļi: Kopas tips: Katra viena tipa t objektu kopa ir objekts kopas tipā P t. {1,3,5} : P Z Kopas uzdošana: ar elementu uzskaitījumu, vai kopu raksturojošo īpašību. {1,3,5} { k: Z | k 0 2k+1 } Korteža tips (Dekarta reizinājumi): Ja x: u un y: t, tad pāris (x,y): u t. Analoģiski veidojami arī vairākdimensionāli reizinājumi: u t v , utt. Piemēri elementiem tipos, kas iegūti ar korteža operāciju: (1,3) : Z×Z { n: Z | (n, n+1) } : P ( Z×Z ) P, × - var izmantot arī kopu (ne tikai tipu) konstruēšanā.
Tipu konstruēšanas līdzekļi: shēmas tips Saistījumi (angl. bindings), atbilst shēmas tipiem: jap un q ir dažādi identifikatori, un x: u un y: t, tadeksistē saistījums z = px, qy ar komponentēm z.p = x un z.q = y, ar shēmas tipu p: u, q: t . Shēma: A [ x: Z, y: Z | x < y ] (deklarāciju daļa, plus predikāta daļa) Shēmas tips: x: Z, y: Z Elementi šajā shēmas tipā: x-7, y13, x13, y-7 (neatbilst shēmai, bet atbilst shēmas tipam) Iespējams arī ar n komponentēm. Intuitīvi: shēma apraksta struktūru ar noteiktām komponentēm un to tipiem (signatūra, deklarācija), kam izpildās noteikta īpašība (predikāts). 2 shēmas tipi ir vienādi, ja satur vienādus identifikatorus, kam atbilst vienādi tipi (identifikatoru secība shēmas tipā nav svarīga). 2 viena tipa saistījumi ir vienādi, ja vienādiem identifikatoriem atbilst vienādas vērtības.
Z specifikācijas: relācijas un funkcijas Relācijas un funkcijas – atvasināti jēdzieni. Primārie: kopas tips, Dekarta reizinājums, shēmas tips (saistījumi px, qy). Binārās relācijas un funkcijas – tiek modelētas un identificētas ar to grafikiem. Binārā relācija: to sakārtoto pāru kopa, kurai šī relācija ir patiesa. Piemērs:(3,7) _<_, (10,43) _<_, utt. Binārās relācijas starp kopām X un Y: X Y, sinonīms ar P ( X Y ). Daļēji definētas funkcijas: X -+-> Y ( X -+-> Y P ( X Y ) ) . Visur definētas funkcijas: X Y ( X Y X -+-> Y ) . Ja f X -+-> Y , tad rakstām f(x), apzīmē vienīgo f vērtību, kas atbilst x. Vairāku argumentu funkcijas: apskatītas kā viena argumenta funkcijas, kam arguments ir kortežs. Diskusija: Vai saprotams X Y P ( X Y ) ? Ja f X Y , tad f: P ( X Y ) .
A x: Zy: Z x < y Z specifikācijas: shēmas Signatūra: mainīgo kopums, kurā katram mainīgajam norādīts tips. Signatūru izveido deklarācija. Katrai signatūrai dabiski atbilst shēmas tips, piemēram, signatūrai x: u, y: tatbilst shēmas tips x:u, y:t . Shēma ir signatūra, kopā ar šajā signatūrā definētu īpašību (ja īpašība nav norādīta, tad tā ir true). Piemērs:A [ x: Z, y:Z | x < y ]. x un y – shēmas komponentes. Shēmas signatūru nosaka tās deklarācija. Shēmas īpašība ietver shēmas tekstā norādīto predikātu, bet iespējams, ka arī deklarācija arī tālāk ierobežo shēmas īpašību. Piemērs:B [ f: Z Z | f(3) = 4 ]. Shēmas deklarācijas daļa nosaka ne tikai f tipu, kas ir P(Z Z), bet arī to, ka f ir funkcija.
Matemātiskās loģikas elementi Apgalvojumu (t.sk. predikātu) kombinēšanas iespējas, izmantojot parastās loģiskās saites: , , , u.c. Kvantori: z: N z x - universālais kvantors Eksistenciālais kvantors: Unikālas eksistences kvantors: 1 Vispārīgā universālā kvantora (un arī citu kvantoru) forma: D | P QD – deklarācija; P, Q – predikāti D un P kopā veido shēmu Universāli kvantificētā predikāta nozīme: lai arī kādas nebūtu deklarācijā D ieviesto mainīgo vērtības, ja P ir patiess, tad arī Q ir patiess. Kvantifikācija pa shēmu ar deklarāciju D un predikātu P. z: N | true z x N = { n: Z | n 0 n } N = { n: Z | n 0 } z: N | (k: N z = 2*k) z x Klasiskā matemātiskā loģika. Ja kāda no izteiksmes apakšizteiksmēm nav definēta, tad pašas izteiksmes vērtība ir nenoteikta – mēs izšķiramies nezināt to, vai tā ir true, vai false.
C A y: Zz: 1 .. 10 x: Zy: Z y = z * z x < y Shēmu kombinēšana Loģiskām saitēm , , analoģiskas saites var tikt pielietotas arī shēmām. Signatūras ir savietojamas, ja tajās vienādi nosauktiem mainīgajiem ir sakrītoši tipi. Signatūras sašaurināšanas un paplašināšanas jēdzieni. Shēmu konjunkcija: signatūru savietošana, īpašību konjunkcija. Shēmu disjunkcija: signatūru savietošana, īpašību disjunkcija. Shēmas negācija: signatūra tiek saglabāta, īpašības negācija. Jāņem vērā visa īpašība, ne tikai predikātā atklāti formulētā, bet arī deklarācijā implicīti ietvertā. Vingrinājums: uzrakstīt konjunkciju A C un negāciju C
C y: Zz: 1 .. 10 y = z * z y: Z z: 1 .. 10 y = z * z Shēmu operācijas: turpinājums Paslēpšanas operators \ - veids, kā sašaurināt shēmas elementu kopumu. Ja S ir shēma un x1, ..., xn ir S komponentes, tad S \ (x1, ..., xn) arī ir shēma, kurai ir visas tās pašas komponentes, kas ir S, izņemot x1, ..., xn . Jaunās shēmas īpašība ir spēkā tiem un tikai tiem saistījumiem, kas ir sašaurinājumi no saistījumiem, kas apmierina S īpašību. Piemērs: shēmas C, C \ ( z ) Paslēpšana – var tikt raksturota ar eksistenciālo kvantoru. Ja S un T ir shēmas ar savietojamām signatūrām, tad S |` T aplūko S T, un tad paslēpj visus T signatūras elementus.
Shēmu operācijas: kvantori Kvantori: cits veids, kā paslēpt shēmas elementus Shēmu kvantori: Ja D ir deklarācija, P – predikāts un S – shēma, kas ir savietojama ar D, tad D | P S un D | P S ir shēmas. Signatūra: no S paslēpjam elementus, kas ir D. Īpašība: aplūkojam visus iespējamos paplašinājumus uz S signatūru, kuri apmierina P. gadījumā: visi šādi paplašinājumi apmierina S īpašību. gadījumā: eksistē šāds paplašinājums, kas apmierina S īpašību.
Z specifikācijas struktūra: paragrāfi Specifikācija definē globālus vārdus (globāli mainīgie, shēmas), katrs izmantojams tālāk uz priekšu specifikācijā. Atsauces uz priekšu, vai rekursija nav atļautas (izņēmums – brīvie tipi, sk. tālāk). Specifikācija sastāv no paragrāfiem. Paragrāfi: • Pamata tipu deklarācijas: [ NAME, DATE ] . Tipus var tālāk lietot specifikācijā. • Aksiomātiskās definīcijas: | x NAME square: N N n N square(n) = n * nievieš mainīgo, kopā ar īpašību • Ierobežojumi: n < 13 (attiecas uz jau definētiem globāliem mainīgajiem) • Shēmu definīcijas • Saīsinājumu definīcijas: DATABASE ADDR PAGE • Brīvo tipu definīcijas (sk. nākamo slaidu). • Neformāls teksts, paskaidrojumi – arī var tikt iekļauts Z specifikācijā.
Z specifikācijas: brīvie tipi tip : TREE Definīcijas variants bez rekursijasfork: N TREE TREE >--> TREE Iespējamas arī “brīvo” tipu definīcijas: TREE ::= tip | fork N TREE TREE Definīcija ekvivalenta ar [TREE], kam seko: disjoint {tip}, ran fork W: P TREE {tip} fork (| N W W |) W TREE W >--> - visur definēta injekcija >-+-> - daļēji definēta injekcija disjoint A, B, ... , C - kopām A, B, ..., C nav kopīgu elementu. _ _ - attēls ar relāciju (relational image) R: XY, S: P X R S = { x: X, y: Y | x S x R y y } R – infikss lietojums relācijai R. y R S { x: X, y: Y | x S x R y } Diskusija:kāpēc abas definīcijas ekvivalentas?
Matemātiska teorija valodā Z: piemērs Valoda IMP0 no iepriekšējām lekcijām, šeit izmantota kā “eksperimenta trusītis”. Sintakse definēta, izmantojot brīvo tipu definīcijas metodi. [VAR] AExpr ::= con Z | var VAR | plus AExpr AExpr | minus AExpr AExpr | times AExpr AExpr BExpr ::= ttrue | ffalse | neg BExpr | and BExpr BExpr | or BExpr BExpr | eq AExpr AExpr | leq AExpr AExpr Com ::= skip | assign VAR AExpr | seq Com Com | if_op BExpr Com Com | while_op BExpr Com Semantika - ?
Matemātiska teorija valodā Z: piemērs, turpināts State VAR Z IMP0 semantika: definīcijas skice. aVal : AExpr × State Z s: STATEx: Z v: VAR a,b: AExpr aVal(con(x),s) = x aVal(var(v),s) = s(v) aVal(plus(a,b),s) = aVal(a,s) + aVal(b,s) ... bVal : BExpr × State {true, false}... update : State × VAR ×Z State s, t: STATEn: Z v,v’: VAR update(s,v,n) = t t(v)=n v’v s(v’) = t(v’) eval : P (State × Com × State) s, t: STATEc,c1,c2: Com v: VAR a: AExpr b: BExpr c = skip ( (s,c,t) eval s = t) ) c = assign(v,a) ( (s,c,t) eval t = update(s, v, aVal(a,s))) c = seq(c1, c2) ( (s,c,t) eval (r: State (s,c1,r) eval (r,c2,t) eval ))c = if_op(b,c1,c2) ( (s,c,t) eval (bval(b,s)=true (s,c1,t) eval) (bval(b,s)=false (s,c2,t) eval)c = while_op(b,c1,c2) ( (s,c,t) eval ((bval(b,s)=true s = t) (bval(b,s)=true r: State (s,c1,r) eval (r,c,t) eval )) )
AddBirthday AddBirthday BirthdayBook, BirthdayBook'- shēmas dekorācija, beigu stāvoklisname? : Name; date? : Date BirthdayBook - sākuma un beigu stāvokļi deklarēti šeitname? : Name; date? : Date name? known birthday'= birthday {name? |date?} name? known birthday'= birthday {name? |date?} Vienkāršs piemērs: Dzimšanas dienureģistrs BirthdayBook known: P Name - kopas apakškopu kopabirthday: Name -+-> Date - daļēji definēta funkcija [Name, Date] - dotās kopas, vienmēr arī Z - dotā kopa known = dom birthday BirthdayBook BirthdayBook BirthdayBook' - notācija
FindBirthday BirthdayBookname? : Name; date! : Date name? known date ! = birthday(name?) known' = known birthday' =birthday FindBirthday Remind BirthdayBookname? : Name; date! : Date BirthdayBooktoday? : Date; cards ! : P Name name? known date ! = birthday(name?) cards ! = {n: known | birthday(n) = today?} InitBirthdayBook BirthdayBook' known' = Dzimšanas dienureģistrs (2) BirthdayBook [BirthdayBook |known'=known; birthday' = birthday] Inicializācija:
AddBirthday BirthdayBook, BirthdayBook'name? : Name; date? : Date name? known birthday'= birthday {name? |date?} Operāciju priekšnosacījumi pre S - nosacījums uz operāciju raksturojošas shēmas sākuma stāvokli (mainīgo bez dekorācijām vērtībām) un ieejas datiem (mainīgo ar dekorāciju ? vērtībām),kas spēkā tad un tikai tad, ja eksistē beigu stāvokļa mainīgo un izejas datu vērtības, ar kurām kopā dotās sākuma vērtības un ieejas dati apmierina shēmas predikātu. pre AddBirthday = [BirthdayBook ; name? : Name; date? : Date |name? known] pre FindBirthday = [BirthdayBook ; name? : Name |name? known] Sākuma nosacījums netiek izdalīts atsevišķi no kopējā operāciju raksturojošā predikāta. Sekas: iespējams pievienot izteiksmi, kas tieši attiecas tikai uz beigu mainīgajiem,bet kura būtiski maina priekšnosacījumu.
Success result! : Report result! = ok AlreadyKnown BirthdayBookname? : Name; result ! : Report name? known result ! = already_known Dzimšanas dienu reģistrs: specifikācijas papildinājums Report ::= ok| already_known | not_known - brīvā (induktīvā) tipa definējums RAddBirthday (AddBirthday Success) AlreadyKnown Valodā Z iespējamas loģiskās operācijas ar shēmām: konjunkcija, disjunkcija, negācija. Lai konjunkcija vai disjunkcija būtu definēta, nepieciešams, lai shēmudeklarācijas daļas būtu saskaņotas. Izpildot loģiskās operācijas, nepieciešams ņemt vērā, ka daļa no predikāta var būt implicīti ietverta jau deklarācijas daļā.
NotKnown BirthdayBookname? : Name; result ! : Report name? known result ! = not_known Dzimšanas dienu reģ.: specifikācijas papildinājums (2) RFindBirthday (FindBirthday Success) NotKnown RRemind Remind Success
BirthdayBook1 names : N1 Namedates : N1 Date ; hwm : N i,j : 1 .. hwm i j names(i) names(j) AbsBB BirthdayBookBirthdayBook1 known = {i : 1 .. hwm names(i) } {names(i)|i1..hwm}i : 1 .. hwm birthday (names(i)) = dates(i) AddBirthday1 BirthdayBook1name? : Name; date? : Date i : 1 .. hwm name? names(i) hwm' = hwm + 1 names' = names {hwm' | name?}dates' = dates {hwm' | date?} Dzimšanas dienu reģistrs: "implementācija" Z: specifikācijas notācija, nevis specifikācijas metode (kā, piemēram, B). Z ļauj pierakstīt strukturētā veidā dažādus apgalvojumus, bet veids, kā šie apgalvojumi saistās kopā vienotā programmatūras izstrādes procesā, netiek a priori fiksēts.
Valodas Z matemātiskās konstrukcijas: ieskats {…} - kopa Kopu operācijas: , , , \, (elementu skaits, S), , , - tukša kopa, SS, SS (kopu vispārinātais apvienojums, šķēlums), P, P1, F, F1 - visu, netukšo, galīgo un galīgo netukšo apakškopu kopa, - Dekarta reizinājums { | • } - kopas formācija Vispārīgā forma: { S • E }, kur S – shēmas teksts, E – izteiksme.Elementi šajā kopā – izteiksmes E vērtības, kas atbilst visām iespējamām shēmas S ieviesto mainīgo vērtībām, kurām S īpašība ir patiesa. (...) – kortežs. Binārā kortežā operācijas first, second. - funkcijas notācija. Vispārīgā forma: S • E, kur S – shēmas teksts, E – izteiksme Šāda izteiksme apraksta funkciju, kuras argumentus definē shēma S, un katram argumentam atbilstošais rezultāts tiek iegūts kā E. Ekvivalenta ar { S • (T,E) }, kur T – shēmas tekstu S raksturojošais kortežs. Raksturojošais kortežs – mainīgo uzskaitījums korteža formā.
Valodas Z matemātiskās konstrukcijas: ieskats - definitīvi aprakstošā izteiksme Vispārīgā forma: S • E, kur S – shēmas teksts, E – izteiksmeDefinēta tikai tad, ja eksistē viens vienīgs veids, kā izvēlēties S mainīgo vērtības, tā lai S īpašība būtu patiesa.Šajā gadījumā S • E vērtība ir šīm mainīgo vērtībām atbilstošā izteiksmes E vērtība. ( BirthdayBook | known = • birthday ) - funkcija ar tukšu argumentu kopu ( BirthdayBook | known = ) - terms ar tipu BirthdayBook - saistījuma (binding) formēšana shēmai: S’, kur S – shēmas vārds, ’ – dekorācija (dekorācijas var būt arī citādas).Ja S komponentes ir x1, ..., xn, ar tipiem t1, ..., tn, tad S’ tips ir x1:t1, ..., xn:tn.S’ vērtība saistījumā u pati ir saistījums z, tāds, ka katram i: z.xi = u.xi’. Likumi: S’.xi = xi’S’ = S (x1’ = x1) (x2’ = x2) ... (xn’ = xn) Piemēri būs pieejami tālākā materiālā.
Valodas Z matemātiskās konstrukcijas: relācijas Tālāki datu tipi un to operācijas: sk. valodas Z sintakses pārskatā, valodas rokasgrāmatā. Relācijas: dom R, ran R, - definīcijas un vērtību kopaid X – identitātes relācijaR1 ; R2 – relāciju kompozīcijaR1 R2 – apgrieztā relāciju kompozīcijaS <| R - definīcijas apgabala ierobežošana (izmet ārā visus, kas nav iekš S)R |> S - vērtību kopas ierobežošana (izmet ārā visus, kas nav iekš S)S <-| R - definīcijas apgabala anti-ierobežošana (izmet ārā visus, kas ir iekš S)R |-> S - vērtību kopas anti-ierobežošana (izmet ārā visus, kas ir iekš S)R (| S|) – kopas attēls ar relācijuR1 R2 – relācijas pārdefinēšana atbilstoši R2Rk, R+, R* - iterācija, tranzitīvais slēgums, refleksīvi tranzitīvais slēgums
Valodas Z matemātiskās konstrukcijas: virknes Virknes: Valodā Z var veidot virknes no viena tipa objektiem. Virkne – funkcija no naturāliem skaitļiem uz virknē iekļauto objektu tipu. seq X == { f: N ++-> X | dom f = 1 .. #f } seq1 X == { f: seq X | #f > 0 } - netukšas virknes iseq X == seq X ( N >-> X) - injektīvas virknes Sakārtota virkne: ordered s == i,j: N 1 i j #f s(i) s(j) Operācijas:# - garums, ^ - konkatenācija, rev, head, last, tail, front, S prefix T, S suffix T, S in T (segmenta iekļaušana),U ’| S – elementu atlasīšana no virknes atbilstoši indeksu kopaiS |‘ V – atlasa no virknes tos elementus, kas pieder kopai V.disjoint SeqSet – kopām virknē SeqSet nav kopīgu elementuSeqSet partition T. ran s = { i: 1 .. #s s(i) } – virknes elementu kopa.
[X] count: bag X >-->> ( X N )>-->> - bijekcija_in_ : X bag X x : X; B: bag Xcount B = (x: X 0) Bx in B x dom B Valodas Z matemātiskās konstrukcijas: maisi Maiss – multikopa, elementu kopums, kurā svarīgs katra elementa ieiešanas reižu skaits (bet nav svarīga secība). Visu maisu ar elementu tipu X kopa: bag X == X -+-> N1 Maiss – daļēji definēta funkcija, kas katram maisa elementam piekārto tā ieiešanas reižu skaitu maisā (funkcija nav definēta citiem tipa X elementiem). Parametrizēta shēma: Virknes s elementu maiss: items sitems: seq X bag Xx : X; s: seq Xcount (items s) x = #{ i: dom s | s(i) = x } Virkne u ir sakārtota virknes s permutācija:items u = items s ordered u