Esercizi sui Modelli Computazionali
(N.B.: dall'A.A. 2015-16 il modello delle URM non e' in programma)
Esercizio 1
Progettare una macchina a stati finiti che manda in output 1 quando esattamente due degli
ultimi 3 input sono a 1. Si assume come input una linea seriale ad 1 bit.
Soluzione.
Esercizio 2
Progettare un controller per un distributore automatico che accetta tre tipi di monete di
valore 5,10 e 25, rispettivamente. La merce viene erogata al raggiungimento del valore 20.
Il distributore prevede un resto massimo di una moneta da 5 e di una da 10.
Soluzione.
Esercizio 3
Fornire un automa a stati finiti che descriva il comportamento di un dispositivo
che controlli
un parcheggio con due posti macchina dotato di una sbarra al suo
ingresso ed un'uscita (sempre aperta) diversa dall'ingresso.
Ci sono anche delle cellule fotoelettriche all'ingresso ed all'uscita del
parcheggio che permettono di sapere se una
macchina ha attraversato un passaggio.
------------------------------
| |
+ | | +
\\
----> \\ ------->
\\
+ | | +
| |
------------------------------
Il dispositivo deve far abbassare la sbarra quando il parcheggio e' completo.
Soluzione.
Esercizio 4
In casa avete lo
scaldabagno e la lavatrice, ma a causa di un impianto difettoso, non potete
utilizzarli contemporaneamente. Fornire il diagramma degli stati di un automa a st
ati finiti che descriva il comportamento di un dispositivo che,
opportunamente collegato agli interruttori di tali elettrodomestici, impedisca
di utilizzarli entrambi nello stesso momento (se la lavatrice e' accesa allora
accendere lo scaldabagno non ha alcun effetto e viceversa; non ha alcun effetto
anche accendere contemporaneamente tutti e due).
Soluzione (non testata).
Esercizio 5
In casa avete un sistema di cellule fotoelettriche che invia un segnale che
indica se siete in casa o no; inoltre indica anche se siete in bagno o no.
Descrivere, attraverso un automa a stati finiti, il comportamento di un dispositivo che che invii un segnale di accensione o
spegnimento alla segreteria telefonica. La segreteria va accesa se siete
fuori casa e spenta se siete dentro. Inoltre quando siete in casa deve
accendersi quando siete in bagno.
Esercizio 6
Avete organizzato una mostra su "I transistor". Il materiale e' esposto in tre sezioni:
Sezione 1: i transistor medioevali -- Sezione 2: i transistor nel rinascimento --
Sezione 3: i transistor nella Germania dell'800.
Per far seguire un ordine nella visita del materiale della mostra, all'ingresso
mettete un cartello che spiega che la Sezione 2 si puo' visitare solo se si e' appena
visitata la Sezione 1 o la Sezione 3
e che la Sezione 3 si puo' visitare solo se si e' appena visitata la Sezione 2.
Si puo' uscire dalla mostra quando si vuole.
Per dare a tutti la tranquillita' necessaria per meditare sulle meraviglie della mostra,
supponiamo che questa sia visitata da un unico
visitatore alla volta (sara' il portiere a preoccuparsi che questo vincolo sia soddisfatto).
Per esser sicuri che i visitatori seguano strettamente quel che avete scritto nel cartello,
mettete
un sistema di cellule fotoelettriche che invia le seguenti informazioni:
- Il visitatore e' nella Sezione1
- Il visitatore e' in Sezione2
- Il visitatore e' in Sezione3
- Non c'e' alcun visitatore
Utilizzando le informazioni che arrivano dal sistema di fotocellule volete costruire
un dispositivo che con il suo output controlli l'accensione di un altoparlante che
diffonde la seguente registrazione: "Ignorantone! non hai letto il cartello all'ingresso?!?".
La registrazione andra' diffusa non appena il visitarore non rispetta le indicazioni del cartello.
Verra' interrotta non appena il visitatore ricomincia corretamente il giro oppure esce.
Fornire l'automa a stati finiti che descriva il comportamento del dispositivo
che volete costruire.
Si suppone che il passaggio da una sezione all'altra della mostra avvenga istantaneamente
(senza passaggi intermedi, per intenderci) e che non esistano vincoli fisici che impediscano
agli ignorantoni di spostarsi tra tutte le varie sezioni contravvenendo alle disposizioni del cartello.
Soluzione.
Esercizio 7
Vogliamo costruire un giochino elettronico che ci permetta di giocare
alla morra cinese (quella del "sasso", "forbice" e "foglio", per intenderci)
premendo dei pulsanti anziche' fare sconvenienti gesti con le mani e che possa
permettere ai giocatori di fare la loro mossa senza che questa sia necessariamente
simultanea a quella dell'avversario.
Ogni giocatore ha tre pulsanti ("sasso", "forbice" e "foglio"). Quando
uno di questi viene premuto, premerne un'altro non ha alcun effetto
finche' l'altro giocatore
(che ovviamente non puo' vedere i pulsanti dell'altro) non fa la sua scelta.
A questo punto il sistema indica
con un breve segnale luminoso il risultato (vittoria giocatore 1,
vittoria giocatore 2 o parita') e il gioco puo' continuare.
La meccanica dei tasti e' tale che non si riescano a premere due o tre tasti insieme.
Fornire l'automa a stati finiti che descrive il comportamento del nostro giochino.
Nel caso la stesura di tutti i possibili ingressi ed uscite sugli archi risultasse
eccessivamente pesante, scriverne alcuni significativi e spiegare brevemente
cosa manca.
Soluzione.
Esercizio 8
Descrivere una macchina di Turing che riconosca il linguaggio delle stringhe
palindromi sull'alfabeto {a,b}.
Esercizio 9
Descrivere una macchina di Turing che, preso in input il numero naturale n
(rappresentato in binario), restituisca 2*n.
Esercizio 10
Descrivere una macchina di Turing che calcoli la funzione divisione intera per 2
(rappresentando i numeri in binario)
Esercizio 11
Descrivere una macchina di Turing che calcoli la funzione (n mod 2)
(rappresentando i numeri in binario)
Esercizio 12
Descrivere una macchina di Turing che, preso n, restituisca n+2
(rappresentando i numeri in binario)
Esercizio 13
Fornire il programma URM che calcoli la funzione f tale che
f(0)=0 e f(x)=x-1 (se x>0)
Soluzione.
Esercizio 14
Fornire il programma URM che, presi due numeri naturali, restituisca il
massimo.
Soluzione.
Esercizio 15
Fornire il programma URM che calcoli la funzione somma di due numeri.
Esercizio 16
Fornire il programma URM che, utilizzando la funzione somma,
calcoli la funzione prodotto.
Soluzione (by F.Vindigni)
Esercizio 17
Fornire la definizione di configurazione istantanea per il modello degli automi
a stati finiti, per le macchine di Turing e per le URM.
Fornire la definizione di passo computazionale per i tre modelli computazionali
sopra elencati.
Esercizio 18
Dimostrare il Pumping Lemma per i linguaggi regolari.
Perche' intuitivamente il Pumping Lemma ci dice che un automa a stati
finiti non e' "capace di contare"?
Esercizio 19
Cos'e' un Modello Computazionale?
Esercizio 20
Qual e' la differenza tra automi deterministici e non deterministici?
Esercizio 21
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 22
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 23
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 24
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 25
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))
Soluzione.
Esercizio 26
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 27
Riscrivere il seguente termine utilizzando il minimo numero
di parentesi secondo le convenzioni sintattiche
((xy)(λy.(λz.(z(xy)))))
Soluzione.
Esercizio 28
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 29
Definire la nozione di "Currificazione". E' una nozione applicabile al lambda-calcolo? perche'?
Soluzione.
Esercizio 30
Fornire la definizione formale di sostituzione.
Esercizio 31
Qual e' la condizione che deve essere soddisfatta affinche' sia
possibile applicare una sostituzione senza produrre "effetti
indesiderati"?
Esercizio 31.1
E' corretto affermare che il lambda-termine
λy.y(λt.λz.yt)
e' il risultato della seguente sostituzione?
λy.y(λz.xz)[ λz.y / x]
Giustificare.
Soluzione.
Esercizio 32
Eseguire le seguenti sostituzioni
-
λy.y(λz.xz)[λz.y / x]
-
x(λyx.x)[(yz)/x]
-
x(λyx.zx)[(λy.y)/x, x/z]
Soluzione.
Esercizio 33
Eseguire le seguenti sostituzioni:
-
(λx.yx)[yz/x]
-
(λy.xy)[yz/x]
-
(λz.(λx.yx)xz)[zx/x]
Esercizio 34
Eseguire la seguente sostituzione:
z(λy.wy)λz.((λx.yx)xz) [yz/x,yz/w]
Esercizio 35
Dire qual e' il risultato della seguente sostituzione:
((λy.xy)(λz.y(λy.x)))[xyz/x]
Soluzione.
Esercizio 36
Dire qual e' il risultato della seguente sostituzione:
((λy.yy)y(λy.y(λy.y)))[λy.zy/y]
Esercizio 37
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 38
Qual e' il risultato della seguente sostituzione?
((λw.(xw))(λy.(yx)))[λx.(w(xy))/x]
Esercizio 39
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 40
Qual e' la condizione che deve essere necessariamente soddisfatta per poter correttamente
effettuare una sostituzione M[N/x] ?
Perche' tale condizione e' necessaria?
Esercizio 41
Eseguire le seguenti sostituzioni:
-
(λx.yx)[yz/x]
-
(λy.xy)[yz/x]
-
(λz.(λx.yx)xz)[zx/x]
Esercizio 42
Qual e', se esiste, la forma normale del seguente termine? (\x.yy)((\z.z)x))
Esercizio 43
Trovare la forma normale di
(λxxxx.xx)(λx.xx)(λx.x)y((λx.x)x)
Soluzione.
Esercizio 44
Trovare la forma normale di
(λx.((λy.z)x))((λx.xx)(λx.xx))
Esercizio 45
Trovare la forma normale di
(λx.((λy.z)x))((λx.xx)(λx.xx))
Dire inoltre se questo termine e'
fortemente normalizzabile.
Esercizio 46
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 47
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 48
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 49
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 50
Qual e' la forma normale, se esiste, del seguente lambda-termine?
(λx.xxy)(λxy.xyy)
Soluzione.
Esercizio 51
Dire in quale caso e' possibile avere un lambda-termine con piu' di una
forma normale.
Soluzione.
Esercizio 52
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 53
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 54
Dire in quale caso e' possibile avere un lambda-termine con una sola
forma normale.
Soluzione.
Esercizio 55
Fornire un algoritmo di semidecisione per la proprieta' di avere forma normale.
Perche' non puo' esistere un algoritmo di decisione?
Soluzione.
Esercizio 56
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 57
Enunciare e dimostrare il Corollario di Unicita' della forma
normale.
Esercizio 58
Fornire la definizione di alfa-conversione. Qual e' il motivo per introdurre
tale nozione nel lambda-calcolo?
Esercizio 59
Fornire un lambda termine che sia normalizzabile, ma a partire dal quale esista
anche una sequenza infinita di beta-riduzioni.
Soluzione.
Esercizio 60
Cos'e' una strategia di riduzione?
Esercizio 61
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 62
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 63 (NO a.a.17-18)
Descrivere la funzione somma nel formalismo delle funzioni primitive ricorsive.
Successivamente, descrivere la funzione prodotto.
Esercizio 64
Dimostrare che la relazione binaria sui naturali "x e' il doppio di y"
e' una funzione ricorsiva, fornendo la sua funzione caratteristica
come URM. (Ricordiamo che una relazione binaria e' un insieme di coppie)
Esercizio 65
(a)
Che cosa si intende per "modello computazionale"?
Elencarne alcuni, descrivendoli a grandi linee.
(b)
Definire formalmente ed in dettaglio il modello computazionale delle URM.
(c)
Scrivere un programma URM che, partendo con il valore x nel primo registro (R1)
e con il valore 0 in tutti gli altri registri, termini lasciando 1 in R1 se x e' dispari
e 0 se e' pari.
(ricordiamo che Z(n) e' l'istruzione di reset, S(n) quella di incremento,
T(m,n) quella di assegnamento e J(m,n,q) quella di salto condizionato).
Commentare il codice.
Soluzione.
Esercizio 66
Definire formalmente il modello computazionale delle Macchine di Turing.
Esercizio 67
Definire una macchina di Turing che riconosca il linguaggio regolare L=aa(a+b)*b
Soluzione.
Esercizio 68 (NO a.a.17-18)
Si possono codificare le stringhe del linguaggio dell'esercizio 67 punto (b) con
numeri naturali?
Se si, mostrare brevemente come, e dire poi se la funzione caratteristica
dell'insieme dei numeri naturali corrispondenti al linguaggio L si puo' rappresentare
come funzione totale ricorsiva e perche'.
In caso contrario, fornire una stringa di L che non e' rappresentabile come numero
naturale, dimostrando poi che questo si puo' fare per ogni linguaggio regolare.
Esercizio 69
Fornire la definizione formale di Automa a stati finiti deterministico e
Automa a stati finiti non deterministico.
Esercizio 70
Discutere delle differenze tra programmazione imperativa
(imperative programming)
e funzionale (functional programming).
Esercizio 71
Definire informalmente la relazione di α-equivalenza tra
lambda-termini. Fornire la stessa definizione in modo formale.
Esercizio 72
Enunciare il teorema di Church-Rosser e dimostrare la proprieta' di unicita'
delle forme normali per il lambda-calcolo. Dedurre poi da quest'ultima la
proprieta' di consistenza per la teoria della β-equivalenza.
Esercizio 73 NO a.a.17/18
Cos'e' la Teoria della Ricorsivita'? Enunciare inoltre la Tesi di Church.
Esercizio 74 NO a.a.17/18
Definire la classe delle funzione primitive ricorsive e quella
delle funzioni parziali ricorsive.
Esercizio 75 NO a.a.17/18
Enunciare il Problema della fermata e dimostrarne l'insolubilita'.
Esercizio 76
Costruire una MT che calcoli la seguente funzione sui numeri naturali:
f(n) = n div 2
Dove div e' la divisione intera.
Soluzione.
Esercizio 77
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) )
Sottolinare inoltre i redessi (redex) presenti in tale lambda-termine.
Soluzione.
Esercizio 78
Sia add il lambda termine λnmfx.nf(mfx) che rappresenta la somma nel
lambda calcolo.
Utilizzare tale termine per calcolare 1+1, mostrando i vari passaggi nel calcolo.
Soluzione.
Esercizio 79 NO a.a.17/18
Si consideri la seguente definizione della funzione parziale ricorsiva f:
f(0,x) = P11(x)
f(y+1,x) = h(y,f(y,x),x)
dove h e' definita da
h(y,z,x) = S(P32(y,z,x))
Dire, giustificando la risposta, cosa calcola f.
Dire inoltre qual e' il valore di g(0), dove g e' definita da
g(x) = μ{y|f(y,x)=0}
Ricordiamo che la funzione di base Pkj e' definita da Pkj(n1,..,nk) = nj.
Soluzione.
Esercizio 80
Cosa si intende per "modello computazionale"?
Definire il modello computazionale delle URM.
Scrivere un programma URM che calcoli (n div 2),
dove n e' l'input e div e' la divisione intera.
Possibile soluzione.
Esercizio 81 NO a.a.17/18
Descrivere il formalismo delle funzioni primitive ricorsive e delle funzioni
parziali ricorsive.
Esercizio 82 NO a.a.17/18
Si supponga di aver definito la funzione primitiva ricorsiva f, di due argomenti,
che calcola la somma.
Si consideri quindi la seguente definizione della funzione primitiva ricorsiva g:
g(0,x) = C10(x)
g(y+1,x) = q(y,g(y,x),x)
dove q e' definita da
q(y,z,x) = f(P32(y,z,x),P33(y,z,x))
Dire, giustificando la risposta, cosa calcola g.
Si consideri inoltre la seguente definizione della funzione primitiva ricorsiva t:
t(0) = C01
t(y+1) = u(y,t(y))
dove u e' definita da
u(y,z) = g(S(P21(y,z)),P22(y,z))
Dire, giustificando la risposta, cosa calcola t.
Ricordiamo che la funzione di base Pkj e' definita da
Pkj(n1,..,nk) = nj.
Inoltre, la funzione di base costante Ckh e' definita da
Ckh(n1,..,nk) = h.
La funzione unaria di base S calcola invece il successore.
Soluzione.
Esercizio 83
Cos'e' un modello computazionale? Descrivere il modello computazionale delle Macchine di Turing.
Esercizio 84 NO a.a.17/18
Enunciare il problema della fermata (terminazione) per le macchine di Turing e
fornire la dimostrazione dell'impossibilita' della sua soluzione (nel testo di Odifreddi
si utilizzano le funzioni parziali ricorsive, ma se si considerano le macchine di Turing il ragionamento
e' lo stesso).
Esercizio 85
Descrivere una TM (transduttore) che calcola la funzione g:{a,b}* &arr; {a}* che restituisce
la stringa composta da sole a in numero uguale alle a presenti nella stringa di input.
Possibile Soluzione (by Reversengineer, Earl).
Esercizio 86
Si consideri il seguente lambda-termine:
(λw.wx)(λy.yx)
Qual e' l'insieme delle sue variabili libere? e quale quello delle sue variabili legate?
Mostrare il procedimento
per arrivare alla sua forma normale, se quest'ultima esiste.
Soluzione.
Esercizio 87
Scrivere un programma URM che calcoli (n div 2),
dove n e' l'input e div e' la divisione intera.
Soluzione.
Esercizio 88
Descrivere il modello computazionale del λ-calcolo.
Esercizio 89
Inserire le parentesi ed i lambda lasciati impliciti nel seguente termine.
Rinominare inoltre le variabili legate in modo che non ci siano due lambda che legano variabili
con lo stesso nome:
(λxxxx.x(xx)x)xxx
Soluzione.
Esercizio 90
Enunciare il Teorema di Church-Rosser e dimostrare la proprieta' di unicita' della
forma normale.
Dimostrare inoltre la consistenza del λ-calcolo.
Soluzione.
Esercizio 91
I termini
(λxxxx.xx)(λx.xx)(λx.x)y((λx.x)x)
e
(λb.λa.λc.λx.xx)(λx.xx)(λx.x)z((λw.w)x)
possono essere considerati identici? Giustificare la risposta.
Soluzione.
Esercizio 92 NO a.a.17/18
Definire brevemente, ma formalmente ,
la nozione di passo di computazione nel contesto
- degli automi a stati finiti
- delle macchinedi Turing
- del λ-calcolo
- delle URM
- del formalismo delle funzioni primitive ricorsive
- della Logica di Hoare
Soluzione.
Esercizio 93
Definire formalmente la nozione di sostituzione ed effettuare la seguente sostituzione
((λy.xy)(λz.y(λy.x)))[xyz/x]
Soluzione.
Esercizio 94
Definire formalmente la nozione di sostituzione ed effettuare la seguente sostituzione
((λy.xy)(λz.y(λy.x)))[xyz/x]
Soluzione.
Esercizio 94
Cosa si intende per Modello Computazionale?
Descrivere brevemente, ma formalmente, il Modello Computazionale del λ-calcolo.
Esercizio 95
La funzione "incremento di uno" viene rappresentata nel λ-calcolo
con il termine λn.λf.λx.nf(fx) mentre il numero
0 viene rappresentato da λg.λy.y
Calcolare nel λ-calcolo il valore che si ottiene incrementando di uno il numero zero.
Soluzione.
Esercizio 96 NO a.a.17/18
Nel modello computazionale delle funzioni parziali ricorsive,
si supponga di aver gia' definito la funzione moltiplicazione (mult).
Cosa calcola la funzione g definita nel modo seguente?
i(z,t,v) = mult( P32(z,t,v), P33(z,t,v) )
g(0,x) = C11(x)
g(y+1,x) = i(y, g(y,x), x)
Giustificare brevemente la risposta.
Soluzione.
Esercizio 97
Descrivere una Macchina di Turing capace di effettuare la somma in binario di due numeri a quattro cifre.
(Si assuma che tali numeri in input siano separati sul nastro da un carattere speciale "$").
Soluzione by Daniele Distefano (file .odt).
Esercizio 98
Fornire le definizioni formali di automa a stati finiti deterministico e non deterministico.
Esercizio 99
Si fornisca una macchina di Turing che, preso un numero intero n rappresentato
in complemento a due, restituisca la rappresentazione in complemento a due del
numero -n-1.
Giustificare il procedimento utilizzato.
Soluzione.
Esercizio 100
Cos'e' il λ-calcolo?
Definire formalmente l'insieme dei λ-termini, l'insieme delle variabili libere di un termine,
l'operazione di sostituzione e la relazione di β-riduzione.
Esercizio 101
Nel contesto del λ-calcolo,
enunciare il Teorema di Church-Rosser ed utilizzarlo per dimostrare il Corollario di Unicita'
della forma normale.
Esercizio 102
Fornire il λ-termine che rappresenta l'operatore booleano OR, in modo diretto oppure
utilizzando l'operatore IF_THEN_ELSE. In entrambi i casi, giustificare la risposta.
(Ricordiamo che l'operatore IF_THEN_ELSE si rappresenta con λz.z, il valore TRUE con λx.λy.x
e il valore FALSE con λx.λy.y).
Soluzione.
Esercizio 103
Cosa si intende per Macchina di Turing Universale? Descriverne informalmente
il comportamento.
Esercizio 104
Cos'e' un modello computazionale? Si descriva il modello computazionale delle URM.
Esercizio 105
Dimostrare che la relazione binaria sui naturali "x e' il doppio di y"
e' una relazione ricorsiva, fornendo la sua funzione caratteristica
come URM. (Ricordiamo che una relazione binaria e' un insieme di coppie)
Ricordiamo che le istruzioni delle URM sono Z(n), S(n), T(m,n) e J(m,n,q)
Soluzione.
Esercizio 106 NO a.a.17/18
Enunciare il Problema della fermata e dimostrarne l'insolubilita'.
Esercizio 107
Descrivere brevemente il modello computazionale del λ-calcolo.
Esercizio 108
Rinominare le variabili legate del seguente termine, in modo che non ci siano
due astrazioni che legano variabili con lo stesso nome.
(λx.xxy)(λxy.xyy)
Qual e' il termine che si ottiene eseguendo
due beta-riduzioni sul termine fornito?
Soluzione.
Esercizio 109
Fornire la definizione formale di Automa a Stati Finiti e la definizione formale di
linguaggio accettato da un automa.
Esercizio 110
Sappiamo di avere la funzione + tra le funzioni parziali ricorsive.
Definiamo ora
g(x) = μ{ y | +(y,x)=0 }
e definiamo anche
h(v,w) = g(+(v,w))
Consideriamo ora la seguente funzione
q(x) = μ{ y | h(y,x)=0 }
Cosa calcola g, cosa calcola h?
Qual e' il valore di q(0)?
Qual e' il valore di q(2)?
Come vengono calcolati?
Soluzione.
Esercizio 111 NO a.a.17/18
Usare il metodo di Diagonalizzazione per dimostrare che ci sono funzioni calcolabili,
da N in N, che non sono primitive ricorsive.
Soluzione.
Esercizio 112
Calcolare la forma normale (mostrando la computazione eseguita) del lambda-termine
and T T
dove
and e' λab.abF
T e' λxy.x
F e' λxy.y
Soluzione.
Esercizio 113
Calcolare la forma normale (mostrando la computazione eseguita) del lambda-termine
x(λ z.(zx)) [λt.(w(ty))/x]
Soluzione.
Esercizio 114
Il seguente λ-termine e' normalizzabile.
Mostrare tutti i passi di β-riduzione che portano alla sua forma normale.
(λx.xxy)(λxy.xyy)
Soluzione.
Esercizio 115
Descrivere brevemente le principali differenze tra linguaggi di programmazione imperativi e linguaggi di programmazione funzionali.
Esercizio 116
Definire, nel modo piu' completo possibile, la relazione di β-riduzione
del λ-calcolo.
Soluzione.
Esercizio 117
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))
Questo termine ha una forma normale? Se no, perche' e qual e' una possibile sequenza infinita di β-riduzioni a partire da questo termine? Se si, qual e' e come si ottiene?
Soluzione.
Esercizio X
Soluzione.