ESERCIZI TYPED LAMBDA CALCULUS
Esercizio 1
Fornire le definizioni di lambda-calcolo tipato a' la Church e a' la Curry.
Fornire inoltre una proprieta' che li distingue.
Soluzione.
Esercizio 2
Descrivere la differenza tra lambda calcolo tipato 'a la Church
e 'a la Curry.
Nel lambda calcolo tipato semplice 'a la Curry qual e' il senso di avere variabili di tipo
e del lemma di sostituzione?
Esercizio 3
Dare una derivazione formale nel sistema di assegnamento di
tipi alla Curry per il seguente giudizio:
|-- \xy.yx : a --> (a-->b) --> b
Esercizio 3.5
Dimostrare formalmente che il seguente giudizio e' valido
z: b-->a |- \xy.x(zy) : (a-->c) --> (b-->c)
Esercizio 4
Dato un termine M, qual e' la relazione che sussiste tra tutti i
giudizi B |-- M : T ?
Esercizio 5
Quale teorema del lambda calcolo tipato puo' essere parafrasato
ne seguente modo?
"Le informazioni fornite dai tipi nei programmi possono essere ignorate a tempo
di esecuzione."
Soluzione.
Esercizio 6
Dimostrare che se un lambda-termine tipato e' derivabile, allora lo e'
ogni sua istanza.
Ricordiamo che una istanza di Gamma |- M : sigma e'
S(Gamma) |- S(M) : S(sigma), dove S sostituisce tipi a variabili di tipo.
Esercizio 7
Nel contesto del lambda-calcolo tipato
fornire la definizione di Controllo del tipo (Type Checking) e di Ricostruzione del tipo (Type Inference).
Esercizio 8
Eseguire il "principal typing algorithm" sul termine \x.\y.x
Qual'e' invece il tipo principale dell'operatore di punto fisso
\f.((\x.f(xx))(\x.f(xx))) ?
Soluzione.
Esercizio 9
Trovare il principal pair dei numerali di Church.
Esiste un tipo piu' generale per TUTTI i numerali di Church?
Esercizio 10
Dire se c'e' un errore nella seguente proposizione e qual e'.
Dato un lambda termine M tipabile, sia < P,pi > la principal pair di M.
Allora se nel sistema di inferenza
di tipi a' la Curry riusciamo a derivare B |- M : tau abbiamo che esiste una sostituzione
di tipi S tale che B = S(P) e tau = S(pi).
Aiutone.
Esercizio 11
Fornire una derivazione nel sistema di tipi a' la Curry per il termine
\bc.((\y.c)(bc))
Soluzione.
Esercizio 12
Fornire una derivazione nel sistema di tipi a' la Curry per il termine
\b.((\y.c)(bc))
Soluzione.
Esercizio 13
Perche' il termine (\x.x)((\y.yy)(\y.yy)) non e' tipabile nel
sistema dei tipi semplici a' la Curry?
Esercizio 14
Fornire la coppia principale (Principal Pair) nel sistema di tipi a' la Curry
per il lambda termine y(\x.x) . Motivare la risposta.
Esercizio 14.5
Perche' possiamo affermare con sicurezza che
(a-->(b-->b)) --> (a-->(b-->b))
e' un tipo per \xy.(xy), senza dover andare a trovare una derivazione per
empty |- \xy.(xy) : (a-->(b-->b)) --> (a-->(b-->b))
nel sistema di tipi di Curry?
Esercizio 15
Dimostrare che se Gamma |-Church M : alpha allora Gamma |-Curry Erase(M) : alpha.
Soluzione.
Esercizio 16
Qual e' il Principal Pair della funzione che presa una funzione ed un
suo argomento applica il secondo alla prima?
(cioe' il Principal Pair del lambda termine \fx.fx)
Soluzione.
Esercizio 17
Perche' l'operatore di punto fisso Y=\f(\x.f(xx))(\x.f(xx)) non
puo' essere utilizzato per definite funzioni per ricorsione nel lambda-calcolo
se utilizziamo una strategia call-by-value?
Perche' H=\g.( (\f.ff)(\f.(g\x.ffx)) ) invece va bene?
Se volessimo introdurre H come costante nel PCF lazy per definire funzioni
per ricorsione, quale comportamento funzionale dovrebbe avere? cioe',
quali altre costanti e/o regole di riduzione dovremmo aggiungere?
Esercizio 17.5
Se intendiamo introdurre nel lambda-calcolo anche delle costanti esplicite per numeri ed operatori numerici, cosa occorre estendere oltre la definizione di lambda-termine?
Esercizio 18
Nel lambda-calcolo tipato a' la Church ogni termine e' fortemente normalizzabile.
Come e' possibile allora in PCF definire funzioni ricorsive che non terminano?
Esercizio 19
Fornire l'assioma e le regole che definiscono la strategia Leftmost-Outermost
per il PCF.
Esercizio 20
Una proprieta' molto importante dei termini del lambda calcolo tipato
a' la Church e' che sono tutti fortemente normalizzabili.
Questo vale anche per i termini di PCF? Se si, perche'? Se no, perche'?
Aiutino.
Esercizio 21
Aggiungere in PCF le costanti e le regole di riduzione che
descrivano il tipo di dato lista-di-interi.
Esercizio 22
Fornire un termine PCF, esteso come nell'esercizio precedente,
che rappresenti la lista infinita di tutti i numeri naturali.
Scrivere una funzione PCF che restituisca il primo numero pari di una lista
(assumere di avere qualche predicato primitivo).
Applicare la funzione alla lista infinita e simulare la valutazione
lazy.
Soluzione.
Esercizio 23
Fornire una semantica operazionale big-step del PCF lazy.
Esercizio 24
Cosa si intende per Polimorfismo? Cosa si intende per polimorfismo implicito?