Ydin-Haskell Tiivismoniste

Samankaltaiset tiedostot
Demo 7 ( ) Antti-Juhani Kaijanaho. 9. joulukuuta 2005

Lisää laskentoa. TIEA341 Funktio ohjelmointi 1 Syksy 2005

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

2.4 Normaalimuoto, pohja ja laskentajärjestys 2.4. NORMAALIMUOTO, POHJA JA LASKENTAJÄRJESTYS 13

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Geneeriset tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

Taas laskin. TIES341 Funktio ohjelmointi 2 Kevät 2006

Laajennetaan vielä Ydin-Haskellia ymmärtämään vakiomäärittelyt. Määrittely on muotoa

Haskell ohjelmointikielen tyyppijärjestelmä

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Uusi näkökulma. TIEA341 Funktio ohjelmointi 1 Syksy 2005

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

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Yksinkertaiset tyypit

jäsennyksestä TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 29. syyskuuta 2016 TIETOTEKNIIKAN LAITOS Kontekstittomien kielioppien

14.1 Rekursio tyypitetyssä lambda-kielessä

TIES542 kevät 2009 Rekursiiviset tyypit

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 20. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS.

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

3. Teoriaharjoitukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

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

Pinoautomaatit. Pois kontekstittomuudesta

5.5 Jäsenninkombinaattoreista

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

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 6. maaliskuuta 2012 TIETOTEKNIIKAN LAITOS.

Kompleksilukujen kunnan konstruointi

Staattinen tyyppijärjestelmä

Rekursiiviset tyypit

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

Alityypitys. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

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

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIES542 kevät 2009 Tyyppiteorian alkeet

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

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

Jäsennys. TIEA341 Funktio ohjelmointi 1 Syksy 2005

TIES542 kevät 2009 Aliohjelmien formalisointia lambda-kieli

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Vaihtoehtoinen tapa määritellä funktioita f : N R on

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on

Laiska laskenta, korekursio ja äärettömyys. TIEA341 Funktio ohjelmointi Syksy 2005

jäsentämisestä TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 27. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

Rajoittamattomat kieliopit (Unrestricted Grammars)

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

Laskennan rajoja. Sisällys. Meta. Palataan torstaihin. Ratkeavuus. Meta. Universaalikoneet. Palataan torstaihin. Ratkeavuus.

Yhteydettömän kieliopin jäsennysongelma

Tämän vuoksi kannattaa ottaa käytännöksi aina kirjoittaa uuden funktion tyyppi näkyviin, ennen kuin alkaa sen määritemää kirjoittamaan.

Turingin koneet. Sisällys. Aluksi. Turingin koneet. Turingin teesi. Aluksi. Turingin koneet. Turingin teesi

Luku 2. Ohjelmointi laskentana. 2.1 Laskento

formalismeja TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 15. joulukuuta 2015 TIETOTEKNIIKAN LAITOS

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. kesäkuuta 2013

Chomskyn hierarkia. tyyppi 0 on juuri esitelty (ja esitellään kohta lisää) tyypit 2 ja 3 kurssilla Ohjelmoinnin ja laskennan perusmallit

4.0.2 Kuinka hyvä ennuste on?

Luku 15. Parametripolymorfismi Kumitus

TIEA341 Funktio-ohjelmointi 1, kevät 2008

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

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

Opiskelijan pikaopas STACK-tehtäviin. Lassi Korhonen, Oulun yliopisto

Kompleksilukujen kunnan konstruointi

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut

Täydentäviä muistiinpanoja jäsennysalgoritmeista

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

Luku 3. Listankäsittelyä. 3.1 Listat

Chomskyn hierarkia ja yhteysherkät kieliopit

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

1. Universaaleja laskennan malleja

Matriisilaskenta, LH4, 2004, ratkaisut 1. Hae seuraavien R 4 :n aliavaruuksien dimensiot, jotka sisältävät vain

uv n, v 1, ja uv i w A kaikilla

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

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

MATEMATIIKAN PERUSKURSSI I Harjoitustehtäviä syksy Millä reaaliluvun x arvoilla. 3 4 x 2,

Kuva 3.1: Näyte Gaussisesta valkoisest kohinasta ε t N(0, 1) Aika t

Taulumenetelmä modaalilogiikalle K

M =(K, Σ, Γ,, s, F ) Σ ={a, b} Γ ={c, d} = {( (s, a, e), (s, cd) ), ( (s, e, e), (f, e) ), (f, e, d), (f, e)

l 1 2l + 1, c) 100 l=0 AB 3AC ja AB AC sekä vektoreiden AB ja

S BAB ABA A aas bba B bbs c

l 1 2l + 1, c) 100 l=0

