z jezik za specifikaciju - mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · z tool-kit nije...

14
Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni diplomski studij matematike i računarstva Z – jezik za specifikaciju Seminarski rad iz kolegija Softversko inženjerstvo Student: Josipa Nemčić Osijek, lipanj 2016.

Upload: others

Post on 04-Jan-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

Sveučilište J. J. Strossmayera u Osijeku

Odjel za matematiku

Sveučilišni diplomski studij matematike i računarstva

Z – jezik za specifikaciju

Seminarski rad iz kolegija

Softversko inženjerstvo

Student: Josipa Nemčić

Osijek, lipanj 2016.

Page 2: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

1

1 Sadržaj

1 Formalna specifikacija ............................................................................................................. 2

2 Što je Z? .................................................................................................................................... 3

3 Kako je nastao Z? ..................................................................................................................... 4

4 Modeliranje sustava................................................................................................................. 5

5 Primjeri notacije ....................................................................................................................... 6

5.1 Birthday Book ................................................................................................................... 6

5.2 Bankovni sustav ................................................................................................................ 9

6 Zaključak ................................................................................................................................... 9

7 Literatura ................................................................................................................................ 13

Page 3: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

2

2 Formalna specifikacija

Formalna specifikacija se odnosi na matematički bazirane tehnike sa ciljem olakšavanja

implementacije sustava. Koristi se za opis sustava, analizu ponašanja i kontrolu dizajna preko

verifikacije ključnih svojstava kroz vrlo stroge i efektivne alate odlučivanja.

Koncentracija je na preciznom načinu opisa svojstava koje informacijski sustav mora imati bez

velikog ulaženja u način na koji bi se ta svojstva trebala ostvariti.

Drugim riječima, ona propisuje što bi sustav trebao raditi, ne na koji način bi to trebalo biti

ostvareno.

Iz samog naziva bi mogli zaključiti da se formalna specifikacija koristi u ranijim fazama izrade

softvera kao polazište za daljnje oblikovanje, ali ona je osim toga uvelike prisutna i u dizajnu i

verifikaciji. Najviše se koristi za sustave koje je teško ostvariti, koji su kritični u nekom smislu,

komplicirani ili neobični.

U verifikaciji, za razliku od ostalih tehnika, zaključke izvodi iz detaljne analize a ne iz

eksperimentalnih rezultata. Daje bolji uvid u potrebnu funkcionalnost i minimizira mogućnost

nastanka greške.

Apstrakcija čini formalnu specifikaciju korisnom u procesu razvoja jer dozvoljava

nedvosmislene odgovore na pitanja o konačnom proizvodu s matematičkog aspekta kroz

algebarske, diskretizatizacijske, statističke, računarske i ostale tehnike, bez potrebe za

traženjem potrebnih informacija u masi kompliciranih kodova ili spekulacije oko značenja

određenih elemenata u nepreciznom opisu implementacije.

Postoje različite tehnike formalne specifikacije čije su zajedničke karakteristike specijalna

sintaksa, semantička restrikcija na jednu domenu, sposobnost izvođenja korisnih informacija u

svrhu stvaranja pouzdanijeg i kvalitetnijeg dizajna...

U nastavku ćemo promatrati specijalnu metodu formalne specifikacije, Z notaciju.

Page 4: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

3

3 Što je Z?

Z je kolekcija konvekcija za prikaz matematičkog teksta s ciljem opisivanja računalnog sustava,

razvijenih za pojednostavljenje procesa specifikacije i izrade zahtjeva, te daljnju kontrolu

ponašanja.

Izgovara se 'Zed' a ime je dobila prema Zermelo-Fränkel teoriji skupova na kojoj je bazirana.

Matematička notacija Z jezika se sastoji od male jezgre istinitih tvrdnji, koja je naknadno

proširena u veliku kolekciju korisnih objekata i operacija pod imenom Z mathematical tool-kit.

Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima kao skupovima, relacijama, funkcijama, sekvencama i njihovim operacijama. Koristimo te matematičke objekte da modeliramo strukturu podataka i ostale komponente računalnog sustava. Tool-kit na neki način igra ulogu standardne biblioteke tipova i funkcija programskog jezika.

Iako se može koristiti uz funkcionalne programske jezike, Z je prirodno koristiti sa objektno-orjentiranim jezicima. Varijable stanja u Z jeziku su ekvivalentne instancama varijabli i operacije metodama. Z podržava i neku vrstu nasljeđivanja.

