Sei sulla pagina 1di 60

Esercizi di Fondamenti di Informatica

Flavio Corradini Matteo Belenchia

A.A. 2020/2021
Note
• Alcuni esercizi possono avere più di una soluzione;
• La notazione utilizzata può non sempre corrispondere con quella del docente; si
consiglia in ogni caso di usare la notazione presentata a lezione;
• Gli esercizi relativi ad esami passati sono identificati dalla sigla “FI" seguita da
una data, e.g. “FI - 20/06/2019".

1
Indice

Computabilità 5
Esercizio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Esercizio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Esercizio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Esercizio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Esercizio 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Esercizio 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Esercizio 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Esercizio 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Esercizio 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Esercizio 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Esercizio 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Esercizio 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Esercizio 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Esercizio 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Esercizio 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Esercizio 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Esercizio 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Esercizio 18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Esercizio 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Esercizio 20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Esercizio 21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Esercizio 22 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Appendice - Insiemi di indici . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

Macchine di Turing 24
Esercizio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Esercizio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Esercizio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Esercizio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Esercizio 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Esercizio 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

Dimostrazioni 28

2
Esercizio 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Esercizio 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Esercizio 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Esercizio 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Esercizio 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Esercizio 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Esercizio 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Esercizio 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Esercizio 9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Esercizio 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Esercizio 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Esercizio 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Esercizio 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Esercizio 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Grammatiche e Automi 32
Esercizio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Esercizio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Esercizio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Esercizio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Esercizio 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Esercizio 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Esercizio 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Esercizio 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Esercizio 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Esercizio 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Esercizio 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Esercizio 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Esercizio 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Esercizio 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Esercizio 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Esercizio 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Esercizio 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Esercizio 18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Esercizio 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Esercizio 20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Esercizio 21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Appendice - Gerarchia di Chomsky . . . . . . . . . . . . . . . . . . . . . . . . 45
Appendice - Pumping lemma per linguaggi regolari . . . . . . . . . . . . . . . 46

Il linguaggio While 47
Esercizio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Esercizio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Esercizio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

3
Esercizio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Esercizio 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Esercizio 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Esercizio 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Esercizio 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Esercizio 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Esercizio 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Esercizio 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Esercizio 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Esercizio 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Esercizio 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Esercizio 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Esercizio 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Esercizio 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Appendice - Macro disponibili . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

4
COMPUTABILITÀ

Esercizio 1
FI - 20/06/2019

Si dimostri l’esistenza o meno di una funzione totale e calcolabile f : N 2 Ñ N tale che


per ogni i e j , l’i-esima Macchina di Turing, sull’input j , si ferma se e soltanto se si
ferma entro f pi; j q passi.
Soluzione
Una funzione f totale e calcolabile con tali caratteristiche non esiste. Per dimostrare
ciò, supponiamo per assurdo che una tale funzione esista. Questa funzione per una MdT
i e un naturale j restituisce il massimo numero di passi con cui Mi converge su j , se Mi
converge su j , o un numero qualsiasi altrimenti (perché è totale). Allora si può stabilire
il seguente algoritmo per decidere il problema dell’arresto K 1 “ tpx; y q P N | Mx Ó y u:
1. Leggi x e y;
2. Calcola f px; y q;
3. Estrai il codice di Mx ;
4. Esegui Mx py q per f px; y q passi;
5. Se Mx al passo f px; y q si trova in una configurazione finale, ritorna SÍ e arresta;
6. In caso contrario, ritorna NO e arresta.
Per la tesi di Church-Turing tale algoritmo specifica una funzione che decide il problema
dell’arresto, che è assurdo, e dunque una funzione f con le caratteristiche descritte
dall’esercizio non può esistere.

Esercizio 2
FI - 23/07/2019, 21/02/2022

Studiare l’insieme:
I “ ti | Dx; y tali che 'i pxq ‰ 'i pyqu
Soluzione
L’insieme I non è decidibile. Per dimostrare ciò, invochiamo il teorema di Rice. L’in-
sieme I rappresenta la famiglia F di funzioni unarie calcolabili che non sono costanti,
cioè esistono almeno due punti x e y dove il valore di 'i differisce. Questa famiglia di
funzioni:
• non corrisponde all’insieme vuoto perché esistono funzioni unarie calcolabili che
non sono costanti, per esempio la funzione g : N Ñ N; g pxq “ x ` 1. Quindi
F ‰ H;

5
• non corrisponde all’insieme di tutte le funzioni calcolabili unarie C1 , perché esisto-
no funzioni unarie calcolabili costanti, per esempio la funzione h : N Ñ N; hpxq “
0. Quindi F ‰ C1 .
Quindi per il teorema di Rice I non è decidibile.
Dimostriamo ora la semidecidibilità di I descrivendo un algoritmo che accetti tutti e
soli gli elementi di I :
1. Leggi i;
2. Estrai il codice della MdT Mi che calcola 'i ;
3. Imposta un contatore c1 “ 0 tale che c1 “ x1 pc1 q; 2 pc1 qy e un contatore c2 “ 0
tale che c2 “ x1 pc2 q; 2 pc2 qy
4. Ottieni x “ 1 pc1 q e n “ 2 pc1 q;
5. Esegui Mi pxq per n passi;
6. Se Mi è in una configurazione finale salva il suo output in una variabile m1 ;
7. Altrimenti incrementa c1 di una unità e vai al passaggio 4;
8. Ottieni y “ 1 pc2 q e n “ 2 pc2 q;
9. Esegui Mi py q per n passi;
10. Se Mi è in una configurazione finale il suo output è diverso da m1 ritorna SÍ e
arresta;
11. Altrimenti incrementa c2 di una unità e vai al passaggio 8;
Per la tesi di Church-Turing tale algoritmo descrive una funzione calcolabile che accetta
l’insieme I , dunque I è semidecidibile.

Esercizio 3
FI - 13/09/2019

Sia data una funzione calcolabile f : N Ñ N . Quali sono le proprietà di decidibilità


e semidecidibilità del codominio di f , Codpf q? Esistono funzioni f tali che Codpf q è
decidibile?
Soluzione
Il codominio di una funzione f è un insieme semidecidibile. Infatti si ha che un insieme
L è semidecidibile se e solo se L è vuoto o L coincide con l’immagine di una funzione
totale calcolabile. Quindi nel caso f sia una funzione sempre indefinita con codominio
vuoto, la semidecidibilità del suo codominio è trivialmente dimostrata.
Invece, nel caso di f con codpf q ‰ H, per dimostrarne la semidecidibilità dobbiamo
prima definire una funzione totale calcolabile g che lo enumeri. Per fare ciò, dato che

6
codpf q ‰ H, fissiamo un elemento a P codpf q. Consideriamo poi i numeri naturali n
come una codifica di coppie di numeri naturali tramite una funzione totale calcolabile
x¨; ¨y : N2 Ñ N in modo che:
n “ x1 pnq; 2 pnqy
per opportune funzioni 1 ; 2 : N Ñ N.
Per ipotesi abbiamo che f è calcolabile, quindi esiste una MdT Mf che la calcola. Allora
possiamo definire una funzione g totale calcolabile in questo modo:

f p1 pnqq Mf Ó 1 pnq in 2 pnq passi


#
se
gpnq “
a altrimenti

Si può facilmente verificare che g è calcolabile e che l’immagine di g coincide esattamente


con il codominio di f .
Sfruttando la funzione g siamo ora in grado di definire un algoritmo che accetti tutti e
soli gli elementi di codpf q:
1. Leggi n;
2. Imposta un contatore c “ 0;
3. Calcola g pcq;
4. Se g pcq “ n, ritorna SÍ e arresta;
5. Altrimenti, incrementa c di una unità e vai al passaggio 3.
Per la tesi di Church-Turing questo algoritmo è computabile da una MdT, e si può
verificare facilmente che la MdT descritta accetta solamente gli elementi di codpf q.
Quindi codpf q è semidecidibile.
In genere il codominio di una funzione non è decidibile, perché data una generica
funzione h e un numero naturale y , non è dato sapere se esiste un x tale che hpxq “ y :
la funzione g definita precedentemente non può in alcun modo garantire che y non
appaia eventualmente come risultato delle sue computazioni per un opportuno n.
Esistono però casi specifici di funzioni il cui codominio è decidibile: per esempio le
funzioni costanti o una funzione che è indefinita per ogni input.

Esercizio 4
FI - 27/09/2019

Sia dica se la funzione f tale che, per ogni x P N


#
1 se domani piove
f pxq “
0 altrimenti

7
è calcolabile.
Soluzione
La funzione f è calcolabile. Per convincersi di ciò, basta considerare che, a seconda del
meteo di domani, si ha che f “ c1 o f “ c0 , ossia f corrisponde alla funzione costante 1
o alla funzione costante 0. Sia c1 che c2 sono funzioni trivialmente calcolabili. Quindi la
MdT che computa f è un elemento di un insieme composto da due elementi: una MdT
M1 che restituisce 1 per ogni input e una MdT M0 che restituisce 0 per ogni input,
tuttavia non è noto quale delle due MdT sia quella che computi f .

Esercizio 5
FI - 07/02/2020

Studiare l’insieme:
I “ tx | Dy tali che 'x pyq “ 5u
Soluzione
L’insieme I non è decidibile. Per dimostrare ciò, invochiamo il teorema di Rice. L’in-
sieme I rappresenta la famiglia F di funzioni unarie calcolabili tali che 5 P Impf q.
Questa famiglia di funzioni:
• non corrisponde all’insieme vuoto perché esistono funzioni unarie calcolabili tali
che 5 fa parte del loro codominio, per esempio la funzione g : N Ñ N; g pxq “ 5x
per x “ 1. Quindi F ‰ H;
• non corrisponde all’insieme di tutte le funzioni calcolabili unarie C1 , perché esi-
stono funzioni unarie calcolabili tali che 5 non fa parte del loro codominio, per
esempio la funzione h : N Ñ N; hpxq “ x ` 6. Quindi F ‰ C1 .
Quindi per il teorema di Rice I non è decidibile.
Dimostriamo ora la semidecidibilità di I descrivendo un algoritmo che accetti tutti e
soli gli elementi di I :
1. Leggi x;
2. Estrai il codice della Mdt Mx che calcola 'x ;
3. Imposta un contatore c “ 0 tale che c “ x1 pcq; 2 pcqy
4. Ottieni y “ 1 pcq e n “ 2 pcq;
5. Esegui Mx py q per n passi;
6. Se Mx è in una configurazione finale con output 5 ritorna SÍ e arresta;
7. Altrimenti incrementa c di una unità e vai al passaggio 4.

8
Per la tesi di Church-Turing tale algoritmo descrive una funzione calcolabile che accetta
l’insieme I , dunque I è semidecidibile.

Esercizio 6
FI - 05/03/2020

