TIES542 kevät 2009 Denotaatio

Samankaltaiset tiedostot
Rekursiiviset tyypit

Luku 3. Syntaktisia kysymyksiä. 3.1 Lausekkeet

Tietojenkäsittelyteorian alkeet, osa 2

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet

järjestys, jossa ohjelman suoritus etenee ohjelmatekstissä jollakin tietyllä suorituskerralla (dynaaminen kontrollivuo)

811120P Diskreetit rakenteet

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 26. kesäkuuta 2013

Tarkastelemme ensin konkreettista esimerkkiä ja johdamme sitten yleisen säännön, joilla voidaan tietyissä tapauksissa todeta kielen ei-säännöllisyys.

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

DFA:n käyttäytyminen ja säännölliset kielet

FORMAALI SYSTEEMI (in Nutshell): aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

Algebra I Matematiikan ja tilastotieteen laitos Ratkaisuehdotuksia harjoituksiin 3 (9 sivua) OT

Matemaattisten työvälineiden täydentäviä muistiinpanoja

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 5. marraskuuta 2015

Lisää pysähtymisaiheisia ongelmia

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 19. syyskuuta 2016

Tenttiin valmentavia harjoituksia

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. tammikuuta 2012

Matematiikan tukikurssi

Kuvauksista ja relaatioista. Jonna Makkonen Ilari Vallivaara

Onko kuvaukset injektioita? Ovatko ne surjektioita? Bijektioita?

Chomskyn hierarkia ja yhteysherkät kieliopit

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 8. maaliskuuta 2012

Rajoittamattomat kieliopit (Unrestricted Grammars)

Logiikan kertausta. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos.

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

[a] ={b 2 A : a b}. Ekvivalenssiluokkien joukko

Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion.

Reaalilukuvälit, leikkaus ja unioni (1/2)

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion.

1 Lineaariavaruus eli Vektoriavaruus

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. joulukuuta 2015

1 Määrittelyjä ja aputuloksia

Matematiikan johdantokurssi, syksy 2016 Harjoitus 11, ratkaisuista

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 22. toukokuuta 2013

Lineaarikombinaatio, lineaarinen riippuvuus/riippumattomuus

Karteesinen tulo. Olkoot A = {1, 2, 3, 5} ja B = {a, b, c}. Näiden karteesista tuloa A B voidaan havainnollistaa kuvalla 1 / 21

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

Algebra I, Harjoitus 6, , Ratkaisut

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 16. maaliskuuta 2011

Johdatus matematiikkaan

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 6. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS. Pinoautomaatit.

Todistusmenetelmiä Miksi pitää todistaa?

Säännöllisten kielten sulkeumaominaisuudet

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013

MS-A0402 Diskreetin matematiikan perusteet

5.5 Jäsenninkombinaattoreista

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

Derivaatat lasketaan komponenteittain, esimerkiksi E 1 E 2

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

Matematiikan tukikurssi, kurssikerta 2

Pinoautomaatit. Pois kontekstittomuudesta

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Pysähtymisongelman ratkeavuus [Sipser luku 4.2]

Ratkaisuehdotus 2. kurssikokeeseen

Luonnollisten lukujen ja kokonaislukujen määritteleminen

Rekursiiviset palautukset [HMU 9.3.1]

Matematiikan tukikurssi, kurssikerta 1

Avaruuden R n aliavaruus

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 16. toukokuuta 2011

Insinöörimatematiikka A

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. marraskuuta 2015

FUNKTIONAALIANALYYSIN PERUSKURSSI Johdanto

802320A LINEAARIALGEBRA OSA I

x > y : y < x x y : x < y tai x = y x y : x > y tai x = y.

Matematiikan tukikurssi

T Syksy 2006 Tietojenkäsittelyteorian perusteet T Harjoitus 7 Demonstraatiotehtävien ratkaisut

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen.

Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }?

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 7. joulukuuta 2009

Eloisuusanalyysi. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2009 TIETOTEKNIIKAN LAITOS. Eloisuusanalyysi.

Vastaus 1. Lasketaan joukkojen alkiot, ja todetaan, että niitä on 3 molemmissa.

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 10. joulukuuta 2015 TIETOTEKNIIKAN LAITOS.