Ovdje je potrebno naglasiti da Z nije programski jezik, odnosno Z specifikacija se ne može prevesti na strojni jezik ili kompajlirati u programu, prototipu ili simulaciji. Dizajniran je za ljudsku upotrebu, ne za strojeve. Kroz niz godina Z tekst se pisao isključivo rukom.

S obzirom da se Z oslanja na matematičku analizu, sadrži mnogo matematičkih simbola koji

nisu dio ASCII notacije. Kako bi se taj problem premostio, specifikacija uključuje sugestije za

renderiranje Z notacije u ASCII isto kao i Latex.

Z notacija podržava više metoda. Primjeri takvih metoda su apstraktna formalna specifikacija1 i izvedbeni projekt2. U prvom slučaju značenje Z teksta određuju njegovi autori i uglavnom se koristiti samo za modeliranje ponašanja sustava. U drugom slučaju elementi Z teksta mogu prikazivati strukturu u kodu: modele, tipove podataka, procedure, funkcije, klase, objekte.

Z na prvi pogled može djelovati vrlo zbunjujuće: obično se sastoji od skupa pravokutnika, teksta, grčkih slova i neobičnih simbola. Bez obzira na to, Z je zapravo jednostavan za naučiti. Pravokutnici i simboli nam pomažu da se fokusiramo na strukturu modela čak i prije nego počnemo čitati dokument.

1 eng. apstract formal specification 2 eng. detailed design

Page 5: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

4

4 Kako je nastao Z?

Ideja za notaciju se prvi put pojavljuje 1974. godine u knjizi „Data Semantics“ francuskog

profesora i računalnog znanstvenika Jean-Raymond Abriala. Notacija koja je korištena u toj

knjizi samo je začetak Z-a. Počela se koristiti na francuskom sveučilištu Grenoble gdje je Abrial

u to vrijeme radio.

1977. godine Abrial uz pomoć Stevea Schumana i Bertranda Meyera razvija notaciju koja je

tada nazvana Z.

1980. godine izdana je knjiga „Méthodes de programmation” koja je uvelike pomogla

popularizaciji Z jezika.

Daljni razvoj Z-a se odvija na sveučilištu Oxford u sklopu računalno istraživačke skupine3 koja

se sastojala od znanstvenika i industrijskih partnera kao IBM i Inmos (proizvođač poluvodiča).

Prvi Z referentni priručnik je izdan 1989. godine nakon što je Z već uvelike dokazan u praksi.

Internacionalni Z standard4 je završen 2002. godine.

Z od svojeg nastanka do danas služi kao baza za ostale notacije, uključujući nekoliko

programskih jezika kao Objektni-Z i Z++.

Danas su dostupni softverski alati za pisanje i prikaz specijalnih Z simbola i organizaciju

dokumenata, za traženje grešaka u sintaksi te čak pomoć oko dokazivanja tvrdnji vezanih za

ponašanje modeliranog sustava. Ti su alati nužni u ozbiljnijem radu sa Z-om.

Z je notacija koja se dugo razvijala, koristila na različite načine, prošla kroz različite faze

razvoja računalne znanosti te preživjela do danas.

3 Programming Research Group 4 ISO standard, ISO/IEC 13568:2002

Page 6: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

5

5 Modeliranje sustava

Z zapravo ujedinjuje dvije notacije. Prva je notacija obične diskretne matematike. Druga

notacija daje strukturu matematičkom tekstu, a sastoji se od konstruktora strukture.

Najizraženiji oblik Z konstruktora je makro tip konstrukcije kojeg nazivamo shema. Pojam koji

često susrećemo kod Z notacije – shema calculus se odnosi na izgradnju velikih shema preko

više malih.

Shema je svojstvo koje najviše odvaja Z od ostalih notacija formalne specifikacije.

Z je model-based notacija u kojoj najčešće modeliramo sustav preko njegovih stanja –

kolekcije varijarijabli i njihovih vrijednosti te operacija koje mogu promijeniti to stanje.

Dakle shema, odnosno modul odgovarajuće veličine, se sastoji se od:

Stanja

Kolekcije varijabli stanja zajedno sa njihovim vrijednostima

Operacija koje mogu promijeniti to stanje

Stanje u većini slučajeva opisuje situaciju. Može modelirati ciljeve, rezultate, pretpostavke,

uvjete na sigurnost... Sastoji se od fiksne konfiguracije odnosno konstanti i promijenjivih

komponenata odnosno varijabli.

Operacije nad varijablama se zadaju operatorima, koji su definirani preko formula Z notacije.