Studiare l’insieme:
I “ tpx; yq | 'x pyq Òu
Soluzione
L’insieme I non è semidecidibile. Per prima cosa, notiamo che il suo complemento, I “
tpx; y q | 'x py q Óu è un insieme semidecidibile, corrispondente al problema dell’arresto.
In ogni caso, possiamo dimostrare la semidecidibilità di I tramite il seguente algoritmo:
1. Leggi x e y;
2. Estrai la MdT Mx che calcola la funzione 'x
3. Esegui Mx pyq;
4. Se e quando Mx termina, ritorna SÍ e arresta;
Per la tesi di Church-Turing il precedente algoritmo descrive una funzione calcolabile
che accetta tutti e soli gli elementi di I.
Per il teorema di Post, sappiamo che un insieme A è decidibile se e solo se sia A che
A sono semidecidibili. Ne consegue che siccome I è semidecidibile, se anche il suo
complemento I fosse semidecidibile allora I sarebbe decidibile, che è assurdo. Quindi
concludiamo che I non è semidecidibile.

Esercizio 7
FI - 18/06/2020

Studiare l’insieme:
I “ tpx; yq | 'x pyq “ nNomeCognome u
dove il naturale nNomeCognome corrisponde alla codifica (nella biezione tra naturali e
stringhe su un dato alfabeto) del nome e cognome del candidato all’esame.
Soluzione
N.B. per le finalità dell’esame il passaggio svolto nel seguente paragrafo si può
anche saltare. Si può applicare il Th. di Rice anche direttamente.
L’insieme I non è un insieme di indici, essendo infatti un insieme di tuple px; y q.
Tuttavia si può facilmente costruire un insieme di indici

I 1 “ ti | @z P N 'i pz q “ nNomeCognome u
9
con i “ tpx; y q. In questo modo ogni tupla px; y q determina mediante una opportuna
funzione totale calcolabile l’indice i di una MdT che per ogni input svuota il proprio
nastro, scrive y e simula la x-esima MdT Mx su y . Segue dunque che i “ tpx; y q P
I 1 ðñ px; yq P I e che qualsiasi funzione che decida uno dei due insiemi può decidere
anche l’altro.
Possiamo ora applicare il teorema di Rice all’insieme I 1 , il quale rappresenta la famiglia
F di funzioni unarie calcolabili tali che per ogni input il proprio output è nNomeCognome .
Questa famiglia di funzioni:
• non corrisponde all’insieme vuoto perché esistono funzioni unarie calcolabili tali
che per ogni input il proprio output è nNomeCognome , per esempio la funzione
costante g : N Ñ N; g pxq “ nNomeCognome . Quindi F ‰ H;
• non corrisponde all’insieme di tutte le funzioni calcolabili unarie C1 , perché esi-
stono funzioni unarie calcolabili tali che nNomeCognome non fa parte del proprio co-
dominio o che comunque hanno altri elementi nel proprio codominio, per esempio
la funzione h : N Ñ N; hpxq “ nNomeCognome ` x. Quindi F ‰ C1 .
Quindi per il teorema di Rice I 1 non è decidibile e di conseguenza nemmeno I lo è.
Dimostriamo ora la semidecidibilità di I descrivendo un algoritmo che accetti tutti e
soli gli elementi di I :
1. Leggi x e y ;
2. Estrai il codice della Mdt Mx che calcola 'x ;
3. Esegui Mx py q;
4. Se Mx termina e il suo output è nNomeCognome ritorna SÍ e arresta;
5. Altrimenti while true do skip;
Per la tesi di Church-Turing tale algoritmo descrive una funzione calcolabile che accetta
l’insieme I , dunque I è semidecidibile.

Esercizio 8
FI - 01/07/2020, 20/07/2020, 07/09/2020

Dire se la funzione
se 'x p0q Ó
#
1
f pxq “
0 se 'x p0q Ò
è calcolabile.
Soluzione
La funzione f risulta essere la funzione caratteristica dell’insieme A “ tx | 'x p0q Óu, o
in altre parole, è una funzione che decide A.

10
Tuttavia, per il teorema di Rice, si ha che l’insieme A non è decidibile. La famiglia di
funzioni F delle funzioni unarie definite nel punto 0:
• non corrisponde all’insieme vuoto perché esistono funzioni unarie calcolabili de-
finite su 0, per esempio la funzione identità g : N Ñ N; g pxq “ x. Quindi
F ‰ H;
• non corrisponde all’insieme di tutte le funzioni calcolabili unarie C1 , perché esi-
stono funzioni unarie calcolabili non definite su 0, per esempio la funzione h :
N Ñ N; hpxq “ xx . Quindi F ‰ C1 .
Quindi per il teorema di Rice A non è decidibile, e di conseguenza f non è calcolabile.

Esercizio 9
FI - 28/09/2020

Studiare l’insieme:
A “ tx P N | 'x pxq “ x2 u
ovvero, dire se A e complemento di A sono ricorsivi/ricorsivamente enumerabili.
Soluzione
In questo caso non si può utilizzare il teorema di Rice, perché A non è un insieme di
indici. Per dimostrarne quindi la sua indecidibilità, proviamo a ridurre l’ insieme non
decidibile K “ tx | 'x pxq Óu all’insieme A in modo che x P K ðñ tpxq P A per una
qualche funzione totale calcolabile t.
Definiamo una funzione parziale calcolabile f : N2 Ñ N:

y2 se 'x pxq Ó
#
f px; yq “
Ò se 'x pxq Ò

Inoltre per ogni x si può definire una funzione gx : N Ñ N calcolabile tale che:

y2 se 'x pxq Ó
#
gx pyq “
Ò se 'x pxq Ò

in altre parole, gx py q calcola la funzione f px; y q dove il primo argomento x è fissato.


Dato che le (infinite) funzioni gx py q sono calcolabili, hanno un proprio indice nell’e-
numerazione di tutte le funzioni calcolabili, e tale indice si può ottenere tramite una
funzione totale calcolabile t : N Ñ N. Quindi per ogni x si ha che gx – 'tpxq
A questo punto possiamo osservare che per ogni x:

11
xPK ðñ 'x pxq Ó ðñ @y 'tpxq pyq “ y2 ùñ tpxq P A

xRK ðñ 'x pxq Ò ðñ 'tpxq Ò ùñ tpxq R A


Quindi un algoritmo che decide A ne produce uno che decide anche K : per ogni x, si
calcola tpxq e si verifica se appartiene ad A; in caso affermativo x P K . Quindi A non
è decidibile, altrimenti anche K lo sarebbe a sua volta.
Dimostriamo ora la semidecidibilità di A descrivendo un algoritmo che accetti tutti e
soli gli elementi di A:
1. Leggi x;
2. Estrai il codice della Mdt Mx che calcola 'x ;
3. Esegui Mx pxq;
4. Se Mx termina e il suo output è x2 ritorna SÍ e arresta;
5. Altrimenti while true do skip;
Per la tesi di Church-Turing tale algoritmo descrive una funzione calcolabile che accetta
l’insieme A, dunque A è semidecidibile.
Il complemento di A è l’insieme A “ tx P N | 'x pxq ‰ x2 u. Per il teorema di Post,
sappiamo che un insieme I è decidibile se e solo se sia I che I sono semidecidibili.
Ne consegue che siccome abbiamo dimostrato che A è semidecidibile, se anche il suo
complemento A fosse semidecidibile allora A sarebbe anche decidibile, che è assurdo.
Quindi concludiamo che A non è semidecidibile.

Esercizio 10
FI - 09/02/2021

Sia n un numero naturale fissato. Studiare l’insieme:

I “ tx P N | 'x pxq converge in n passiu

ovvero, dire se I è ricorsivo, ricorsivamente enumerabile o non ricorsivamente enume-


rabile.
Soluzione
In questo caso non è possibile utilizzare il Teorema di Rice perché I non è un insieme
di indici: @x P N; 'x pxq può convergere in n passi per una qualche MdT Mx che la
computa, ma si può sempre costruire una nuova MdT Mx1 che calcola la stessa funzione
di Mx ma esegue un numero arbitrario di passi in più (e.g. spostandosi sul nastro senza
cambiarne i contenuti per certo un numero di passi e poi terminando).

12
Tuttavia, avendo fissato n a un certo numero naturale, si può dimostrare la decidibilità
di I mediante il seguente algoritmo:
1. Leggi x;
2. Estrai il codice della MdT Mx che calcola 'x ;
3. Esegui Mx pxq per n passi;
4. Se Mx al passo n si trova in una configurazione finale, ritorna SÍ e arresta;
5. Altrimenti, ritorna NO e arresta.
Per la tesi di Church-Turing, tale algoritmo descrive una funzione calcolabile, quindi
l’insieme I è ricorsivo, e di conseguenza è anche ricorsivamente enumerabile (Vedi Th
3.5.1, pp. 49-50).

Esercizio 11
FI - 26/02/2021

Studiare l’insieme:
I “ tx P N | 'x pxq “ 10u
ovvero, dire se I è ricorsivo, ricorsivamente enumerabile o non ricorsivamente enume-
rabile.
Soluzione
In questo caso non si può utilizzare il teorema di Rice, perché I non è un insieme di
indici. Per dimostrarne quindi la sua semidecidibilità, proviamo a ridurre l’insieme non
decidibile K “ tx | 'x pxq Óu all’insieme I , in modo che x P K ðñ tpxq P I per una
qualche funzione totale calcolabile t.
Definiamo una funzione parziale calcolabile f : N2 Ñ N:

10 se 'x pxq Ó
#
f px; yq “
Ò se 'x pxq Ò

Inoltre per ogni x si può definire una funzione gx : N Ñ N calcolabile tale che:

se 'x pxq Ó
#
10
gx pyq “
Ò se 'x pxq Ò

in altre parole, gx py q calcola la funzione f px; y q dove il primo argomento x è fissato.


Dato che le (infinite) funzioni gx py q sono calcolabili, hanno un proprio indice nell’e-
numerazione di tutte le funzioni calcolabili, e tale indice si può ottenere tramite una
funzione totale calcolabile t : N Ñ N. Quindi per ogni x si ha che gx – 'tpxq

13
A questo punto possiamo osservare che per ogni x:

xPK ðñ 'x pxq Ó ðñ 'tpxq “ 10 ùñ tpxq P A

xRK ðñ 'x pxq Ò ðñ 'tpxq Ò ùñ tpxq R A


Quindi un algoritmo che decide I ne produce uno che decide anche K : per ogni x, si
calcola tpxq e si verifica se appartiene ad I ; in caso affermativo x P K . Quindi I non è
decidibile, altrimenti anche K lo sarebbe a sua volta.
Dimostriamo ora la semidecidibilità di I descrivendo un algoritmo che accetti tutti e
soli gli elementi di I :
1. Leggi x;
2. Estrai il codice della Mdt Mx che calcola 'x ;
3. Esegui Mx pxq;
4. Se Mx termina e il suo output è 10 ritorna SÍ e arresta;
5. Altrimenti while true do skip;
Per la tesi di Church-Turing tale algoritmo descrive una funzione calcolabile che accetta
l’insieme I , dunque I è semidecidibile.

Esercizio 12
TOC

Dimostrare con il metodo diagonale che l’insieme I “ tn P N | 'n pnq Óu non è decidibile.
Soluzione
Supponiamo per assurdo che I sia decidibile. Allora possiamo definire una funzione
f : N Ñ N tale che, per ogni n P N :

se 'n pnq Ó
#
Ò
f pnq –
0 se 'n pnq Ò

Naturalmente, se assumiamo I decidibile, questa funzione è calcolabile, e dunque esi-


ste un indice m tale che f – 'm e quindi dompf q “ domp'm q. Ma allora si ha la
contraddizione

m P domp'm q ðñ m P dompf q ðñ m R domp'm q

Segue quindi che I non è decidibile.

14
Esercizio 13
TOC

Dimostrare con il metodo diagonale che l’insieme I “ tn P N |n P Imp'n qu non è


decidibile.
Soluzione
Supponiamo per assurdo che I sia decidibile. Allora possiamo definire una funzione
f : N Ñ N tale che, per ogni n P N :

n P Imp'n q
#
Ò se
f pnq –
n se n R Imp'n q
Naturalmente, se assumiamo I decidibile, questa funzione è calcolabile, e dunque esi-
ste un indice m tale che f – 'm e quindi Impf q “ Imp'm q. Ma allora si ha la
contraddizione

m P Imp'm q ðñ m P Impf q ðñ m R Imp'm q

Segue quindi che I non è decidibile.

Esercizio 14
TOC, Concorso di ammissione al PhD in Matematica, Università di Torino

Si consideri la funzione

'n pnq ` 1 se 'n pnq Ó