5.6 Yhdistetty kuvaus

Ratkaisuehdotus 2. kurssikoe

Johdatus matemaattiseen päättelyyn

DIFFERENTIAALI- JA INTEGRAALILASKENTA I.1. Ritva Hurri-Syrjänen/Syksy 1999/Luennot 6. FUNKTION JATKUVUUS

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

HY, MTL / Matemaattisten tieteiden kandiohjelma Todennäköisyyslaskenta IIb, syksy 2017 Harjoitus 1 Ratkaisuehdotuksia

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I

Täydentäviä muistiinpanoja laskennan rajoista

Algebra I, harjoitus 5,

Predikaattilogiikan malli-teoreettinen semantiikka

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I

7 Vapaus. 7.1 Vapauden määritelmä

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. lokakuuta 2016

TIES542 kevät 2009 Rekursiiviset tyypit

2 exp( 2u), kun u > 0 f U (u) = v = 3 + u 3v + uv = u. f V (v) dv = f U (u) du du f V (v) = f U (u) dv = f U (h(v)) h (v) = f U 1 v (1 v) 2

Numeeriset menetelmät

Transkriptio:

TIES542 kevät 2009 Denotaatio Antti-Juhani Kaijanaho 27.1.2009 (korjauksia 28.1.2009) Denotationaalisessa merkitysopissa kukin (ohjelmointi)kielen konstrktiolle määritellään matemaattinen otus, jota sanotaan kyseisen konstruktion tarkoitukseksi (engl. denotation). Ajatuksena on antaa kielelle sisältö, joka on riippumaton mistään konkreetista (taikka abstraktista) tietokoneesta. Keskeinen lähtökohta on seuraava ns. kompositionaalisuusvaatimus: Ohjelmointikielen konstruktion tarkoitus saa riippua vain sen osien tarkoituksesta. Denotationaalisen merkitysopin alulle panevana voimana oli toisaalta Christopher Stracheyn ohjelmointikielen periaatteiden pohdinta [3] sekä toisaalta laskennan teorian alan erään ongelman (lambdalaskennon merkitysoppi) ratkaiseminen. Ratkaisevaa oli Dana Scottin alueteorian (engl. domain theory) kehittyminen. Denotationaalisesta merkityopista ks. tarkemmin esimerkiksi Allison [1] taikka Reynolds [2] 1 Perusidea Jotta esityksestä ei tule sekavaa, on tapana erottaa kohdekieli (tarkasteltavana oleva ohjelmointikieli) metakielistä (se kieli, jolla tarkastelu kirjoitetaan). Luonnollisten kielten tapauksessa tähän käytetään lainausmerkkejä englannin kielen sana cat tarkoittaa kissaa, mutta ei ole kissa mutta denotationaalisen merkitysopin tapauksessa on tapana käyttää erityisiä sulkeita (semanttiset sulkeet, semantic brackets). Niitä käytettäessä on hyvä noudattaa seuraavaa kahta nyrkkisääntöä: 1. Semanttisten sulkeiden sisällä oleva ilmaisu on aina kohdekieltä. 1