Formule sadrže standardne simbole koji se koriste u gotovo svim granama matematike, a

potječu iz aksiomatske Zermelo-Fränkel teorije skupova.

Svaki izraz iz Zermelo-Fränkel teorije skupova ima korespodencijski ekvivalent u Z notaciji

(primjer Slika 1).

Slika 1. Primjeri matematičkih izraza i njihovih ekvivalenata u Z notaciji

Z dokumenti bi se trebali pisati tako da budu dovoljno precizni da bi tekst mogao precesuirati

stroj.

Page 7: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

6

6 Primjeri notacije

6.1 Birthday Book

Da bi vidjeli kako Z funkcionira u praksi prvo uzimamo najjednostavniji primjer, BirthdayBook,

čiju važnost možemo vidjeti iz činjenice da ga se smatra ekvivalentom „Hello World“

programa kod programskih jezik.

Radi se o sustavu koji bilježi rođendane danog broja osoba, omogućuje pretraživanje i može

se proširiti tako da na primjer ispisuje imena osoba čiji je rođendan dan datumom upita.

U ovom slučaju nam neće biti bitno kojeg su formata imena i datumi pa uvodimo skup svih

imena i skup svih datuma kao osnovne tipove za specifikaciju: [NAME, DATE]. To nam

omogućava da imenujemo skupove bez da moramo navoditi tipove objekata koje sadrže, tako

da se možemo koncentrirati na najvažnija svojstva modela.

Prvi aspekt sustava kojeg opisujemo je opis prostora njegovih stanja, što radimo preko sheme:

Slika 2. BirthdayBook shema

Kao većina shema, i ova se sastoji od dva dijela odvojena horizontalnom linijom, od kojih prvi

sadrži deklaraciju varijabli, a drugi vezu između vrijednosti i varijabli.

Imamo dvije varijable za prikaz važnih elemenata koje možemo izvesti iz stanja:

known je skup imena zajedno sa pridruženim datumima rođenja

birthday je funkcija koja, kada se primijeni na određena imena, daje datume rođenja

vezane uz ta imena

Dio sheme ispod horizontalne linije daje vezu koja je istinita za svako stanje sustava i njena

točnost je sačuvana kroz sve operacije koje se mogu primijeniti na modelu. U ovom slučaju ta

veza nam kaže da je skup known jednak domeni funkcije birthday. To je invarijanta sustava.

Invarijanta dozvoljava vrijednostima varijable known da budu izvedene iz vrijednosti funkcije

birthday. known je izvedena komponenta stanja, odnosno moguće je modelirati sustav bez

njezinog definiranja. Ipak, davanje imena važnim konceptima čini specifikaciju preglednijom.

Page 8: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

7

Promotrimo sada jedno moguće stanje sustava sa tri osobe u skupu known, sa njihovim

datumima rođenja zabilježenim preko funkcije birthday:

Invarijanta je zadovoljena jer birthday zabilježava datume za točno one tri osobe koje se

nalaze u skupu known.

Uočimo da u opisu prostora stanja ovog sustava nemamo ograničenje na broj informacija koje

možemo spremati ili propisani poredak kojeg bi se trebali držati kod spremanja podataka.

Također smo izbjegli odluku o formatu podataka koji će se spremati.

Sa druge strane, bilo nam je bitno da pokrijemo uvjet da jedna osoba može imati samo jedan

datum rođenja i da dvije osobe mogu imati isti datum rođenja. To smo ostvarili preko

činjenice da je birthday funkcija i kao takva ima potrebna matematička svojstva.

Nakon što smo obradili prostor stanja, sada ćemo se koncentrirati na operacije sustava. Prva

koju ćemo uzeti za primjer je akcija dodavanja novog podatka. Navedenu akciju opisujemo

shemom:

Slika 3. Model za dodavanje nove osobe u sustav

Deklaracija ∆BirthdayBook ističe činjenicu da shema opisuje promijenu stanja. Uvodimo četiri

varijable: known, birthday, known0 i birthay0.

Prve dvije varijable prikazuju stanje prije promijene, dok druge dvije stanje nakon promijene.

Svaka dva para varijabli čuvaju invarijantu pa invarijanta mora biti zadovoljena prije i poslije

promijene.

Page 9: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

8

Nakon deklaracije imamo dva inputa operacije. Prema konvenciji, imena inputa završavaju

znakom upitnika.

Dio sheme ispod linije u prvom redu zadaje uvjet koji mora biti ispunjen da bi akcija bila