#
f pnq –
Ò altrimenti

a) Dire se f è calcolabile
b) Dire se esiste una estensione di f totale calcolabile
Soluzione
a) La funzione f è calcolabile. Per dimostrare ciò, invochiamo la tesi di Church-
Turing stabilendo il seguente algoritmo per calcolare f :
1) Leggi n;
2) Recupera il codice dell’ n-esima Macchina di Turing Mn , la quale calcola 'n ;
3) Calcola 'n pnq eseguendo Mn pnq;
4) Ritorna 'n pnq ` 1 e arresta.
Si noti che, se n non fa parte del dominio di 'n , la MdT che esegue il precedente
algoritmo diverge al passo 3 come stabilito da f pnq nel caso che 'n pnq Ò.

15
b) Per rendere f 1 una estensione totale di f dobbiamo definirla in modo che resti-
tuisca un valore anche nel caso che 'n pnq Ò

' pnq ` 1 se 'n pnq Ó


#
f 1 pnq “ n
a altrimenti

Tuttavia qualsiasi valore venga usato, non esiste una estensione totale calcolabile
di f . Assumiamo per assurdo che f 1 sia calcolabile ed esista un indice m tale che
f 1 “ 'm . Allora si ha la contraddizione:
'm pmq “ f 1 pmq “ 'm pmq ` 1
Quindi f 1 non è calcolabile come non lo è qualsiasi altra estensione totale di f .

Esercizio 15
TOC, Università di Leeds - 01/1998

Si consideri la funzione totale f


' x p xq ` 1 se 'x è totale
#
f pxq “
0 altrimenti

a) Dimostrare che f non è calcolabile


b) Dedurre che l’insieme T ot “ tx P N | 'x è totale u non è decidibile.
Soluzione
a) Assumiamo per assurdo che f sia calcolabile ed esista un indice m tale che f “ 'm .
Allora, considerando che f è totale, si ha la contraddizione:

'm pmq “ f pmq “ 'm pmq ` 1


Quindi f non è calcolabile.
b) Assumiamo per assurdo che l’insieme T ot sia decidibile. Quindi esiste una Mac-
china di Turing che può decidere, dato un numero naturale x, se la funzione 'x è
totale o meno. Segue che la funzione g

1 se 'x è totale
#
gpxq “
0 altrimenti

è calcolabile.
Ma allora è possibile stabilire un algoritmo che calcoli f :
1) Leggi x;
2) Calcola g pxq;

16
3) Se g pxq “ 1, allora ritorna 'x pxq ` 1 e arresta;
4) Se g pxq “ 0, allora ritorna 0 e arresta.
e dunque f è calcolabile, che è assurdo. Quindi T ot non può essere decidibile.

Esercizio 16
FI - 22/06/2021

Studiare l’insieme:
I “ tx | Dy such that 'x pyq “ xu
ovvero, dire se I è ricorsivo, ricorsivamente enumerabile o non ricorsivamente enume-
rabile.
Soluzione
In questo caso non si può utilizzare il teorema di Rice, perché I non è un insieme di
indici. Per dimostrarne quindi la sua indecidibilità, proviamo a ridurre l’ insieme non
decidibile K “ tx | 'x pxq Óu all’insieme I in modo che x P K ðñ tpxq P I per una
qualche funzione totale calcolabile t.
Definiamo una funzione parziale calcolabile f : N2 Ñ N:

y se 'x pxq Ó
#
f px; yq “
Ò se 'x pxq Ò

Inoltre per ogni x si può definire una funzione gx : N Ñ N calcolabile tale che:

y se 'x pxq Ó
#
gx pyq “
Ò se 'x pxq Ò

in altre parole, gx py q calcola la funzione f px; y q dove il primo argomento x è fissato.


Dato che le (infinite) funzioni gx py q sono calcolabili, hanno un proprio indice nell’e-
numerazione di tutte le funzioni calcolabili, e tale indice si può ottenere tramite una
funzione totale calcolabile t : N Ñ N. Quindi per ogni x si ha che gx – 'tpxq
A questo punto possiamo osservare che per ogni x:

xPK ðñ 'x pxq Ó ðñ @y 'tpxq pyq “ y ùñ 'tpxq ptpxqq “ tpxq ùñ tpxq P Imptpxqq ðñ tpxq P I

xRK ðñ 'x pxq Ò ðñ 'tpxq Ò ùñ tpxq R Imptpxqq ðñ tpxq R I

Quindi un algoritmo che decide I ne produce uno che decide anche K : per ogni x, si
calcola tpxq e si verifica se appartiene ad I ; in caso affermativo x P K . Quindi I non è
decidibile, altrimenti anche K lo sarebbe a sua volta.

17
Dimostriamo ora la semidecidibilità di I descrivendo un algoritmo che accetti tutti e
soli gli elementi di I :
1. Leggi x;
2. Estrai il codice della Mdt Mx che calcola 'x ;
3. Imposta un contatore c “ 0 tale che c “ x1 pcq; 2 pcqy
4. Ottieni y “ 1 pcq e n “ 2 pcq;
5. Esegui Mx py q per n passi;
6. Se Mx è in una configurazione finale con output x ritorna SÍ e arresta;
7. Altrimenti incrementa c di una unità e vai al passaggio 4.
Per la tesi di Church-Turing tale algoritmo descrive una funzione calcolabile che accetta
l’insieme I , dunque I è semidecidibile.

Esercizio 17
FI - 01/07/2021

