ESERCIZI LAMBDA CALCULUS
N.B. Gli esercizi sulle strategie di riduzione sono alla fine del file.
Esercizio 0
Cosa si intende per "programma" nel contesto dei linguaggi di programmazione funzionale?
In cosa consiste l'"esecuzione" di un programma in un linguaggio funzionale?
Elencare alcuni concetti tipici della programmazione imperativa che perdono
completamente di significato in quella funzionale.
Cos'e' un Modello Computazionale?
Cosa si intende per "astrazione funzionale"
e come questa viene formalizzata nel lambda-calcolo?
Cosa si intende per "currificazione"
e quali sono i possibili vantaggi del suo utilizzo.
Cos'e' la relazione di alfa-convertibilita' tra termini?
Esercizio 1
Dato il seguente termine, cerchiare le sue variabili libere e collegare,
utilizzando delle frecce, le sue variabili legate con i lambda relativi.
λz.( ((λx.λx.yx)x)(vλz.λw.v) )
Soluzione.
Esercizio 2
Descrivere sinteticamente alcuni svantaggi dei linguaggi di programmazione
funzionali.
Soluzione.
Esercizio 3
Ridenominare alcune variabili legate nel seguente termine, in modo
che non ci siano due lambda che leghino variabili con lo stesso nome.
(λxxx.(zλz.x))(xλy.(y(λy.z)yy))
Soluzione.
Esercizio 4
Ricopiare il seguente termine sottolineando le variabili libere e mettendo un
cerchietto intorno a quelle legate:
(λx.(z(λz.((xyz)x))zx))x(λx.((λy.yy)(λz.zz)))
Soluzione.
Esercizio 5
Rinominare le variabili legate nel seguente termine in modo che
non ci siano due variabili legate con lo stesso nome
x(λx.((λx.x)x))
Esercizio 6
Fornire un lambda-termine che contenga
variabili con nome x, y e z ed in cui ci siano occorrenze sia legate che libere
di variabili con tali nomi.
Soluzione.
Esercizio 7
Riscrivere il seguente termine utilizzando il minimo numero
di parentesi secondo le convenzioni sintattiche
((xy)(λy.(λz.(z(xy)))))
Soluzione.
Esercizio 8
Supponendo di non utilizzare le convenzioni sintattiche sulle parentesi,
riscrivere il seguente termine inserendo tutte le possibili parentesi.
(λxyz.xy(xz))λxy.x
Soluzione.
Esercizio 9
Definire la nozione di "Currificazione". E' una nozione applicabile al lambda-calcolo? perche'?
Soluzione.
Esercizio 10
Fornire la definizione formale di sostituzione.
Esercizio 11
Qual e' la condizione che deve essere soddisfatta affinche' sia
possibile applicare una sostituzione senza produrre "effetti
indesiderati"?
Esercizio 12
Eseguire le seguenti sostituzioni
-
λy.y(λz.xz)[λz.y / x]
-
x(λyx.x)[(yz)/x]
-
x(λyx.zx)[(λy.y)/x, x/z]
Esercizio 13
Eseguire le seguenti sostituzioni:
-
(λx.yx)[yz/x]
-
(λy.xy)[yz/x]
-
(λz.(λx.yx)xz)[zx/x]
Esercizio 14
Eseguire la seguente sostituzione:
z(λy.wy)λz.((λx.yx)xz) [yz/x,yz/w]
Esercizio 15
Dire qual e' il risultato della seguente sostituzione:
((λy.xy)(λz.y(λy.x)))[xyz/x]
Esercizio 16
Dire qual e' il risultato della seguente sostituzione:
((λy.yy)y(λy.y(λy.y)))[λy.zy/y]
Esercizio 17
Qual e' il risultato delle seguenti sostituzioni?
- λy.x(λx.x)[λy.yx/x]
- y(λz.xz)[λyzy.x/x]
- λy.y(λz.xz)[(λz.y)/(λz.xz)]
Esercizio 18
Qual e' il risultato della seguente sostituzione?
((λw.(xw))(λy.(yx)))[λx.(w(xy))/x]
Esercizio 19
Eseguire le seguenti sostituzioni:
- (λz.z)[( (λy.(xy))[wy/x] )/z]
- (λx.(λz.(xy)))[( (λy.(xy))[wy/x] )/z]
- ((λy.xy)(λz.y(λy.x)))[xyz/x]
Esercizio 20
Qual e' il risultato delle seguenti sostituzioni? Quali sono gli insiemi delle
variabili legate e libere dei termini ottenuti?
- xyy[x/y]
- (λx.zλz.yλy.xyz) [zy/x,xz/y]
Esercizio 21
Qual e' la condizione che deve essere necessariamente soddisfatta per poter correttamente
effettuare una sostituzione M[N/x] ?
Perche' tale condizione e' necessaria?
Esercizio 22
Eseguire le seguenti sostituzioni:
-
(λx.yx)[yz/x]
-
(λy.xy)[yz/x]
-
(λz.(λx.yx)xz)[zx/x]
Esercizio 23
Fornire la definizione esplicita dell'insieme di tutti i lambda-termini
in forma normale (descrivere, in modo ricorsivo, la forma che deve
avere un termine in forma normale).
Soluzione.
Esercizio 23.5
Qual e', se esiste, la forma normale del seguente termine? (\x.yy)((\z.z)x))
Esercizio 24
Trovare la forma normale di
(λxxxx.xx)(λx.xx)(λx.x)y((λx.x)x)
Soluzione.
Esercizio 25
Trovare la forma normale di
(λx.((λy.z)x))((λx.xx)(λx.xx))
Esercizio 26
Trovare la forma normale di
(λx.((λy.z)x))((λx.xx)(λx.xx))
Dire inoltre se questo termine e'
fortemente normalizzabile.
Esercizio 27
Qual e' la formal normale del seguente termine?
((λw.(xw))(λy.(yx)))[λx.(w(xy))/x]
Qual e' l'insieme delle sue variabili libere? e quale quello delle
sue variabili legate?
Esercizio 28
Fornire un lambda-termine normalizzabile il cui insieme di variabili
libere sia {x, y}, e tale che l'insieme delle variabili libere della
sua forma normale sia {x, y, z}.
Soluzione.
Esercizio 29
Fornire un lambda termine che si riduca a forma normale in due passi
di riduzione. Inoltre tale termine deve avere {x, y, z} come insieme
di variabili libere, mentre le variabili libere della sua forma normale
dovranno essere {x, y}.
Soluzione.
Esercizio 30
Portare in forma normale, se esiste, il seguente lambda-termine:
(λx.((λz.zwz)(((λxyx.y)(λx.y)(λy.x))((λx.xx)(λy.yyy)))))t
Soluzione.
Esercizio 31
Qual e' la forma normale, se esiste, del seguente lambda-termine?
(λx.xxy)(λxy.xyy)
Soluzione.
Esercizio 32
Dire in quale caso e' possibile avere un lambda-termine con piu' di una
forma normale.
Soluzione.
Esercizio 33
Qual e' la forma normale, se esiste, del seguente lambda-termine?
(λxy.yx)(λxy.x(yy))(λx.xz(λy.yy))
Soluzione.
Esercizio 34
Qual e' la forma normale del seguente termine?
((λw.(xw))(λy.(yx)))[λx.(w(xy))/x]
Qual e' l'insieme delle sue variabili libere? e quale quello delle
sue variabili legate?
Esercizio 35
Dire se il seguente termine possiede forma normale ed eventualmente fornirla insieme
ai vari passi di riduzione:
(λxxx.((λxx.x)(xx)(λx.x)))x(xx)
Soluzione.
Esercizio 36
Dire in quale caso e' possibile avere un lambda-termine con una sola
forma normale.
Soluzione.
Esercizio 37
Fornire un algoritmo di semidecisione per la proprieta' di avere forma normale.
Perche' non puo' esistere un algoritmo di decisione?
Soluzione.
Esercizio 38
Dimostrare che se un termine M contiene Omega ( (λx.xx)(λx.xx) ) come
sottotermine proprio, allora non e' normalizzabile (non possiede forma normale).
Soluzione.
Esercizio 39
Enunciare e dimostrare il Corollario di Unicita' della forma
normale.
Esercizio 40
Fornire la definizione di alfa-conversione. Qual e' il motivo per introdurre
tale nozione nel lambda-calcolo?
Esercizio 41
Cosa si intende per "consistenza" di una teoria? La teoria della
beta-conversione e' consistente? Perche'? E la teoria della
alfa-conversione?
Esercizio 42
Dimostrare la consistenza (consistency) della teoria della beta-conversione
come corollario del teorema di Church-Rosser.
Esercizio 43
Fornire un lambda termine che sia normalizzabile, ma a partire dal quale esiste
anche una sequenza infinita di beta-riduzioni.
Esercizio 44
Perche' il termine
(λx.xx)((λy.y)z);
e' un controesempio al fatto che la proprieta' del diamante non vale per la
relazione di beta-riduzione ad un passo?
Esercizio 45
Fornire dei lambda termini M1 e M2 tali che M1 si puo' ridurre in piu' passi a M2,
ma non si puo' ridurre ad M2 con un passo di beta riduzione parellela (=>).
Esercizio 46
Dimostrare con un esempio che per la relazione di beta riduzione ad un passo non
vale la proprieta' del diamante (diamond property).
Esercizio 47
Dimostrare che la relazione di beta-riduzione parallela (=>) non e'
transitiva.
Soluzione.
Esercizio 48
Dimostrare che (λx.xx)(λx.xx) non e' beta-convertibile a
(λx.xx)(λx.xxx).
Soluzione.
Esercizio 49
Dare la definizione di beta-convertibilita' e dire se i termini
(IΩ)((Iy)I) e
Ω(y(II))
sono beta-convertibili, dove I e' λx.x e Ω
e' (λx.xx)(λx.xx)
Esercizio 50
Il termine λx.((yy)((λz.z)x))
e' beta-eta-convertibile a (yy)? Perche'?
Esercizio 51
I termini (λx.λy.(xλz.z))λa.a
e
(λy.y)λb.λz.z sono beta-convertibili? Perche'?
Esercizio 52
I seguenti termini sono beta-convertibili? Giustificare la
risposta.
( λy.y((λx.xx)(λx.xx)) )(λz.z)
(λx.xx)(λx.xx)
Esercizio 53
Ricordiamo che se M=N allora e' possibile derivarlo a partire dall'assioma
beta e dalle regole di inferenza che dicono che la beta-conversione e' una
congruenza.
-
Dimostrare, per induzione sulla dimensione della prova formale, che per termini
M ed N tali che
M=N, abbiamo che M[P/x]=N[P/x] per qualsiasi termine P.
-
Dimostrare che se M=N allora P[M/x]=P[N/x] per qualsiasi P.
Esercizio 54
L'assioma eta non e' derivabile nella teoria della beta conversione. Comunque,
per ogni termine M beta-convertibile ad una lambda-astrazione, abbiamo che
λx.Mx = M, se x non appartiene alle variabili libere di M.
Perche'?
Questa soluzione e' sbagliata,
perche?.
Esercizio 55
Se si vuole evitare di utilizzare l'alfa-conversione oppure dover
considerare i lambda-termini uguali modulo alfa-conversione,
si puo' utilizzare la notazione di De Bruijn per i lambda-termini:
le variabili sono rappresentate da numeri, i lambda non indicano esplicitamente
quale variabile legano, ed un numero k indica che la relativa variabile e'
legata dal k-esimo lambda che si incontra a partire dal numero e procedendo
verso l'esterno del termine.
Per esempio il termine (λx.λy.λz.z(xx))w(λx.zx) e' rappresentato nella
notazione di De Bruijn con (λ.λ.λ.1(3 3))8(λ.(6 1)).
Quale problema si incontra con questa notazione quando eseguiamo una beta
riduzione? come si puo' risolvere?
Esercizio 55
I seguenti termini sono o no beta-riducibili ad una hnf?
Y
Y not
K == λxy.x (Quindi K non è altro che true!)
Y I
x omega
Y(K x)
n
Soluzione.
Esercizio 56
Discutere brevemente in che modo la proprieta' del diamante per la relazione di
beta-riduzione parallela ( => ) e' utilizzata nella dimostrazione del teorema
di Church-Rosser.
Esercizio 57
Enunciare il teorema di Church-Rosser.
Cos'e' la proprieta' del diamante per una relazione?
Fornire un esempio che mostri che per la relazione di beta-riduzione ad un passo
non vale la prorpieta' del diamante.
Esercizio 58
Quali delle seguenti equazioni sono vere nella teoria della beta-conversione? Perche'?
-
(λx.λy.λz.((xz)(yz)))λu.u = (λv.(vλy.λz.λu.u))λx.x
-
(λx.λy.(xλz.z))λa.a = (λy.y)λb.λz.z
-
λx.((λx.xx)(λx.xx)) = (λx.xx)(λx.xx)
Esercizio 59
Sia => la relazione di beta-riduzione parallela e I il lambda termine λx.x
Quali delle seguenti relazioni sono vere? Perche'?
-
(II)(II) => II
-
(II)(II) => I
-
IIII => III
-
IIII => I
Soluzione.
Esercizio 60
Considerate i seguenti termini
Se applicati a numerali di Church calcolano la stessa funzione sui naturali?
-
Se si, quale? Sono termini beta-convertibili?
Perche', intuitivamente, pur calcolando la stessa funzione non e' da ritenersi
"sconveniente" che non siano beta-convertibili?
-
Se no, quali funzioni distinte calcolano?
Sono termini beta-convertibili?
Perche', intuitivamente, pur calcolando funzioni distinte non e' da ritenersi
"sconveniente" che siano beta-convertibili?
Esercizio 61
Dire se i due seguenti termini sono beta-convertibili.
(DDD)((λx.xxx)D)
((λy.yyy)D)(DDD)
dove D e' il termine λy.yy
Soluzione.
Esercizio 62
Supponiamo di voler definire nel lambda-calcolo un termine J che servisse
a confrontare nomi di variabili. J dovrebbe avere il seguente
comportamento: per ogni coppia di variabili distinte y e z, Jyz -->> false,
mentre, per ogni variabile x Jxx -->> true, dove true e false
sono i lambda termini che rappresentano i valori di verita'.
Perche' un termine con queste caratteristiche non e' definibile nel lambda-calcolo?
(Aiutone: all'interno di un termine, un sottotermine della forma Jxy potrebbe
diventare Jxx dopo una qualche beta riduzione).
Soluzione.
Esercizio 63
Dire se, e perche', i due seguenti lambda-termini sono beta-convertibili.
(DDDx)((λx.xxxy)D)
((λx.xxxy)D)(DDDx)
dove D e' il termine λy.yy
Soluzione.
Esercizio 64
Supponete che, nella definizione della beta-riduzione parallela "=>",
la clausola
(λx.M)N => M'[N'/x] if M => M' and N => N'
venga sostituita semplicemente con
(λx.M)N => M[N/x]
Questo dovrebbe causare la perdita' della proprieta' del diamante per la
relazione "=>", e questo fatto sarebbe mostrato dal termine
(λy.((λx.xx)(Ia)))I
E' vero? motivare la risposta.
Soluzione.
Esercizio 65
Dato un lambda-termine M, l'insieme { N | esiste P. M => P e P => N }
e' ricorsivo?
la relazione =>
e' la beta-riduzione parallela usata nella dimostrazione del teorema di Confluenza.
Soluzione.
Esercizio 66
Sia (-)* la funzione utilizzata nella dimostrazione della
proprieta' del diamante della beta-riduzione parallela in 0 o piu' passi (=>).
Si consideri l'insieme { M | (M)* non contiene beta-redessi}.
Tale insieme e' ricorsivo? Perche'?
Soluzione.
Esercizio 67
Considerate i due seguenti termini: λnfx.f(nfx) e λnfx.nf(fx)
Se applicati a numerali di Church calcolano la stessa funzione sui naturali?
Se si, quale? Dimostrarlo formalmente. Sono termini beta-convertibili?
Perche', intuitivamente, pur calcolando la stessa funzione non e' da ritenersi
"sconveniente" che non siano beta-convertibili?
Se no, quali funzioni distinte calcolano? Dimostrarlo formalmente.
Sono termini beta-convertibili?
Perche', intuitivamente, pur calcolando funzioni distinte non e' da ritenersi
"sconveniente" che siano beta-convertibili?
Soluzione.
Esercizio 68
Dimostrare che se P -->beta Q
allora FV(Q) e' un sottoinsieme di FV(P).
Soluzione.
Esercizio 69
Dire se, qualsiasi sia k, l'insieme
{M | M e' normalizzabile e ogni sequenza di riduzione che arriva alla forma normale
e' lunga almeno k}
e' chiuso per beta-conversione. Giustificare la risposta.
Soluzione.
Esercizio 70
Spiegare perche' talvolta, prima di eseguire una beta-riduzione,
occorra rinominare le variabili legate (della lambda astrazione).
In tali casi, si riuscirebbero ad evitare problemi se si operasse invece
sulle variabili dell'argomento della beta riduzione? Motivare.
Esercizio 71
Trovare tre termini M,P e Q,
tali che M contiene x e y tra le sue variabili libere e tali che
M[P/x,Q/y] sia diverso da M[P/x][Q/y]
Esercizio 72
Fornire la definizione formale (o al limite quella informale) della
funzione (-)* da lambda-termini a lambda-termini.
Descrivere in quale punto si utilizza nella dimostrazione del Teorema
di Confluenza per il lambda-calcolo.
Esercizio 73
Dimostrare che il lambda-termine
(λx.xxx)(λx.xxx)
non e' normalizzabile.
Soluzione.
Esercizio 74
Dimostrare che
(λx.xy)(λy.y) = (λyz.(λx.x)z)xy
Soluzione.
Esercizio 75
Dimostrare che
Y(Y(YY)) = (YY)((YY)(Y(YY))).
Soluzione.
Esercizio 76
Quali sono i punti fissi del seguente lambda termine?
λx.x
Qual'e' quello che si ottiene attraverso l'operatore di punto fisso Y?
Esercizio 77
Dimostrare che (λx.xx)(λx.xx) non e' beta-convertibile a
(λx.xx)(λx.xxx).
Soluzione.
Esercizio 78
Dimostrare che non puo' esistere alcun lambda termine F tale che, per
qualsiasi M ed N, F(MN) = M.
Soluzione.
Esercizio 79
Dare un controesempio che mostri che, se vale che per ogni P MP = NP,
questo non implica che
M = N.
Aiutone: C'entra la nozione di estensionalita' e quindi l'assioma di eta-conversione.
Esercizio 80
Dare la definizione di lambda-definibilita' di funzioni sui numeri
naturali.
Dimostrare che la funzione successore appartiene alla classe di funzioni lambda-definibili
e che tale classe e' chiusa per composizione.
Esercizio 81
Scrivere esplicitamente il lambda-termine che rappresenta la
funzione prodotto quando questa e' definita ricorsivamente a
partire dalla funzione somma : x*y = if (x=0) then 0 else (y + (x-1)*y).
Soluzione.
Esercizio 81.5
Qual e' la principale differenza tra il comportamento
dell'operatore di punto fisso di Church Y e quello di Turing Θ ?
Esercizio 82
Qual'e' la funzione rappresentata dal seguente lambda-termine?
Y(λf.λx.if x=0 then 1 else if x=1 then 1 else f(x-2) )
Soluzione.
Esercizio 83
Scrivere esplicitamente il lambda-termine che rappresenta la funzione prodotto
quando questa e' definita ricorsivamente a partire dalla
funzione somma : x*y = if (x=0) then 0 else (y + (x-1)*y).
Si supponga di avere gia' i lambda-termini if, add, iszero, pre e, crepi l'avarizia, Y.
Esercizio 84
Fornire la definizione di funzione lambda-definibile.
Dimostrare che la funzione successore sui numeri naturali e' lambda-definibile.
Esercizio 85
Qual e' la funzione su numeri naturali lambda-definita dal seguente lambda-termine?
Y(λf.λnm.if(iszero n) m (if (iszero m) n (succ (f (pre n) (pre m)))) )
dove i lambda termini if, add, iszero, succ, pre
sono la lambda-rappresentazione dell'if-then-else, la somma, il predicato vero su 0 e falso
sugli altri numeri, il successore ed il predecessore.
Soluzione.
Esercizio 86
Supponendo di avere gia' definito nel lambda calcolo le funzioni succ (successore)
e mult (moltiplicazione), definire la funzione sqr (quadrato).
Supponendo poi di avere anche definito la funzione cons, il numerale di Church zero
e l'operatore di punto fisso Y,
definire i lambda-termini corrispondenti
alla lista infinita formata da tutte x,
alla lista infinita formata dai quadrati di tutti i naturali.
possibile aiutino: definire, tramite Y, la funzione che, preso un naturale n restituisca
la lista infinita dei quadrati dei naturali da n in poi.
Mostrare qualche passo di riduzione dei termini cosi' definiti.
Soluzione.
Esercizio 86.5
Cosa rappresenta il seguente termine?
(Y(λf.λn.cons (mult
2 n) (f (succ n))) )
0
Esercizio 87
Il seguente lambda-termine e' in head-normal form? Se si, possiede altre head-normal forms? Quali?
Se no, possiede una head-normal form?
λxy.((λyx.x(yy))z(λz.zz))
Un lambda-termine puo' avere piu' di una head-normal form?
Se no, quale teorema ce lo garantisce? Se si,
fornire un lambda-termine con piu' di una head-normal form.
Come si puo' interpretare il fatto che un termine possieda una head-normal form?
Soluzione.
Esercizio 88
Mostrare come e a cosa si riduce il numerale di Church c3
applicato a c2.
Scrivere esplicitamente
un termine la cui forma normale sia il numerale di Church c10000000000
Esercizio 89
Quali sono i lambda-termini che NON ammettono punto fisso?
Giustificare la risposta.
ESERCIZI REDUCTION STRATEGIES
Esercizio 1
Cos'e' una strategia di riduzione?
Esercizio 2
Cosa si intende per strategia di riduzione Call-by-value?
Esercizio 3
Dimostrare che le strategie di riduzione leftmost-outermost e
lazy formalizzate negli appunti del corso sono deterministiche.
Soluzione.
Esercizio 4
Dare la definizione di strategia di riduzione, strategia di riduzione call-by-value,
strategia di riduzione call-by-name, strategia leftmost-outermost.
La strategia leftmost-outermost e' call-by-value o call-by-name ?
Esercizio 5
Fornire degli assiomi e delle regole che definiscano nel lambda-calcolo
la strategia di riduzione rightmost-innermost (quella che in un termine
seleziona il redex piu' interno e piu' a destra).
Soluzione.
Esercizio 6
Fornire un controesempio che mostri che la strategia leftmost-outermost
non e' in genere ottimale (non permette cio' di raggiungere la
forma normale, se esiste, con il minimo numero di passi)