ESERCIZI LAMBDA CALCULUS
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
Esercizio 42
Esercizio 43
Fornire un lambda termine che sia normalizzabile, ma a partire dal quale esiste
anche una sequenza infinita di beta-riduzioni.
Esercizio 44
Cos'e' una strategia di riduzione?
Esercizio 45
Cosa si intende per strategia di riduzione Call-by-value?
Esercizio 46
Dimostrare che le strategie di riduzione leftmost-outermost e
lazy formalizzate negli appunti del corso sono deterministiche.
Soluzione.
Esercizio 47
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 48
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 49
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)
Esercizio 50-67
Esercizio 68
Dimostrare che se P -->beta Q
allora FV(Q) e' un sottoinsieme di FV(P).
Soluzione.
Esercizio 69
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
Esercizio 73
Dimostrare che il lambda-termine
(λx.xxx)(λx.xxx)
non e' normalizzabile.
Soluzione.
Esercizio 74
Cosa si intende per Principal Pair nel lambda calcolo?
Descrivere l'algoritmo di principal pair.
Esercizio 75
Enunciare il Teorema di Confluenza del λ-calcolo ed utilizzarlo per
dimostrare la proprieta' di unicita' della forma normale.
Esercizio 76
Fornire la definizione formale di sostituzione per il lambda-calcolo.
Trovare poi tre termini M,P e Q, tali che M contenga x e y tra le sue variabili
libere e tali che M[P/x,Q/y] sia diverso da M[P/x][Q/y]
Soluzione.
Esercizio 77
Definire formalmente la nozione di sostituzione nel λ-calcolo.
Effettuare la seguente sostituzione e ridurre il termine ottenuto, se possibile,
in forma normale.
((λw.(xw))(λy.(yx)))[λx.(w(xy))/x]
Soluzione.
Esercizio 78
Fornire un controesempio che mostri che la strategia leftmost-outermost non e' in genere ottimale (non permette cioe' di raggiungere la forma normale, se esiste, con il minimo numero di passi).
Soluzione.
Esercizio XX
Soluzione.
Esercizio XX
Soluzione.