Studiare l’insieme:
I “ tx | Imp'x q “ Hu
ovvero, dire se I è ricorsivo, ricorsivamente enumerabile o non ricorsivamente enume-
rabile.
Soluzione
L’insieme I non è decidibile. Per dimostrare ciò, invochiamo il teorema di Rice. L’in-
sieme I rappresenta la famiglia F di funzioni unarie calcolabili la cui immagine è vuota,
ossia le funzioni che divergono su ogni input. Questa famiglia di funzioni:
• non corrisponde all’insieme vuoto perché esistono funzioni unarie calcolabili che
divergono su ogni input, per esempio la funzione sempre indefinita ∅ : N Ñ N.
Quindi F ‰ H;
• non corrisponde all’insieme di tutte le funzioni calcolabili unarie C1 , perché esi-
stono funzioni unarie calcolabili la cui immagine non è vuota, per esempio la
funzione g : N Ñ N; g pxq “ x ` 1. Quindi F ‰ C1 .
Quindi per il teorema di Rice I non è decidibile.
Notiamo che il complemento I “ tx | Imp'x q ‰ Hu è un insieme semidecidibile tramite
il seguente algoritmo:
1. Leggi x;
2. Estrai il codice della Mdt Mx che calcola 'x ;

18
3. Imposta un contatore c “ 0 tale che c “ x1 pcq; 2 pcqy
4. Ottieni y “ 1 pcq e n “ 2 pcq;
5. Esegui Mx py q per n passi;
6. Se Mx è in una configurazione finale ritorna SÍ e arresta;
7. Altrimenti incrementa c di una unità e vai al passaggio 4.
che descrive una funzione calcolabile secondo la tesi di Church-Turing. Dunque I è
semidecidibile. Per il teorema di Post, dato che I è semidecidibile, I deve necessaria-
mente essere un insieme non semidecidibile, altrimenti si avrebbe per assurdo che I è
un insieme ricorsivo (mentre tramite il Th. di Rice abbiamo dimostrato che non può
esserlo).

Esercizio 18
FI - 06/09/2021

Sia A Ď N un insieme e sia f : N Ñ N una funzione calcolabile. Dimostrare che se A è


ricorsivamente enumerabile allora f pAq “ ty P N | Dx P A; y “ f pxqu è ricorsivamente
enumerabile. Vale anche il contrario? Ovvero da f pAq ricorsivamente enumerabile si
può dedurre che A è ricorsivamente enumerabile?
Soluzione
• Se A è ricorsivamente enumerabile, allora esiste una funzione g:N Ñ N che
semidecide l’insieme A:

xPA
#
1 se
gpxq “
Ò altrimenti

L’insieme f pAq corrisponde all’insieme degli elementi di N che sono immagine di


f nei punti appartenenti all’insieme A. Per dimostrare che f pAq é semidecidibile,
dobbiamo specificare un algoritmo che definisca una funzione h : N Ñ N che
semidecide f pAq.
1. Leggi y ;
2. Estrai il codice della MdT Mg che calcola g e la MdT Mf che calcola f ;
3. Imposta un contatore c “ 0 tale che c “ x1 pcq; 2 pcq; 3 pcqy
4. Ottieni x “ 1 pcq, n1 “ 2 pcq e n2 “ 3 pcq
5. Esegui Mg pxq per n1 passi;
6. Se Mg non è in una configurazione finale, incrementa n di una unità e vai al
passaggio 4;

19
7. Altrimenti esegui Mf pxq per n2 passi;
8. Se Mf è in una configurazione finale con output y ritorna SÍ e arresta;
9. Altrimenti incrementa c di una unità e vai al passaggio 4.
Per la tesi di Church-Turing tale algoritmo descrive una funzione calcolabile che
corrisponde esattamente alla funzione h che cercavamo.
In alternativa, invece di utilizzare la funzione g che semidecide l’insieme A, pos-
siamo utilizzare una funzione k : N Ñ N totale calcolabile che enumera A. Tale
funzione sicuramente esiste perché abbiamo che A è ricorsivamente enumerabile.
1. Leggi y ;
2. Estrai il codice della MdT Mk che calcola k e la MdT Mf che calcola f ;
3. Imposta un contatore c “ 0 tale che c “ x1 pcq; 2 pcqy
4. Ottieni x “ 1 pcq e n “ 2 pcq
5. Esegui Mf pMk pxqq per n passi;
6. Se Mf è in una configurazione finale con output y ritorna SÍ e arresta;
7. Altrimenti incrementa c di una unità e vai al passaggio 4.
• Prendiamo come insieme A “ tx P N | 'x pxq Òu. L’insieme non è ricorsivamente
enumerabile. Prendiamo poi come funzione f : N Ñ N la funzione costante 1.
Chiaramente f pAq è un insieme ricorsivo, e di conseguenza è anche ricorsivamen-
te enumerabile. Tuttavia abbiamo per definizione che A è non ricorsivamente
enumerabile, quindi la deduzione non si può fare.

Esercizio 19
FI - 27/09/2021

Studiare l’insieme I “ ti P N | 3 P domp'i qu. E se fosse l’insieme dei numeri pari


Ď domp'i q?
Soluzione
• L’insieme I non è decidibile. Per dimostrare ciò, invochiamo il teorema di Ri-
ce. L’insieme I rappresenta la famiglia F di funzioni unarie calcolabili che sono
definite nel punto 3. Questa famiglia di funzioni:
– non corrisponde all’insieme vuoto perché esistono funzioni unarie calcolabili
che sono definite nel punto 3, per esempio la funzione g : N Ñ N

gpxq “ x
Quindi F ‰ H;

20
– non corrisponde all’insieme di tutte le funzioni calcolabili unarie C1 , perché
esistono funzioni unarie calcolabili il cui dominio non include 3, per esempio
la funzione h : N Ñ N; hpxq “ x modx . Quindi F ‰ C .
3 1

Quindi per il teorema di Rice l’insieme I non è decidibile.


Dimostriamo ora la semidecidibilità di I descrivendo un algoritmo che accetti
tutti e soli gli elementi di I :
1. Leggi i;
2. Estrai il codice della Mdt Mi che calcola 'i ;
3. Esegui Mi p3q;
4. Se Mi termina la sua esecuzione, ritorna SÍ e arresta;
Per la tesi di Church-Turing tale algoritmo descrive una funzione calcolabile che
accetta l’insieme I , dunque I è semidecidibile.
• Mentre si può facilmente verificare che l’insieme non è decidibile tramite Th. di
Rice, non si riesce a dimostrarne la non-semidecidibilità perché quando si con-
sidera il suo complemento la funzione sempre indefinita (con dominio l’insieme
vuoto) non può essere correttamente riconosciuta come appartenente all’insieme
complemento. (I numeri pari non sono un sottoinsieme dell’insieme vuoto).

Esercizio 20
FI - 15/11/2021

Studiare l’insieme I “ ti P N | 3 R Imp'i qu.


Soluzione
L’insieme I non è decidibile. Per dimostrare ciò, invochiamo il teorema di Rice. L’insie-
me I rappresenta la famiglia F di funzioni unarie calcolabili tali per cui 3 non appartiene
alla loro immagine. Questa famiglia di funzioni:
• non corrisponde all’insieme vuoto perché esistono funzioni unarie calcolabili la
cui immagine non include 3, per esempio la funzione g : N Ñ N; g pxq “ 0 Quindi
F ‰ H;
• non corrisponde all’insieme di tutte le funzioni calcolabili unarie C1 , perché esisto-
no funzioni unarie calcolabili la cui immagine include 3, per esempio la funzione
h : N Ñ N; hpxq “ x. Quindi F ‰ C1 .
Quindi per il teorema di Rice l’insieme I non è decidibile.
Notiamo che il complemento I “ ti P N | 3 P Imp'i qu è un insieme semidecidibile
tramite il seguente algoritmo:
1. Leggi i;

21
2. Estrai il codice della Mdt Mi che calcola 'i ;
3. Imposta un contatore c “ 0 tale che c “ x1 pcq; 2 pcqy
4. Ottieni x “ 1 pcq e n “ 2 pcq;
5. Esegui Mi pxq per n passi;
6. Se Mi è in una configurazione finale con Mi pxq “ 3 ritorna SÍ e arresta;
7. Altrimenti incrementa c di una unità e vai al passaggio 4.
che descrive una funzione calcolabile secondo la tesi di Church-Turing. Dunque I è
semidecidibile. Per il teorema di Post, dato che I è semidecidibile, I deve necessaria-
mente essere un insieme non semidecidibile, altrimenti si avrebbe per assurdo che I sia
un insieme ricorsivo (mentre tramite il Th. di Rice abbiamo dimostrato che non può
essere).

Esercizio 21
FI - 07/02/2022

Studiare l’insieme I “ ti | Dx P N tale che 'i pxq “ xu.


Soluzione
L’insieme I non è decidibile. Per dimostrare ciò, invochiamo il teorema di Rice. L’in-
sieme I rappresenta la famiglia F di funzioni unarie calcolabili che hanno almeno un
punto fisso. Questa famiglia di funzioni:
• non corrisponde all’insieme vuoto perché esistono funzioni unarie calcolabili con
almeno un punto fisso, per esempio la funzione g : N Ñ N; g pxq “ x. Quindi
F ‰ H;
• non corrisponde all’insieme di tutte le funzioni calcolabili unarie C1 , perché esisto-
no funzioni unarie calcolabili che non hanno punti fissi, per esempio la funzione
h : N Ñ N; hpxq “ x ` 1. Quindi F ‰ C1 .
Quindi per il teorema di Rice l’insieme I non è decidibile.
Dimostriamo ora la semidecidibilità di I descrivendo un algoritmo che accetti tutti e
soli gli elementi di I :
1. Leggi i;
2. Estrai il codice della Mdt Mi che calcola 'i ;
3. Imposta un contatore c “ 0 tale che c “ x1 pcq; 2 pcqy
4. Ottieni x “ 1 pcq e n “ 2 pcq;
5. Esegui Mi pxq per n passi;
6. Se Mx è in una configurazione finale e il suo output è x, ritorna SÍ e arresta;

22
7. Altrimenti incrementa c di una unità e vai al passaggio 4.
Per la tesi di Church-Turing tale algoritmo descrive una funzione calcolabile che accetta
l’insieme I , dunque I è semidecidibile.

Esercizio 22
FI - 07/03/2022

Sia f una funzione calcolabile. Si dica se l’insieme I “ ti | 'i “ fu è un insieme


decidibile. Si dica se l’insieme I è finito o infinito.
Soluzione
1. L’insieme I non è decidibile. Possiamo dimostrare ciò applicando il teorema di
Rice. Fissata f con arietà n, l’insieme I è l’insieme di indici della famiglia F di
funzioni n-arie calcolabili che computano la stessa funzione di f . Questa famiglia
di funzioni:
• non corrisponde all’insieme vuoto perché, dato che f è una funzione cal-
colabile, esiste sicuramente un indice j tale che 'j – f e dunque 'j P
F.
• non corrisponde all’insieme di tutte le funzioni calcolabili n-arie Cn , perché
esistono anche funzioni diverse da f , per esempio, nel caso n “ 1; f ‰ H, la
funzione g : N Ñ N; g pxq “ f pxq ` 1 è sicuramente diversa da f . Invece se
f – H, prendiamo gpxq “ 0. Quindi F ‰ Cn .
Quindi possiamo concludere che per il Teorema di Rice l’insieme I non è decidibile.
2. L’insieme I è infinito. Difatti per ogni funzione calcolabile f esistono infinite
Macchine di Turing che la computano. Per convincersi di ciò è sufficiente consi-
derare che data una MdT M che computa f (ne deve esistere almeno una dato
che f è una funzione calcolabile), è sempre possibile aggiungere nuove istruzioni
che non cambiano il suo output ma che comunque portano a nuove MdT M 1 ; M 2
con indice diverso da M .

Insiemi di indici
Un insieme A è un insieme di indici se per ogni x; y P N con 'x – 'y si ha che
x P A ðñ y P A.

23
MACCHINE DI TURING

Esercizio 1
FI - 16/12/2019, 20/07/2017, 30/01/2017

Si scriva un programma per Macchina di Turing che, ricevuto sul nastro un numero
decimale, lasci sul nastro solo l’intero della divisione del numero di ingresso per 10.
Input Output atteso
231 23
19 1
7 0
Soluzione
( q0 , [0 , 1 , ... , 9]) Ñ ( q1 , [0 , 1 , ... , 9] , +1)
( q1 , *) Ñ ( q2 , * , -1)
( q1 , [0 , 1 , ... , 9]) Ñ ( q3 , [0 , 1 , ... , 9] , +1)
( q2 , [0 , 1 , ... , 9]) Ñ ( q5 , 0 , +1)
( q3 , [0 , 1 , ... , 9]) Ñ ( q3 , [0 , 1 , ... , 9] , +1)
( q3 , *) Ñ ( q4 , * , -1)
( q4 , [0 , 1 , ... , 9]) Ñ ( q5 , * , +1)

Esercizio 2
FI - 2017

Costruire la MdT che calcola la funzione logica NOT su una sequenza binaria.
Input Output atteso
1 0
11011001 00100110
000 111
Soluzione
( q0 , 1) Ñ ( q0 , 0 , +1)
( q0 , 0) Ñ ( q0 , 1 , +1)

Esercizio 3
FI - 24/02/2017

Programmare una macchina di Turing che, dato un nastro iniziale contenente due
sequenze di A separate da una D, termina la sua esecuzione lasciando sul nastro la
sequenza che contiene il maggior numero di A.

24
Input Output atteso
AADA AA
AADAAA AAA
AADAA AA
DA A
Soluzione
( q0 , A) Ñ ( q1 , *, +1)
( q0 , D) Ñ ( q2 , D, +1)
( q1 , A) Ñ ( q1 , A, +1)
( q1 , D) Ñ ( q3 , D, +1)
( q2 , *) Ñ ( q2 , *, -1)
( q2 , D) Ñ ( q4 , *, -1)
( q2 , A) Ñ ( q5 , A, -1)
( q3 , A) Ñ ( q3 , A, +1)
( q3 , *) Ñ ( q6 , *, -1)
( q5 , D) Ñ ( q3 , D, +1)
( q6 , A) Ñ ( q6 , *, +1)
( q6 , D) Ñ ( q6 , D, +1)
( q6 , *) Ñ ( q7 , *, +1)
( q7 , *) Ñ ( q8 , A, -1)
( q7 , A) Ñ ( q7 , A, +1)
( q8 , *) Ñ ( q8 , *, -1)
( q8 , A) Ñ ( q8 , A, -1)
( q8 , D) Ñ ( q9 , D, -1)
( q9 , A) Ñ ( q9 , A, -1)
( q9 , *) Ñ ( q0 , *, +1)

Esercizio 4
FI - 22/06/2017

Durante le sue guerre in Gallia, Giulio Cesare usava un semplice cifrario per comunicare
con i suoi generali. In questo cifrario, ogni lettera era traslata di un numero fisso di
posizioni. Nel cifrario originale, questo numero era 13: si aveva dunque:
in chiaro ABCDEFGHIJKLMNOPQRSTUVWXYZ
cifrato NOPQRSTUVWXYZABCDEFGHIJKLM
Si scriva un programma per macchina di Turing che implementi un cifrario di Cesare
generalizzato. Il programma prende in ingresso un numero decimale (da 1 a 5) seguito
da una stringa su A-Z, e deve lasciare sul nastro la stessa stringa, cifrata traslando ogni
lettera del numero indicato di posizioni.

25
Input Output atteso
3ABC DEF
5BACO GFHT
1BACO CBDP
Soluzione
( q0 , 1) Ñ ( q1 , * , +1)
( q0 , 2) Ñ ( q2 , * , +1)
( q0 , 3) Ñ ( q3 , * , +1)
( q0 , 4) Ñ ( q4 , * , +1)
( q0 , 5) Ñ ( q5 , * , +1)
( q1 , [A , B , ... , Z ]) Ñ ( q1 , [B , C, ... , A], +1)
( q2 , [A , B , ... , Z ]) Ñ ( q2 , [C , D, ... , B], +1)
( q3 , [A , B , ... , Z ]) Ñ ( q3 , [D , E, ... , C], +1)
( q4 , [A , B , ... , Z ]) Ñ ( q4 , [E , F, ... , D], +1)
( q5 , [A , B , ... , Z ]) Ñ ( q5 , [F , G, ... , E], +1)

Esercizio 5
TOC, Università di Leeds - 01/1998

Programmare una macchina di Turing che calcoli hpx; y q “ x ´ y (la sottrazione tronca-
ta) utilizzando il sistema numerico unario (NB: utilizzare la notazione per cui l’output
corrisponde al numero di simboli 1 sul nastro, mentre l’input è il numero di simboli 1
meno 1, e.g: zero in input corrisponde a "1", ma in output è il nastro vuoto).
Input Output atteso
111*11 1
111*111111 *
1111*1 111
Soluzione
( q0 , 1) Ñ ( q0 , 1, +1)
( q0 , *) Ñ ( q1 , *, +1)
( q1 , 1) Ñ ( q1 , 1, +1)
( q1 , *) Ñ ( q2 , *, -1)
( q2 , 1) Ñ ( q3 , *, -1)
( q3 , 1) Ñ ( q3 , 1, -1)
( q3 , *) Ñ ( q4 , *, -1)
( q4 , 1) Ñ ( q4 , 1, -1)
( q4 , *) Ñ ( q5 , *, +1)
( q5 , 1) Ñ ( q0 , *, +1)
( q5 , *) Ñ ( q6 , *, +1)
( q6 , 1) Ñ ( q6 , *, +1)
( q6 , *) Ñ ( q2 , *, +1)

26
Esercizio 6
FI - 15/07/2021

Costruire una Macchina di Turing che preso un numero naturale ne restituisce il doppio.
Per la rappresentazione dei naturali si scelga la notazione che si ritiene più idonea.
Soluzione
Nel caso si scelga la notazione unaria, è sufficiente cancellare un 1 e raddoppiare gli
1 rimanenti (NB: utilizziamo la notazione per cui l’output corrisponde al numero di
simboli 1 sul nastro, mentre l’input è il numero di simboli 1 meno 1, e.g: zero in input
corrisponde a "1", ma in output è il nastro vuoto):
( q0 , 1) Ñ ( q1 , *, +1)
( q1 , 1) Ñ ( q2 , *, +1)
( q2 , 1) Ñ ( q2 , 1, +1)
( q2 , *) Ñ ( q3 , *, +1)
( q3 , 1) Ñ ( q3 , 1, +1)
( q3 , *) Ñ ( q4 , 1, +1)
( q4 , *) Ñ ( q5 , 1, -1)
( q5 , 1) Ñ ( q5 , 1, -1)
( q5 , *) Ñ ( q6 , *, -1)
( q6 , 1) Ñ ( q6 , 1, -1)
( q6 , *) Ñ ( q1 , *, +1)

Nel caso si scelga la notazione binaria, è sufficiente aggiungere uno zero in fondo alla
stringa di input:
( q0 , 1) Ñ ( q0 , 1 , +1)
( q0 , 0) Ñ ( q0 , 0 , +1)
( q0 , *) Ñ ( q1 , 0 , +1)

27
DIMOSTRAZIONI

Esercizio 1
FI - 20/06/2019

Enunciare formalmente e dimostrare la non calcolabilità del Problema dell’Arresto delle


Macchine di Turing.
Soluzione
Pagine 45-47.

Esercizio 2
FI - 23/07/2019, 27/09/2021, 07/03/2022

Enunciare formalmente e dimostrare l’equivalenza tra Automi a Stati Finiti Determi-


nistici e Automi a Stati Finiti non Deterministici.
Soluzione
Vedere i propri appunti, non presente sul libro.

Esercizio 3
FI - 13/09/2019

Enunciare formalmente e dimostrare il Teorema di Rice. Mostrare un esempio di


insieme e l’applicazione del Teorema di Rice.
Soluzione
Pagine 59-60.

Esercizio 4
FI - 27/09/2019

Enunciare formalmente e dimostrare il Teorema di Post. Mostrare un esempio di


applicazione del Teorema di Post.
Soluzione
Pagina 51.

Esercizio 5
FI - 07/02/2020

28
Enunciare formalmente la definizione di insieme ricorsivamente enumerabile. Si dimo-
stri che ogni insieme ricorsivo è anche ricorsivamente enumerabile. In particolare, se
non è vuoto (risp. non finito) può essere enumerato mediante una funzione calcolabile
monotona crescente (risp. strettamente crescente).
Soluzione
Pagine 49-50 e 72-74. Per definire una funzione monotona strettamente crescente nel
caso di un insieme infinito L, definiamo g : N Ñ N nella seguente maniera:

gp0q “ z rfL pz q “ 1s
gpx ` 1q “ z rfL pz q “ 1 ^ z ą gpxqs
dove  è l’operatore di minimalizzazione e fL è la funzione caratteristica dell’insieme
in questione.
Nel caso di un insieme finito non vuoto, definiamo invece una funzione monotona
crescente h : N Ñ N nella seguente maniera:

