Yksinkertaiset tyypit

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

Rekursiiviset tyypit

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

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

TIEA341 Funktio-ohjelmointi 1, kevät 2008

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

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

Lisää laskentoa. TIEA341 Funktio ohjelmointi 1 Syksy 2005

TIES542 kevät 2009 Aliohjelmien formalisointia lambda-kieli

Ydin-Haskell Tiivismoniste

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

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIES542 kevät 2009 Rekursiiviset tyypit

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

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

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

Staattinen tyyppijärjestelmä

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

14.1 Rekursio tyypitetyssä lambda-kielessä

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

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

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

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

Luku 2. Ohjelmointi laskentana. 2.1 Laskento

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

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

Tietojenkäsittelyteorian alkeet, osa 2

Johdatus λ-kalkyyliin

5.3 Ratkeavia ongelmia

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia

Insinöörimatematiikka D

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

Samanaikaisuuden hallinta

Kielenä ilmaisten Hilbertin kymmenes ongelma on D = { p p on polynomi, jolla on kokonaislukujuuri }

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

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

Luku 7. Aliohjelmat. 7.1 Kutsusekvenssit. Aliohjelma (subroutine) on useimpien kielten tärkein kontrollivuon ohjausja abstrahointikeino.

TIES542 kevät 2009 Tyyppiteorian alkeet

TIEA341 Funktio-ohjelmointi 1, kevät 2008

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

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

Lineaarinen toisen kertaluvun yhtälö

M = (Q, Σ, Γ, δ, q 0, q acc, q rej )

TIEA341 Funktio-ohjelmointi 1, kevät 2008

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

Taas laskin. TIES341 Funktio ohjelmointi 2 Kevät 2006

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

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

Vastaavasti, jos vektori kerrotaan positiivisella reaaliluvulla λ, niin

Insinöörimatematiikka D

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

Cantorin joukon suoristuvuus tasossa

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

Matriisiteoria Harjoitus 1, kevät Olkoon. cos α sin α A(α) = . sin α cos α. Osoita, että A(α + β) = A(α)A(β). Mikä matriisi A(α)A( α) on?

Determinantti 1 / 30

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

Laskennan teoria

T Tietojenkäsittelyteorian seminaari

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

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

Johdatus logiikkaan I Harjoitus 4 Vihjeet

Todista raja-arvon määritelmään perustuen seuraava lause: Jos lukujonolle a n pätee lima n = a ja lima n = b, niin a = b.

Ominaisarvo-hajoitelma ja diagonalisointi

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Matriisit. Määritelmä 1 Reaaliluvuista a ij, missä i = 1,..., k ja j = 1,..., n, muodostettua kaaviota a 11 a 12 a 1n a 21 a 22 a 2n A =

Esimerkkimodaalilogiikkoja

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

Pinoautomaatit. Pois kontekstittomuudesta

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

Kuva 1: Funktion f tasa-arvokäyriä. Ratkaisu. Suurin kasvunopeus on gradientin suuntaan. 6x 0,2

= 2±i2 7. x 2 = 0, 1 x 2 = 0, 1+x 2 = 0.

1 Lineaariavaruus eli Vektoriavaruus

Täydellisyysaksiooman kertaus

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

Numeeriset menetelmät

KOMPLEKSIANALYYSI I KURSSI SYKSY 2012

Matriisilaskenta Luento 16: Matriisin ominaisarvot ja ominaisvektorit

Ensimmäinen induktioperiaate

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

Ratkeavuus ja efektiivinen numeroituvuus

Vektorit, suorat ja tasot

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

Ensimmäinen induktioperiaate

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

Turingin koneet. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 7. joulukuuta 2015 TIETOTEKNIIKAN LAITOS.

3.1 Lineaarikuvaukset. MS-A0004/A0006 Matriisilaskenta. 3.1 Lineaarikuvaukset. 3.1 Lineaarikuvaukset

Tehtävä 1. Arvioi mitkä seuraavista väitteistä pitävät paikkansa. Vihje: voit aloittaa kokeilemalla sopivia lukuarvoja.

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

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

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

MS-A0004/A0006 Matriisilaskenta

5.5 Jäsenninkombinaattoreista

Satunnaismuuttujien muunnokset ja niiden jakaumat

Chomskyn hierarkia ja yhteysherkät kieliopit

HY / Matematiikan ja tilastotieteen laitos Johdatus logiikkaan I, syksy 2018 Harjoitus 5 Ratkaisuehdotukset

Haskell ohjelmointikielen tyyppijärjestelmä

Tietorakenteet, laskuharjoitus 6,

8 KANNAT JA ORTOGONAALISUUS. 8.1 Lineaarinen riippumattomuus. Vaasan yliopiston julkaisuja 151

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

1 Sisätulo- ja normiavaruudet

Transkriptio:

Yksinkertaiset tyypit TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 13. helmikuuta 2007

Tyypitön puhdas λ-laskento E ::= I E 1 E 2 λi.e E 1 E 1 E 1 E 2 E 1 E 2 E 2 E 2 E 1 E 2 E 1 E 2 E E λi.e λi.e (λi.e 1 ) E 2 E 1 [I := E 2 ]

Normaalijärjestys E ::= I E 1E 2 λi.e V ::= λi.v R R ::= I RV S ::= I E 1E 2 S S SE S E E E RE RE E E λi.e λi.e (λi.e 1)E 2 E 1[I := E 2]

Applikatiivinen järjestys E ::= I E 1E 2 λi.e V ::= I λi.v E 1 E 1 E 1E 2 E 1E 2 E E VE VE E E λi.e λi.e (λi.e)v E[I := V ]