izvršena uspješno: ime koje dodajemo mora biti različito od onih koje već imamo u sustavu.

Ova specifikacija ne pruža informacije o tome što će se dogoditi ako uvijet nije ispunjen.

Kasnije se model lako može proširiti tako da je u mogućnosti ispisati poruku o greški ukoliko se

ona pojavi.

Ako uvjet je zadovoljen, bazu proširujemo novim imenom i datumom rođenja.

Očekujemo da će skup imena known biti proširen sa novim imenom:

known0 = known ∪ {name?}.

To možemo dokazati preko specifikacije modela AddBirthay, koristeći invarijantu stanja prije i

poslije operacije:

known0 = dom birthday0 [invariant after]

= dom(birthday ∪ {name? → date?}) [spec. AddBirthday]

= dom birthday ∪ dom {name? → date?} [fact about 'dom']

= dom birthday ∪ {name?} [fact about 'dom']

= known ∪ {name?} [invariant before]

Formulacija i dokaz svojstava nam potvrđuju da je specifikacija ispravna i analiza sustava na taj

način nam omogućuje da istražimo ponašanje sistema prije implementacije te nam smanjuje

trošak prilikom testiranja u kasnijim fazama razvoja.

Dvije činjenice o domeni 'dom' koje smo koristili u dokazu su vezane uz matematička svojstva

skupova:

dom(f ∪ g) = (dom f ) ∪ (dom g)

dom{a → b} = {a}

Modeliramo još jednu operaciju na modulu BirthdayBook, za traženje datuma rođenja osobe

poznate sustavu.

Ponovo opisujemo operaciju sa shemom (Slika 4.)

Page 10: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

9

Slika 4. Shema za operaciju FindBirthday u sklopu sustava BirthdayBook

Deklaracija ΞBirthdayBook označava da se radi o operaciji koja ne mijenja stanje: vrijednosti

varijabli known0 i birthday0 nakon primjene operacije su jednake vrijednostima prije

primjene.

U drugom dijelu modela koristimo varijablu name koje smo dobili na ulazu. Operacija

FindBirthday preslikava ime u odgovarajući datum. Preduvjet za uspješno izvršavanje

operacije je pripadnost vrijednosti varijable name? skupu poznatih podataka. Ako je taj uvijet

ispunjen izlaz date! ima vrijednost funkcije birthday na danom argumentu. Ukličnik nam

označava ispis i ne smijemo ga zamijeniti sa znakom različito koji se u istoj notaciji pojavljuje u

mnogim programskim jezicima.

6.2 Bankovni sustav

Sada ćemo na sličan način modelirati bankovni sustav, ovaj put bez većih ulaženja u detalje

notacije s obzirom da je postupak modeliranja analogan.

Shemu za sustav modeliramo na način:

Slika 6. Model Bankovnog sustava

U ovom slučaju smo dali tipove podataka varijablama iz prostora stanja modela. Varijable

kojima baratamo su dollars i cents, obje poprimaju vrijednosti iz skupa prirodnih brojeva .

Page 11: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

10

Imamo restrikciju na modelu danu uvjetima ispod crte, koju smo zadali u svrhu

pojednostavljenja modela. Iz nje čitamo da dozvoljavamo samo nenegativni balans na

bankovnom računu.

Modelirati ćemo operaciju WithdrawMoney koja opisuje akciju povlačenja novaca sa računa.

Prvo pogledajmo skicu akcije koja prikazuje stanje prije i poslije izvršavanja:

Slika 7. Tranzicija kod akcije WithdrawMoney

Potpuno analogno kao i prije, radimo sa četiri varijable: dollars, cents, dollars' i cents', istog

tipa podataka.

Invarijanta sustava u ovom slučaju nam kaže da balans uvijek mora biti veći od nule, a s

obzirom da oba para varijabli čuvaju invarijantu, ona je očuvana prije i nakon izvršavanja

operacije.

Za više tehničkih detalja pogledati ćemo shemu:

Slika 8. Shema za akciju WithdrawMoney modela BankingSystem

Page 12: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

11

Analogno kao i prije, moramo označiti da akcija mijenja sustav, što radimo preko deklaracije:

∆BankAccount. Input završavamo sa znakom upitnik. Od nas se traži da unesemo iznos dolara i

centi koje želimo povući sa računa.

Preduvjet da bi akcija bila izvršena uspješno dan je u drugom dijelu sheme, zajedno sa

preciznim opisom radnji koje se izvršavaju ukoliko je on ispunjen. Niti u ovom slučaju ne