hp0q “ z rfL pz q “ 1s
x ` 1 se fL px ` 1q “ 1
#
hpx ` 1q “
hpxq se fL px ` 1q “ 0

Esercizio 6
FI - 05/03/2020

Enunciare formalmente l’esistenza della MdT Universale e darne la dimostrazione.


Soluzione Pagina 44.

Esercizio 7
FI - 18/06/2020

Si enunci e si dimostri formalmente il teorema che lega gli insiemi semidecidibili, il


dominio e il codominio delle funzioni calcolabili.
Soluzione
Pagine 49-50.

Esercizio 8
FI - 01/07/2020, 20/07/2020, 07/09/2020, 15/07/2021

Si enunci e si dimostri formalmente il pumping lemma per i linguaggi liberi dal contesto.

29
Soluzione
Pagine 89-91.

Esercizio 9
FI - 28/09/2020, 09/02/2021

Si enunci e si dimostri formalmente il Teorema di Rice.


Soluzione
Pagine 59-60.

Esercizio 10
FI - 26/02/2021, 15/11/2021

Si enunci e si dimostri formalmente il pumping lemma per i linguaggi regolari.


Soluzione
Pagine 85-86.

Esercizio 11
FI - 22/06/2021

Si elenchino caratterizzazioni degli insiemi ricorsivamente enumerabili e se ne diano le


formali dimostrazioni.
Soluzione
Pagine 49 - 51.

Esercizio 12
FI - 01/07/2021

Si enunci e si dimostri formalmente il Teorema di Kleene


Soluzione
Pagina 59.

Esercizio 13
FI - 06/09/2021, 21/02/2022

30
Enunciare i requisiti di ogni definizione di algoritmo.
Soluzione
Pagine 7-10.

Esercizio 14
FI - 07/02/2022

Enunciare e dimostrare formalmente le relazioni tra insiemi ricorsivi, insiemi ricorsiva-


mente enumerabili e insiemi non ricorsivamente enumerabili.
Soluzione
Pagine 49 - 51.

31
GRAMMATICHE E AUTOMI

Esercizio 1
FI - 20/06/2019, 15/11/2021

Dato il linguaggio L su t0; 1u˚ costituito da stringhe tali che ogni 0 ha un 1 alla sua
destra:
a) Dire a quale classe nella gerarchia di Chomsky il linguaggio L appartiene e trovare
la grammatica corrispondente.
b) Trovare l’automa che lo riconosce.
Soluzione
a) L è un linguaggio regolare (di tipo 3) generato dalla seguente grammatica regolare

G “ tN “ tS; A; B u; T “ t0; 1u; P; S u

S ÝÑ 1S | 0A | 1 | 
A ÝÑ 1S | 1

b)

Esercizio 2
FI - 23/07/2019

Sia L il linguaggio generato dalla seguente grammatica:

S ÝÑ  | aSc | SS
Dire a quale classe di linguaggi nella Gerarchia di Chomsky appartiene L. Può un
sottoinsieme infinito di L essere regolare?
Soluzione
L è un linguaggio libero dal contesto (tipo 2). Difatti la grammatica che lo genera è
di tipo 2 (se la lambda produzione turba qualcuno, si può comunque riscrivere una
grammatica equivalente dove S non appare sulla destra di nessuna produzione).
Un sottoinsieme infinito di L è per esempio il linguaggio L1 “ tpacqn | n ą 0u che è un
linguaggio regolare generato dalla seguente grammatica regolare

G “ tN “ tS; Au; T “ ta; cu; P; S u

32
S ÝÑ aA
A ÝÑ cS | c

Esercizio 3
FI - 13/09/2019

Sia L il linguaggio generato dalla seguente espressione regolare pa ` bq˚ . Scrivere


una grammatica a struttura di frase che genera lo stesso linguaggio e l’automa che
lo riconosce.
Soluzione
L è generato dalla seguente grammatica a struttura di frase

G “ tN “ tS u; T “ ta; bu; P; S u

S ÝÑ aS | bS | 
L’automa che lo riconosce è

Esercizio 4
FI - 27/09/2019

Dire a quale classe nella Gerarchia di Chomsky appartiene il linguaggio

L “ tan an | a P A; n P Nu

Soluzione
Il linguaggio genera tutte stringhe nella forma a2n per n ě 0: ; aa; aaaa; : : : . Quindi è
un linguaggio regolare (tipo 3), perché lo si può generare tramite la seguente grammatica
regolare:
G “ tN “ tS; A; B u; T “ tau; P; S u
S ÝÑ aA | 
A ÝÑ aS | a

Esercizio 5
FI - 16/12/2019

33
Si consideri la seguente grammatica G “ pVt “ ta; b; cu; Vn “ tS; X u; P; S q e le seguenti
produzioni
S ÝÑ X | 
X ÝÑ aXa | bXb | c
Svolgere ciascuno dei seguenti punti:
1. Di che tipo è la grammatica?
2. Mostrare una derivazione per “aaba”.
3. Mostrare una derivazione per “abbcbba”.
4. Sono ammesse stringhe vuote?
5. Qual è il linguaggio generato da G?
Soluzione
1. La grammatica è libera dal contesto (tipo 2).
2. S ñ X ñ aXa ñ : : : non è possibile.
3. S ñ X ñ aXa ñ abXba ñ abbXbba ñ abbcbba.
4. Sì.
5. L “ t ¨ c ¨ rev | P ta; bu˚ u Y tu

Esercizio 6
FI - 16/12/2019, 22/06/2017

Dato il seguente ASFND:


• Determinare il corrispondente ASFD;
• Definire il linguaggio riconosciuto.

Soluzione

34
Stato a b c
qS qA qC H
qA qA qC H

qC H H qCF
qF H H H
qCF H H qCF

• L “ t an bcm | n ě 0; m ą 0u

Esercizio 7
FI - 07/02/2020, 06/09/2021

Scrivere una grammatica a struttura di frase (06/09/2021: regolare) sull’alfabeto t0; 1u,
che denota il linguaggio L formato da tutte le stringhe che contengono la stringa 00
come prefisso oppure la stringa 110 come suffisso.
- Costruire l’automa a stati finiti che riconosce L.
- Definire una espressione regolare che definisce L.
Soluzione
• La grammatica a struttura di frase è la seguente: G “ tN “ tS; Au; T “
t0; 1u; P; S u
S ÝÑ 00A | A110
A ÝÑ 0A | 1A | 
La grammatica regolare, invece, è la seguente: G “ tN “ tS; A; B; C; D; E; F u; T “

35
t0; 1u; P; S u
S ÝÑ 0A | 1B
A ÝÑ 0C | 1B | 0
B ÝÑ 1D | 0F
C ÝÑ 0C | 1C | 0 | 1
D ÝÑ 1D | 0E | 0
E ÝÑ 1B | 0F
F ÝÑ 0F | 1B
• Automa deterministico:

Automa non-deterministico:

• 00 ¨ p0 ` 1q˚ ` p0 ` 1q˚ ¨ 110