2. Semanttisten sulkeiden sisällä esiintyvä muuttuja on kuitenkin aina ns. metamuuttuja (engl. metavariable) ei siis kohdekielen muuttuja, vaan se edustaa jotakin kohdekielen ilmaisua. Näinpä esimerkiksi int v; edustaa C-kielistä kokonaislukumuuttujan v esittelyä (missa v on tuntematon tai kontekstista määrittyvä muuttujan nimi). Määritelläänpä harjoituksen vuoksi yksinkertaisen kielen denotationaalinen merkitysoppi. Tässä kielessä ei ole mitään muuta kuin aritmeettiset lausekkeet, joten abstrakti syntaksi on yksinkertainen: c N e, f, g Expr e, f, g ::= c e e + f e f e f Määrittelyn ensimmäinen rivi kertoo, että nonterminaali c edustaa luonnollisten lukujen kieltä (siis kokonaislukuvakioita). Sen täsmällinen määrittely jätetään avoimeksi, koska se toisaalta oletetaan tunnetuksi ja toisaalta sen täsmällinen määrittely ei olisi mielenkiintoista. Määrittelyn toinen rivi tarkoittaa, että nonterminaalit e, f ja g määrittelevät saman kielen (joukon merkkijonoja taikka joukon rakennepuita taikka... ), ja kielen nimi on Expr. Loput rivit määrittelevät kyseisen kielen abstraktin kieliopin. Tämän kielen denotationaalinen merkitysoppi voitaisiin määritellä vaikkapa näin: E : Expr Q E c = c E e = E e E e + f = E e + E f E e f = E e E f E e f = E e E f Tässä määritellään semanttinen funktio E : Expr Q paloittain ja rekursiivisesti. Semanttisen funktion määritteleminen paloittain ja rekursiivisesti vaatii seuraavien ehtojen täyttymisen 1 : 1. Ehdot sanovat, että semanttinen funktio on homomorfismi abstraktin kieliopin määrittelemästä initiaalialgebrasta johonkin toiseen saman operaattoriston algebraan. 2

1. Määrittelyssä tulee olla täsmälleen yksi yhtälö jokaista abstraktin kieliopin produktiota ja jokaista määriteltävänä olevaa semanttista funktiota kohti. 2. Kussakin yhtälössä on vasemman puolen oltava määriteltävänä olevan semanttisen funktion kutsu, jossa semanttisten sulkeiden sisällä esiintyy kyseisen produktion oikea puoli sellaisenaan (nonterminaaleista tulee näin metamuuttujia 2 ). 3. Kussakin yhtälössä oikealla puolella saadaan kutsua määriteltävänä olevaa semanttista funktiota vain siten, että semanttisten sulkeiden sisällä on jokin vasemmalla puolella esiintyvä (meta)muuttuja. Yllä annettu määritelmä täyttää nämä ehdot. 2 Muuttujat ja ympäristö Tilanne monimutkaistuu hieman, jos kielessä on muuttujia: c N x, y, z Var e, f, g Expr e, f, g ::= c x e e + f e f e f Tällöin semanttinen funktio ei voi kuvata lausekkeita suoraan arvoiksi, vaan lausekkeiden arvo riippuu muuttujilla lausekkeen ympäristössä olevasta arvoista. Ympäristö voidaan mallittaa yksinkertaisesti kuvauksena muuttujilta arvoil- 2. Jos produktion oikealla puolella esiintyy sama nonterminaali useampaan kertaan, erotellaan sen esiintymät toisistaan antamalla niille eri nimet esimerkiksi alaindeksoinnin avulla. 3

le. Tämän jälkeen määrittely onkin jo helppoa: Env = Var Q E : Expr Env Q E c σ = c E x σ = σ(x) E e σ = E e σ E e + f σ = E e σ + E f σ E e f σ = E e σ E f σ E e f σ = E e σ E f σ Näissä yhtälöissä on käytetty Gottlob Fregen ja Moses Schönfinkelin pioneroimaa tapaa, jossa funktion paluuarvo on toinen funktio. Tässä ajattelutavassa funktionuoli assosioi oikealle, joten Expr Env Q tarkoittaa samaa kuin Expr (Env Q). Funktion kutsu puolestaan assosioi vasemmalle, joten E c σ tarkoittaa samaa kuin (E c )σ (eli perinteisemmin ilmaistuna E( c )(σ)). Vaikka tämä temppu onkin Fregen ja Schönfinkelin keksimä, siitä käytetään tavallisesti englannin kielen termiä currying idean popularisoijan, Haskell Curryn, mukaan. 3 Suoraviivaohjelmat Suoraviivaohjelmat koostuvat peräkkäin laitetuista sijoituslauseista sekä siirräntäkäskyistä (jotka tässä vaiheessa vielä jätetään huomiotta). Niinpä voimme määritellä suoraviivaohjelmien abstraktin kieliopin seuraavasti: c N x, y, z Var e, f, g Expr s, t Stmt s, t ::= x e s ; t Lausekkeet on käsitelty edellä, joten niistä ei tässä tarvitse sanoa enempää. Suoraviivaohjelman lauseet eivät palauta arvoja, vaan niillä on sivuvaikutuksia (engl. side-effects). Ainoa sivuvaikutus, joka on tässä tilanteessa mahdollinen, on 4

