1 / 21

Valoda Z : Specifikācijas un implementācijas korektība.

Valoda Z : Specifikācijas un implementācijas korektība. Specifikāciju valodas. AddBirthday. FindBirthday. Remind.  BirthdayBook - sākuma un beigu stāvok ļi deklarēti šeit name? : Name; date? : Date.  BirthdayBook name? : Name; date! : Date.

jimbo
Download Presentation

Valoda Z : Specifikācijas un implementācijas korektība.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Valoda Z:Specifikācijas un implementācijas korektība. Specifikāciju valodas

  2. AddBirthday FindBirthday Remind  BirthdayBook - sākuma un beigu stāvokļi deklarēti šeitname? : Name; date? : Date  BirthdayBookname? : Name; date! : Date  BirthdayBooktoday? : Date; cards ! : P Name name?  known  birthday'= birthday  {name? |date?} name?  known  date ! = birthday(name?) cards ! = {n: known | birthday(n) = today?} Piemērs: Dzimšanas dienu reģ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

  3. Success result! : Report result! = ok AlreadyKnown NotKnown  BirthdayBookname? : Name; result ! : Report  BirthdayBookname? : Name; result ! : Report name?  known  result ! = already_known name?  known  result ! = not_known Inicializācija: Dzimšanas dienu reģistrs (turpināts) InitBirthdayBook == [ BirthdayBook’ | known' =  ] Report ::= ok| already_known | not_known - brīvā (induktīvā) tipa definējums RAddBirthday  (AddBirthday  Success)  AlreadyKnown RFindBirthday (FindBirthday  Success)  NotKnown RRemind  Remind  Success

  4. Abstrakto datu tipu uzdošana un korektība Abstraktais datu tips: 1) stāvokļu kopa, 2) operācijas maina stāvokļus, ieejas un izejas dati, 3) netukša sākuma stāvokļu kopa. Stāvokļu kopa – uzdota ar stāvokļu shēmām, nelieto elementu dekorācijas. Shēmas stāvokļu kopa – visu shēmai atbilstošo saistījumu (bindings) kopa (saistījumi, kas atbilst shēmas signatūrai un apmierina shēmas īpašību). Operācijas – vienošanās par dekorācijām: tukšā dekorācija – sākuma stāvoklis, dekorācija ’ – beigu stāvoklis dekorācijas ? un ! – operācijas ieejas un izejas mainīgie Operācijas korektība: operācija pabeigs darbu un apstāsies beigu stāvoklī, kas ar operācijas shēmu OpS saistīts ar sākuma stāvokli,ja sākuma stāvoklis apmierina operācijas shēmas sākuma nosacījumu pre OpS(t.i., ja sākuma stāvoklim atbilstošais beigu stāvoklis eksistē). Sākuma stāvokļi: incializācija, svarīgi, lai sākotnējā stāvokļu kopa būtu netukša. Specifikācijas korektības prasības:1) netukša sākuma stāvokļu kopa 2) saturiskajai jēgai atbilstoši pre OpS.

  5. Sākuma nosacījuma korektība Ja stāvokļa shēma ir S un inicializācijas shēma ir Init, tad korektības nosacījums ir:  S’  Init BirthdayBook  [ known: P Name, birthday: Name-+->Date | known=dom birthday ] InitBirthdayBook  [ BirthdayBook’ | known' =  ] Sākuma nosacījuma korektība: BirthdayBook’  InitBirthdayBook Pārrakstot:  BirthdayBook’  [ BirthdayBook’ | known’ =  ]  BirthdayBook’  known’ =  known’ : P Name  birthday’: Name -+-> Date  known’ = dom birthday’ known’ =   P Name    Name -+-> Date  true Izmantotie likumi: Shēmas kvantifikācija (sk. nākamo slaidu) Viena punkta likums (one point rule):  x: a  p  x = t  t  a  p [t / x]

  6. Shēmu kvantori: atkārtojums 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. Shēmu D | P  S un D | P  Ssignatūra:no S paslēpjam elementus, kas ietilpst D. Saistījums  apmierina D | P  Sīpašību, ja visi tā paplašinājumi uz S signatūru, kas apmierina predikātu P, apmierinās arī shēmas S īpašību. Saistījums  apmierina D | P  Sīpašību, ja eksistē tāds tā paplašinājums uz S signatūru, kas apmierina predikātu P, un apmierina arī shēmas S īpašību. Piemērs A = [ a: Z, b: Z | a + b = 10 ] b: Z | b < 13  A  [ a: Z | b: Z  b < 13  a + b = 10 ] Vingrinājums Class  [ enrolled, tested : P Student | #enrolled  size  tested  enrolled ] ClassInit  [ Class’ | enrolled’ =  ] Class’  ClassInit  ???

  7. Operāciju korektība pre Op- nosacījums uz operācijas shēmas Opsākuma stāvokli un ieejas datiem, 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. Ja S – stāvokļa shēma, Op – operācijas shēma, y!: Y – izejas mainīgais (vienīgais), tad pre Op   S’ ; y!: Y  Op Piemēri:pre AddBirthday = [BirthdayBook ; name? : Name; date? : Date |name?  known] pre FindBirthday = [BirthdayBook ; name? : Name |name?  known] Operācija Op pabeigs darbu un apstāsies beigu stāvoklī, kas ar tās shēmu saistīts ar sākuma stāvokli, ja sākuma stāvoklis (un ieejas mainīgie) apmierina operācijas shēmas sākuma nosacījumu pre Op.

  8. Operāciju korektība: turpināts Ja S – stāvokļa shēma, Op – operācijas shēma, y!: Y – izejas mainīgais (vienīgais), tad pre Op   S’ ; y!: Y  Op Piemēri:pre AddBirthday = [BirthdayBook ; name? : Name; date? : Date |name?  known] pre FindBirthday = [BirthdayBook ; name? : Name |name?  known] Operācija Op pabeigs darbu un apstāsies beigu stāvoklī, kas ar tās shēmu saistīts ar sākuma stāvokli, ja sākuma stāvoklis (un ieejas mainīgie) apmierina operācijas shēmas sākuma nosacījumu pre Op. 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. Kā pārliecināties par operācijas korektību: izskaitļot tās sākuma nosacījumu, un pārliecināties, ka tas ietver visas situācijas, kurās operācija tiks lietota.

  9. Specifikācijas un implementācijas (1) Valodā Z iespējams definēt arī operāciju specifikāciju precizējuma attiecību  (valodā Z attiecību  šajā kontekstā nelieto, bet principā tā varētu šeit būt). Vienkāršākais gadījums: abas operācijas ir definētas kā shēmas: Aop – abstraktā operācijaCop – konkrētā operācija, abas operācijas izmanto vienu stāvokļu telpu. Pieņemsim, ka Aop un Cop atbilstošā stāvokļa shēma ir S, ieejas dati ir x?: X, izejas dati y!: Y. Tad Cop irAop precizējums (Aop  Cop), ja spēkā 2 nosacījumi: - S; x?: X  pre Aop  pre Cop(ja Aop garantēti apstājas, tad arī Cop noteikti apstāsies) - S; S’; x?: X ; y!: Y  pre Aop  Cop  Aop(katrs Cop rezultāts situācijā, kad arī Aop bija iespējama, ir arī derīgs Aop rezultāts). Cop var būt definēts plašākai sākuma datu kopai. Attiecībā uz vieniem un tiem pašiem sākuma datiem Cop var piedāvāt lielāku determinitāti (mazāku iespējamā rezultāta variantu izvēli).

  10. Specifikācijas un implementācijas (2) Sakrītoša datu telpa: Aop un Cop stāvokļa shēma ir S, ieejas x?: X, izejas y!: Y. Tad Cop ir Abs precizējums, ja spēkā 2 nosacījumi:  S; x?: X  pre Aop  pre Cop  S; S’; x?: X ; y!: Y  pre Aop  Cop  Aop Dažādu stāvokļa telpu gadījums: vairāk matemātiskas datu struktūras var tikt aizstātas ar vieglāk programmistiski realizējamām, piemēram – virknes kopu vietā. Stāvokļu shēmas: AState, CState Abstrakcijas attiecība (shēma) Abs, saista abstraktās un konkrētās stāvokļu telpas, tās signatūra – tā pati, kas shēmai AState  CState Tad Cop ir Aop precizējums (atbilstoši shēmai Abs), ja 1)  AState; CState; x?: X  pre Aop  Abs  pre Cop(ja Aop apstājas, tad arī atbilstošais Cop noteikti apstājas) 2)  AState; CState; CState’; x?: X ; y!: Y  pre Aop  Abs  Cop  ( AState’  Abs’  Aop )(katram Cop rezultātam eksistē arī atbilstošs derīgs Aop rezultāts) Papildus nosacījums uz sākuma stāvokļiem:  CState’  CInit  ( AState’  Abs’  AInit )

  11. Specifikācijas un implementācijas (3) Stāvokļu shēmas: AState, CState Abstrakcijas attiecība (shēma) Abs, saista abstraktās un konkrētās stāvokļu telpas. Tad Cop ir Aop precizējums (atbilstoši shēmai Abs), ja 1)  AState; CState; x?: X  pre Aop  Abs  pre Cop 2)  AState; CState; CState’; x?: X ; y!: Y  pre Aop  Abs  Cop  ( AState’  Abs’  Aop ) Papildus nosacījums uz sākuma stāvokļiem:3)  CState’  CInit  ( AState’  Abs’  AInit ) Vispārīgajā gadījumā Abs definē patvaļīgu attiecību – vienam abstraktam stāvoklim var atbilst vairāki konkrēti stāvokļi (piemēram, kopai var atbilst dažādas virknes), un otrādi (ja abstraktā stāvoklī ir kāda informācija, kas nav pieejama operācijām). Bieži vien Abs ir visur definētafunkcija – vienam konkrētam stāvoklim atbilst tieši viens abstrakts stāvoklis. Tas ļauj vienkāršot nosacījumus: 2a)  AState; CState; AState’; CState’; x?: X ; y!: Y  pre Aop  Abs  Cop  Abs’  Aop 3a)  AState’ ; CState’  CInit  Abs’  AInit

  12. 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)|i1..hwm}i : 1 .. hwm birthday (names(i)) = dates(i) AddBirthday  BirthdayBook ; name? : Name; date? : Date AddBirthday1 name?  known  birthday'= birthday  {name? |date?}  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"

  13. Dzimšanas dienu reģistrs: pierādījumi 1)  AState; CState; x?: X  pre Aop  Abs  pre Cop 2)  AState; CState; AState’; CState’; x?: X ; y!: Y  pre Aop  Abs  Cop  Abs’  Aop 3)  AState’ ; CState’  CInit  Abs’  AInit Aplūkojam operāciju AddBirthday: 1)  BirthdayBook; BirthdayBook1; name?: Name; date?: Date  pre AddBirthday  AbsBB  pre AddBirthday1 2)  BirthdayBook; BirthdayBook1; BirthdayBook’; BirthdayBook1’; name?: Name ; date?: Date  pre AddBirthday  AbsBB  AddBirthday1  AbsBB’  AddBirthday 3)  BirthdayBook’ ; BirthdayBook1’  InitBirthdayBook1  AbsBB’  InitBirthdayBook Diskusija: veikt šos pierādījumus, vismaz pārliecināties, ka šīs implikācijas patiesas.

  14. Studiju reģistratora palīgs (atkārtots) [Student] - dota kopa size : N- deklarējam konstanti Response ::= success | notenrolled | nocert | cert | alreadyenrolled | alreadytested | noroom - uzskaitījuma veida datu tips Class  [ enrolled, tested : P Student | #enrolled  size  tested  enrolled ] - shēma, raksturo sistēmas stāvokli ClassInit  [ Class’ | enrolled’ =  ] - cita shēma, raksturo sākuma stāvokli Enrolok  [ Class, s?: Student, r!: Response | - operāciju shēmas s?  enrolled  #enrolled < size enrolled’ = enrolled  {s?}  tested’ = tested  r! = success ] Testok  [ Class, s?: Student, r!: Response | s?  enrolled  s?  tested enrolled’ = enrolled  tested’ = tested  {s?}  r! = success ]

  15. Studiju reģistratora palīgs (2) [Student] size : N Response ::= success | notenrolled | nocert | cert | alreadyenrolled | alreadytested | noroom Class [ enrolled, tested : P Student | #enrolled  size  tested  enrolled ]- shēma, raksturo sistēmas stāvokli ClassInit [ Class’ | enrolled’ =  ] - cita shēma, raksturo sākuma stāvokli … Leaveok  [ Class, s?: Student, r!: Response | - tālākas operācijas s?  enrolled  enrolled’ = enrolled \ {s?} ((s?  tested  tested’ = tested \ {s?}  r! = cert )  (s?  tested  tested’ = tested  r! = nocert )) ] Enquire  [ Class, s?: Student, r!: Response | ((s?  enrolled  r! = notenrolled)  (s?  (enrolled \ tested)  r! = alreadyenrolled)  (s?  tested  r! = alreadytested) ) ]

  16. Studiju reģistratora palīgs: ieskats implementācijā Gan abstraktā, gan konkrētā mašīnas: aprakstītas, izmantojot shēmas. Konkrētās un abstraktās mašīnas atbilstība: abstrakcijas funkcija: arī aprakstāma, izmantojot shēmas;vispārīgāks gadījums: simulācijas attiecība abstrakcijas funkcijas vietā. Class  [ enrolled, tested : P Student | #enrolled  size  tested  enrolled ] DClass  [ sarray: (1 .. size)  Student , ectr: 0 .. size, tctr : 0 .. size | tctr  ectr   i, j : 1 .. ectr | i  j  sarray i  sarray j ] DSim  [ Class, DClass | enrolled = { i: 1 .. ectr  sarray(i) }  tested = { i: 1 .. tctr  sarray(i) } ] -- “simulācijas” atbilstība Šajā gadījumā DSim ir funkcija (konkrētais stāvoklis viennozīmīgi nosaka abstrakto stāvokli)

  17. Studiju reģistratora palīgs: ieskats implementācijā (2) Class  [ enrolled, tested : P Student | #enrolled  size  tested  enrolled ] DClass  [ sarray: (1 .. size)  Student , ectr: 0 .. size, tctr : 0 .. size | tctr  ectr   i, j : 1 .. ectr | i  j  sarray i  sarray j ] DSim  [ Class, DClass | enrolled = { i: 1 .. ectr  sarray(i) }  tested = { i: 1 .. tctr  sarray(i) } ] -- “simulācijas” atbilstība Šajā gadījumā DSim ir funkcija (konkrētais stāvoklis viennozīmīgi nosaka abstrakto stāvokli) Operāciju korektības nosacījumi (piemērs):  Class; DClass; s?: Student  (pre Enrol)  DSim  (pre DEnrol)  Class; DClass; DClass’; s?: Student ; r!: Response  (pre Enrol)  DSim  DEnrol   Class’  (Enrol  DSim’) Vienkāršāks otrais nosacījums:  Class; DClass; Class’; DClass’; s?: Student ; r!: Response  (pre Enrol)  DSim  DEnrol  DSim’  Enrol

  18. No specifikācijām uz implementācijām Specifikācija (shēmas) | Detalizācija 1 Dizains (shēmas) | Translācija 1 Algoritms (abstrakta programma) | Detalizācija 2 Kods (aizsargātās komandas) | Translācija 2 Kods (programmēšanas valoda) Detalizācija 1 – tas, ko aplūkojām (specifikācijas un implementācijas attiecības) Abstraktās programmas: specifikācijas, kas satur norādi uz stāvokļu telpu, sākuma un beigu nosacījumu. Detalizācija 2 – pēc analoģijas ar ‘Programmēšana no specifikācijām’ (vai arī var uzprogrammēt atsevišķi un tad pierādīt programmu korektību, izmantojot Hoara loģiku).

  19. Piezīmes par Z atbalsta rīkiem Windows vidē – grūti atrast viegli paņemamu un darbināmu. ZETAhttp://uebb.cs.tu-berlin.de/zeta/ (specifikāciju izspīde, tipu pārbaude, izpilde; konfigurācija ne visai ērta) JAZA – specifikāciju animācija Linux vidē: CZT (Community Z Tools) http://linux.softpedia.com/get/Programming/Code-Generators/Community-Z-Tools-4494.shtml CaDiZ (darbojas arī uz Windows ar Cygwin) http://www-users.cs.york.ac.uk/~ian/cadiz/home.html Piezīme: CaDiZ izmanto ISO 2002 Z standartu, ir atšķirības no “ZRM Z”. Z/EVES no ORA Canada: atbalsts un izplatīšana pārtraukta. Specifikācijas apraksts: izmantojot kādu notāciju speciālo simbolu un shēmu notācijas uzdošanai. Populārākais: teksta procesēšanas sistēmas LaTeX stila izmantošana Izmanto arī troff notāciju (CaDiZ).

  20. Z specifikāciju notācijas (LaTeX), piemērs \begin{zed} [Name, Date] \end{zed} \begin{schema}{BirthdayBook} known : \power Name \\ birthday : Name \pfun Date \where known = \dom birthday \end{schema} \begin{schema}{AddBirthday} \Delta BirthdayBook \\ name?: Name; date!: Date \where name? \notin known \land birthday' = birthday \cup \{name? \mapsto date!\} \end{schema}

  21. Z specifikāciju notācijas: troff (piemērs) .ZS [Name, Date] .ZE .ZS BirthdayBook known : ps Name birthday : Name pfx Date .ZM known = dom birthday .ZE .ZS AddBirthday Delta BirthdayBook name?: Name; date!: Date .ZM name? notmem known and birthday'=birthday sor {name? mlet date!} .ZE

More Related