Arvovälitteinen järjestys E ::= I E 1 E 2 λi.e V ::= λi.e E 1 E 1 E 1 E 2 E 1 E 2 E E VE VE (λi.e)v E[I := V ]

Nimivälitteinen järjestys E ::= I E 1 E 2 λi.e V ::= λi.e E 1 E 1 E 1 E 2 E 1 E 2 (λi.e)v E[I := V ]

Currying λx 1 x 2.E = λx 1.λx 2.E λx 1 x 2 x 3.E = λx 1.λx 2.λx 3.E λx 1... x n.e = λx 1..λx n.e

Churchin koodaukset 0 = λfx.x 1 = λfx.fx 2 = λfx.ffx... add = λmnfx.mf (nfx) iszero = λm.m(λx.false) true true = λab.a false = λab.b if = λa.a

Kiintopisteoperaattori Lauseke F on kiintopisteoperaattori, jos pätee kaikilla lausekkeilla g. Fg = gfg Rekursiivisesti määritelty funktio g = E (missä g esiintyy vapaana E:ssä) voidaan määritellä ei-rekursiivisesti funktiona g = F (λg.e)

Laajennettu tyypitön λ-laskento 1 E ::= true false if E 1 E 2 E 3 V ::= truefalse E 1 E 1 if E 1 E 2 E 3 if E 1 E 2 E 3 if true E 1 E 2 E 1 if false E 1 E 2 E 2

Laajennettu tyypitön λ-laskento 2 E ::= 0 succ E pred E iszero E ispos E V ::= V n V n+ ::= succ 0 succ V n+ V n ::= pred 0 pred V n V n ::= 0 V n+ V n E E succ E succ E E E iszero E iszero E E E ispos E ispos E E E pred E pred E iszero 0 true ispos 0 false pred(succ V n) V n iszero V n+ false ispos V n+ true succ(pred V n) V n iszero V n false ispos V n false

Laajennettu tyypitön λ-laskento 3 E ::= fix E fix(λi.e) E[I := fix(λi.e)]

Yksinkertaisesti tyypitetty λ-laskento E ::= I E 1 E 2 λi : T.E T ::= T T Γ, I : T I : T Γ E 1 : T 1 T 2 Γ E 2 : T 1 Γ E 1 E 2 : T 2 (λi : T.E 1 ) E 2 E 1 [I := E 2 ] Muut puhtaan λ-laskennon laskentasäännöt eivät muutu. Γ, I : T 1 E : T 2 Γ λi : T 1.E : T 1 T 2

Ehdot T ::= Bool Γ true : Bool Γ false : Bool Γ E 1 : Bool Γ E 2 : T Γ E 3 : T Γ if E 1 E 2 E 3 : T

Luvut T ::= Int Γ 0 : Int Γ E : Int Γ succ E : Int Γ E : Int Γ pred E : Int Γ E : Int Γ iszero E : Bool Γ E : Int Γ ispos E : Bool

Kiintopisteoperaattori Γ E : T T Γ fix E : T

Tyyppiturvallisuus Hyvältä tyyppijärjestelmältä vaaditaan seuraavat ominaisuudet: Eteneminen Lauseke, joka ei ole arvo 1, ei ole jumissa 2. Säilyminen Lausekkeen tyyppi säilyy laskentasääntöjä sovellettaessa. 1 Arvoja ovat V :hen sopivat lausekkeet. 2 Lauseke on jumissa, jos siihen ei voida soveltaa jotain laskusääntöä.

Inversio Lemma (Tyyppirelaation käänteinen eli inversio) 1. Jos Γ true : T, niin T on Bool. 2. Jos Γ false : T, niin T on Bool. 3. Jos Γ if E 1 E 2 E 3 : T, niin Γ E 1 : Bool, Γ E 2 : T ja Γ E 3 : T. 4. Jos Γ iszero E : T, niin T on Bool ja Γ E : Int. 5. Jos Γ ispos E : T, niin T on Bool ja Γ E : Int. 6. Jos Γ 0 : T, niin T on Int. 7. Jos Γ succ E : T, niin T on Int ja Γ E : Int. 8. Jos Γ pred E : T, niin T on Int ja Γ E : Int. 9. Jos E 1E 2 : T, niin jollakin tyypillä T pätevät Γ E 1 : T T ja Γ E 2 : T. 10. Jos Γ (λi : T.E) : T, niin jollakin tyypillä T pätevät T = T T ja Γ, I : T E : T pätevät. Todistus. Seuraa suoraan määritelmästä.

Kanoniset muodot Lemma (Kanoniset muodot) 1. Bool-tyypin arvot ovat true ja false. 2. Int-tyypin arvot ovat V n -lausekkeet. 3. T T -tyypin arvot ovat muotoa λi : T.E. Todistus. Seuraa suoraan määritelmistä ja inversiolemmasta.

Eteneminen Theorem Olkoon E tyypillinen lauseke ilman vapaita muuttujia (eli jollekin T pätee E : T ). Nyt E on joko arvo tai on olemassa jokin E siten, että E E pätee. Todistus. Induktiolla Γ t : T -väittämän johdon suhteen.

Säilyminen Theorem Jos E : T ja E E pätevät, niin E : T pätee myös. Todistus. Seuraa induktiolla kuten eteneminen paitsi funktiotyyppien osalta. Tarkemmin mahdollisesti myöhemmin.

Huomioita Puhtaassa tyypitetyssä λ-laskennossa ei ole juuri mieltä (toisin kuin tyypittömässä). Tyypitetty λ-laskento ilman primitiivistä kiintopisteoperaattoria ei ole Turing-täydellinen, sillä jokaisella tyypillisellä lausekkeella on tällöin normaalimuoto!