Word Taulukko-ominaisuus

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

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

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

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

MATEMATIIKAN KOE PITKÄ OPPIMÄÄRÄ

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

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

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 9. marraskuuta 2009

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

Attribuuttikieliopit

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

Yhteydettömät kieliopit [Sipser luku 2.1]

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Numeeriset menetelmät TIEA381. Luento 5. Kirsi Valjus. Jyväskylän yliopisto. Luento 5 () Numeeriset menetelmät / 28

Transkriptio:

Ydin-Haskell Tiivismoniste Antti-Juhani Kaijanaho 8. joulukuuta 2005 1 Abstrakti syntaksi Päätesymbolit: Muuttujat a, b, c,..., x, y, z,... Tyyppimuuttujat α, β, γ,... Koostimet (data- ja tyyppi-) C, D,..., T, U,... Välimerkkejä λ ; τ = Vakiot ovat datakoostimien erityistapaus. Lausekkeet (ε ja sen alaindeksoidut versiot edustavat alilauseketta): x pohjalauseke muuttujalauseke ε 1 ε 2 kutsulauseke C konstruktorilauseke λx ε abstraktiolauseke case ε of ϕ 1 ε 1 ;... ; ϕ n ε n case-lauseke (n 1) let f 1 x 11... x 1m1 = ε 1 ;... ; f n x n1... x nmn = ε n in ε let-lauseke (n 1, m i 0) Kutsulausekkeet assosioivat vasemmalle, ts. ε 1 ε 2 ε 3 tarkoittaa (ε 1 ε 2 )ε 3. Lauseke on heikossa päänormaalimuodossa, jos se on konstruktorilauseke tai 1

abstraktiolauseke. Lauseke on normaalimuodossa, jos se on konstruktorilauseke, jonka alilausekkeet ovat normaalimuodossa, tai lambdalauseke, jonka alilauseke on heikossa päänormaalimuodossa. Lauseke on (vahvassa) päänormaalimuodossa, jos se on konstruktorilauseke tai lambdalauseke, jonka alilauseke on normaalimuodossa. Hahmot (ϕ): C x 1... x n koostinhahmo (n 0) (C x 1... x n ) laiska koostinhahmo (n 0) x muuttujahahmo Huomaa, että hahmot eivät ole rekursiivisia! Käytännössä muuttujan paikalle käy hahmossa aina myös jokeri (_). Tyypit (τ): T τ 1... τ n nimetty tyyppi (n 0) α τ 1 τ 2 tyyppimuuttuja funktiotyyppi Funktiotyyppi assosioi oikealle, ts. τ 1 τ 2 τ 3 on sama kuin τ 1 (τ 2 τ 3 ). Tyyppiskeema on muotoa (α 1,..., α n )τ. Tyyppitykset: ɛ :: τ x :: τ C :: τ T/n lausekkeen tyyppi muuttujan tyyppi konstruktorin tyyppi tyyppinimen parametrien määrä (n on lukuvakio) 2

Tyypityksissä x :: τ ja C :: τ voi τ poikkeuksellisesti olla myös tyyppiskeema. Tyyppiympäristö on tyypitysten joukko, jolla on seuraavat ominaisuudet: Se ei sisällä lausekkeen tyypitystä. Jos siinä on sekä x 1 :: τ 1 että x 2 :: τ 2 niin x 1 ja x 2 ovat eri muuttujia. Jos siinä on sekä C 1 :: τ 1 että C 2 :: τ 2 niin C 1 ja C 2 ovat eri konstruktoreja. Jos siinä on sekä T 1 /n 1 että T 2 /n 2 niin T 1 ja T 2 ovat eri tyyppikonstruktoreja. Tyyppiympäristöä merkitään usein Γ:lla. Tyyppiympäristön laajentaminen Γ, x :: τ tarkoittaa uutta tyyppiympäristöä, joka on muuten sama kuin Γ paitsi että se sisältää myös tyypityksen x :: τ (jos Γ:ssa on jokin toinen x:n tyypitys, se poistetaan). Vastaava laajennus toimii toki myös konstruktorin tyypityksellä ja tyyppinimen parametrien määrä -tyypityksellä. Arvoympäristö on muotoa x = ɛ olevien yhtälöiden joukko, jolla on se ominaisuus, että jos siinä on sekä x 1 = ε 1 ja x 2 = ε 2 niin x 1 ja x 2 ovat eri muuttujia. Arvoympäristöä merkitään usein Σ:lla. Arvoympäristöäkin laajennetaan edellä esitettyyn tapaan merkinnällä Σ, x = ɛ. Tyyppiväittämä on muotoa Γ ε :: τ. Korvausta merkitään tavanomaiseen tapaan ε{x 1 ε 1,..., x n ε n }. Tyyppisijoitus (σ) on äärellinen kuvaus (vrt. Haskellin Data.Map), joka liittää tyyppimuuttujaan tyypin. Merkitään τ σ:llä σ:n ilmaiseman korvauksen tekemisen τ:lla. 2 Tyyppiunikaatio Määritellään mgu(τ 1, τ 2 ) = σ seuraavasti: mgu(t τ 1... τ n, Uτ 1... τ n) = mgu(τ 1, τ 1) mgu(τ n, τ n) mgu(α, τ) = {(α τ)} mgu(τ, α) = {(α τ)} mgu(τ 1 τ 2, τ 3 τ 4 ) = mgu(τ 1, τ 3 ) mgu(τ 2, τ 4 ) kunhan τ:ssa ei esiinny α kunhan τ:ssa ei esiinny α 3

