Nyelvek típusrendszere (IPM-08sztNYTRE, IPM-08EsztNYTRE)

Hasonló dokumentumok
Kaposi Ambrus. Informatikai Kar. Pannonhalmi Bencés Gimnázium november 24.

TÍPUSKIKÖVETKEZTETÉSI MÓDSZEREK

Nyelvek típusrendszere (jegyzet)

Magasabbrendű funkcionális programozás

Logika és informatikai alkalmazásai kiskérdések február Mikor mondjuk, hogy az F formula a G-nek részformulája?

FUNKCIONÁLIS PROGRAMNYELVEK IMPLEMENTÁCIÓJA

Kaposi Ambrus. University of Nottingham Functional Programming Lab. Hackerspace Budapest január 6.

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

Kiterjesztések sek szemantikája

Funkcionális Nyelvek 2 (MSc)

FUNKCIONÁLIS PROGRAMOZÁS

A digitális számítás elmélete

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Programok értelmezése

A L Hospital-szabály, elaszticitás, monotonitás, konvexitás

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

A fröccs szintaxisa és operációs szemantikája

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

Deníciók és tételek a beugró vizsgára

Logika es sz am ıt aselm elet I. r esz Logika 1/36

Elsőrendű logika szintaktikája és szemantikája. Logika (3. gyakorlat) 0-adrendű szemantika 2009/10 II. félév 1 / 1

Bevezetés. Halmazelmélet Formális rendszerek Logika λ kalkulus Típuselmélet Absztrakt algebra Kategóriaelmélet Funkcionális programozás

Formális szemantika. Kifejezések szemantikája. Horpácsi Dániel ELTE Informatikai Kar

Házi feladatok megoldása. Nyelvek használata adatszerkezetek, képek leírására

Kifejezések. Kozsik Tamás. December 11, 2016

A Feldspar fordító, illetve Feldspar programok tesztelése

FUNKCIONÁLIS PROGRAMOZÁS ELŐADÁS JEGYZET

Sorozatok, sorok, függvények határértéke és folytonossága Leindler Schipp - Analízis I. könyve + jegyzetek, kidolgozások alapján

Diszkrét matematika I.

Diszkrét matematika II., 8. előadás. Vektorterek

1. Példa. A gamma függvény és a Fubini-tétel.

Kétváltozós függvények differenciálszámítása

Memo: Az alábbi, "természetes", Gentzen típusú dedukciós rendszer szerint készítjük el a levezetéseket.

Valószínűségi változók. Várható érték és szórás

Chomsky-féle hierarchia

A logikai következmény

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Csempe átíró nyelvtanok

Logika és informatikai alkalmazásai

Boros Zoltán február

Differenciálegyenletek. Vajda István március 4.

VEKTORTEREK I. VEKTORTÉR, ALTÉR, GENERÁTORRENDSZER október 15. Irodalom. További ajánlott feladatok

Halmazelmélet. 1. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Halmazelmélet p. 1/1

Logika és informatikai alkalmazásai

Logika es sz am ıt aselm elet I. r esz Logika Harmadik el oad as 1/33

Logika nyelvészeknek, 12. óra A típuselmélet alapjai. Lehetőség van a kvantorfogalom mellett a funktorfogalom általánosítására is.

S0-02 Típusmodellek (Programozás elmélet)

17. előadás: Vektorok a térben

2. Logika gyakorlat Függvények és a teljes indukció

Metrikus terek, többváltozós függvények

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

1/1. Házi feladat. 1. Legyen p és q igaz vagy hamis matematikai kifejezés. Mutassuk meg, hogy

Logika es sz am ıt aselm elet I. r esz Logika M asodik el oad as 1/26

Nagy Gábor compalg.inf.elte.hu/ nagy

2016, Funkcionális programozás

Matematika alapjai; Feladatok

egyenletesen, és c olyan színű golyót teszünk az urnába, amilyen színűt húztunk. Bizonyítsuk

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Kifejezések. Kozsik Tamás. December 11, 2016