muuttujan arvon muuttuminen. Kun edellä muuttujien arvo määräytyy ympäristön (Env) perusteella, on lauseen muutettava ympäristöä. Näin ollen lauseen semanttinen tulkinta on kuvaus ympäristöltä ympäristölle: C : Stmt Env Env ( ) E e σ jos x = y C x e σ = λy σ(y) jos x y C s ; t σ = C t (C s σ) Tässä notaatio λxe tarkoittaa lauseketta E muuttujan x funktiona. 4 Valinnat Valinnat tuovat kieleen mukaan ehtolausekkeet ja valintalauseen: c N x, y, z Var e, f, g Expr p, q, r Cond p, q, r ::= e = f e f e < f e f e > f e f p q p q s, t Stmt s, t ::= x e s ; t if p then s else t Semanttisesti tässä ei ole juurikaan mitään yllättävää: P : Cond Env 0, 1} 1 jos E e σ = E f σ P e = f σ = 5

1 jos E e σ E f σ P e f σ = 1 jos E e σ < E f σ P e < f σ = 1 jos E e σ E f σ P e f σ = 1 jos E e σ > E f σ P e > f σ = 1 jos E e σ E f σ P e f σ = 1 jos P p σ = 1 ja P q σ = 1 P p q σ = 1 jos P p σ = 1 tai P q σ = 1 P p q σ = C : Stmt Env Env ( ) C e σ jos x = y C x e σ = λy σ(y) jos x y C s ; t σ = C t (C s σ) C s σ jos P p σ = 1 C if p then s else t σ = C t σ jos P p σ = 0 5 While-kieli While-kieli tuo abstraktiin syntaksiin vain pienen muutoksen suoraviivaohjelmiin nähden: c N x, y, z Var p, q, r Cond e, f, g Expr s, t Stmt s, t ::= x e s ; t if p then s else t while p do s 6

Mutta denotationaalisen semantiikan se monimutkaistaa selvästi. Luonnolliselta tuntuisi toki määritellä C while p do s (C s σ) jos P p σ = 1 C while p do s σ = σ jos P p σ = 0 mutta se rikkoo aiemmin esitettyä ehtoa, jonka mukaan yhtälön oikealla puolella saa määriteltävä semanttinen funktio (tässä C) esiintyä vain siten, että semanttisten sulkeiden sisällä on jokin vasemmalla puolella esiintyvä (meta)muuttuja. Tässähän C:lle annetaan parametriksi koko vasemmalla puolella esiintyvä whilerakenne! Tilanne on sikälikin kestämätön, että while-rakenteella on mahdollista kirjoittaa umpiluuppi, ja niinpä tämä yhtälö on huono määritelmä. Tuo huono määritelmä voidaan kuitenkin kirjoittaa myös näin: missä C while p do s = F C while p do s F fσ = f(c s σ) jos P p σ = 1 σ jos P p σ = 0 Niinpä C while p do s on (ei-rekursiivisen) funktion F kiintopiste. Jos olisi olemassa operaattori µ, jolle pätee µf = f(µf) toisin sanoen µf on f:n kiintopiste voitaisiin while-lauseen semantiikka määritellä seuraavasti: C while p do s = µf missä F on sama kuin edellä. Onko µ-operaattori olemassa? Siitä seuraavassa. 6 Kiintopisteteoriaa Määritelmä 1 (Osittaisjärjestys). Olkoon X joukko ja ( ) X X sen binäärinen relaatio. Jos kaikilla x, y, z X 1. x x, 2. x y y x x = y ja 3. x y y z x z pätevät, ( ) on osittaisjärjestys ja (X, ) on osittain järjestetty joukko (engl. poset). 7

