tüübisüsteemidkodu.ut.ee/~varmo/sem04/slides/types.pdfpierce „types and programming...

87
Jevgeni Kabanov Programmeerimiskeelte semantika 2004 1 Tüübisüsteemid

Upload: others

Post on 01-Mar-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 1

Tüübisüsteemid

Page 2: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 2

Plaan● Motivatsioon● Esitlus● Tüübita süsteemid● Lihtsalt tüübitud süsteemid● Alamtüüpimine

Page 3: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 3

Kirjandus1. B. Pierce „Types and Programming

Languages“, MIT, 2002

Page 4: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 4

Motivatsioon

Page 5: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 5

Motivatsioon● Kergekaalulised formaalsed meetodid

– Mudeli kontrollijad– Tüübisüsteemid

Page 6: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 6

Motivatsioon● Milleks on tüübid

programmeerimiskeeltes?– Veatuvastus– Abstraktsioon– Dokumentatsioon– Keeleturvalisus– Efektiivsus

Page 7: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 7

Esitlus● Funktsionaalne keel

– -arvutus koos aritmeetilise ja Booli konstruktsioonitega

– Call-by-value● Struktuurne operatsioonsemantika

– Kasutan asemel.

● Struktuursed tüübid

Page 8: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 8

Tüübita süsteemid

Page 9: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 9

Tüübita aritmeetliliste avaldiste süntaks

t ::=truefalseif t then telset0 succtpred tiszero t

Page 10: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 10

Boole'i avaldised

Page 11: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 11

Aritmeetilised avaldised

Page 12: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 12

Normaalkuju● DEF: Term t on normaalkujul, kui ei

leidu t' nii, et . ● Teoreem: Iga väärtus on normaalkujul.

– Kehtib ka teiste keelte kohta, mida me vaatame

● Teoreem: Kui t on normaalkujul, siis t on väärtus.– Kehtib hetkel ainult Boole'i avaldiste

keeles

t t '

Page 13: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 13

Normaalkuju ...● Teoreem: Kui ja , kus u ja u'

on normaalkujul, siis u = u'.– Kehtib, kui keel on ühene; need, mis me

vaatame, on● Teoreem: Iga termi t jaoks leidub

normaalkuju t' nii, et .● DEF: Term on kinni jäänud („stuck“),

kui ta on normaalkujul, aga ei ole väärtus.

t∗u t∗u'

t∗t '

Page 14: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 14

-arvutus● Kõik termid on kujul:

● Näited:

x.x

xy.y x

fxy.f (x y)

t ::=xx.tt t

Page 15: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 15

-arvutus● DEF: Vabad muutujad FV(t):

● DEF: Substitutsioon [x s] t:

FV x={x}FV x.t1=FV t1∖{x}FV t1 t2=FV t1∪FV t2

[xs]x=s[xs]y=y if y≠x[xs]y.t1=y.[xs]t1 if y≠x∧y∉FV s[xs]t1 t2=[xs]t1[xs]t2

Page 16: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 16

-arvutus● Näited:

– [x (z.z w)] (y.x) = y.z.z w (õige)

– [x y] (x.x) = x.y (vale)

– [x z] (z.x) = z.z (vale)

– [x y z] (y.x y) = ?

● Meid ei huvita muutujate nimed– Valime alati unikaalsed muutujad– Nimetame ümber, kui tekivad konfliktid

Page 17: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 17

-arvutus

Page 18: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 18

-arvutuse intuitsioon● Lambdaabstraktsioon on funktsiooni

definitsioon● Aplikatsioon on funktsiooni

rakendamine● Betareduktsioon on avaldise

väärtustamine– Termi osa, mida saab redutseerida,

nimetatakse reedeksiks● DEF: Termi, milles ei leidu vabu

muutujaid, nimetatakse kinniseks.

Page 19: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 19

Näited● (x.x) (y z) [x y z] x y z

● (x. y) w y

● (xy.y x) z w (y.y z) w w z

● (x.x x) (x.x x) (x.x x) (x.x x)

Page 20: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 20