1. Házi feladat. Határidő: I. Legyen f : R R, f(x) = x 2, valamint. d : R + 0 R+ 0

3. Fuzzy aritmetika. Gépi intelligencia I. Fodor János NIMGI1MIEM BMF NIK IMRI

ANALÍZIS III. ELMÉLETI KÉRDÉSEK

Klasszikus algebra előadás. Waldhauser Tamás április 14.

Explicit hibabecslés Maxwell-egyenletek numerikus megoldásához

Házi feladatok megoldása. Nyelvek felismerése. Házi feladatok megoldása. Házi feladatok megoldása. Formális nyelvek, 5. gyakorlat

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

Bevezetés az informatikába

A TANTÁRGY ADATLAPJA

Matematikai logika NULLADRENDŰ LOGIKA

Predikátumkalkulus. 1. Bevezet. 2. Predikátumkalkulus, formalizálás. Predikátumkalkulus alapfogalmai, formalizálás, tagadás, logikailag igaz formulák.

DIFFERENCIÁLEGYENLETEK. BSc. Matematika II. BGRMA2HNND, BGRMA2HNNC

Matematika III előadás

Formális nyelvek - 5.

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

Logika és informatikai alkalmazásai

A következő feladat célja az, hogy egyszerű módon konstruáljunk Poisson folyamatokat.