Määritelmä 2 (Join ja kansi). Olkoon (X, ) osittain järjestetty joukko, olkoon S X epätyhjä ja olkoon j X. Jos 1. s S : s j ja 2. y X : ( s S : s y) j y pätevät, j on S:n join (merkitään j = S). Jos X on olemassa ja on X:n alkio, se on X:n kansi, merkitään. Määritelmä 3 (Meet ja pohja). Olkoon (X, ) osittain järjestetty joukko, olkoon S X epätyhjä ja olkoon m X. Jos 1. s S : m s ja 2. y X : ( s S : y s) y m pätevät, m on S:n meet (merkitään m = S). Jos X on olemassa ja on X:n alkio, se on X:n pohja, merkitään. Määritelmä 4 (Hilat). Olkoon (X, ) osittain järjestetty joukko ja X epätyhjä. Tällöin 1. jos X:n jokaisella äärellisellä osajoukolla on join, (X, ) on join-puolihila; 2. jos X:n jokaisella äärellisellä osajoukolla on meet, (X, ) on meet-puolihila; 3. jos (X, ) on sekä join-puolihila että meet-puolihila, se on hila; ja 4. jos join ja meet on X:n jokaisella osajoukolla, (X, ) on täydellinen hila. Määritelmä 5 (Monotoninen funktio). Olkoon (X, ) osittain järjestetty joukko ja olkoon f : X X. Jos kaikilla x, y X pätee x y f(x) f(y), on f järjestyksen säilyttävä eli monotoninen. Määritelmä 6 (Kiintopiste). Olkoon (X, ) osittain järjestetty joukko, olkoon f : X X ja olkoon x X. Tällöin 1. x on f-suljettu, jos f(x) x, 2. x on f-konsistentti, jos x f(x) ja 3. x on f:n kiintopiste, jos se on sekä f-suljettu että f-konsistentti eli jos x = f(x). Teoreema 7 (Knaster Tarski). Olkoon (X, ) täydellinen hila ja olkoon f : X X monotoninen. Tällöin f:llä on ainakin yksi kiintopiste, ja sen kiintopisteiden joukko P on itse täydellinen hila. Erityisesti P = x x f(x) } ja P = x f(x) x } pätevät ja ovat itse f:n kiintopisteitä. Määritelmä 8 (µ ja ν). Olkoon (X, ) täydellinen hila, olkoon f : X X monotoninen ja olkoon f:n kiintopisteiden joukko P. Tällöin merkitään µf = P ( f:n pienin kiintopiste) ja νf = P ( f:n suurin kiintopiste). Määritelmä 9. Olkoon f : X X funktio ja olkoon S X. Tällöin merkintä f[s] tarkoittaa joukkoa f(x) x S }. Määritelmä 10. Olkoon f : X X funktio. Tällöin f on Scott-jatkuva, jos sille pätee f[s] = f( S) kaikilla S X. 8

Teoreema 11 (Kiintopisteiteraatio). Olkoon (X, ) täydellinen hila, olkoon f : X X monotoninen ja Scott-jatkuva, olkoon s 0 = ja olkoot s i+1 = f(s i ) kaikilla i N. Jos s n on f:n kiintopiste, niin s n = µf pätee. Todistus. Todetaan aluksi, että jos µf =, on lause triviaalisti tosi. Voidaan siksi olettaa, että µf. Todistuksen muoto on reductio ad absurdum. Olkoon s n f:n kiintopiste ja olkoon s n µf. Koska kiintopisteet muodostavat hilan, täytyy olla µf s n. Olkoon k N, k < n, siten että s k µf ja s k+1 µf. Nyt s k, µf} = µf ja f(µf) = µf. Toisaalta f(s k ), f(µf)} = s k+1, µf} µf! Oletuksesta s n µf seuraa siis, että f ei ole Scott-jatkuva. Koska f on Scottjatkuva, täytyy olla s n = µf. Teoreema 12. 1. Vakiofunktio on Scott-jatkuva. 2. Identiteettifunktio f(x) = x on Scott-jatkuva. 3. Kahden Scott-jatkuvan funktion f ja g yhdistetty funktio f g (määritellään (f g)(x) = f(g(x))) on Scott-jatkuva. 4. Jos f on Scott-jatkuva funktio, niin funktiot λg(g f) ja λg(f g) ovat Scott-jatkuvia. 7 Informaatiojärjestys Denotationaalisessa merkitysopissa tarkasteltava osittaisjärjestys on ns. informaatiojärjestys, jossa s t tarkoittaa, että toisaalta s:ssä on vähemmän informaatiota kuin t:ssä mutta toisaalta t:ssä oleva informaatio on konsistenttia s:ssä olevan informaation kanssa. Perusdatan, kuten lukujen, kanssa informaatiojärjestys on varsin tylsä. Lisätään rationaalilukujen joukkoon Q erityinen pohja-alkio niin, että Q = Q } ja Q pätevät. Tällöin informaatiojärjestys on seuraavanlainen: a a b kun a Pohja-alkion tulkinta on, että ei tiedetä, mikä luku on kyseessä. Jotta saataisiin täydellinen hila, on lisättävä vastaavanlainen kattoalkio, mutta se yleensä jätetään huomiotta, koska sillä ei ole järkevää tulkintaa. 9