Currying● Kuid me ei saa esitada otseselt -arvutuses mitmeargumendiliseid funktsioone, saame teha funktsioone, mis tagastavad tulemusena funktsioonid (high order functions):

(xy.add x y) 3 4 (y.add 3 y) 4

add 3 4 7

Page 21: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 21

Boole'i funktsioonid● Boole'i funtksioonid -arvutuses:

– tru = t. f. t

– fls = t. f. f

– test = l. m. n. l m n

– and = b. c b c fls

– ...

Page 22: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 22

Rekursioon● Püsipunktikombinaator:

fix = f. (x. f (y. x x y)) (x. f (y. x x y))

(on ka lihtsam kombinaator, aga seda saab kasutada ainult call-by-name reduktsioonjadaga)

● Näide:

fct = f. n. if n = 0 then 1 else n * (f (n-1))

factorial = fix fct

Page 23: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 23

Lihtsalt tüübitud süsteemid

Page 24: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 24

Tüübid● Milleks?

– Me ei taha kinni jäänud terme● Kuidas?

– Igal väärtusel on oma kindel tüüp– Termil t on tüüp T, kui ta ilmselt

redutseerub väärtuseks tüübiga T („ilmselt“ tähendab siin, et me saame leida termi tüübi ilma väärtustamata)

– Term t on tüübitav, kui leidub tüüp T nii, et see on t tüüp

Page 25: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 25

Booli tüübid

Page 26: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 26

Arimeetilised tüübid

Page 27: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 27

Tüüpide tööriistakast● Inversioonilemma

– Väljastab tüübileidmise algoritmi● Tüübi unikaalsuse teoreem

– Tagab, et algoritm leiab õige tüübi● Edenemine + Säilitamine = Turvalisus

– Tagab, et tüübitav term ei saa kunagi kinni jääda

Page 28: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 28

Inversioonilemma1. Kui true : R, siis R = Bool

2. Kui false : R, siis R = Bool

3. Kui if t1 then t

2 else t

3 : R, siis t

1 : Bool,

t2 : R ja t

3 : R

4. Kui 0 : R siis R = Nat

5. Kui succ t : R või pred t : R, siis R = Nat

6. Kui iszero t : R siis R = Bool ja t : Nat

Page 29: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 29

Tüübi unikaalsuse teoreem● Igal termil t on mitte rohkem kui üks

tüüp. ● Teiste sõnadega, kui term t on tüübitav,

siis see tüüp on unikaalne

Page 30: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 30

Edenemine ja säilitamine● Edenemise teoreem

– Tüübitav term ei ole kinni jäänud. – S.t. kas term on väärtus või leidub

üleminek mingi väärtustamise reegli järgi● Säilitamise teoreem

– Kui tüübitav term teeb ülemineku, siis tulemuseks on ka tüübitav term.

– NB-keeles kehtib isegi tugevam teoreem - tulemuseks on term sama tüübiga (hilisemate keelte kohta see enam ei kehti)

Page 31: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 31

Lihtsalt tüübitud -arvutus● Funktsioonide tüübid

– T T– x:T. t

● Tüübitavus– Ilmutatud– Ilmutamata

Page 32: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 32

Lihtsalt tüübitud -arvutus● Tüübikontekst

– = {x1 : T

1, x

2 : T

2, ...}

– t : T– Muutuja tüüp on võetud kontekstist– Abstraktsioon täiendab konteksti oma

argumendi tüübiga

Page 33: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 33

Lihtsalt tüübitud -arvutus

Page 34: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 34

-arvutuse tööriistakast● Inversioonilemma

1. Kui x : R, siis x : R ∈

2. Kui x:T1. t

2 : R, siis R = T

1 R

2, mingi R

2

korda ja , x : T1 t

2 : R

2

3. Kui t1 t

2 : R, siis leidub mingi T

11 nii, et

t1 : T

11 R ja t

2 : T

1

Page 35: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 35

-arvutuse tööriistakast● Unikaalsuse teoreem

● Antud kontekstis leidub termil ülimalt üks tüüp (kui kõik termi vabad muutujad on esitatud kontekstis).