Esercizio 8
FI - 05/03/2020

36
Quale tipologia di linguaggi sono generati da grammatiche con produzioni della forma:

A ÝÑ wB
B ÝÑ w
dove A e B sono simboli non terminali e w è una stringa di simboli terminali su un
dato alfabeto.
Soluzione
Linguaggi regolari (tipo 3).

Esercizio 9
FI - 18/06/2020

Dire a quale classe appartiene il linguaggio di tutte le stringhe sull’alfabeto ta; b; cu che
contengono un numero dispari di a, un numero dispari di b e un numero pari di c.
Soluzione
Il linguaggio è regolare. Per convincersi di ciò è possibile disegnare un automa a stati
finiti deterministico che lo riconosce: Si possono definire gli 8 possibili stati nella quale
la stringa si può trovare: tutte le combinazioni da "a" pari, "b" pari, "c" pari a "a"
dispari, "b" dispari, "c" dispari. Lo stato iniziale sarà lo stato con tutti simboli pari,
perché la stringa vuota rappresenterebbe tale stato, mentre lo stato finale sarebbe "a"
dispari, "b" dispari e "c" pari che è ciò che l’automa dovrebbe riconoscere. Dopo aver
definito gli stati basta tracciare i 24 archi (3 per ogni stato) per ogni possibile lettera
che può essere letta.
Questo automa si può molto facilmente convertire in una grammatica regolare, che avrà
almeno 8 simboli non terminali.

Esercizio 10
FI - 01/07/2020, 20/07/2020

Si consideri l’insieme di tutte le stringhe di parentesi bilanciate. Esempio: le stringhe


di parentesi pp qq, p qp q, p p q pp qq q sono stringhe di parentesi bilanciate. Dire a quale
classe di linguaggi appartiene l’insieme di stinghe di parentesi bilanciate.
Soluzione
Mostriamo che L non è un linguaggio regolare applicando il Pumping lemma.
Assumiamo L regolare e fissiamo un p P N come richiesto dal pumping lemma. Pren-
diamo dunque la stringa z “ pp qp . Si ha che z P L e lpz q “ 2p ě p, quindi si può
scrivere z “ uvw per qualche u; v; w.

37
Dato che lpuv q ď p, v può consistere solamente di parentesi aperte, e dato che lpv q ą 0
v non può essere una stringa vuota. Quindi la stringa uv2 w ha più parentesi aperte
che chiuse e non appartiene a L, e di conseguenza L non è un linguaggio regolare.
Mostriamo ora che L è un linguaggio di tipo 2 definendo una grammatica libera dal
contesto che lo generi: G “ tN “ tS u; T “ tp; qu; P; S u

S ÝÑ pS q | SS | pq

Esercizio 11
FI - 07/09/2020

Si consideri l’insieme di tutte le stringhe bilanciate ’begin’ e ’end’. Esempio: le stringhe


"begin begin end end" , "begin end begin end" , "begin begin end begin begin end
end end" sono stringhe bilanciate di ’begin’ e ’end’. Dire a quale classe di linguaggi
appartiene l’insieme di stinghe di ’begin’ e ’end’ bilanciate.
Soluzione
Mostriamo che L non è un linguaggio regolare applicando il Pumping lemma.
Assumiamo L regolare e fissiamo un p P N come richiesto dal pumping lemma. Pren-
diamo dunque la stringa z “ beginp endp . Si ha che z P L e lpz q “ 2p ě p, quindi si
può scrivere z “ uvw per qualche u; v; w.
Dato che lpuv q ď n, v può consistere solamente di stringhe “begin", e dato che lpv q ą 0
v non può essere una stringa vuota. Quindi la stringa uv2 w ha più stringhe “begin" che
stringhe “end" e non appartiene a L, e di conseguenza L non è un linguaggio regolare.
Mostriamo ora che L è un linguaggio di tipo 2 definendo una grammatica libera dal
contesto che lo generi: G “ tN “ tS u; T “ tbegin; endu; P; S u

S ÝÑ beginS end | SS | begin end

Esercizio 12
FI - 28/09/2020

A quale classe di linguaggi appartiene l’insieme di stinghe:

L “ t0n 1m 0m`n | m; n ě 0u

Soluzione
Mostriamo che L non è un linguaggio regolare applicando il Pumping lemma.
Assumiamo L regolare e fissiamo un p P N come richiesto dal pumping lemma. Pren-
diamo dunque la stringa z “ 0p 1p 02p . Si ha che z P L e lpz q “ 4p ě p, quindi si può
scrivere z “ uvw per qualche u; v; w.

38
Dato che lpuv q ď p, v può consistere solamente di zeri, e dato che lpv q ą 0 v non può
essere una stringa vuota. Quindi pompando nuovi zeri in v , per esempio con uv 3 w,
il numero di zeri nel prefisso di z aumenterebbe ma il numero di zeri nel suffisso di z
rimarebbe invariato, violando quindi il vincolo che gli zeri in fondo alla stringa devono
essere uguali al numero di uni e di zeri all’inizio della stringa. Quindi L non è un
linguaggio regolare.
Mostriamo ora che L è un linguaggio di tipo 2 definendo una grammatica libera dal
contesto che lo generi: G “ tN “ tS; A; B u; T “ t0; 1u; P; S u

S ÝÑ A | 00 | 10 | 
A ÝÑ 0A0 | 0B 0
B ÝÑ 1B 0 | 10

Esercizio 13
FI - 09/02/2021

Si consideri la seguente grammatica G “ pNT “ tS; X u; T “ ta; b; cu; P; S q e le seguenti


produzioni P :
S ÝÑ X | 
X ÝÑ aXa | Y
Y ÝÑ bY b | c
Svolgere ciascuno dei seguenti punti:
1. A quale classe di grammatica appartiene la grammatica G?
2. Mostrare, se esiste, una derivazione per "aaba".
3. Mostrare, se esiste, una derivazione per "abbcbba".
4. É ammessa la stringa vuota?
5. Quale è il linguaggio generato da G?
Soluzione
1. La grammatica è libera dal contesto (tipo 2).
2. S ñ X ñ aXa ñ aY a ñ : : : non è possibile.
3. S ñ X ñ aXa ñ abXba ñ abbXbba ñ abbcbba.
4. Sì.
5. L “ tan bm cbm an | n ě 0; m ě 0 u Y t u

Esercizio 14
FI - 26/02/2021

39
Sia L il linguaggio generato dalla seguente espressione regolare pa ` bq˚ .
• Dire a quale classe di linguaggi appartiene L.
• Scrivere una grammatica a struttura di frase che genera L.
• Scrivere l’automa che riconosce L.
Soluzione
• L è un linguaggio regolare (tipo 3), infatti si può facilmente generare tramite una
grammatica regolare.
• L è generato dalla seguente grammatica a struttura di frase

G “ tN “ tS u; T “ ta; bu; P; S u

S ÝÑ aS | bS | 

• L’automa che lo riconosce è

Esercizio 15
FI - 22/06/2021

Dire a quale classe di linguaggi sull’alfabeto t0; 1u appartengono gli insiemi di stringhe
tali che le occorrenze di 0 e di 1 soddisfano i seguenti requisiti:
- ci sono almeno due 0 consecutivi e non vi sono mai due 1 consecutivi;
- il numero di occorrenze di 0 è uguale al numero di occorrenze di 1
Soluzione
- Il linguaggio è regolare, perché riconosciuto dal seguente automa a stati finiti
deterministico:

40
- Mostriamo che il linguaggio non è regolare applicando il Pumping lemma.
Assumiamo L regolare e fissiamo un p P N come richiesto dal pumping lemma.
Prendiamo dunque la stringa z “ 0p 1p . Si ha che z P L e lpz q “ 2p ě p, quindi si
può scrivere z “ uvw per qualche u; v; w.
Dato che lpuv q ď p, v può consistere solamente di zeri, e dato che lpv q ą 0, v non
può essere una stringa vuota. Quindi pompando nuovi zeri in v , per esempio con
uv2 w, il numero di zeri aumenta rispetto al numero di uni, violando il vincolo che
le loro occorrenze devono essere in egual numero. Quindi L non è un linguaggio
regolare.
Mostriamo ora che L è un linguaggio di tipo 2 definendo una grammatica libera
dal contesto che lo generi: G “ tN “ tS u; T “ t0; 1u; P; S u

S ÝÑ 1S 0 | 0S 1 | SS | 10 | 01 | 

Esercizio 16
FI - 01/07/2021

Dire a quale classe di linguaggi sull’alfabeto A “ t0; 1u appartiene l’inisieme di stringhe:

L “ tx P A | x è palindromau

NB: Ricordiamo che una stringa è palindroma se è indifferente leggerla da destra a


sinistra o da sinistra verso destra.