Jos mikään näistä yhtälöistä ei sovi, mgu ei ole siinä tapauksessa määritelty. Operaatio σ 1 σ 2 määritellään seuraavasti: jos σ 1 sisältää parin α τ ja σ 2 ei sisällä parin α:lle tai päinvastoin, σ 1 σ 2 sisältää ko. parin. Jos σ 1 sisältää parin α τ 1 ja σ 2 sisältää parin ατ 2, jos mgu(τ 1, τ 2 ) on olemassa, σ 1 σ 2 sisältää parin α mgu(τ 1, τ 2 ), muuten σ 1 σ 2 ei ole määritelty. 3 Tyyppijärjestelmä Tyyppialgoritmi on rekursiivinen. Sillä on syötteenä tyyppiväittämä, ja se joko onnistuu tai epäonnistuu. Tyyppialgoritmilla on myös tilamuuttujana sijoitus σ, joka on aluksi tyhjä. Tuota sijoitusta käytetään kaikkiin syötteissä esiintyviin tyyppeihin automaattisesti. Jos syöte on Γ :: τ, algoritmi onnistuu. Jos syöte on Γ x :: τ ja Γ:ssa on tyypitys x :: τ, tällöin σ korvataan σ mgu(τ, τ ):lla, jos se on olemassa. Jos tämä onnistuu, algoritmi onnistuu. Jos syöte on Γ C :: τ ja Γ:ssa on tyypitys C :: τ, tällöin σ korvataan σ mgu(τ, τ ):lla, jos se on olemassa. Jos tämä onnistuu, algoritmi onnistuu. Jos syöte on Γ ε 1 ε 2 :: τ, algoritmi onnistuu, jos se onnistuu rekursiivisesti syötteillä Γ ε 1 :: α τ ja Γ ε 2 :: α, missä α on uusi tyyppimuuttuja. Jos syöte on Γ λx ε :: τ, algoritmi onnistuu, jos se onnistuu rekursiivisesti syötteellä Γ, x :: α ε :: β, missä α ja β ovat uusia tyyppimuuttujia, ja jos σ:n korvaaminen σ mgu(τ, α β):lla onnistuu. Case-lausekeen case ε of ϕ 1 ε 1 ;... ; ϕ n ε n kohdalla tarkastetaan, että ε tyypittyy ja on samaa tyyppiä kuin jokainen hahmo (ts. niiden tyypeillä on mgu, joka lisätään σ:an) ja että kukin ε i tyypittyy ympäristössä, johon on lisätty kukin hahmossa ϕ i esiintyvälle muuttujalle ε:n tyypistä johdettu tyyppi. 4

Jos syöte on muotoa Γ let f 1 x 11... x 1m1 = ε 1 ;... ; f n x n1... x nmn = ε n in ε :: τ, rekursiivisesti käsitellään jokaisella i = 1,..., n tyyppiväittämä Γ λx i1... λx in ε i :: α i, missä jokainen α i on uusi tyyppimuuttuja; lisäksi käsitellään rekursiivisesti tyyppiväittämä Γ ε :: τ. Jos tämä kaikki onnistuu, algoritmi onnistuu. Edellä mainittu tyyppiympäristö Γ on Γ, f 1 :: α 1,..., f n :: α n ja Γ on Γ, f 1 :: ( γ 1 )α 1,..., f n :: ( γ n )α n, missä kukin γ i luettelee ne tyyppimuuttujat, jotka esiintyvät tyypissä α i σ. 4 Laskento Pitkälti kuten laajennettu aritmetiikka. Let-lausekkeet kuitenkin niin, että jokainen letissä määritelty f i x i1... x in = ε ymmärretään f i = λx i1... λx in ε. Lauseke (λx ε 1 )ε 2 on ns. β-redeksi ja sievenee muotoon ε 1 {x ε 2 }. 5