definiramo što se događa ukoliko uvijet nije ispunjen.

Novac nećemo moći povući ako smo unijeli iznos veći od onog kojeg imamo na računu.

Ukoliko je iznos dolara koji smo unijeli jednak iznosu kojeg imamo na računu, akcija će biti

izvršena uspješno samo ukoliko je iznos centi koje smo dali na ulazu manji ili jednak od onog

kojeg imamo na računu.

Time smo pokrili sve slučajeve u kojima bi akcija mogla zakazati, u svim drugim slučajevima

možemo biti sigurni da će biti izvršena uspješno.

Sada moramo razlikovati situaciju u kojoj zadajemo veći iznos centi od onog kojeg imamo na

računu i situaciju kad je zadan iznos manji ili jednak.

Formulu:

centAmount? > cents

=> dollars' = dollars – dollarAmount? – 1 i cents' = cents – centAmount? + 100

ilustriramo na primjeru:

dollarAmount? 1 centAmount? 80 dollars = 2 cents = 20 ------------------------------ dollars' = dollars – dollarAmount? = 1

cents' = cents – centAmount? + 100 = 20 – 80 + 100 = -60 + 100 = 40

Sada je lako vidjeti zašto su nam potrebna dva slučaja čak i ako su uvjeti da bi akcija bila

uspješno izvršena ispunjeni. Ukoliko oba ne pokrijemo iznos centi nakon promijene bi mogao

biti negativan i rezultirao bi nedopustivim tipom podataka varijable cents.

Slučaj kada je iznos centi koje povlačimo manji od iznosa centi koji imamo na računamo nema

potrebe detaljnije objašnjavati s obzirom da samo oduzimamo iznose.

Model se naravno može proširiti ali za naše potrebe razumijevanja notacije obrađeni modeli

će nam biti dovoljni.

Page 13: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

12

7 Zaključak

Ovaj seminar daje kratki osvrt na Z specifikaciju. Vidjeli smo što je zapravo Z, objasnili sintaksu

na jednostavnim primjerima i modelirali sustave zajedno sa nekoliko operacija nad njima.

S obzirom da Z sintaksa na prvi pogled djeluje, moglo bi se reći zastrašujuće, rad je vođen

idejom da se problemu pristupi na najjednostavniji mogući način. Iz tog je razloga izostavljena

problematika aksiomatske teorije skupova koja je temelj ovoj specifikaciji i paralelizam između

te dvije konvencije.

Međutim, koliko je matematički aspekt bitan za Z, možemo naslutiti samo iz činjenice da je Z

dobio ime po Zermelo-Fränkel teoriji skupova.

Jean-Raymond Abrial, profesor i razvojni inženjer notacije, jednom je objasnio da je nazivom

želio istaknuti univerzalnost.

Nagađam da je Abrial ciljao na jezgru Z notacije koja sadrži mali skup najbitnijih istina5, od koje

se izvodi neka vrsta ogromne biblioteke koju smo već spominjali, Z – mathematical tool-kit,

koja pokriva široki spektar tipova podataka i funkcija.

Z notacija ima svojih prednosti i mana. Svoje mane povlači iz same formalne specifikacije koja

nije nimalo jednostavna za provedbu ukoliko se radi o samo malo kompliciranijim sustavima i

zahtjeva posebno sposobne ljude, određeno vrijeme za analizu i ukoliko se pažljivo ne provodi

može zadati vrlo ozbiljne probleme u razvoju sustava. Njene prednosti potječu iz

matematičkih svojstava kojima postižemo apsolutnu sigurnost u valjanost konačnog

proizvoda. U većini slučajeva razvoja, jednostavno se trudimo raditi najbolje što možemo. Za

neke tipove sustava to ipak nije dovoljno, i tu nastupa formalna specifikacija.

5 U smislu predikatne logike prvog reda

Page 14: Z jezik za specifikaciju - Mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima

13

8 Literatura

[1] The Z notation Reference Manual

http://spivey.oriel.ox.ac.uk/mike/zrm/zrm.pdf

[2] Z lecture notes by Jonathan Jacky

http://staff.washington.edu/jon/z-lectures/z-lectures.html

[3] Wikipedia Z-notation

https://en.wikipedia.org/wiki/Z_notation

[4] Introduction to Z-notation

https://www.youtube.com/watch?v=qfEe9luJmVE

[5] Formal Specification – Z Notation – Syntax, Type and Semantics

http://www.open-std.org/jtc1/sc22/open/n3187.pdf