Mikään ei pakota siihen, että f( ) = pätisi. Mikäli se pätee, f:n sanotaan olevan tarkka (engl. strict). Mikäli se ei päde, f:n sanotaan olevan epätarkka (engl. nonstrict). Funktioille määritellään informaatiojärjestys siten, että samantyyppisillä funktioilla f ja g pätee f g jos ja vain jos f(x) g(x) pätee kaikilla f:n ja g:n määrittelyjoukon alkioilla x. Varsin helppo on havaita, että pohjafunktiolle pätee (x) = kaikilla x. 8 While-kieli, uudestaan Nyt voidaan määritellä while-kielen denotationaalinen merkitysoppi: C : Stmt Env Env ( ) C e σ jos x = y C x e σ = λy σ(y) jos x y C s ; t σ = C t (C s σ) C s σ jos P p σ = 1 C if p then s else t σ = C t σ jos P p σ = 0 C while p do s σ = µf σ f(c s σ) jos P p σ = 1 F fσ = σ jos P p σ = 0 Huomaa, kuinka lauseen suoritus saattaa johtaa pohjaan. Ainoa tilanne, jossa näin voi tapahtua, on jos while-silmukka juuttuu umpiluuppiin. (Suhteellisen hankalaksi harjoitustehtäväksi kävisi sen osoittaminen, että näin todella on.) 9 Muita virhetilanteita Edellä esitelty kieli ei sisällä jakolaskua. Syy tähän on selvä: nollalla jakaminen on kielletty, joten semanttisen funktion määritteleminen kielelle, jossa nollalla jako on kieliopillisesti mahdollinen, on hieman hankalaa. Tarvitaan jokin tapa hallita virhetilanteita. 10

Denotationaalisessa merkitysopissa nollalla jaon kaltaiset virhetilanteet (joista toipuminen ei ole mielekästä) mallitetaan pohjaksi. Näin varustettuna jakolaskukin on helppo lisätä kieleen: c N x, y, z Var p, q, r Cond s, t Stmt e, f, g Expr e, f, g ::= c x e e + f e f e f e/f Env = Var Q E : Expr Env Q E c σ = c E x σ = σ(x) E e σ = E e σ E e + f σ = E e σ + E f σ E e f σ = E e σ E f σ E e f σ = E e σ E f σ ( ) jos E f σ = 0 E e/f σ = E e σ muuten E f Semanttisiin funktioihin C ja P pitää luonnollisestikin lisätä -arvoisen lausekkeen käsittely. Pohjan käsittelyssä on huomattava, että se edustaa sellaista virhetilannetta, josta ohjelmoija ei voi toipua, joten sellaisen konstruktion määritteleminen, joka antaa ohjelman huomata pohjan, ei ole asianmukaista. Toipumisen salliva virhetilanne tarvitsee oman erillisen poikkeusarvonsa. 11

Viitteet [1] Lloyd Allison. A practical introduction to denotational semantics. Number 23 in Cambridge Computer Science Texts. Cambridge University Press, 1986. [2] John C. Reynolds. Theories of Programming Languages. Cambridge University Press, Cambridge, 1998. [3] Christopher Strachey. Fundamental concepts in programming languages. Higher-Order and Symbolic Computation, 13:11 49, 2000. Perustuu Stracheyn vuonna 1967 pitämiin luentoihin. 12