valoda z : specifikācijas un implementācijas korektība

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

Upload: jimbo

Post on 14-Jan-2016

53 views

Category:

Documents


12 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Valoda  Z : Specifikācijas un implementācijas korektība

Valoda Z:Specifikācijas un

implementācijas korektība.

Specifikāciju valodas

Page 2: Valoda  Z : Specifikācijas un implementācijas korektība

Piemērs: Dzimšanas dienu reģistrs[Name, Date] - dotās kopas, vienmēr arī ZZ - dotā kopa

BirthdayBookknown: PP Name - kopas apakškopu kopabirthday: Name -+-> Date - daļēji definēta funkcija

known = dom birthday

BirthdayBook - sākuma un beigu stāvokļi deklarēti šeitname? : Name; date? : Date

AddBirthday

name? known birthday'= birthday {name? | date?}

FindBirthday BirthdayBook

name? : Name; date! : Date

name? known date ! = birthday (name?)

Remind BirthdayBook

today? : Date; cards ! : PP Name

cards ! = { n: known | birthday (n) = today? }

Page 3: Valoda  Z : Specifikācijas un implementācijas korektība

Dzimšanas dienu reģistrs (turpināts)

Report ::= ok| already_known | not_known - brīvā (induktīvā) tipa definējums

Successresult! : Report

result! = ok

AlreadyKnown BirthdayBook

name? : Name; result ! : Report

name? known result ! = already_known

NotKnown BirthdayBook

name? : Name; result ! : Report

name? known result ! = not_known

RAddBirthday (AddBirthday Success) AlreadyKnownRFindBirthday (FindBirthday Success) NotKnownRRemind Remind Success

InitBirthdayBook == [ BirthdayBook’ | known' = ] Inicializācija:

Page 4: Valoda  Z : Specifikācijas un implementācijas korektība

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.

Page 5: Valoda  Z : Specifikācijas un implementācijas korektība

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: PP 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’ : PP Name birthday’: Name -+-> Date known’ = dom birthday’ known’ =

PP 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]

Page 6: Valoda  Z : Specifikācijas un implementācijas korektība

Shēmu kvantori: atkārtojumsShē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 S signatū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: ZZ, b: ZZ | a + b = 10 ]

b: ZZ | b < 13 A [ a: ZZ | b: ZZ b < 13 a + b = 10 ]

Vingrinājums

Class [ enrolled, tested : P Student | #enrolled size tested enrolled ]

ClassInit [ Class’ | enrolled’ = ]

Class’ ClassInit ???

Page 7: Valoda  Z : Specifikācijas un implementācijas korektība

Operāciju korektība

pre Op - nosacījums uz operācijas shēmas Op sā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.

Page 8: Valoda  Z : Specifikācijas un implementācijas korektība

Operāciju korektība: turpinātsJa 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.

Page 9: Valoda  Z : Specifikācijas un implementācijas korektība

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 ir Aop 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).

Page 10: Valoda  Z : Specifikācijas un implementācijas korektība

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 )

Page 11: Valoda  Z : Specifikācijas un implementācijas korektība

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ēta funkcija – 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

Page 12: Valoda  Z : Specifikācijas un implementācijas korektība

Dzimšanas dienu reģistrs: "implementācija"

BirthdayBook1names : NN1 Namedates : NN1 Date ; hwm : NN

i,j : 1 .. hwm i j names (i) names (j)

AbsBBBirthdayBookBirthdayBook1

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?}

BirthdayBook ; name? : Name; date? : Date AddBirthday

name? known birthday'= birthday {name? | date?}

Page 13: Valoda  Z : Specifikācijas un implementācijas korektība

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.

Page 14: Valoda  Z : Specifikācijas un implementācijas korektība

Studiju reģistratora palīgs (atkārtots)

[Student] - dota kopa

size : NN - 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 ]

Page 15: Valoda  Z : Specifikācijas un implementācijas korektība

Studiju reģistratora palīgs (2)[Student] size : NN

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) ) ]

Page 16: Valoda  Z : Specifikācijas un implementācijas korektība

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)

Page 17: Valoda  Z : Specifikācijas un implementācijas korektība

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

Page 18: Valoda  Z : Specifikācijas un implementācijas korektība

No specifikācijām uz implementācijāmSpecifikā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).

Page 19: Valoda  Z : Specifikācijas un implementācijas korektība

Piezīmes par Z atbalsta rīkiemWindows vidē – grūti atrast viegli paņemamu un darbināmu.

ZETA http://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).

Page 20: Valoda  Z : Specifikācijas un implementācijas korektība

Z specifikāciju notācijas (LaTeX), piemērs\begin{zed}[Name, Date]\end{zed}

\begin{schema}{BirthdayBook}known : \power Name \\birthday : Name \pfun Date\whereknown = \dom birthday\end{schema}

\begin{schema}{AddBirthday}\Delta BirthdayBook \\name?: Name; date!: Date\wherename? \notin known \land birthday' = birthday \cup \{name? \mapsto

date!\}\end{schema}

Page 21: Valoda  Z : Specifikācijas un implementācijas korektība

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