● Edenemise teoreem● Olgu t kinnine tüübitav term (leidub T nii,

et t : T). Siis kas t on väärtus või leidub t' nii, et t t'.

● Säilitamise teoreem● Kui t : T ja t t', siis t' : T

Page 36: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 36

Lihtsalt tüübitud -arvutus● Tüüpide kustutamine

– Jätame kõik tüübiannotatsioonid ära– Saame, et meie tüübitav termid on

tüübitamata termide alamhulk ja termide reduktsioon on säilitatud

● Curry v/s Church stiilid– Curry stiil: t võib omada tüüpi, siis see on

tüübitav– Church stiil: me ei vaata terme, mis ei oma

tüüpi

Page 37: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 37

Laiendused

Page 38: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 38

Lisatüübid● Baastüübid (interpreteerimata tüübid)

– Nendega pole seotud ühtegi redutseerimisreeglit

– Saame kasutada funktsioonides● Ühiktüüp

– () Haskellis

– void Javas

Page 39: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 39

Baastüübid

Page 40: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 40

Tuletatud kuju● Kompositsioon

– t1 ; t

2 = (x : Unit. t

2) t

1, kus x ∉ FV(t

2)

– Saab defineerida ka täisreeglitega– Tuletatud kuju nimetatakse tihti ka

süntaktiliseks suhkruks● Metamärgid (Wildcards)

– Kui meil pole vaja -abstraktsiooni argumenti, siis kirjutame (_ : S. t).

Page 41: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 41

Ühiktüüp

Page 42: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 42

Omistus

Page 43: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 43

Omistus● Dokumentatsioon

– Aitab ka programmeerijal mõista● Tüüpide printimine● Abstraktsioon

– Tüübi määramine (eriti tähtis alamtüüpimisel)

– Nt. Javas casting

Page 44: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 44

Let-sidumine

Let-sidumist saab defineerida ka tuletatud kujuna, kuid siis peame leidma tüübi tüübikontrollijalt

Page 45: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 45

Paarid

Page 46: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 46

Korteežid (Tuples)

Page 47: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 47

Kirjed

Page 48: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 48

Summad

Page 49: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 49

Summad ja tüübiunikaalsus● Mis on termi inl t tüüp, kui t : T?

– T + A?– T + B?– Kui T = Nat, siis võiks olla Nat+Nat, aga

võiks ka Nat+Bool

Page 50: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 50

Summad ja tüübiunikaalsus● Lahendusviisid

1)Tüübikontrollija võib kuidagi proovida arvata tüübi (täpsemalt: ta võib jätta tüübi määramata, kuni see selgub)

2)Võime muuta keelt nii, et see võimaldaks meil esitada kõik võimalikud tüübid samasuguselt (seda kasutame, kui hakkame alamtüüpimist vaatama)

3)Võime nõuda programmeerijalt, et ta paneks kirja tüübi ilmutatud kujul

Page 51: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 51

Summad tüübiomistusega

Page 52: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 52

Variandid

Page 53: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 53

Variantide tüübid● Valikulised tüübid (optional)

– Maybe in Haskell

● Loetelu tüübid– enum in Java 1.5

– Tühjade konstruktoritega Haskellis● Ühe välja variant

– Pakkimistüübid Haskellis● Varianti võib vaadata kui eraldatud

ühend (disjoint union)

Page 54: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 54

Rekursioon

Tavaline püsipunktikombinaator lambdaarvutuses ei ole tüübitav lihtsalt tüübitavas lambdaarvutuses

Page 55: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 55

Normaliseerimine● DEF: Term t on normaliseeritav, kui

selle võib redutseerida normaalkujuks lõpliku arvu üleminekutega.

● Lihtsalt tüübitud lambdaarvutuses on kõik kinnised tüübitavad termid normaliseeritavad– Kehtib niikaua, kui me ei too üldist

rekursiooni ja rekursiivseid tüüpe

Page 56: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 56

Viited (references)● Mida me tahame saada?

– r = ref 5; r : Ref Nat

– !r; 5 : Nat

– r := 7; unit : Unit

– !r; 7 : Nat