Megoldások. ξ jelölje az első meghibásodásig eltelt időt. Akkor ξ N(6, 4; 2, 3) normális eloszlású P (ξ

Bevezetés az informatikába

Matematika III előadás

Logika kiskáté. Mihálydeák Tamás és Aszalós László

Kétszemélyes játékok

Matematikai logika és halmazelmélet

Optimalizálási eljárások GYAKORLAT, MSc hallgatók számára. Analízis R d -ben

2. Ítéletkalkulus szintaxisa

Modellek és Algoritmusok - 2.ZH Elmélet

A számítógépes nyelvészet elmélete és gyakorlata. Formális nyelvek elmélete

1. Interpoláció. Egyértelműség Ha f és g ilyen polinomok, akkor n helyen megegyeznek, így a polinomok azonossági tétele miatt egyenlők.

Logikai következmény, tautológia, inkonzisztens, logikai ekvivalencia, normálformák

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

A szemantikus elemzés elmélete. Szemantikus elemzés (attribútum fordítási grammatikák) A szemantikus elemzés elmélete. A szemantikus elemzés elmélete

Automaták és formális nyelvek

Logika és informatikai alkalmazásai

Kalkulus 2., Matematika BSc 1. Házi feladat

Programozási módszertan

First Prev Next Last Go Back Full Screen Close Quit

Differenciaegyenletek

Határozatlan integrál

Logika és informatikai alkalmazásai

Nagy Gábor compalg.inf.elte.hu/ nagy

Transzformáció a főtengelyekre és a nem főtengelyekre vonatkoztatott. Az ellipszis a sík azon pontjainak mértani helye, amelyeknek két adott pontól

Átírás:

Nyelvek típusrendszere (IPM-08sztNYTRE, IPM-08EsztNYTRE) http://people.inf.elte.hu/pgj/nytr_msc/ Páli Gábor János pgj@elte.hu Eötvös Loránd Tudományegyetem, Informatikai Kar Programozási Nyelvek és Fordítóprogramok Tanszék

Miről szól ez a tantárgy?

Típusrendszerek statikus C OCaml Haskell Scala Java C# Typescript Dart dinamikus assembly gyenge JS Ruby Python, Clojure erős Szabályok gyűjteménye, amelyekkel tulajdonságokat rendelhetünk a program egyes részeihez, hogy így csökkentsük a hibák lehetőségét. [3..33]

Típuselméletek F ω CC PROP ω PRED ω F 2 λp 2 PROP 2 PRED 2 λ ω λp ω PROP ω' PRED ω' F 1 λp PROP PRED A halmazelmélet mint a matematikai alapjának alternatívájaként szolgáló formális rendszer, célja a paradoxonok elkerülése. [4..33]

Halmazelmélet típuselmélet: Russell-paradoxon Nevezzünk egy halmazt rendes halmaznak, ha nem tartalmazza önmagát elemként. Legyen R az összes rendes halmaz halmaza: R = {x x / x} ha R rendes halmaz, akkor benne van R-ben nem lehet rendes ha R nem rendes halmaz, akkor benne van R-ben nem lehet rendes R R R / R A naiv halmazelmélet inkonzisztens [5..33]

Típuselmélet típusrendszer (Haskell, F 2 + ) iseq :: forall a. forall b. (Eq a, Eq b) => a -> b -> Bool iseq x y = x == y IsEq.hs:2:17: Could not deduce (b ~ a) from the context (Eq a, Eq b) bound by the type signature for iseq :: (Eq a, Eq b) => a -> b -> Bool at IsEq.hs:1:9-38 b is a rigid type variable bound by the type signature for iseq :: (Eq a, Eq b) => a -> b -> Bool at IsEq.hs:1:9 a is a rigid type variable bound by the type signature for iseq :: (Eq a, Eq b) => a -> b -> Bool at IsEq.hs:1:9 Relevant bindings include y :: b (bound at IsEq.hs:2:8) x :: a (bound at IsEq.hs:2:6) iseq :: a -> b -> Bool (bound at IsEq.hs:2:1) In the second argument of (==), namely y In the expression: x == y [6..33]

Történeti áttekintés Típustalan rendszerek (1928 1936): Kombinátorlogika (Schönfinkel) λ-kalkulus (Church) Turing-gép (Turing) 1941: Típusos λ-kalkulus (Church) 1958, 1969: Curry-Howard izomorfizmus 1967: Automath (de Bruijn) 1971: Intuicionista (konstruktív) típuselmélet (Martin-Löf) 1972, 1974: System F (Girard, Reynolds) 1991: λ-kocka (Barendregt) [7..33]

A tematika rövid összefoglalása Típus nélküli λ-kalkulus Formális típusrendszerek Elsőrendű típusos λ-kalkulus szintaktika, szemantika, kifejezések redukálása, altípus, levezetés, Church- és Curry-típusos kalkulusok Másodrendű típusos λ-kalkulus szintaktika, szemantika, redukció, altípus, levezetés, egzisztenciális típus, rekurzív és függő típusok Magasabbrendű típusos λ-kalkulusok. A λ ω és az F ω < rendszer, típushelyesség, a rendszer elméleti tulajdonságai, Curry-Howard izomorfizmus Az F ω < típusrendszer mint a programozási nyelvek alapja Az objektumorientált programozás formális leírása [8..33]

λ-kalkulus

λ-kalkulus: szintaktika Definíció. Egyszerű típusnélküli λ-kifejezések Adott egy nem feltétlenül véges, egymástól páronként különböző változókat, a λ jelet, a pontot, valamint a nyitó- és csukózárójeleket tartalmazó halmaz. Ezen mint ábécén értelmezett λ-kifejezések a következőek: <λ-kifejezés> ::= <változó> <λ-absztrakció> <applikáció> <λ-absztrakció> ::= (λ<változó>.<λ-kifejezés>) <applikáció> ::= (<λ-kifejezés> <λ-kifejezés>) λ: λ-absztraktor, unáris operátor E F: az E és F λ-kifejezések (szintaktikus) azonossága Példák: x, (λx.x), (λx.(λy.x)), ((λx.(λy.x))z) [10..33]

λ-kalkulus: szintaktika Definíció. λ-absztrakció Ha E egy λ-kifejezés és x egy változó, akkor a λx.e λ-kifejezést λ-absztrakciónak, az x változót az absztrakció változójának (formális paraméterének), az E kifejezést törzsnek (a paraméter hatákörének) nevezzük. λx.(λy.f) λx.λy.f λxy.f (jobbasszociatív) Példák: I λx.x K λxy.x S λxyz.x z (y z) [11..33]

λ-kalkulus: szintaktika Definíció. Applikáció (kombináció) Ha E és F λ-kifejezések, akkor az E F λ-kifejezést applikációnak nevezzük. Ha E egy λ-absztrakció, akkor az E F neve függvényapplikáció, ahol az F az E λ-kifejezés aktuális paramétere. (E F ) G E F G (balasszociatív) Példák: (λxyz.z) w, (λxy.x) z w, (λx.x) (λx.x) [12..33]

λ-kalkulus: szintaktika Definíció. Szabad változó (FV) Az x szabad az x kifejezésben. Az x szabad λy.e-ben, ha x / y és x szabad E-ben. Az x szabad E F -ben, ha x szabad E-ben vagy F-ben. Definíció. Kötött változó (BV) Az x kötött λy.e-ben, ha x y és x szabad E-ben. Az x kötött λy.e-ben, ha x kötött E-ben. Az x kötött E F-ben, ha x kötött E-ben vagy F-ben. Példák: E λx.(λx.x y), FV (E) = {y}, BV (E) = {x} F λy.(λx.x y), FV (F) =, BV (F) = {x, y} G λx.(λy.x y), FV (G) =, BV (G) = {x, y} H λy.(λy.x y), FV (H) = {x}, BV (H) = {y} [13..33]

λ-kalkulus: szintaktika Definíció. Zárt λ-kifejezés (kombinátor) Ha egy λ-kifejezésben nincs szabad változó, akkor a λ-kifejezést zártnak nevezzük. Ha egy λ-kifejezés zárt, akkor vagy egy zárt λ-absztrakció, vagy zárt λ-kifejezések applikációja. Példák: λx.x, λxx.x, λxy.x y, (λx.x) (λxy.x) Definíció. Nyitott λ-kifejezés A nem zárt λ-kifejezések a nyitott λ-kifejezések. Példák: λx.y, x y, (λx.x) y A zártság a kiértékelhetőség előfeltétele. Definíció. λ-kifejezés lezárása Ha FV (E) = {x 1, x 2,..., x n }, akkor a λx 1 x 2... x n.e kifejezést az E egy lezárásának nevezzük. [14..33]

λ-kalkulus: szintaktika Definíció. Helyettesítés G, ha x y x[y = G] { x egyébként (E F)[y = G] (E [ y := G ]) (F [ y := G ]) λx.e, ha x y (λx.e)[y = G] λx.e[y = G], ha x / y és x / FV (G) λx.e egyébként (E[x = F])[y = G] E[x = F][y = G] (balasszociatív) Példák: (λx.y)[x = λx.y] λx.y (λx.y)[y = λx.y] λx.λx.y λxx.y (λx.y)[y = λy.x] λx.y (λx.y)[y = λx.x] λx.λx.x λxx.x (λx.y)[y = λy.y] λx.λy.y λxy.y [15..33]

λ-kalkulus: szintaktika Lemma. Az E[x = F] szabad változói Ha x FV (E), akkor FV (E[x = F]) = (FV (E) {x}) FV (F). Lemma. Egyszerű helyettesítések (1) E[x = x] E E[x = F] E, ha x / FV (E) Lemma. Egyszerű helyettesítések (2) Ha BV (E) (FV (F) FV (G) {y}) =, akkor (E[x = y])[y = F] E[x = F], ha y / FV (E) (E[x = y])[y = x] E, ha y / FV (E) (E[x = F])[x = G] E[x = F[x = G]] Lemma. Helyettesítési lemma Ha x / y és x / FV (G), akkor E[x = F][y = G] E[y = G][x = F[y = G]]. [16..33]

λ-kalkulus: operációs szemantika Definíció. β-redukció Ha az E[x = F] kifejezésben az F szabad változói nem válnak az E kötött változóivá, akkor (λx.e)f β E[x = F]. Példák: (λx.x) y β y (λx.y) z β y (λy.(λx.y x)) u y β (λx.u x) y β u y (λf.f u) (λx.x y) β (λx.x y) u β u y (λx.(λx.x y) x) u β (λx.x y) u β u y (λxy.x y) y / β λy.y y (névkonfliktus) (λxy.x) y / β λy.y (névkonfliktus) [17..33]

λ-kalkulus: operációs szemantika Definíció. α-konverzió Ha az E kifejezésben y nem szabad változó, azaz y / FV (E), akkor λx.e α λy.e[x = y]. Módosított helyettesítés: (λx.e)[y = G] Példák: (λxy.x y) y α (λxz.x z) y β λz.y z (λxy.x) y α (λxz.x) y β λz.y λx.e, ha x y λx.e[y = G], ha x / y és x / FV (G) α λz.e[x = z][y = G], ha x / y és x FV (G), z egy új változó [18..33]

λ-kalkulus: operációs szemantika Definíció. η-konverzió Ha az x az E kifejezésnek nem szabad változója, azaz x / FV (E), akkor λx.e x η E. Valamint: E F η (λx.e x) F Példák: λx.y x η y λx.(y z) x η y z λx.(λx.x y) x η λx.x y λxx.x y y z x η λx.x y y z λx.x x / η x [19..33]

λ-kalkulus: normálforma Definíció. Normálforma Ha egy λ-kifejezésben nincs elvégezhető redukció (redukálható kifejezés), akkor λ-kifejezés normálformában van. Egy λ-kifejezés akkor és csak akkor van normálformában, ha λx 1 x 2.... x m.m 1 M 2... M n, (m, n 0) alakú, ahol M 1, M 2,..., M n mindegyike normálformában van. Példák: x x y λx.y λx.(λy.z) Ω (λx.x x) (λx.x x) (nincs) [20..33]

λ-kalkulus: normálforma Tétel. I. Church-Rosser-tétel (rombusztulajdonság) Ha E 1 = E 2, akkor létezik egy olyan F λ-kifejezés, amelyre E 1 F és E 2 F. Következmények. Ha E 1 = E 2, és E 2 normálformában van, E 1 E 2. Minden λ-kifejezésnek legfeljebb egy normálformája van. Ha E és F mindegyike normálforma, és E / F, akkor E /= F. Példák: (λx.((λy.x y) ((λz.z) v))) u β (λy.u y) ((λz.z) v) β u ((λz.z) v) β u v (λx.((λy.x y) ((λz.z) v))) u β (λx.((λy.x y) v) u β (λx.(x v)) u β u v [21..33]

λ-kalkulus: normálforma Redukálási stratégia: meghatározza, több redukció esetén melyiket kell elvégezni, redukálási sorrendet ad meg. Például: legbaloldalibb legkülső (normál, lusta): ((λp.p) ((λq.q) r)) s ((λt.t) ((λu.u) v)) legbaloldalibb legbelső (applikatív, mohó): ((λp.p) ((λq.q) r)) s ((λt.t) ((λu.u) v)) legjobboldalibb legkülső: ((λp.p) ((λq.q) r)) s ((λt.t) ((λu.u) v)) legjobboldalibb legbelső: ((λp.p) ((λq.q) r)) s ((λt.t) ((λu.u) v)) Normalizáló stratégia: ha létezik normálforma, megkapjuk. Tétel. II. Church-Rosser-tétel (normalizálás) A normál sorrendű redukálási stratégia normalizáló redukálási stratégia. [22..33]

Típusrendszer Célkitűzés: helyesség (soundness) és biztonságosság (safety) Milner (1978): "Well-typed programs cannot go wrong" Típusmegmaradás tétele (type preservation) Haladás tétele (progression) Church-típusos rendszerek: explicit típusellenőrzés (type checking) Curry-típusos rendszerek: implicit típuskikövetkeztetés (type inference) [23..33]

Formális típusrendszerek

Formális matematikai rendszer Definíció. Formális matematikai rendszer Legyen Φ = (Σ, F, A, R) egy formális matematikai rendszer, ahol Σ egy ábécé, F a nyelvtani szabályok halmaza, A az axiómák halmaza, R a levezetési szabályok halmaza. [25..33]

Formális matematikai rendszer Definíció. Formális matematikai rendszer Legyen Φ = (Σ, F, A, R) egy formális matematikai rendszer, ahol Σ egy ábécé, A Σ elemei az alapszimbólumok: változók, elválasztó jelek, operátorok. Az alapszimbólumokból képzett véges sorozatok a formulák. F a nyelvtani szabályok halmaza, A nyelvtani szabályokat kielégítő formulák jól formáltak. A az axiómák halmaza, R a levezetési szabályok halmaza. Az axiómák jelentéssel bíró (szemantikailag helyes) formulák, a többi formulát ezekből kell tudni levezetni a szabályok segítségével. [26..33]

Formális típusrendszer: jelölések E, F,... (λ-)kifejezés A, B,... típus(kifejezés) (F 1 ) τ, σ,... típus(kifejezés) x, y,... változó α, β,... típusváltozó Γ,,... (típus)környezet, kontextus E A Γ A Γ E A E F E típusa A A egy jól formált típus E típusa A a Γ környezetben E és F egyenlőek [27..33]

Formális típusrendszer: jól formáltság Definíció. Jól formált λ-kifejezés Az E λ-kifejezés jól formált, ha nyelvtanilag helyes, azaz megfelel a λ-kifejezéseket leíró nyelvtan szabályainak. Definíció. Jól formált típus Az A típus jól formált, ha nyelvtanilag helyes, azaz megfelel a típusokat leíró nyelvtan szabályainak. Egy jól formált kifejezésre a típusok jól formáltságának megkövetelése viszont önmagában még nem elég. [28..33]

Formális típusrendszer: típuskörnyezet Definíció. Típuskörnyezet (szintaktika) <típuskörnyezet> ::= <környezet>, <változó> : <típus> valamint ha x i egy A i típusú változó (1 i n) és a típuskörnyezet egy halmaz, akkor x i x j (i j). Γ = {x 1 A 1, x 2 A 2,..., x n A n } dom(γ) = {x 1, x 2,...} Definíció. Jól formált típuskörnyezet Egy Γ típuskörnyezet jól formált, ha megfelel a típuskörnyezet definíciójában megadott nyelvtannak. [29..33]

Formális típusrendszer: következtetés A következtetések általános alakja: Γ I ahol Γ egy (statikus) típuskörnyezet, I egy állítás. Példák: wf Γ wf Γ A Γ E A jól formált Γ jól formált A egy jól formált típus E típusa A a Γ környezetben [30..33]

Formális típusrendszer: következtetési szabály A következtetési szabályok általános alakja: Γ 1 I 1,..., Γ n I n Γ I (SZABÁLYNÉV) ahol Γ 1 I 1,..., Γ n I n : feltételek Γ I: következmény Axiómák: A feltételek halmaza üres. wf (ENV ) Ha a feltételek teljesülnek, akkor a következmény is teljesül. [31..33]

Formális típusrendszer: levezetés A következtetésekből levezetési fákat építhetünk. K 12 K 11 K 22 K 32 (S3) (S2) (S1) K 41 K 42 K 52 (S5) (S4) K 72 K 61 K 62 (S6) (S7) [32..33]

Formális típusrendszer: érvényes következtetés Definíció. Érvényes következtetés Azt mondjuk, hogy a Γ E A következtetés érvényes, ha létezik olyan (típus)levezetés, ahol a következtetés a levezetéshez tartozó (következtetési) fa gyökere. Definíció. Jól típusozott kifejezés Ha egy típusrendszerben a Γ E A következtetés érvényes, akkor azt mondjuk, hogy az E kifejezés jól típusozott. Jól típusozott kifejezés = típusozható kifejezés [33..33]