41
Soluzione
Mostriamo che L non è un linguaggio regolare applicando il Pumping lemma.
Assumiamo L regolare e fissiamo un p P N come richiesto dal pumping lemma. Pren-
diamo dunque la stringa z “ 0p 10p . Si ha che z P L e lpz q “ 2p ` 1 ě p, quindi si può
scrivere z “ uvw per qualche u; v; w.
Dato che lpuv q ď p, v può consistere solamente di zeri, e dato che lpv q ą 0, v non può
essere una stringa vuota. Quindi pompando nuovi zeri in v , per esempio con uv 2 w, il
numero di zeri a sinistra del simbolo 1 in z aumenterebbe ma il numero di zeri a destra
del simbolo 1 rimarebbe invariato, rompendo la simmetria della stringa che quindi cessa
di essere palindroma. Quindi L non è un linguaggio regolare.
Mostriamo ora che L è un linguaggio di tipo 2 definendo una grammatica libera dal
contesto che lo generi: G “ tN “ tS u; T “ t0; 1u; P; S u

S ÝÑ 0S 0 | 1S 1 | 0 | 1 | 00 | 11 | 

Esercizio 17
FI - 15/07/2021, 21/02/2022

Dire a quale classe di linguaggi sull’alfabeto A “ t 0; 1; : : : ; 9u appartiene l’insieme di


stringhe:

L “ tx P A˚ | x mod 5 “ 0u

NB: mod rappresenta l’operazione che restituisce il resto della divisione intera tra i
numeri a cui è applicata.
Soluzione
Il linguaggio L è regolare, perché generato dalla seguente grammatica regolare: G“
tN “ tS; Au; T “ t0; 1; : : : ; 9u; P; S u

S ÝÑ 0S | 1S | : : : | 9S | 0 | 5 | 

Esercizio 18
FI - 27/09/2021

Si consideri il linguaggio L sull’alfabeto ta; b; 0; 1u contenente tutte le parole non vuote


tali che mai occorrono due simboli consecutivi uguali. A quale classe appartiene il
linguaggio L?
Soluzione

42
L è un linguaggio regolare (di tipo 3) generato dalla seguente grammatica regolare

G “ tN “ tS; A; B; C; Du; T “ ta; b; 0; 1u; P; S u

S ÝÑ aA | bB | 0C | 1D | a | b | 0 | 1
A ÝÑ bB | 0C | 1D | b | 0 | 1
B ÝÑ aA | 0C | 1D | a | 0 | 1
C ÝÑ aA | bB | 1D | a | b | 1
D ÝÑ aA | bB | 0C | a | b | 0
In alternativa, può risultare più semplice disegnare un automa:

Esercizio 19
FI - 07/02/2022

Si consideri il linguaggio L sull’alfabeto t0; 1u contenente tutte e sole le stringhe tali


che il penultimo simbolo è 0. A quale classe appartiene il linguaggio L?
Soluzione

43
L è un linguaggio regolare (di tipo 3) generato dalla seguente grammatica regolare

G “ tN “ tS; Au; T “ t0; 1u; P; S u

S ÝÑ 1S | 0A
A ÝÑ 0A | 1S | 0 | 1

Esercizio 20
FI - 07/03/2022

Dire a quale classe di linguaggi sull’alfabeto A “ t0; 1u appartiene l’insieme di stringhe:

L “ t0n 1m | n; m P N ^ n ă mu

Soluzione
Mostriamo che L non è un linguaggio regolare applicando il Pumping lemma.
Assumiamo L regolare e fissiamo un p P N come richiesto dal pumping lemma. Pren-
diamo dunque la stringa z “ 0p 1p`1 . Si ha che z P L e lpz q “ 2p ` 1 ě p, quindi si può
scrivere z “ uvw per qualche u; v; w.
Dato che lpuv q ď p, v può consistere solamente di zeri, e dato che lpv q ą 0, v non può
essere una stringa vuota. Quindi pompando nuovi zeri in v , per esempio con uv 2 w,
il numero di zeri diventa necessariamente pari o superiore al numero di uni; nel caso
peggiore che v sia un singolo zero, con v 2 la nuova stringa ha n “ m che quindi non
può appartenere al linguaggio L. Quindi L non è un linguaggio regolare.
Mostriamo ora che L è un linguaggio di tipo 2 definendo una grammatica libera dal
contesto che lo generi: G “ tN “ tS u; T “ t0; 1u; P; S u

S ÝÑ 0S 1 | S 1 | 1

Esercizio 21
FI, Slides da Prof. Re

1. Scrivere una espressione regolare per stringhe binarie che descriva l’insieme t0; 11; 101u.
2. Scrivere una espressione regolare per stringhe binarie che descriva l’insieme delle
stringhe composte solo da simboli "0".
3. Scrivere una espressione regolare per tutte stringhe binarie.
4. Scrivere una espressione regolare per tutte stringhe binarie che cominciano e
finiscono per "1".
5. Scrivere una espressione regolare per le stringhe binarie che contengono almeno
tre "1" consecutivi.

44
6. Scrivere una espressione regolare per le stringhe binarie che contengono almeno
tre "1".
7. Scrivere una espressione regolare per le stringhe binarie di lunghezza dispari.
8. Scrivere una espressione regolare per stringhe di testo che descriva le date in
formato GG/MM/AAAA.
9. Scrivere una espressione regolare per stringhe di testo che descriva i numeri di
telefono.
Soluzione
1. 0 ` 11 ` 101
2. 0 ¨ 0˚
3. p0 ` 1q˚
4. 1 ¨ p0 ` 1q˚ ¨ 1
5. p0 ` 1q˚ ¨ 111 ¨ p0 ` 1q˚
6. p0 ` 1q˚ ¨ 1 ¨ p0 ` 1q˚ ¨ 1 ¨ p0 ` 1q˚ ¨ 1 ¨ p0 ` 1q˚
7. p0 ` 1q ¨ p00 ` 01 ` 10 ` 11q˚ oppure p0 ` 1q ¨ pp0 ` 1q ¨ p0 ` 1qq˚
8. p0 ` 1 ` 2 ` 3q ¨ p0 ` 1 ` 2 ` ¨ ¨ ¨ ` 9q ¨ { ¨ p0 ` 1q ¨ p0 ` 1 ` 2 ` ¨ ¨ ¨ ` 9q ¨ { ¨ p0 ` 1 `
2 ` ¨ ¨ ¨ ` 9q ¨ p0 ` 1 ` 2 ` ¨ ¨ ¨ ` 9q ¨ p0 ` 1 ` 2 ` ¨ ¨ ¨ ` 9q ¨ p0 ` 1 ` 2 ` ¨ ¨ ¨ ` 9q
9. p0 ` 1 ` 2 ` ¨ ¨ ¨ ` 9q˚

Gerarchia di Chomsky
Grammatica a struttura di frase (tipo 0) Una grammatica a struttura di frase (o
grammatica di tipo 0) è una quadrupla G “ pN; T; P; S q dove:
• T eN sono alfabeti disgiunti, composti rispettivamente da quelli che sono chia-
mati simboli terminali e simboli non terminali di G;
• Le produzioni in P sono nella forma

A Ñ con A P N; ; ; P pN Y T q˚

• S è un simbolo di N , e viene chiamato simbolo iniziale di G.

Grammatica dipendente dal contesto (tipo 1) Una grammatica dipendente dal


contesto (o grammatica di tipo 1) è una quadrupla G “ pN; T; P; S q dove:
• T eN sono alfabeti disgiunti, composti rispettivamente da quelli che sono chia-
mati simboli terminali e simboli non terminali di G;

45
• Le produzioni in P sono nella forma

A Ñ  con A P N; ;  P pN Y T q˚ ; P pN Y T q`

• S è un simbolo di N , e viene chiamato simbolo iniziale di G.

Grammatica libera dal contesto (tipo 2) Una grammatica libera dal contesto (o
grammatica di tipo 2) è una quadrupla G “ pN; T; P; S q dove:
• T eN sono alfabeti disgiunti, composti rispettivamente da quelli che sono chia-
mati simboli terminali e simboli non terminali di G;
• Le produzioni in P sono nella forma

AÑ con A P N; P pN Y T q`

• S è un simbolo di N , e viene chiamato simbolo iniziale di G.

Grammatica regolare (tipo 3) Una grammatica regolare (o grammatica di tipo 3)


è una quadrupla G “ pN; T; P; S q dove:
• T eN sono alfabeti disgiunti, composti rispettivamente da quelli che sono chia-
mati simboli terminali e simboli non terminali di G;
• Le produzioni in P sono nella forma

A Ñ aB
AÑa
con A; B P N; a P T
• S è un simbolo di N , e viene chiamato simbolo iniziale di G.

Pumping lemma per linguaggi regolari


Sia L un linguaggio regolare. Allora esiste un intero p ě 1 che dipende solamente da
L, tale che ogni stringa z P L di lunghezza almeno p può essere scritta come z “ uvw
rispettando le seguenti condizioni:
• lpv q ě 1;
• lpuv q ď p;
• uvi w P L; @i ě 0.

46
IL LINGUAGGIO WHILE

Esercizio 1
FI - 20/06/2019

Fornire la macro-istruzione nel linguaggio While per la divisione con resto di due numeri
naturali.
Soluzione
Consideriamo A come dividendo e B come divisore. Quindi calcoliamo il quoziente
Q e il resto della divisione (che per comodità viene salvato in A). In caso di B = 0,
l’algoritmo non termina perché l’operazione non è definita. In ogni caso, è possibile
inserire un if per gestire il caso B = 0 con un output di 0, 0.
begin
INPUT ( A ) ;
INPUT ( B ) ;
Q := 0;
while A ě B do
begin
A := A ´ B ;
Q := s ( Q )
end
OUTPUT ( Q ) ;
OUTPUT ( A )
end

Esercizio 2
FI - 23/07/2019

Fornire la macro-istruzione nel linguaggio While per la moltiplicazione tra due naturali.
E tra due interi?
Soluzione
Consideriamo la moltiplicazione come l’operazione X “X ¨Y
begin
INPUT ( X ) ;
INPUT ( Y ) ;
U := X ;
Z := Y ;
ZERO := 0;
UNO := 1;

47
if X = ZERO _ Y = ZERO then
X := 0
else
while Z ‰ UNO do
begin
X := X + U ;
Z := pd ( Z )
end
OUTPUT ( X )
end

Introduciamo il segno come due variabili booleane SIGNX e SIGNY, dove il valore 1
indica un segno negativo e 0 un segno positivo.
begin
INPUT ( SIGNX ) ;
INPUT ( X ) ;
INPUT ( SIGNY ) ;
INPUT ( Y ) ;
U := X ;
Z := Y ;
ZERO := 0;
UNO := 1;
if X = ZERO _ Y = ZERO then
X := 0
else
while Z ‰ UNO do
begin
X := X + U ;
Z := pd ( Z )
end
if SIGNX ‰ SIGNY then
begin
OUTPUT ( UNO ) ;
OUTPUT ( X )
end
else
begin
OUTPUT ( ZERO ) ;
OUTPUT ( X )
end
end

48
Esercizio 3
FI - 13/09/2019

Come è possibile estendere il linguaggio While con un nuovo comando repeat C until
E dove C è un comando e E è una espressione booleana. Informalmente, il comando re-
peat C until E esegue C fino a che E risulta falsa. Mostrare la semantica operazionale
del nuovo comando.
Soluzione
begin
T := 1;
while E ‰ T do C
end

Esercizio 4
FI - 27/09/2019, 15/11/2021

Come è possibile estendere il linguaggio While con un nuovo comando repeat C until
E dove C è un comando e E è una espressione booleana. Informalmente, il comando
repeat C until E esegue C e poi verifica E , se E falsa ripete C , altrimenti esce dal
ciclo.
Soluzione
begin
T := 1;
C;
while E ‰ T do C
end

Esercizio 5
FI - 16/12/2019

Definire la sintassi del linguaggio WHILE.


Soluzione
PROGRAM ::= begin end | begin SEQCOMMANDS end
SEQCOMMANDS ::= COMMAND | SEQCOMMANDS ; COMMAND
COMMAND ::= ASSIGNEMENT | while TEST do COMMAND | PROGRAM
ASSIGNMENT ::= VAR := O | VAR := s ( VAR ) | VAR := pd ( VAR )
TEST ::= VAR ‰ VAR
VAR ::= LETTERA | VAR LETTERA | VAR CIFRA
LETTERA ::= A | B | ... | Z

49
CIFRA ::= 0 | 1 | ... | 9

Esercizio 6
FI - 07/02/2020

Scrivere un programma While che presi due numeri in input controlla se il primo è
multiplo del secondo.
Soluzione
Presi X e Y ritorniamo 1 se X è un multiplo di Y, 0 altrimenti.
begin
INPUT ( X ) ;
INPUT ( Y ) ;
ZERO := 0;
UNO := 1;
if Y = ZERO then
OUTPUT ( ZERO )
else
while X ě Y do X := X ´ Y
if X ‰ ZERO then
OUTPUT ( ZERO )
else
OUTPUT ( UNO )
end

Esercizio 7
FI - 05/03/2020, 18/06/2020

É possibile estendere il linguaggio WHILE con un nuovo comando read(x1 ; : : : ; xn ) che


prende in input n lettere o cifre e le assegna alle variabili x1 ; : : : ; xn , rispettivamente?
Soluzione
begin
INPUT ( X1 ) ;
INPUT ( X2 ) ;
.
.
.
INPUT ( XN )
end

50
Dove n dipende dall’ n fissato del numero degli input. Se ci sono n input ci sono n
righe di comandi INPUT che assegnano il valore alla variable Xi.

Esercizio 8
FI - 01/07/2020, 20/07/2020, 07/09/2020

Si introduca in WHILE il comando

IntW hile e P I1 ; I2 ; : : : ; In IntDo ibegin C1 iend; : : : ; ibegin Cn iend;


dove e è una espressione la cui valutazione restituisce un intero, Ii è un intervallo sugli
interi, Ci è un comando (i P r1::ns).
Il comando IntW hile : : : IntDo, esegue il comando Ci finché la valutazione dell’espres-
sione e restituisce un intero nell’intervallo Ii . Nel caso in cui la valutazione di e non
ricade in alcuno degli intervalli I1 ; : : : ; In il comando IntW hile : : : IntDo termina la
sua esecuzione.
Soluzione
Consideriamo per ogni intervallo Ii , il suo limite inferiore Iil e il suo limite superiore
Iiu .
begin
while ( e ě I1l ^ e ď I1u ) _ ... _ ( e ě Inl ^ e ď Inu ) do
begin
while e ě I1l ^ e ď I1u do C1
while e ě I2l ^ e ď I2u do C2
.
.
.
while e ě Inl ^ e ď Inu do Cn
end
end

In alternativa ai comandi while all’interno del while principale, si possono anche usare
comandi if-then-else con le stesse condizioni, col vantaggio che è possibile eseguire
multipli comandi Ci quando e appartiene a più intervalli.

Esercizio 9
FI - 28/09/2020, 06/09/2021

Scrivere un programma in linguaggio WHILE che legga in input una sequenza di lun-
ghezza ignota a priori di numeri interi positivi. Il programma, a partire dal primo
numero introdotto, stampa ogni volta la media aritmetica di tutti i numeri introdotti.
Terminare quando il numero inserito è negativo.

51
Soluzione
Prendiamo il segno come input aggiuntivo nella variabile SIGNX, dove il valore 0 indica
segno positivo e il valore 1 segno negativo.
begin
INPUT ( X ) ;
INPUT ( SIGNX ) ;
M := 0;
C := 0;
S := 0;
UNO := 1;
while SIGNX ‰ UNO do
begin
C := s ( C ) ;
S := S + X ;
M := 0;
TMPS := S ;
while TMPS ě C do
begin
TMPS := TMPS ´ C ;
M := s ( M )
end
OUTPUT ( M ) ;
INPUT ( X ) ;
INPUT ( SIGNX )
end
OUTPUT ( M )
end

Esercizio 10
FI - 09/02/2021

Scrivere un programma in linguaggio WHILE che prenda in input una sequenza di


caratteri nell’insieme ta; b; cu e restituisca 1 se la stringa appartiene al linguaggio
dell’Esercizio .13 a pagina 39 nella sezione Grammatiche e Automi, 0 altrimenti.
Soluzione
Ritorniamo 1 qualora la stringa di input appartiene al linguaggio, 0 altrimenti. Per
utilizzare i simboli , a, b e c nel linguaggio while, basta considerarli come codificati in
numeri naturali, per esempio  “ 0, a “ 1, b “ 2 e c “ 3. Quindi laddove nel codice
seguente appaiono i simboli , a, b o c, in realtà si stanno veramente usando i numeri
0, 1, 2 o 3.
begin

52
INPUT ( CHAR ) ;
N := 0;
M := 0;
L := 0;
LAMBDA :=  ;
A := a ;
B := b ;
C := c ;
ZERO := 0;
UNO := 1;

if CHAR ‰ LAMBDA then


begin
while CHAR = A do
begin
N := s ( N ) ;
INPUT ( CHAR )
end
while CHAR = B do
begin
M := s ( M ) ;
INPUT ( CHAR )
end
if CHAR ‰ C then
OUTPUT ( ZERO )
else
begin
while CHAR = C do
begin
L := s ( L ) ;
INPUT ( CHAR )
end
if L > UNO then
OUTPUT ( ZERO )
else
begin
N2 := 0;
M2 := 0;
while CHAR = B do
begin
M2 := s ( M2 ) ;
INPUT ( CHAR )
end
while CHAR = A do

53
begin
N2 := s ( N2 ) ;
INPUT ( CHAR )
end
if N2 ‰ N _ M2 ‰ M _ CHAR ‰  then
OUTPUT ( ZERO )
else
OUTPUT ( UNO )
end
end
end
else
OUTPUT ( UNO )
end

Esercizio 11
FI - 26/02/2021

Scrivere un programma in linguaggio WHILE che prenda in input una sequenza di


caratteri nell’insieme ta; b; cu e restituisca 1 se la stringa appartiene al linguaggio
dell’Esercizio .14 a pagina 40 nella sezione Grammatiche e Automi, 0 altrimenti.
Soluzione
Ritorniamo 1 qualora la stringa di input appartiene al linguaggio, 0 altrimenti. Per
utilizzare i simboli , a, b e c nel linguaggio while, basta considerarli come codificati in
numeri naturali, per esempio  “ 0, a “ 1, b “ 2 e c “ 3. Quindi laddove nel codice
seguente appaiono i simboli , a, b o c, in realtà si stanno veramente usando i numeri
0, 1, 2 o 3.
begin
INPUT ( CHAR ) ;
COUNT := 0;
LAMBDA :=  ;
C = c;
ZERO := 0;
UNO := 1;
while CHAR ‰ LAMBDA do
begin
if CHAR = C then
COUNT := s ( COUNT )
else
begin end
INPUT ( CHAR )

54
end
if COUNT ‰ ZERO then
OUTPUT ( ZERO )
else
OUTPUT ( UNO )
end

In alternativa:
begin
FLAG := 1;
A := a ;
B := b ;
LAMBDA :=  ;
UNO := 1;
ZERO := 0;
while FLAG = UNO do
begin
INPUT ( CHAR ) ;
if CHAR = A _ CHAR = B then
begin end
else
FLAG := 0
end
if CHAR = LAMBDA then
OUTPUT ( UNO )
else
OUTPUT ( ZERO )
end

Esercizio 12
FI - 22/06/2021

Si introduca in WHILE il comando

loop E do C end
dove E è una espressione aritmetica, la cui valutazione restituisce un intero I . La
semantica intuitiva del comando loop è di controllare la guardia E e, se è diversa da
0, eseguire C e decrementare la guardia. Dire se il comando loop è esprimibile nel
linguaggio WHILE.
Soluzione

55
begin
I := E ;
ZERO := 0;
while I ‰ ZERO do
begin
C;
I := pd ( I )
end
end

Esercizio 13
FI - 01/07/2021

Si consideri il comando:

for I “ E1 to E2 do C end
dove E1 ; E2 sono espressioni aritmetiche. La semantica intuitiva del for è di eseguire
il comando C tante volte quante E 2 ´ E 1. Dire se il comando for è esprimibile nel
linguaggio WHILE.
Soluzione Notare bene che calcolare E2 ´ E1 potrebbe portare a un valore negativo.
Utilizzando l’operatore di confronto ă si evita il problema di dover operare su valori
interi negativi.
begin
I := E1 ;
E := E2 ;
while I < E do
begin
C;
I := s ( I )
end
end

Esercizio 14
FI - 15/07/2021

Si consideri il comando:

loopmax E1 ; E2 do C end

56
la cui semantica intuitiva consiste nell’eseguire il comando C tante volte quanto vale il
massimo tra E1 ed E2 fissato all’inizio. Dire se il comando loopmax è esprimibile nel
linguaggio WHILE.
Soluzione
begin
ZERO := 0;
E1 := E1 ;
E2 := E2 ;
if E1 < E2 then
I := E1
else
I := E2
while I ‰ ZERO do
begin
C;
I := pd ( I )
end
end

Esercizio 15
FI - 27/09/2021

Dire se il comando do C while E dove C è un comando e E è una espressione booleana


è esprimibile nel linguaggio WHILE. Informalmente, il comando do C while E esegue
C e poi verifica E , se E falsa ripete C , altrimenti esce dal ciclo.
Soluzione
begin
T := 1;
C;
while E ‰ T do C
end

Esercizio 16
FI - 07/02/2022, 21/02/2022

Dire se il comando alternate E1 by E2 do C1 ; C2 endalt la cui semantica intuitiva


consiste nell’eseguire C1 un numero di volte pari a E1 div E2 e C2 un numero di volte
pari a E1 mod E2 è esprimibile nel linguaggio WHILE.
Soluzione

57
begin
ZERO := 0;
E1 := E1 ;
E2 := E2 ;
Q := 0;
while E1 ě E2 do
begin
E1 := E1 ´ E2 ;
Q := s ( Q )
end
R := E1 ;
while Q ‰ ZERO _ R ‰ ZERO do
begin
if Q ě ZERO then
begin
C1 ;
Q := pd ( Q )
end
else begin end
if R ě ZERO then
begin
C2 ;
R := pd ( R )
end
else begin end
end
end

Esercizio 17
FI - 07/03/2022

Dire se il comando alternate E times C1 ; C2 endalt con le seguenti due semantiche


intuitive:
1. viene eseguito il comando C1 ; C2 tante volte quanto vale inizialmente E ;
2. viene eseguito il comando C1 tante volte quanto vale E1 div E2 e successivamente
il comando C2 tante volte quanto vale E1 mod E2
è esprimibile nel linguaggio WHILE.
Soluzione
1. begin
I := E ;

58
ZERO := 0;
while I ‰ ZERO do
begin
C1 ;
C2 ;
I := pd ( I )
end
end

2. Vedere l’Esercizio .16 a pagina 57.

Macro disponibili
• Assegnamento di costante: X :“ n; n P N
• Assegnamento di variabile: X :“ Y
• Somma: X :“ X ` Y; X :“ Z ` Y
• Differenza troncata: X :“ X ´ Y; X :“ Z ´ Y
• Operatori di confronto: X ě Y; X ď Y; X “ Y; X ą Y; X ă Y con X; Y numeri
naturali
• Operatori booleani: XE ^ YE ; XE _ YE ; XE con XE ; YE espressioni booleane arbi-
trarie (con valori in 0 e 1)
• Assegnamento di espressione booleana: X :“ TE
• While con condizione booleana: while TE do COMMAND
• If-then-else con condizione booleana: if TE then COMMAND else COMMAND.
• Input di un valore su una variabile: INP UT pV ARq
• Output del valore di una variabile: OUT P UT pV ARq

59

Potrebbero piacerti anche