– s := 10; !s 10 : Nat

Page 57: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 57

Viited ...● Jagatud olek

– Viited võimaldavad suhelda programmi osade vahel

– Viited võimaldavad teha primitiivseid objekte

– Viited võimaldavad viidata ka liittüüpidele, nii saab teha nt. massiive

● Prügi vedamine (Garbage collection)– Keel ilmutatud vabastamisega ei saa olla

turvaline

Page 58: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 58

Viidete esitlus● Tüüpimine (kontekstis)

– t : T ref t : Ref T

– t : Ref T !t : T

– rt : Ref T & t : T rt := t : Unit

● Väärtustamine– Millised on Ref T väärtused?

– Toome sisse varu (store) ℒ, ref t väärtus on asukoht varus l

– Iga reduktsioon võib muuta varu

Page 59: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 59

Viidete esitlus ...● Varu tüüpimine

– Kuidas tüüpida varu asukohta?

– Toome sisse varu tüüpimiskonteksti

l =T 1

∣⊃l : Ref T 1

∣⊃t1 :T 1

∣⊃ref t1 : Ref T 1

∣⊃t1 : Ref T 1

∣⊃! t1 :T 1

∣⊃t1 : Ref T 1 ∣⊃t2 :T 1

∣⊃t1 :=t2 :Unit

Page 60: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 60

Viited (süntaks)

Page 61: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 61

Viited (väärtustamine)

Page 62: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 62

Viited (tüüpimine)

Page 63: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 63

Turvalisus● DEF: Varu on tüübitav (kirjutatakse

| ⊃ ), kui dom() = dom() ja ∀l ∈ dom() ( | ⊃ (l) : (l))

● Säilitamise teoreem– Kui | ⊃ t : T, | ⊃ , t | t' | , siis

leidub ', ⊆ ' nii, et | ' ⊃ t ': T ja | ' ⊃ '

– Teiste sõnadega, kui meil on tüübitavad term ja varu, siis pärast redutseerimist on nad jätkuvalt tüübitavad

Page 64: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 64

Turvalisus ...● Edenemise teoreem

– Olgu t kinnine tüübitav term ( | ⊃ t : T), siis kas t on väärtus või iga tüübitava varu kohta leidub term t' ja varu ' nii, et t | t' | .

– Teiste sõnadega, kas term on väärtus või seda saab redutseerida edasi

Page 65: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 65

Erandid

Page 66: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 66

Erandid ...● Determineeritud

– (x:Nat.0) error error

– (fix (x:Nat.x)) error * ...

● Tüüpimine– Iga tüüp sobib error termile

● Edenemise teoreem– Term on kas väärtus, seda võib

redutseerida või on see error

Page 67: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 67

Erandite käsitlus

Page 68: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 68

Erandid väärtustega

Page 69: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 69

Erandid väärtustega ...● Mis võib olla T

exn?

– Nat – veakoodid– String – veateated– Variant – info, mida on vaja– Laiendatav variant – nagu MLis– Klassid – nagu Javas

● Lisaks saame ka loomuliku järjestuse

Page 70: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 70

Alamtüüpimine

Page 71: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 71

Motivatsioon● (r:{x:Nat}. r.x) {x=0, y=1}

– Ei ole tüübitav– Funktsioon nõuab ainult välja x

● Saame seda tuletada ainult vaadates funktsiooni argumendi tüüpi

– On alati ohutu anda {x : Nat} asemel {x : Nat, y : Nat}

Page 72: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 72

Alamtüüpimise relatsioon● S on T alamtüüp (S <: T), kui igas

kontekstis, kus oodatakse T on võimalik kasutada S– Üks intuitsioon sellele on, et alamtüüp on

alamhulk ülemtüübi väärtustest● Relatsioon peab olema refleksiivne ja

transitiivne● Subsumtsioon (Subsumption):

⊃t : S S:T⊃t :T

Page 73: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 73

Kirjete alamtüüpimine● Kirjetüüp S on kirjetüübi T alamtüüp,

kui:– T on S väljad teisel järjestusel– T on S, kus on lõpust ära jäetud mõni arv

väljadest– Iga S välja tüüp on sama T välja alamtüüp

● Seega ümberjärjestatud kirjed on ekvivalentsete tüüpidega

Page 74: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 74

Funktsioonide alamtüüpimine● Mis tingimused peavad olema täidetud,

et S1 S

2 <: T

1 T

2?

– Kuna funktsiooni kasutakse mingis tundmatus kontekstis, siis funktsiooni tulemus peab olema kasutatav selles kontekstis, seega S

2 <: T

2

– Aga argumentiga on vastupidi – argumendi tüüp peaks olema kasutatav meie funktsioonis, seega T

1 <: S

1

Page 75: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 75

Alamtüüpimine

Page 76: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 76

Alamtüüpimine ...

Page 77: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 77

Alamtüüpimine (kirjed)

Page 78: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 78

Turvalisus● Alamtüüpimine ilmselt ei mõjuta

otseselt edenemise teoreemi● Selleks, et tõestada säilitamise

teoreemi, on meil vaja tõestada:– Alamtüüpimisrelatsiooni inversioonilemma– Inversioonilemma– Substitutsioonilemma

Page 79: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 79

Top ja Bottom tüübid● Top :> T

– Ei pruugi olla alamtüübimisega keeles– Vastab Object-ile objekt-orienteeritud

keeltes● Bot <: T

– Ei oma ühtegi väärtust– Mugav viis esitleda avaldisi, mis

semantiliselt ei oma väärtusi, nt. erandid– Raskendab tüübikontrollija ehitamist

Page 80: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 80

Tüübiomistus● Up-cast

– Omistame termile tema ülemtüübi● Down-cast

– Omistame termile suvalise teise tüübi, tüübikontrollija laseb läbi ja lisab täitmise-aja kontrolli

– Kaotame edenemise– Kasutakse Javas selleks, et saada „poor-

man's polymorphism“

Page 81: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 81

Variantide alamtüüpimine

Page 82: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 82

Viidete alamtüüpimine● Viidete tüübid peavad olema

ekvivalentsed:

● Tuleneb sellest, et me kasutame viiteid kirjutamiseks ja lugemiseks

● Sama käib massiivide kohta, kuid Javas on realiseeritud nii, et kui A <: B, siis A[] <: B[]– See toob sisse täitmise-aja kontrolli iga

massiivi omistuse kohta

S 1 :T 1 T 1 : S 1

Ref S 1 : Ref T 1

Page 83: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 83

Alamtüüpimise probleemid● Subsumtsioon

– Reegli kasutamine ei ole määratud termi süntaksiga

– Võime rakendada reegli mitu korda– Kaotame termi tüübi unikaalsuse

● Transitiivsus– Et reegli eelduses on ainult

metamuutujad, saame rakendada reeglit mitu korda

Page 84: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 84

Lahendus● Algoritmiline alamtüüpimine

– S <: T peab olema algoritmiliselt lahendatav– Viskame ära transitiivsuse ja refleksiivsuse– Ühendame kirjete reeglid üheks

Page 85: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 85

Algoritmiline tüüpimine● Peab olema algoritmiliselt lahendatav● Peame muutma subsumtsiooni reeglit

– Kus meil seda vaja on?– Selgub, et ainult aplikatsioonis

● Ülejäänud jäävad täpselt samaks

Page 86: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 86

Lahendus ...

Page 87: Tüübisüsteemidkodu.ut.ee/~varmo/SEM04/slides/types.pdfPierce „Types and Programming Languages“, MIT, 2002 Programmeerimiskeelte semantika 2004 4 Jevgeni Kabanov Motivatsioon

Jevgeni Kabanov Programmeerimiskeelte semantika 2004 87

Laiendused● Hargnemine

– On vaja tüübi ülemraja– Võib tulla vaja ka alarajast

● Bot <: T– Peame muuta applikatsioon nii, et kui Bot

on funktsiooni tüüp, siis termi tüüp on ka Bot

– Muutame ka kirjete projektsioon nii, et kui kirje tüüp on Bot tulemustüüp on ka Bot