Sei sulla pagina 1di 49

Lezioni di

Informatica Teorica
2
Informatica Teorica

1) Teoria della computabilit

- Cosa si pu calcolare con un calcolatore?
- Esistono problemi che non possono essere risolti?
- Macchine di Turing
- Funzioni ( (
- Universalit contro Decidibilit/Terminazione

Testi relativi:
- Aiello, Albano, Attardi, Montanari, Introduzione alla Teoria della Com-
putabilit ecc.
- Lewis, Papadimitrou, Elements of Theory of Computation

2) Teoria degli automi e dei linguaggi formali

Linguaggi: Automi:
- regolari - a stati finiti
- liberi - a pila
- dipendenti dal contesto - limitati linearmente
- a struttura di fase - di Turing

3) Semantica dei linguaggi di programmazione

Testi relativi:
- Documentazione Postscript
- H.R. Nielson, F. Nielson, Semantics with Applications: A Formal Intro-
duction
3
INDICE

1 Cenni di Teoria degli Insiemi
1.1 Gli Insiemi Numerabili .......................................................................... 5
1.2 Metodo della Diagonalizzazione ......................................................... 8
1.2 Codifica di Liste Finite ........................................................................... 9
1.3 Codifica di Alberi Binari ........................................................................ 9

2 Teoria della Computabilit
2.1 Definizione di Algoritmo .................................................................... 10
2.2 Le Macchine di Turing ........................................................................ 11
2.3 Semantica delle Macchine di Turing ................................................ 12
2.4 Esempi di Macchine di Turing ........................................................... 14
2.5 Teoremi sulle Macchine di Turing .................................................... 15
2.6 La Macchina di Turing Universale .................................................... 18
2.7 Calcolabilit Effettiva .......................................................................... 19
2.8 Halting Problem ................................................................................... 21

3 Insiemi Calcolabili
3.1 Insiemi Ricorsivamente Enumerabili e Insiemi Ricorsivi ............ 22
3.2 Teorema di Post .................................................................................... 24
3.3 Classe di Funzioni e Rappresentazione ............................................ 30
3.4 Teorema di Kleene ............................................................................... 33
3.5 Teorema di Rice .................................................................................... 36
3.6 Equivalenza Debole .............................................................................. 41
3.7 Interprete e Terminazione ................................................................. 43
3.8 Funzioni Primitive Ricorsive ............................................................. 44
3.9 Funzioni Ricorsive Generali ............................................................... 47
3.10 Esercizi conclusivi sulla computabilit .......................................... 48


4
1 CENNI DI TEORIA DEGLI INSIEMI















1.1 Gli Insiemi Numerabili

Un insieme I :
- finito se ne( : - f :I[1..n] biunivoca;
- infinito se non finito;
- numerabile se finito oppure - f :(I suriettiva.

Esempio di insieme numerabile:
{1, 2, 3} ( = { ( i, j ) | i e {1, 2, 3}; j e (}
numerabile perch possibile costruire la semplice sequenza:
(1, 1), (2, 1), (3,1), (1, 2), (2, 2), (3, 2), (1, 3) e cos via

Lemma 1.1.a ( ( numerabile
Dimostrazione. Non possibile utilizzare il metodo precedente perch,
essendo i due insiemi infiniti, si otterrebbe un insieme di numeri che
stanno tutti sulla retta y=0. Quindi bisogna utilizzare un metodo che co-
pra tutto lo spazio delle possibili coppie appartenenti ad ( (.
Definiamo f
2
: ( ( (; come
f
2
(n
1
, n
2
) =
2
2 1 2 1
2
) )( 1 (
n
n n n n
+
+ + +

Commento [PDS1]: ?? insieme nume-
rabile vuol dire equipotente ai naturali che
si scrive |I|=|(|e vuole a sua volta dire che -
f :(I biunivoca. aggiungere il significato
di applicazione iniettiva, suriettiva, biietti-
va, biunivoca
5

Le due funzioni che formano la sua
inversa sono del tipo:
f
1
2
:( (; f
2
2
:( (
quindi dobbiamo avere che:
f
2
( f
1
2
(n), f
1
2
(n)) = n
f
1
2
( f
2
(n
1
, n
2
)) = n
1
f
2
2
( f
2
(n
1
, n
2
)) = n
2
se definiamo k = max{ h | h(h+1)/2 < n} allora abbiamo:
f
2
2
(n) = n (k(k+1)/2) = n
2

f
1
2
(n) = k n
2
= n
1
Quindi, esistendo linversa, f
1
2
suriettiva e dunque abbiamo dimo-
strato che ( ( numerabile. ~


Indichiamo con A linsieme alfabeto. un insieme finito perch esiste
una funzione t: A[1n], biunivoca. Definiamo A* come tutte le sequen-
ze finite generabili a partire da A. un insieme infinito perch possibile
ripetere un elemento anche pi volte. Definiamo inoltre
(* =
Y
e m
(
m

(* quindi un insieme infinito fatto da elementi composti da un nu-
mero finito di elementi.

4 14
3 9 13
2 5 8 12
1 2 4 7 11
0 0 1 3 6 10
0 1 2 3 4
Esempio: f
2
(1, 3) = 13

Esempi di funzioni iniettive:
a) f: ( ( (; f (n
1
, n
2
) =
2 1
3 2
n n

b) f
m
: (
m
(;
f
m
(n
1
, n
2
, , n
m
) =

altrimenti n n f n f
m se n n f
m
m
)) ,..., ( , (
2 ) , (
2
1
1
2
2 1
2

La sua inversa lacrobatica funzione:

=
< <
=
=

m k se n f f f
m k se n f f f
k se n f
n f
volte k
volte k
m
k
) ))...) ( (...( (
1 ) ))...) ( (...( (
1 ) (
) (
1
2
2
2
2
2
2
1
2
2
2
2
2
1
2
1
4 4 8 4 4 7 6
4 4 8 4 4 7 6


6

Lemma 1.1.b A* numerabile.
Dimostrazione. Poniamo|A| = b. Utilizziamo una funzione biunivoca
t:A[1b] che per ogni lettera dellalfabeto restituisce il numero d'ordi-
ne corrispondente. Gli elementi aeA* sono elementi del tipo a = a
0
a
1
a
m-
1
. Quindi possiamo definire una funzione g:A*( biunivoca:

=
=
1
0
) ( ) ( g
m
i
i
i
b a a t
che ci permette di dimostrare che|A*| = |(| e quindi la tesi. ~

Lemma 1.1.c (* numerabile.
Dimostrazione. Definiamo una funzione biunivoca g: (*( come
g(n
1
, , n
m
) = f
m+1
(m, n
1
, n
2
, , n
m
) = f
2
(m, f
m
(n
1
, , n
m
))
La sua inversa :
)) ( ( ) (
2
2
) (
2
1
n f f n g
n f
k k
= se k < m
Abbiamo cos dimostrato che |(*| = |(| e quindi la tesi. ~

Lemma 1.1.d Linsieme
fin
(() dei sottoinsiemi finiti di ( numera-
bile.
Dimostrazione. Definiamo 1{0, 1}* come una sequenza formata da un 1
seguito da {0, 1}* cio 1{0, 1}* = {1, 10, 11, 100, 101, 110, }
Se X un insieme e k = max(X), definiamo h:
fin
(()1{0, 1}* come
h(X) = b
k
b
k-1
b
1
b
0
dove b
i
= 1 se ieX, 0 altrimenti
Ad esempio se X = {0, 1, 3, 5} allora h(X) = 101011. Data questa h che
codifica un insieme in un numero binario, semplice costruire una
f:
fin
(()( biunivoca per dimostrare la tesi. Utilizziamo anche la funzio-
ne g del lemma 1.1.b, che trasforma una sequenza di cifre (il nostro nu-
mero binario) in un numero decimale. Abbiamo quindi la f biunivoca cer-
cata:
f(X) = g
A
(h(X))
~


7
1.2 Metodo della Diagonalizzazione

Teorema 1.2.a (della diagonalizzazione)
Sia R una relazione binaria su un insieme A numerabile, e sia D={a|(a,
a) eR } e inoltre aeA, R
a
= { b | (a, b) e R } allora
D = R
a
aeA.
Dimostrazione.
Con X sono indicati gli elementi che stanno tra
loro in relazione R.
R
a
rappresenta la riga di indice a.
D = { a | (a, a) e R } contiene gli elementi che
stanno sulla diagonale, mentre il suo negato D
identifica una riga che sicuramente non sta in que-
sta matrice.
~

Questo importante teorema, dovuto a Cantor, da un metodo molto uti-
le per dimostrare molti altri teoremi.

Lemma 1.2.b (() non numerabile.
Dimostrazione. Definiamo una f : (()(
S
i
_ ( contiene gli elementi che sono segnati con
X nella riga relativa.
D = { n|(S
n
, n) eR }
D e (()
D = S
i
i
(() non numerabile ~


Esercizio: Dimostrare, utilizzando il metodo di
Cantor, che (
(
non numerabile.
Soluzione. (
(
= { f | f:(( } La funzione D:(( che
non fa parte della matrice
D(x) =

+
altrimenti
definita x f se x f
x x
0
) ( 1 ) (

I valori assunti nellesempio sono:
a
0
a
1
a
2
a
3
a
4

a
0
X X
a
1
X
a
2
X X
a
3
X X
a
4
X X
Relazione R di esempio

0 1 2 3 4
S
0
X X
S
1
X
S
2
X X
S
3
X X
S
4
X X
Funzione f di esempio

0 1 2 3 4
f
0
1 3 6 7
f
1
9 10 12 2
f
2
4 21 1 3
f
3
12 3 41 2
f
4
3 4 7 8
Funzioni f
x
di esempio

8
D(0) = 2; D(1) = 11; D(2) = 2;
1.2 Codifica di Liste Finite

Indichiamo con val il valore del nodo della lista e con next il puntatore
al successivo elemento. linsieme L, insieme delle liste, il minimo insie-
me generato dalle regole:
1) NIL e L
2)
L ) (
L
e
e e

e, list
e


Definiamo I:L( come

=
I +
= I
altrimenti
NIL se
(next val f

)) ( , 1 ) ( (
0
) (
2


Ad esempio per la lista con il solo elemento 2 si ottiene f
2
(2+1, NIL) e
quindi (3, 0).
La sua funzione inversa

=
I
= I

altrimenti
n se
n f n list(f
NIL
n
1
0
)) ( ( , 1 ) (
) (
2
2
1 2
1



1.3 Codifica di Alberi Binari

Regole per la definizione di Albero:
1) NIL e Alb
2)
Alb Alb Alb e Tree
Alb Alb Alb
e
e e
) , , (
e ,
2 1
2 1



Definiamo I:Alb( come
altrimenti
NIL alb se
alb right alb left alb val f
alb
=

I I +
= I
))) ( ( )), ( ( , 1 ) ( (
0
) (
3


9
2 TEORIA DELLA COMPUTABILIT















2.1 Definizione di Algoritmo

Lalgoritmo ha un aspetto sintattico e uno semantico. Dal dominio sin-
tattico si raggiunge il dominio semantico attraverso una funzione di in-
terpretazione. Il dominio semantico spiega quali sono gli oggetti mate-
matici che lalgoritmo calcola.


| +

] [programma
programma
decodifica codifica
tput Dati di Ou put Dati di In


|Dominio Sintattico| = (
|Dominio Semantico| = (()
I programmi che si possono fare sono infiniti e numerabili. Ci implica
che tantissime funzioni di interpretazione non possono essere calcolabili
(cio limmagine del dominio(?)). Anche cambiando il formalismo (lin-
guaggio) limmagine non cambia, cio il numero delle funzioni calcolabili
non dipende dal linguaggio. Vedremo pi avanti la Tesi di Church che si
pu semplificare affermando che tutto ci che calcolabile pu essere
calcolato con una Macchina di Turing.
10

Le 10 caratteristiche che deve avere ogni algoritmo ragionevole:
a) Il programma P che descrive lalgoritmo deve essere di lunghezza fini-
ta.
b) Deve esistere un agente di calcolo C capace di eseguire le istruzioni (il
linguaggio deve usare istruzioni elementari che siano eseguibili dal cal-
colatore).
c) Lagente di calcolo C deve avere a disposizione una memoria dove im-
magazzinare i dati.
d) Il calcolo avviene per passi discreti.
e) Il calcolo non probabilistico.
f) Non deve esserci alcun limite finito alla lunghezza dei dati in ingresso
g) Non deve esserci alcun limite finito alla quantit di memoria disponi-
bile.
h) Deve esserci un limite finito al numero e alla complessit delle istru-
zioni eseguibili da C.
i) Sono ammesse esecuzioni con un numero di passi illimitato.
j) Sono ammesse esecuzioni che non terminano (cio quando la f non
definita per un certo input lalgoritmo non termina).

Tutti i formalismi con queste caratteristiche calcolano le stesse fun-
zioni e calcolano tutto ci che calcolabile.


2.2 Le Macchine di Turing

Una Macchina di Turing Z una quadrupla (Q, S, P, q
0
), dove:
- Q un insieme finito di stati
- S lalfabeto del nastro (insieme finito di simboli)
- P sottoinsieme di Q S S Q {sx, dx}
- q
0
e Q lo stato iniziale

La Macchina di Turing pu essere considerata come una macchina do-
tata di una testina che legge o scrive su un nastro formato da infinite ca-
selle, dove su ogni casella vi un simbolo appartenente ad un determina-
to alfabeto. In base a ci che sta leggendo e allo stato interno attuale, la
11
macchina scrive sul nastro, cambia lo stato e sposta la testina a de-
stra(dx) o a sinistra(sx).
P l'insieme delle quintuple che descrivono il programma eseguito
dalla macchina Z. Le quintuple sono formate nell'ordine da: stato attuale,
simbolo letto nella posizione corrente, simbolo da scrivere nella posizio-
ne corrente, stato successivo e direzione in cui spostarsi. P ha la proprie-
t che non ci sono due quintuple con i primi due membri uguali. Grazie a
questo la MdT una macchina deterministica cio in base a ci che legge
e allo stato ottiene una sola opzione di scrittura e spostamento.
Il programma di una MdT pu essere descritto mediante una tabella
detta matrice funzionale in cui le righe sono gli stati e le colonne i simboli
letti. In ogni cella vi descritta l'azione che la macchina deve eseguire
quando si trova nello stato della riga corrispondente e legge il simbolo
della colonna relativa. Se una cella della matrice funzionale bianca allo-
ra l'azione da eseguire concludere il calcolo fermandosi.
Una configurazione o descrizione istantanea (DI) di una MdT :
- Contenuto del nastro;
- Stato interno;
- Posizione della testina.
Una DI rappresentata da oq|, dove o sono i caratteri precedenti la
testina, q lo stato attuale e | sono i caratteri dalla testina in poi. Inoltre,
indichiamo con s il carattere che viene letto dalla posizione corrente sul
nastro e con c identifichiamo la stringa vuota.


2.3 Semantica delle Macchine di Turing

La semantica definita da una funzione f:(( definita come: f =
hBf
Z
Bg


h g
finale iniziale DI DI
fz


Dati una MdT Z e un input x la semantica data da
Sem
Z
(x) = h( f
Z
( g(x))).

La funzione g:(DI deve essere iniettiva mentre h: DI( deve essere
suriettiva oppure g biunivoca e h= g
1
.
12

Esempi di funzioni g e h:
g(127) = 1 2 q
0
7
g'(127) = q
0
1 2 7
h(o q
3
1 4 3 10 A 2 1) = 143
h'(o q
3
1 4 3 10 A 2 1) = 14.310
h''(o q
3
1 4 3 10 A 2 1) = 1431021

Definizione di f
Z
: DI DI
, _ DI DI (cio oq| , o'q'| vuol dire che dalla prima descrizione istan-
tanea si passa alla seconda)

1) |=s | (q, s, q', s', dx) e P
quindi oqs | , os'q' |
2) | = c (q, A, s', q', dx) e P
quindi oqA , os'q'A
3) o = o s | = s | (q, s, s', q', sx) e P
quindi o sqs | , o q' ss' |
4) o = o sq , o q' ss' (q, A, s', q', sx) e P
5) o = c | = s | (q, s, s', q', sx) e P
quindi qs | , q'A s' |
6) o = | = c (q, A , s', q', sx) e P
quindi q , q'A s'

Una computazione di una MdT Z una sequenza di descrizioni istanta-
nee di Z: DI
0
, DI
1
, , DI
i
, tale che DI
i
, DI
i+1
i e (.
Se la sequenza infinita allora Z diverge (|), altrimenti il calcolo si ar-
resta e DI
F
la descrizione istantanea finale della sequenza, in questo ca-
so si dice che la macchina converge (+).
Quindi abbiamo che:
f
z
(DI
0
)=

altrimenti indefinita
D con termina che comp. una DI DI DI se DI
F F F
,..., ,
1 0

Si pu facilmente vedere che la MdT un formalismo che rispetta le
caratteristiche che deve avere ogni algoritmo, elencate precedentemen-
te.
13

Una funzione totale se definita (converge) per ogni input, parziale
altrimenti.
Una funzione parziale f: (( calcolabile (o computabile) se
- una MdT Z tale che Sem
Z
(x) = f(x) xe(
In parole povere una funzione calcolabile se esiste una MdT che la
calcola in tempo finito.


14
2.4 Esempi di Macchine di Turing

2.4.a MdT che calcola il successore di un numero
Lalfabeto del nastro S = { 0, 1, 2, , 9 }. La DI iniziale contiene sul
nastro il numero da incrementare, la testina posizionata sull'ultima cifra
a destra e lo stato interno in q
0
. Lo stato q
F
lo stato finale.
g: (DI esempio: g(199) = 1 9 q
0
9
h:DI( esempio: h(1 2 q
1
3) = 123

2.4.b MdT che riconosce il corretto bilanciamento delle parentesi
Restituisce 1 se la stringa in input correttamente bilanciata, 0 altri-
menti. La funzione g permette di far partire la testina dallinizio del na-
stro. La h identifica la fine del nastro con un blank(A).
Algoritmo implementato: Finch trovo parentesi aperte mi sposto a
destra. Quando trovo una chiusa la cancello e torno a sinistra a cancellare
una aperta. Finite le parentesi aperte controllo che non ci siano chiuese a
sinistra.

2.4.c MdT che "shifta" linput di una casella a destra
Algoritmo implementato:
Q\S ( ) X
A
1 0
q
0
( q
0
dx X q
1
sx X q
0
dx
A q
2
sx

q
1
X q
0
dx X q
1
sx 0 q
F

q
2
0 q
F
X q
2
sx 1 q
F

q
F


Q\S 0 1 9
A
X
q
0
X q
1
dx X q
2
dx X q
10
dx
A q
F


q
1
0 q
11
sx
q
2
1 q
11
sx

q
10
9 q
11
sx
q
11

A q
0
sx

stato\simbolo
0 1 8 9
A
q
0
1 q
F
sx 2 q
F
sx 9 q
F
sx 0 q
0
sx 1 q
F
dx
q
F


15
La testina parte dallultimo carattere della stringa di input.
1) Segno e vado a destra.
2) Trovo blank scrivo il carattere precedentemente letto e vado a si-
nistra.
3) Trovo segnato, scrivo blank, vado sinistra e torno al punto 1.

Esempio di computazione:
AA1q
0
2AA AA1Xq
3
AA AA1q
11
X2A AAq
0
1A2A
AAq
11
X12A Aq
0
AA12A AAq
F
A12A

2.4.d MdT che copia linput (cio se w linput restituisce wAw)
Q\S a b c a b c
A
q
0
a q
a
dx b q
b
dx c q
c
dx
A q
f

q
a
a q
a
dx b q
a
dx c q
a
dx
A q
aA
dx
q
b
a q
b
dx b q
b
dx c q
b
dx
A q
bA
dx
q
c
a q
c
dx b q
c
dx c q
c
dx
A q
cA
dx
q
aA
a q
aA
dx b q
aA
dx c q
aA
dx
a q
R
dx
q
bA
a q
bA
dx b q
bA
dx c q
bA
dx
b q
R
dx
q
cA
a q
cA
dx b q
cA
dx c q
cA
dx
c q
R
dx
q
R
a q
R
sx b q
R
sx c q
R
sx a q
0
dx b q
0
dx c q
0
dx
A q
R
dx
Algoritmo implementato:
1) Segno e vado a destra finch non trovo il blank.
2) Vado a destra e scrivo.
3) Vado a sinistra finch non trovo un simbolo segnato.
4) Rimetto il carattere normale e vado a destra
5) Se sono sul blank ho finito, altrimenti torno al punto 1.


2.5 Teoremi sulle Macchine di Turing

Tesi di Church-Turing [2.5.a] Dato un programma in un generico
formalismo (che rispetta le regole elencate precedentemente), esiste, ed
possibile costruire effettivamente, una MdT equivalente.

Anche se questa tesi non stata ancora dimostrata (essendo legata al
concetto intuitivo di algoritmo) sono stati trovati molti teoremi che si di-
16
vertono a modificare il formalismo della macchina di Turing, lasciando
intatte le 10 propriet degli algoritmi ragionevoli, per poi provare che le
modifiche non ampliano n riducono la classe delle funzioni calcolabili.
Esempi di modifiche inconcludenti sono: variazioni nel numero degli sta-
ti, dei simboli dell'alfabeto, delle testine o dei nastri oppure uso di nastri
multidimensionali. facile poi trovare altre fantasiose menomazioni alla
MdT (macchine che non sempre scrivono o che non sempre leggono
ecc..) che non infieriscono sulla potenza di calcolo ma soltanto sulla
complessit computazionale.
Altra questione delicata invece provare qual il minimo numero di
stati e di simboli che pu avere una MdT senza diminuire la classe delle
funzioni calcolabili, lasciamo ad altri questo divertimento.
Data la sua estrema semplicit, la Macchina di Turing, supponendo ve-
ra la Tesi di Church, spesso utilizzata per provare che alcuni problemi
sono intrinsecamente insolubili, cio che se non sono risolvibili con le
MdT non sono risolvibili con nessun altro formalismo che rispetti le fa-
mose 10 propriet.

Teorema 2.5.b Una qualsiasi MdT pu essere simulata da una MdT con
un'alfabeto di 2 soli simboli aumentando oppurtunamente il numero de-
gli stati.

Gdelizzazione [2.5.c] Tutte le MdT sono numerabili, cio esiste una
funzione biunivoca che va da ( allinsieme delle MdT.
Dimostrazione. sufficiente la dimostrazione per MdT con 2 soli simbo-
li. Per individuare una MdT sar sufficiente codificarne la matrice fun-
zionale fatta di 2k celle, se k il numero degli stati.
Consideriamo una MdT con un solo stato:
Ci sono 25(5
2
) MdT diverse ad un solo stato. Esistono 5 modi possibili
di riempire una casella (A, s, q
0
, sx, dx) perch oltre alle combinazioni di
A, s con sx e dx, che sono 4 bisogna aggiungere il caso in cui la f per quel
carattere e quello stato (in questo caso solo q
0
) non sia definita e che
quindi la casella sia vuota. Ora, consideriamo MdT a k stati (q
0
, q
1
, , q
i
, ,
Q\S
A
s
q
0

A s
q
0

sx dx
A s
q
0

sx dx

17
q
k-1
) con due simboli (A, s). Si hanno 4k combinazioni di A, s con sx e dx a
cui devo aggiungere il caso in cui la casella vuota perch la f non defi-
nita. Quindi abbiamo (4k+1)
2k
MdT a k stati, cio formalmente:
k
k
k
2 ) 2 (
) (
) 1 4 ( MdT + =
Quindi si possono enumerare le MdT:
) 2 (
) 1 (
MdT 0, 1, , 24 N
1
= 25
) 2 (
) 2 (
MdT 25, , N
1
+N
2
1
) 2 (
) 3 (
MdT N
1
+N
2
, , N
1
+N
2
+N
3
1
) 2 (
) 4 (
MdT N
1
+N
2
+N
3
, , N
1
+N
2
+N
3
+N
4
1
A questo punto, se indichiamo con
i
la funzione calcolabile dalla
macchina Z
i
, possibile far corrispondere un numero ne( ad ogni MdT.
~


Per ogni
i
esistono infinite MdT che calcolano la stessa funzione. Due
MdT sono equivalenti se calcolano la stessa funzione, cio:
Z
i
~ Z
j
se
i
=
j

Infatti se una macchina Z
i
calcola
i
, sempre possibile creare un'altra
MdT Z
j
, che uguale a Z
i
, solo che, ad esempio ha un solo stato in pi che
non influisce sul calcolo.

Lemma 2.5.d "Problema dellEquivalenza"
Date due macchine Z
i
e Z
j
, la funzione che dice se queste sono equiva-
lenti non calcolabile
Dimostrazione. Si dovrebbero calcolare i rispettivi output e controllare
se sono uguali. Purtroppo, dovendo fare questo per infiniti input, la fun-
zione relativa non calcolabile (e per di pi non detto che questi pro-
grammi terminino per tutti gli input possibili. ~


( 0 1 2 3
MdT Z
0
Z
1
Z
2
Z
3

f
0

3


18
2.6 La Macchina di Turing Universale

Indichiamo con
x
(y) la funzione calcolata dalla MdT x sulla variabile
y. Quindi verifichiamo se la seguente funzione parziale f: ((( calco-
labile o meno:
f(x, y) =
x
(y)
cio se - una MdT, detta "MdT Universale", che calcola la f.

La Macchina di Turing Universale funziona cos:
1. prende un input k;
2. decodifica k in (x, y);
3. de-godelizzazione (da x ricava la MdT Z
x
);
4. mette su nastro le quintuple di Z
x
(cio la MdT universale mette
nella sua memoria la macchina che deve simulare);
5. esegue la macchina Z
x
con input y.

Il suo nastro formato nel seguente modo:
A
inizio
nastro
di Z
x

M
fine
nastro
di Z
x

Y
quin-
tupla
attuale
S X
prima
quin-
tupla
X X
ultima
quin-
tupla
Y
A
In cui: La testina di Z
x
legge dove c' M, S rappresenta il carattere che
sta leggendo Z
x
e X e Y sono delimitatori che non hanno nulla a che vede-
re con linput della MdT Universale.
Le quintuple sono cos formate:
stato simbolo nuovo simbolo nuovo stato spostamento
caselle 2 1 1 2 1
Viene utilizzata una rappresentazione binaria e ogni casella della
quintupla rappresenta un bit. Cos, avendo 4 stati bastano 2 caselle per
rappresentare lo stato attuale perch log
2
4 = 2.
Procedimento: La MdT Universale legge lo stato attuale e il carattere
sotto la testina di Z
x
. Poi cerca una quintupla che inizi con i 3 bit dati dai
2 bit dello stato q
0
pi il bit di S. Quando lo trova, aggiorna S, q
0
e M. Se
non trova nessuna quintupla da usare restituisce, nella prima parte del
nastro, loutput della macchina Z
x
simulata.

Esercizio 2.6.a: Riconoscere se una stringa linizio di una quintupla.
Nel nastro ci sono pi quintuple delimitate da X. Occorre cercare la
stringa fra tutte le quintuple.
Commento [PDS2]: (fare soluzione
appunti pag.11a)
19
2.7 Calcolabilit Effettiva

Una funzione calcolabile effettivamente se esiste una MdT ed pos-
sibile costruirla, cio si pu indicare precisamente qual .

Esempio 2.7.a
f(x) = x-esima cifra decimale dellespansione decimale di t.

=
=
1 i
i
t t
Abbiamo che t
i
> t
i+1
, cio vengono sommati numeri sempre pi piccoli
che tendono rapidamente a 0. Per capire meglio, t = 3.14 quindi t
0
= 3, t
1

= 0.1 t
2
= 0.04 e cos via Questa una funzione calcolabile effettivamente
perch possibile costruire una MdT con scritto t sul nastro, che, dato
un numero x, scorre tutto il nastro fino alla x-esima posizione.

Esempio 2.7.b
f(x) = 1 se esiste una sequenza di almeno x "5" consecutivi nell'espan-
sione decimale di t, 0 altrimenti.
Se vengono trovati x "5" consecutivi si ottiene la risposta 1. Non pos-
sibile per rispondere 0 poich, esssendo t formato da infinite cifre de-
cimali, non si pu esser mai certi che pi avanti nella computazione non
ci sia la sequenza cercata. Quindi questa funzione calcolabile ma non effet-
tivamente. Infatti esiste una MdT che calcola la funzione ma non possibi-
le trovare un algoritmo che rappresenti i passi che compie.
Si pu provare la stessa cosa con un procedimento diverso. Sia I
linsieme delle lunghezze delle sottosequenze fatte di "5" in t, questo in-
sieme finito? Non lo si mai dimostrato.
Ora, se I finito,
sia k il massimo di questo insieme, definiamo

e . s
=
altrimenti
I x k x se
x f
0
1
) (
mentre se I infinito, f(x) una funzione costante:
f(x) = 1 x e I
Concludendo, non si grado di dare un algoritmo per calcolare f(x).
Perci f(x) calcolabile ma non effettivamente, che un'altra prova di
ci che stato dimostrato prima.
20

Esempio 2.7.c
f(x) = 1 se esiste una sequenza di almeno x "5" consecutivi nell'espan-
sione decimale di t, indefinita altrimenti.
Questa funzione non risponde se non viene trovata la sequenza giusta,
poich lalgoritmo continua allinfinito la sua ricerca. Quindi calcolabile
effettivamente perch possibile costruire una MdT in modo tale che re-
stituisca uno dei due risultati della f (x).

Esempio 2.7.d
f(x) = 1 se esiste una sequenza di esattamente x "5" consecutivi
nellespressione decimale di 4211/137, 0 altrimenti.
Questa funzione calcolabile effettivamente perch qualsiasi numero ra-
zionale un numero finito o periodico.

Esempio 2.7.e
f(x) = 1 se esiste una sequenza di esattamente x "5" consecutivi
nellespansione decimale di t, 0 altrimenti.
Non si sa se questa funzione sia calcolabile o meno perch
lespansione decimale di t infinita.


21
2.8 Halting Problem

Il problema consiste nello stabilire se esiste una procedura effettiva
che, dati due qualsiasi x e y, determini se la funzione
x
(y) definita o no.
Per la tesi di Church, il problema pu essere rienunciato nel seguente
modo: esiste una funzione computabile totale g tale che g(x, y) = 0 se
x
(y)
divergente? Oppure, in altri termini, esiste una MdT T che, avendo co-
me ingresso la desrizione di una qualsiasi MdT Z ed una qualsiasi stringa
o, sia capace di decidere se Z si fermer o non per o? Il seguente teorema
risponde alla nostra domanda.

Teorema di Turing sul problema della terminazione [2.8.a]
La seguente funzione g non calcolabile:

=
altrimenti
converge (y) se
y x g
x
0
1
) , (


Dimostazione. La g non calcolabile perch si vuole che restituisca 0 in
tempo finito se Z
x
diverge. Dimostriamolo con calma: supponiamo per as-
surdo che g sia calcolabile , allora deve esistere una funzione definita
nel seguente modo:

= |
=
=
1 ) (
0 ) ( 1
) (
x,x se g
x,x se g
x
Questa funzione calcolabile e ci implica che - x
0
tale che
0
x
=
cio esiste una MdT
0
x
Z che calcola una
0
x
=.

= |
=
= =
1 ) (
0 ) ( 1
) ( ) (
0 0
0 0
0 0
0
,x x se g
,x x se g
x x
x

Ma allora
0
x
(x
0
) = | g(x
0
, x
0
) = 1
0
x
(x
0
) = +
0
x
(x
0
) = 1 g(x
0
, x
0
) = 0
0
x
(x
0
) = |
Queste sono evidentemente un bel mucchio di assurdit per cui ab-
biamo dimostrato che g non calcolabile. ~
Commento [PDS3]: Viene da chiedersi
se la funzione g(x, y) non funzioni solo in
presenza di funzioni subdole come e
quindi sia sufficiente impedire che le fun-
zioni analizzate richiamino la funzione
analizzatrice?
22
3 INSIEMI CALCOLABILI















3.1 Insiemi Ricorsivamente Enumerabili e Insiemi Ricorsi-
vi

Ricordiamo che la funzione caratteristica di un insieme I _ ( una
funzione h
I
:( {0, 1} definita nel seguente modo:

e
e
=
I 0
I 1
) (
I
x se
x se
x h
mentre la funzione semicaratteristica :

e |
e
=
I
I 1
) (
I
x se
x se
x h

Un insieme I _ ( ricorsivo se la sua funzione caratteristica calcola-
bile totale.
Per questo tipo di insiemi possibile elencare gli elementi che ne fan-
no parte e, dato un numero ne( possibile decidere in tempo finito se n
appartiene o meno anche allinsieme in questione. Sono esempi di di que-
sto tipo linsieme dei numeri pari e quello dei numeri primi.
Un insieme I _ ( ricorsivamente enumerabile (r.e.) se vuoto oppure
il codominio di una funzione calcolabile totale.
Cio se I = C oppure esiste una funzione f(x) calcolabile totale, tale che
Commento [PDS4]: Nota del riscrittore:
In queste lezioni si confondono spesso i
termini numerabile ed enumerabile. Da quel-
lo che ho potuto capire, nella matematica
questi due termini non identificano la stes-
sa cosa: numerabile indica, come abbiamo
visto, lesistenza di una corrispondenza
biunivoca con i naturali mentre enumera-
bile indicherebbe solo gli insiemi ricorsi-
vamente enumerabili cio quel sottoinsie-
me dei numerabili che anche calcolabile.
In questa prima stesura delle lezioni adot-
teremo per la stessa definizione per i due
termini. Allego alcuni riferimenti tratti
dalla sezione scientifica dellenciclopedia
multimediale Rizzoli-Larousse.
Numerabile: Insieme che si pu mettere in
corrispondenza biunivoca con la succes-
sione dei numeri naturali: linsieme dei
numeri razionali numerabile.
Enumerabile: Si dir che un insieme I di
parole W su un alfabeto A un insieme
enumerabile se vuoto oppure esiste una
funzione calcolabile (f:(I ?) avente come
dominio linsieme dei numeri naturali, che
assume come codominio linsieme I.
Occorre distinguere tra insieme enumera-
bile e insieme numerabile. Mentre ogni
insieme enumerabile anche ovviamente
al pi numerabile (cio, finito o numerabi-
le), non ogni insieme numerabile enume-
rabile. Infatti esiste una quantit al pi
numerabile di insiemi enumerabili su un
determinato alfabeto, poich per ogni in-
sieme enumerabile esiste una funzione
computabile e di funzioni computabili ne
esiste solo una quantit numerabile, men-
tre esiste una quantit non numerabile di
insiemi di parole su ogni alfabeto che con-
tenga almeno una lettera. Nella stessa ma-
niera si pu parlare di relazioni (predicati)
enumerabili tra parole di un alfabeto.

23
I = codominio(f ) = { y | f(x)=y, xe( }
Questo tipo di insiemi possono essere generati o enumerati in modo al-
goritmico: basta calcolare f(x) per la successione dei naturali. Se un ele-
mento appartiene ad I verr prima o poi generato, mentre se non vi ap-
partiene, non possibile calcolarlo in tempo finito. Quindi ogni insieme
ricorsivamente enumerabile ha una funzione semicaratteristica.
Lemma 3.1.a Se un insieme I _ ( ricorsivo allora anche ricorsi-
vamente enumerabile.
Dimostrazione. Se I vuoto allore r.e. per definizione. Altrimenti, se
non vuoto, proviamo che esister un keI.
Chiamiamo h
I
la funzione caratteristica di I calcolabile per definizione.
Definiamo:

e =
=
altrimenti k
x cio x h se x
x g
I) ( 1 ) (
) (
I

Poich la h
I
calcolabile, allora anche la g lo . Quest'ultima anche
totale, inoltre il suo codominio I stesso poich restituisce sempre gli
elementi di I se xeI, altrimenti restituisce k che comunque appartiene ad
I per definizione. ~

Lemma 3.1.b Se un insieme I _ ( ricorsivamente enumerabile allo-
ra anche enumerabile.
Dimostrazione. sufficiente rilassare la definizione di insieme r.e. to-
gliendo il vincolo della calcolabilit. ~

Lemma 3.1.c Gli insiemi ricorsivi sono enumerabili.
Dimostrazione. chiaro che vi una corrispondenza biunivoca tra gli
insiemi ricorsivi e le funzioni binarie calcolabili totali. Vuol dire che, data
una funzione, questa identifica univocamente un insieme ricorsivo e vi-
ceversa. Se indichiamo con
ric
linsieme degli insiemi ricorsivi e con |
bct

linsieme delle funzioni binarie (del tipo f:({0, 1}) calcolabili totali ab-
biamo quindi che:
|
ric
| = ||
bct
|
ma sapendo che
||
bct
| s ||
calc
| = |(|
e, dal lemma 1.1.d, che
|(| = |
fin
| s |
ric
|
Commento [PDS5]: Si noti che per la
correttezza di questa dimostrazione non
necessario poter decidere (come infatti
non si pu) se un generico insieme vuoto.

24
quindi
|
ric
| = |(| ~

Lemma 3.1.d Gli insiemi r.e. sono enumerabili.
Dimostrazione. Ogni funzione calcolabile totale identifica un insieme ri-
corsivamente enumerabile perch si conosce il suo codominio; ma, dato
un insieme r.e. ci sono infinite funzioni c.t. che hanno per codominio
questo stesso insieme. Quindi non c' una corrispondenza biunivoca tra
gli insiemi r.e. e le funzioni c.t. eppure chiaro che |
re
| = ||
ct
|. Quindi, vi-
ste anche le conclusioni precedenti,
|(| = |
ric
| s |
re
| = ||
ct
| s ||
calc
| = |(|
cio
|
re
| = |(| ~

Se indichiamo con un insieme di insiemi allora possiamo classificare
i sottoinsiemi di ( nel seguente modo:


3.2 Teorema di Post

Teorema di Post [3.2.a] Se un insieme I e il suo complementare ( I )
sono ricorsivamente enumerabili allora sono anche entrambi ricorsivi.
Dimostrazione. Ripassiamo innanzitutto le definizioni:
I il codominio di una funzione g calcolabile totale, mentre il suo
complementare ( I = (I) il codominio di una funzione g' calcolabile to-
tale. Bisogna quindi dimostrare che le loro funzioni caratteristiche

e
e
=
I 0
I 1
) (
I
x se
x se
x h e

e
e
=
I 0
I 1
) (
I
x se
x se
x h

sono calcolabili.
Si pu scrivere un algoritmo che elenca alternativamente gli elementi
di g e di g' fino a trovare l'elemento x, parametro delle funzioni caratteri-
stiche:
(*) (**)
g(0) g'(0)
g(1) g'(1)
finiti _ ricorsivi _ ric.enum. _ enumerabili _ (()

25
g(2) g'(2)


Tale algoritmo prima o poi terminer poich le funzioni g e g' sono
calcolabili e lx cercato si trova in I oppure nel suo complementare I =(I.
La h
I
restituir quindi 1 se x compare in (*) mentre risponder 0 se x
compare in (**). E quindi, avendo cos dimostrato la calcolabilit delle
funzioni caratteristiche si dimostrata anche la tesi. ~

Esercizi:
3.2.b) Scrivere una procedura pseudo-Pascal che implementi
lalgoritmo che, nella dimostrazione del teorema di Post, elenca gli ele-
menti di g e g'.
Soluzione:
function F(x :integer) :integer;
var
j :integer;
trovato :boolean;
begin
j := 0; trovato := FALSE;
while (not trovato) do begin
if g(j) = x then begin
F := 1;
trovato := TRUE;
end
else if g'(j) = x then begin
F := 0;
trovato := TRUE;
end
else j := j+1;
end;
end;

3.2.c) Gli insiemi ricorsivi (
ric
) e gli insiemi r.e. (
re
) sono chiusi per
unione, intersezione, complementazione e differenza?
Soluzione: Risolviamo la parte: Se sue insiemi A e B sono r.e. allora A
B r.e.?
26
Occorre trovare la funzione semicaratteristica (h
A B
) di A B. A il
codominio di una funzione g
A
che elenca gli elementi di A mentre B il
codominio di una funzione g
B
che elenca i suoi elementi. Se un elemento
x appartiene ad A B allora verr restituito sia dalla g
A
che dalla g
B
.
Quindi A B ricorsivamente enumerabile.
3.2.d) Esiste una corrispondenza biunivoca calcolabile tra
ric
e (?
suggerimento: con 0 s i s n

=
=
=
x i g se
x i g se
x f
) ( ' 0
) ( 1
) (
3.2.e) Esiste una corrispondenza biunivoca calcolabile tra
re
e (?
suggerimento: non esiste!

Lemma 3.2.f Se indichiamo con
x
la funzione calcolabile dalla
MdT Z
x
e prendiamo linsieme I = { x |
x
(x) converge }. Allora I r.e. ma
non ricorsivo.
Dimostrazione. La funzione caratteristica di I :

| e
+ e
=
) ( I 0
) ( I 1
) (
I
x se cio x se
x se cio x se
x h
x
x


che con calcolabile (problema simile allo Halting Problem) e quindi I
non ricorsivo. Invece I ricorsivamente enumerabile perch I il do-
minio di una funzione calcolabile parziale definita nel seguente modo:

| |
+
=
) (
) ( 1
) (
x se
x se
x
x
x


~

Lemma 3.2.g Linsieme I = { x |
x
(x) diverge } non ricorsivamente
enumerabile.
Dimostrazione. Supponiamo per assurdo che I sia r.e., allora, per il teo-
rema di Post, I sarebbe ricorsivo che assurdo per il lemma precedente. ~

Un insieme I si dice semidecidibile se il dominio di una funzione cal-
colabile parziale, che equivalente a dire che semidecidibile se la sua
funzione semicaratteristica calcolabile.

Lemma 3.2.h Un insieme I semidecidibile ricorsivamente
enumerabile.
27
Dimostrazione.
: ) Se I r.e. allora I il codominio di una funzione g:(I calcolabile
totale. Quindi possibile costruire una funzione h(x) con dominio I che,
sfruttando g, identifica se un elemento x appartiene o meno allinsieme I.
Tale funzione h definita nel seguente modo: per i che va da 0 a +, se
g(i) = x allora restituisce 1 e termina.
chiaro che se x non appartiene ad I allora h diverge; abbiamo cos
che I il dominio di una funzione h calcolabile parziale che per definizio-
ne identifica un insieme semidecidibile.
) Se I il dominio di una funzione h calcolabile parziale allora, per
come sono definiti gli insiemi r.e., devo dimostrare che anche il codo-
minio di una funzione g:(I calcolabile totale. Se I linsieme vuoto allo-
ra r.e. per definizione. Se invece non vuoto allora esister un keI tale
che h(k) converge.
g(x)=y yeI e codominio di g y, I e codominio di g

= =
altrimenti k
passi n entro converge y h se y
n y f g x g
) (
)) , ( ( ) (
2

Linput x viene diviso nellinput y e nel numero di passi n ( un abile
trucco per ottenere una funzione parziale calcolabile). La funzione h
quella della prima parte della dimostrazione, che elenca gli elementi ap-
partenenti ad I. Tale g calcolabile (perch al massimo compie n passi) e
totale (per via di k (?)) e il suo codominio I perch per scansire gli ele-
menti appartenenti ad I viene usata la h con dominio I. La h parziale,
quindi, se h(x) converge vuol dire che yeI, quindi restituisce y, altrimenti
restituisce k che per definizione appartiene ad I. La g genera tutto il do-
minio di h se viene preso un n abbastanza grande. ~

Lemma 3.2.i Un insieme I r.e. il codominio di una funzione
f calcolabile parziale.
Dimostrazione.
) Se I vuoto allora I il codominio di una funzione banalmente co-
struita O che diverge per ogni input. Altrimenti, se I non vuoto il co-
dominio di na funzione g calcolabile totale e quindi anche parziale.
: ) Occorre dimostrare che I il codominio di una funzione g calcola-
bile totale. Se il codominio di f vuoto allora I vuoto e quindi r.e. per
28
definizione. Altrimenti, se il codominio di f non vuoto, conterr almeno
un elemento k. Le operazioni che definiscono la g cercata sono:
1) Si scompone linput x nellinput y e i passi z.
2) Si esegue Z
f
con inout y per al pi z passi.
3) Se Z
f
termina il suo calcolo allora g := f(y)
4) altrimenti g := k.
La funzione g quindi calcolabile totale perch risponde sempre qual-
cosa e non diverge mai. ~
Lemma 3.2.j Un insieme I r.e. infinito I il codominio di una
funzione g:(I calcolabile totale iniettiva.
Dimostrazione.
: ) Se g calcolabile totale allora I r.e., poich g iniettiva allora I
anche infinito.
) Supponiamo che I sia il codominio di una funzione f calcolabile to-
tale. Allora occore dimostrare che esiste una g calcolabile totale iniettiva
tale che I il codominio di g. Definiamo la g cercata:

= <
=
=
altrimenti z g y f x z y f
x se f
x g
)}) ( ) ( , | (min{
0 ) 0 (
) (
Cio g(x) la f del pi piccolo y tale che f(y) diversa da tutte le g
estratte fino a quel momento. Cos la g iniettiva.
Ad esempio per I = {10, 20, 30, 40, }si ha:
f(0) = 10, f(1) = 10, f(2) = 10 g(0) = f(0) = 10
f(3) = 20, f(4) = 20 g(1) = f(3) = 20
f(5) = 30, f(6) = 30 g(2) = f(5) = 30
f(7) = 40 g(3) = f(7) = 40
f(8) = 50 g(4) = f(8) = 50

La f calcolabile, la procedura che la calcola cos definita:
function g(x :integer) :integer
var
x' :integer;
begin
if x = 0 then g := f(0)
else begin
x' := x;
while ((f(x)=g(0)) v (f(x')=g(1)) v (f(x')=g(x-1)) do x' := x'+1;
g := f(x');
29
end;
end;
~

Teorema 3.2.k Se un insieme I ricorsivo infinito allora I enume-
rabile in modo crescente (cio ordinato).
Dimostrazione. Poich I ricorsivo allora la sua funzione caratteristica
h
I
calcolabile. Costruiamo una f calcolabile totale crescente il cui codo-
minio I e tale che se x < x' f(x) < f(x'). necessario che f(0) restituisca
il pi piccolo elemento appartenente ad I cio
f(0) = min{ y | h(y) = 1}
f(x) = min{ y | (h(y) = 1) . (y > f(x 1))}
La funzione pseudo-Pascal che calcola la f :
function f(x :integer) :integer;
var
y :integer;
begin
if x := 0 then y := 0
else y := f(x1)+1;
while h
I
(y)=0 do y := y+1; { h
I
la funzione caratteristica di I }
end;
~

Corollario 3.2.k Se un insieme I ordinato allora anche ricorsi-
vo perch immediato sapere se un elemento appartiene a I o meno.

Teorema 3.2.l Se un insieme I r.e. infinito allora esiste un sottoin-
sieme J _ I con J ricorsivo infinito.
Dimostrazione. I il codominio di una funzione g calcolabile totale
iniettiva per ipotesi poich I r.e. infinito. Occorre trovare una funzione f
calcolabile totale crescente, tale che J sia il suo codominio.
f(0) = g(0)
f(x) = g(min{ y | g(y) > f(x1)})
La funzione pseudo-Pascal che calcola la f :

function f(x :integer) :integer;
var
30
y :integer;
begin
if x = 0 then f := g(0)
else begin
y := 0;
while g(y) s f(x1) do y := y+1;
f := g(y);
end;
end;
Ad esempio se I = { 10, 30, 40, 20, 50, } allora
f(0) = g(0) = 10 f(1) = g(1) = 30
f(2) = g(2) = 40 f(3) = g(4) = 50
~

3.3 Classe di Funzioni e Rappresentazione

Linsieme I _ ( rappresentazione dellinsieme di funzioni | _ |
calc
se
- ieI
i
e|
- fe| - ieI : f =
i


Una classe di funzioni detta ricorsiva (o r.e.??) se esiste almeno una
rappresentazione ricorsiva per essa.

Esempio:
|' = { f }
I = { i } con
i
= f I rappresentante ricorsivo di |'
Linsieme J = { i |
i
= f } infinito ed il pi grande insieme rappre-
sentazione di |'. I e (J), con I = C, I rappresentazione di |'.

Teorema 3.3.a La classe delle funzioni calcolabili totali |
ct
_ |
calc
non
possiede nessuna rappresentazione ricorsivamente enumerabile (o solo
ricorsiva?). In particolare l'insieme { x |
x
totale } non ricorsivamen-
te enumerabile(o solo ricorsivo?).
Dimostrazione. Supponiamo per assurdo che esista un insieme I
0 1 2
) 0 ( g

) 0 (
) 0 ( g

) 1 (
) 0 ( g


) 1 ( g

) 0 (
) 1 ( g

) 1 (
) 1 ( g


) 2 ( g



31
r.e.(ricorsivo?) rappresentazione di |
ct
allora esiste una funzione g calco-
labile totale il cui codominio I.
La funzione h(x) =
) (
) (
x
x g
+1 calcolabile totale. Essendo la diagonale, non
pu occorrere nellelenco precedente, quindi lelenco parziale, cio non
contiene tutte le MdT. Questo vuol dire che I non contiene gli indici di
tutte le funzioni calcolabili totali ma deve contenere per forza anche in-
dici di funzioni parziali. ~

Esempio di insieme r.e. ma non ricorsivo.
A questo punto (se nel teorema precedente possiamo scrivere ricorsi-
vo invece di r.e. vedi libro pag.57) abbiamo ottenuto un interessante
esempio di insieme ricorsivamente enumerabile ma non ricorsivo:
I = { x |
x
(x) converge }
Infatti
x
(x) computabile e quindi I ricorsivamente enumerabile in
quanto dominio di una funzione calcolabile parziale. D'altra parte nello
Halting Problem si dimostra la non esistenza di una funzione computabi-
le g che restituisce 1 se
x
(x) converge, 0 altrimenti. Ma questa appunto
la funzione caratteristica di I. Quindi, non essendo g computabile allora I
non ricorsivo.

Una funzione f detta estesa da una funzione g, con f _ g, se e solo se
x : f(x)+ f(x) = g(x)
Supponiamo che ogni f parziale sia estendibile con una totale (anche
se in realt non vero). Ma
x
(x)+1 non pu essere estesa da una funzio-
ne calcolabile totale perch

Teorema 3.3.b Non esiste alcuna funzione calcolabile totale f(x) che
estenda la seguente funzione calcolabile totale:

|
+
=
altrimenti
converge x se x
x g
x x
) ( 1 ) (
) (


Dimostrazione. Per il solito argomento diagonale, se f(x) calcolabile al-
lora f(x) =
i
(x), ma se totale, il valore nella diagonale f(i) =
i
(i) defini-
to e diverso da g(i), che pure definito ma vale
i
(i)+1. ~

32
Teorema 3.3.c Se prendiamo un formalismo che calcola solo funzioni
calcolabili totali, allora tale formalismo non calcola tutte le funzioni cal-
colabili totali.
Dimostrazione. Supponiamo di avere un elenco
con tutti i programmi esprimibili in questo forma-
lismo, per la tesi di Church, ad ogni algoritmo cor-
risponder una Macchina di Turing.
Siamo sicuri che A
1
A
2
A
3
non calcola tutte e so-
le le funzioni c.t. perch, se cos fosse, linsieme de-
gli indici di Z, cio i vari g(i), ovvero linsieme I co-
dominio di g, con g c.t., sarebbe r.e., ma abbiamo precedentemente pro-
vato che tale insieme r.e., codominio di g, non esiste. ~

Algoritmo MdT:
A
0
Z
g(0)

A
1
Z
g(1)

A
2
Z
g(2)




33
3.4 Teorema di Kleene

Finora, con le MdT, abbiamo visto una formalizzazione esplicita del
concetto di algoritmo. A questo punto vogliamo chiederci se non si pos-
sono invece ideare formalismi che definiscono gli algoritmi in maniera
implicita.
Le definizioni implicite sono comuni in matematica. Ad esempio l'e-
quazione:
x = 3x+6
definisce implicitamente un valore per x, mentre la corrispondente defi-
nizione esplicita
x = 3
L'equazione implicita appena data pu essere anche interpretata nel
seguente modo: 3x+6 una trasformazione dagli interi agli interi che indi-
cheremo con T(x). L'equazione
x = T(x)
definisce quell'intero che punto fisso della trasformazione T(x). Infatti il
numero 3 quell'intero che invariante rispetto alla trasormazione 3x+6
nel senso che uguale al suo trasformato
3(3)+6.
Anche per quanto riguarda gli algoritmi si pu pensare di definirli in
maniera implicita come i programmi invarianti di trasformazioni di pro-
grammi in programmi. La domanda che ha questo punto si pone la se-
guente: come devono essere scelte queste trasformazioni affinch am-
mettano almeno un programma invariante, tale cio che lui e il suo tra-
sformato calcolino la stessa funzione?
La risposta a questa domanda fornita dal teorema di Kleene il quale
afferma che se si considera come classe di trasformazioni quella delle
funzioni calcolabili totali, queste trasformazioni ammetono sempre un
programma invariante, cio per ogni trasformazione effettiva T di pro-
grammi in programmi esiste sempre un programma P tale che T(P)
equivalente a P. Il programma P detto punto fisso della trasformazione.

Teorema di Kleene (o di Ricorsione) [3.4.a]
Sia t una funzione calcolabile totale, allora esiste un pe( tale che
Z
p
~ Z
t(p)
ovvero
p
=
t(p)

cio la funzione t trasforma la macchina Z
p
nella macchina Z
t(p)
.
34
Dimostrazione. Data una qualsiasi MdT di indice u e input x, costruiamo
un'altra MdT, con indice g(u), che realizza il seguente algoritmo (cio cal-
cola la funzione
g(u)
(x)):
1) Calcolare
u
(u)
2) Se
u
(u) termina con valore z, allora calcolare
z
(x)
Quindi u g(u); g restituisce lindice di una MdT che proprio quel-
la che esegue questo algoritmo. La funzione g calcolabile (per la gde-
lizzazione) totale (ha risposta per ogni input). Per la MdT di indice g(u)
pu essere parziale, e quindi calcola la funzione:

|
+
=
altrimenti
u se x
x
u u
u g
u
) ( ) (
) (
) (
) (


[1]
Sia t calcolabile totale, allora tBg calcolabile totale, perch g c.t.
per definizione. Perci
- v :
v
(x) = t(g(x)) [2]
La macchina che calcola
v
(x) converge perch t e g sono totali.
g(v)
(x)
converge perch v lindice di una MdT totale che calcola t(g(x)). Quindi

g(v)
(x) =
[1]

v(v)
(x) =
[2]

t(g(v))
(x)
Se chiamiamo g(v) = p si ottiene:

p
(x) =
t(p)
(x) ~

Dimostrazione intuitiva del teorema di Kleene:
Per dimostrare il teorema sufficiente, dato un qualunque program-
ma T, costruire un programma P punto fisso di T. Consideriamo il se-
guente programma P:
Programma P(Z)
1) Fare una copia di P nellarea di memoria X
2) Calcolare T(X) e lasciare il risultato nellarea di memoria Y
3) Eseguire Y su Z
4) Se Y(Z) termina con valore W restituire W.
chiaro che questo programma applicato ad un dato di ingresso d
come risultato lo stesso risultato che darebbe T(P) sul medesimo dato,
perch Y il programma P dopo che stato modificato dal programma T.
Inoltre P(Z) = T(P)(Z) = Y(Z) ~

Tale programma P praticamente un interprete che permette di fare
programmi ricorsivi.
35

Ad esempio se prendiamo il programma che calcola la funzione


=
=
altrimenti z q z
z se
z q
) 1 (
0 1
) ( '
e consideriamo come programma q:
q(y) = 3y
il programma trasformato q' calcoler la funzione:

=
=
altrimenti y y
y se
y q
3 3
0 1
) ( '
2

che non uguale a q. Quindi q non punto fisso della trasformazione T.
Se invece consiuderiamo il programma
q(y) = y!
allora si ha:

=
=
altrimenti y y
y se
y q
)! 1 (
0 1
) ( '
In questo caso si ha che q = q' cio q' q dopo essere stato trasformato,
ovvero q = T(q').

Applicando il programma P con input z = 1 si ha:

Quando viene eseguito il punto 3 di P, si ha una chiamata ricorsiva di
Y. Questa chiamata restituisce 1, che viene anche restituito da Y prima e
da P dopo.

P
z=1 out=1
1.
2.
3.
4.
X=P
z=1
1.
2.
3.
4.
Y=T(P)
z=1 out=1
if z=0 then 1
else z=P(z-1)
P locale a Y
z=0 out=1
1.
2.
3.
4.
X'=P locale
z=0
1.
2.
3.
4.
Y'=T(P locale)
z=0 out=1
if z=0 then 1
else z=P(z-1)
P locale a Y'
z=1
1.
2.
3.
4.
36
3.5 Teorema di Rice

Teorema di Rice [3.5.a] Se A _ |
calc
un insieme di funzioni calco-
labili e I un insieme formato dallunione di classi di equivalenza che ri-
solvono le funzioni di A, cio I = { i |
i
e A } . Linsieme I ricorsivo se e
solo se A = C v A = |
calc
.
Dimostrazione.
: ) Se A=C allora I=C ricorsivo. Se invece A=|
calc
allora I=( ricorsi-
vo.
) Supponiamo per assurdo che A = C e A = |
calc
, cio supponiamo
falsa la tsi e cerchiamo di far vedere che falsa la premessa.
Allora - i e I, j eI, cos possibile definire una funzione:

e e
e e
=
I A
I A
) (
x sse se j
x sse se i
x h
x
x


La h calcolabile totale perch I ricorsivo. Per il teorema di Kleene -
y tale che
y
=
h(y)
, ma h(y) pu assumere come valori i oppure j.
Se h(y) = i allora
y
eA
h(y)
eA
i
eA ieI che assurdo perch
per ipotesi ieI, quindi h(y) = i.
Ma se h(y) = j allora
y
eA
h(y)
eA
j
eA jeI che assurdo per-
ch per ipotesi jeI, quindi h(y) = j.
In conclusione h non pu restituire alcun valore, ma ci implica che
sono false le ipotesi, cio A=C e A=|
calc
sono false. ~

Conseguenze del Teorema di Rice:
Il teorema di Rice rappresenta un fortissimo risultato negativo. Esso
afferma sostanzialmente che non pu esistere un analizzatore che, preso
in input un programma, verifica se ha una possiede o meno propriet, a
meno che tale propriet non sia veramente banale.
L'origine di questa impotenza risiede nel fatto che gli oggetti della no-
stra azione, gli algoritmi, coincidono con i nostri attrezzi di lavoro. Infat-
ti il teorema di Rice pu essere giustificato nel seguente modo: una qua-
lunque procedura di decisione capace di dire se un programma P calcola
o meno una funzione che gode di propriet non banali, rappresenta una
funzione il cui dominio l'insieme dei programmi. Il teorema di Kleene
afferma che esiste almeno un programma, il punto fisso, per il quale non
possibile decidere, in quanto il risultato della procedura di decisione
37
un programma equivalente a quello di partenza. L'avere quindi applicato
la procedura di decisione non porta informazioni differenti da quelle
contenute nel programma di partenza.
Questa riflessione pu suggerire di restringere la classe di algoritmi
oggetto, sperando di riportare nel campo della decibilit le propriet che
pi ci interessano senza escludere nel contempo gli algoritmi importanti
in pratica. Ci quanto viene fatto nella teoria dei linguaggi formali. Tut-
tavia va osservato che tale classe non potr mai contenere un "algoritmo
universale": se cos fosse tale classe acquisterebbe immediatamente pie-
na generalit.

Nel seguito indicheremo con W
i
il dominio della funzione
i
calcolata
dalli-esima MdT, mentre definiamo I
a
come:
I
a
= { i | W
i
W
a
= C; W
a
= C }

Lemma 3.5.b I
a
non ricorsivo.
Dimostrazione. Se indichiamo con
A={ f | dominio( f )dominio(
a
) = C }
possibile scrivere
I
a
= { i |
i
eA }
Dimostrazione. A sicuramente non vuoto perch esiste O e A, dove O
indica la funzione sempre divergente. A = |
calc
perch nessuna funzione
totale appartiene ad A. Quindi, utilizzando il teorema di Rice provata la
tesi.~

Lemma 3.5.c I
a
non ricorsivamente enumerabile.
Dimostrazione. Se indichiamo con
a
I = { i | W
i
W
a
= C; W
a
= C }
allora occorre dimostrare che
a
I r.e. cos, per il Teorema di Post e il
lemma precedente, I
a
non sar r.e.. Per dimostrare che
a
I r.e. bisogna
costruire una funzione semicaratteristica:

|
e
=
altrimenti
i se
i h
a
I 1
) (
e dimostrare che calcolabile:

function h(i :integer) :integer;
38
begin
y := 0; r := TRUE;
while r do begin
x := f
1
2
(y); n := f
2
2
(y);
< esecuzione di Z
i
(x) e Z
a
(x) e attesa di n passi >
if <Z
i
ferma> and < Z
a
ferma> then r := FALSE;
else y := y+1;
end;
h(i) := 1;
end;

La h termina se - x : Z
i
e Z
a
terminano con input x.
Concludendo,
a
I r.e. mentre I
a
non lo . ~

Se Z
i
e Z
a
convergono per x, vuol dire che W
i
W
a
= C x e
a
I .

Esempi di insiemi non ricorsivi.
a) I = { i |
i
= f } non ricorsivo perch si pu scrivere
I = { i |
i
eA } e A = { f }
e per Rice non ricorsivo perch A deve essere vuoto o uguale a |
calc
.
b) I = { i | codominio(
i
)={1} . dominio(
i
) = ( } non ricorsivo per il
Teorema di Rice.
c) Se A = { f | codominio( f )={1} . dominio( f )=( }, I = { i |
i
eA} non ri-
corsivo per lo stesso motivo di prima.
d) I = { i |
i
costante } non ricorsivo perch si pu scrivere
I = { i |
i
eA } e A = { f | f costante }
e) I = { i | codominio(
i
) = C } non ricorsivo perch si pu scrivere
I = { i |
i
eA } e A = { O }
f) I = { i | Z
i
(0)+ } non ricorsivo perch si pu scrivere
I = { i |
i
eA } e A = { f e |
calc
| f(0) definita }
Se invece prendiamo un J _ I definito come J = { j | Z
j
(0)+ in 3 passi }
non si pu applicare Rice perch si parla di propriet di macchine e non
di propriet di funzioni. Ma sappiamo comunque che J ricorsivo perch
la sua funzione caratteristica facilmente calcolabile (deve fare solo 3
passi).

39
Lemma 3.5.d Sia f calcolabile totale allora
- ne( : W
n
= W
f(n)

Dimostrazione. vera per il Teorema di Kleene che vale per qualunque
tipo di enumerazione usata per le MdT. ~

Corollario 3.5.d - m: W
m
= {m}
Dimostrazione. Occorre dimostrare che - t c.t. : W
t(k)
= {k}
Definiamo questa funzione:

function t(k :integer) :integer
function g(x :integer) :integer;
begin
if x = k then g := 1
else while TRUE do;
end;
begin
y := gdel_encode(g);
t := y;
end;

Questa funzione t calcolabile totale. Per Kleene sappiamo che
W
t(m)
=W
m
. Sappiamo che W
t(m)
= {m} e quindi W
m
= {m}. ~

Lemma 3.5.e - p : W
p
= ( \ {p}
Dimostrazione. (W
p
la MdT che converge per tutti i valori tranne che
p, che il suo stesso indice) Se si fa una t(k) come quella del lemma pre-
cedente ma sostituendo "if x = k" con "if x = k", si ha per Kleene che - p :
W
t(p)
= W
p
. Per definizione di t : W
t(p)
= ( \ {p} Wp = ( \ {p}. ~

Lemma 3.5.f Se una funzione f:(A definita come
f(x) = max{
y
(z) | y, z s x } con max(C)=0
allora:
a) f non decrescente;
b) A un insieme infinito;
c) f non calcolabile.
40
Dimostrazione. I punti a e b sono ovvii, dimostriamo solo il punto c. De-
finiamo g(x) = f(x)+1. Ipotizziamo per assurdo che f sia calcolabile, allora g
calcolabile e totale. Ma se g calcolabile allora - k : g =
k

f(k) = max{
y
(z) | y, z s k }
Naturalmente
k
(k) appartiene allinsieme di cui si trova il massimo.
x si ha che g(x) > f(x), ma poich
k
(k) = g(k) allora f(k) s g(k) che as-
surdo, e quindi f non calcolabile. ~
Lemma 3.5.g Condizione necessaria, ma non sufficiente, affinch
una funzione f:AB non sia calcolabile che A oppure B sia infinito e
non ricorsivamente enumerabile.
Dimostrazione. Supponiamo B r.e. infinito, allora - K _ B ricorsivo infi-
nito (in realt la non esistenza di K implica che B non r.e.). Per cui K
enumerabile in modo strettamente crescente.
Se indichiamo con h(x) lx-esimo elemento di K, h calcolabile totale.
x si ha che h(x) > f(x), se indichiamo con h'(x) = h(x)+1 allora x si ha
che h'(x) > f(x)

n
= h'
f(n) >
n
(n) = h'(n) che assurdo. ~
41
3.6 Equivalenza Debole

Due MdT si dicono debolmente equivalenti se per ogni ingresso sul
quale entrambe terminano, danno lo stesso risultato. Cio, formalmente:
Z
i
~ Z
j
x
i
(x)+ .
j
(x)+
i
(x) =
j
(x)

La MdT che calcola O debolmente equivalente con tutte le altre.
Viene da chiedersi se ~ una relazione d'equivalenza, cio se gode
delle propriet riflessiva, simmetrica e transitiva. Si vede subito che gode
delle prime due, mentre non gode della terza. Ad esempio se definiamo
tre funzioni nel seguente modo:

|
=
=
altrimenti
x se
x
i
2 1
) (

j
(x) = | = O

= |
=
altrimenti
x se
x
k
1
2
) (
Si vede facilmente che:

i
~
j
.
j
~
k
ma
i
~
/

k


Indichiamo con C _(() linsieme delle classi massimali di computabi-
lit.
Un insieme CeC se:
- x, y e C si ha che Z
x
~ Z
y
(c' un insieme di indici di MdT debol-
mente equivalenti)
- } ne( tale che xeC Z
n
~ Z
x
(Se aggiungiamo un indice allinsieme,
questo rappresenter una MdT non debolmente equivalente con le altre
gi presenti nellinsieme C)

CeC - i
C
eC tale che i il minimo di C
C
I
= { i
C
| CeC } linsieme dei minimi di ogni CeC
Dato che O ~ a qualunque MdT allora tutte le MdT che calcolano O
saranno in C.
i
O
> i
C
C
I
finito; i suoi elementi vanno da C a i
O
. Quindi C
I
ricorsi-
vo.

42
Lemma 3.6.a Se indichiamo con E = { (i, j) | Z
i
~ Z
j
} linsieme delle
coppie di indici le cui MdT sono tra loro debolmente equivalenti, allora:
1) E non ricorsivo
2) E non ricorsivamente enumerabile.
Dimostrazione.
1) Se fissiamo il primo indice indichiamo con I
i
= { j | Z
i
~ Z
j
} linsieme
degli indici le cui MdT sono debolmente equivalenti a Z
i
.
Se applichiamo il Teorema di Rice su I
i
possiamo scrivere:
I
i
= { j |
j
e A } A = {
j
|
j
~
i
} (sicuro??pag 20a)
a) I
i
= C ie( perch Z
O
~ Z
x
x
b) I
i
= ( se i tale che
i
= O
Quindi I
i
non ricorsivo tranne il caso particolare (b) e ci implica an-
che che neanche E ricorsivo.
2) Indichiamo con E = { (i, j) | Z
i
~
/
Z
j
}. Occorre dimostrare che E
r.e. per provare che E non lo per il Teorema di Post. Definiamo una fun-
zione:

|
= . + . + -
=
altrimenti
x x passi n in x passi n in x n x se
j i f
j i j i
) ( Z ) ( Z ) ( Z ) ( Z : ) , ( 1
) , (
Non si pu fare lo stesso per E perch occorre provare che x Z
i
(x)
(??). La f calcolabile perch viene eseguita per un numero finito di passi.
Quindi E r.e. mentre E non lo . ~


Commento [PDS6]: Appunti pag.20b
43
3.7 Interprete e Terminazione

Linterprete un programma che permette di simulare tutti i pro-
grammi del formalismo.

Lemma 3.7.a Se un formalismo ammette un interprete e tutte le
funzioni sono totali allora si giunge ad una contraddizione.
Dimostrazione. Supporre che esista un interprete vuol dire che
x, n si ha che
y
(x, n) =
x
(n)
dove si indicato con x il programma, con n il suo input e con y
linterprete. Si ha quindi che se:
f(x) =
y
(x, x)+1 =
x
(x)+1
allora - k : f =
k
e quindi: f(k) =
k
(k) =
k
(k)+1
che evidentemente assurdo. ~

Metateorema 3.7.b Se in un formalismo il problema della termina-
zione decidibile allora non possibile definire un interprete e vicever-
sa.
Dimostrazione. Consideriamo un generico formalismo L i cui program-
mi assumono valori su un qualche dominio D {VERO, FALSO}. Suppo-
niamo che esista una funzione iniettiva R:PD (P = Programmi, D = Dati).
Definiamo le funzioni:
Terminate(R(p), d)=

+
altrimenti
d se
FALSO
) ( P VERO

Interpreta(R(p), d)=

|
+
altrimenti
d se d ) ( P ) ( P

Het(z) =

altrimenti VERO
z z Terminate se z z Interpreta ) , ( ) , (

Het sta per eterologico cio che non si applica a se stesso. Lesistenza
delle prime due funzioni implica lesistenza della terza. Ma mostriamo
che lesistenza delle prime due funzioni porta ad una contraddizione.
Vediamo cosa succede se viene eseguito Het(R(Het)). Ci sono due possibili-
t:
1) Het(R(Het))+ Terminate(R(Het), R(Het)) = VERO
Het(R(Het)) = Interpreta(R(Het), R(Het)) = Het(R(Het))
44
2) Het(R(Het))| Terminate(R(Het), R(Het)) = FALSO
Het(R(Het)) = VERO
ma entrambe queste possibilit portano ad una contraddizione. ~
3.8 Funzioni Primitive Ricorsive

La formalizzazione del concetto di algoritmo che abbiamo visto finora,
dovuta a Turing, non l'unica n' la prima storicamente. Formalismi di-
versi hanno avuto, e continuano ad avere(?) un posto rilevante soprattut-
to per certe applicazioni. Il primato storico appartiene alla teoria delle
funzioni ricorsive.
Il formalismo delle funzioni ricorsive si basa su due meccanismi di de-
finizione: la composizione e la definizione ricorsiva. La composizione
permette di definire una nuova funzione mediante l'applicazione "in ca-
scata" di pi funzioni note. Mentre il meccanismo di definizione ricorsiva
fornisce il valore assunto da una funzione per un argomento in termini
dei valori assunti dalla stessa funzione per argomenti pi piccoli. Prima-
ditutto definiamo una notazione utile allo scopo:

notazione: x.f(x), dove x largomento e f(x) il risultato.

Ad esempio la somma
xy.x+y
e per calcolare 3+5 si scrive (xy.x+y)3 5

Ora per formalizzare una metodo effettivo di definizione, ed usarlo
per definire classi di funzioni computabili, si parte da un certo insieme di
funzioni che si dicono:
Funzioni di base:
- O
k
= x
1
x
k
.0 k > 1 (funzione a k argomenti che restituisce sempre
0)
- S = x.x+1 (successore)
-
k
i
I = x
1
x
k
.x
i
1 s i s k, k > 1 (restituisce li-esimo di k argomenti)

Le funzioni di base si usano per costruire altre funzioni:
Composizione: data una funzione f di k variabili e g
i
con 1 s i s k fun-
zioni in m variabili, si pu costruire:
h = x
1
x
m
.f( g
1
(x
1
x
m
), , g
k
(x
1
x
m
))
Commento [PDS7]:
La dimostrazione precedente molto simi-
le a quella dello Halting Problem perch
anche in questo caso si fa uso di una fun-
zione "imbroglione", la funzione Het, che,
se si crede debba terminare, allora non
termina, altrimenti termina.

45
Ricorsione primitiva: date tre funzioni g, h e f rispettivamente in k1,
k+1 e k variabili si definisce:
f(0, x
2
, , x
k
) = g(x
2
, , x
k
)
f(y+1, x
2
, , x
k
) = h( y, f( y, x
2
, , x
k
), x
2
, , x
k
)

Partendo dalle funzioni base si possono quindi definire nuove funzioni
utilizzando la composizione e la ricorsione, da queste altre, e cos via. Le
funzioni che si ottengono cos si dicono primitive ricorsive. Pi esattamen-
te, la classe delle funzioni primitive ricorsive la minima classe di fun-
zioni base e che sia chiusa rispetto alla composizione e ricorsione primi-
tiva.
Si faccia attenzione a non confondere tra definizione di una funzione
primitiva ricorsiva (concetto simile a quello delle MdT) e funzione primi-
tiva ricorsiva in s (concetto simile a quello di funzione calcolabile, defi-
nito da una MdT).

Esempi di funzioni primitive ricorsive:
1) Funzione costante di k variabili che restituisce sempre 1
1
k
= x
1
x
k
.S(O
k
(x
1
x
k
))
2) Funzione ausiliaria per definire la somma
h' = xyz.Sum(
3
2
I (x, y, z),
3
3
I (x, y, z)) cio x(y+1) = xy+x
3) Somma
Sum(0, x) =
1
1
I (x)
Sum(y+1, x) = h( y, Sum( y, x), x) cio (y+1)+x = (y+x)+1
4) Prodotto
h' = xyz.Sum(
3
2
I (x, y, z),
3
3
I (x, y, z)) cio x(y+1) = xy+x
P(0, x) = O
1
(x)
P(y+1, x) = h'( y, P(x, y), x)

Calcolo del valore di P(2, 3)
P(2, 3) = h'(1, P(1, 3), 3)
P(1, 3) = h'(0, P(0, 3), 3)
P(0, 3) = O
1
(3) = 0
h'(0, 0, 3) = Sum(
3
2
I (0, 0, 3),
3
3
I (0, 0, 3)) = Sum(0,3)=
=
1
1
I (3) = 3
h'(1, 3, 3) = Sum(
3
2
I (1, 3, 3),
3
3
I (1, 3, 3)) = Sum(3, 3) =
46
= h(2, Sum(2, 3), 3) =

5) Fattoriale
h'' = xy.P(y, x+1) cio (x+1)! = x!(x+1)
0! = 1 fact(0) = 1
(y+1)! = y!(y+1) fact(x+1) = h''(x, fact(x))

Osserviamo che tutte le funzioni primitive ricorsive sono totali. Infatti
le funzioni di base sono totali, ed facile dimostrare che composizione e
ricorsione, partendo da funzioni totali, definiscono solo funzioni totali.
Quindi, per quanto visto precedentemente, non solo le funzioni calcolabi-
li non coincidono con le primitive ricorsive, ma esistono certamente fun-
zioni calcolabili totali non ricorsive primitive.
Un famoso esempio di tali funzioni definita nel seguente modo:
Funzione di Akermann
f(0, 0, y) = y
f(0, x+1, y) = f(0, x, y)+1
f(1, 0, y) = 0
f(z+2, 0, y) = 1
f(z+1, x+1, y) = f(z, f(z+1, x, y), y)

Questa funzione non esprimibile nel formalismo della ricorsione
primitiva. Per comprenderla meglio, studiamo il suo comportamento al
variare del primo argomento:
1 argomento = 0 (somma)
g
0
(x, y) = f(0, x, y) = x+1
g
0
(0, y) = y
g
0
(x+1, y) = g
0
(x, y)+1
1 argomento = 1 (prodotto)
g
1
(x, y) = f(1, x, y) = g
1
(x, y) = xy
g
1
(0, y) = 0
g
1
(x+1, y) = g
0
(g
1
(x, y), y)
1 argomento = 2 (esponenziale)
g
2
(x, y) = f(2, x, y) = y
x

g
2
(0, y) = 1
g
2
(x+1, y) = g
1
( g
2
(x, y), y)
1 argomento = 3 (superesponenziale)
g
3
(x, y) = f(3, x, y) = y elevato alla y per x volte
47
f(x, 0) = 1
f(x, 1) = |
f(x, 2) = 0
g
3
(0, y) = 1
g
3
(x+1, y) = g
2
(g
3
(x, y), y)

Quando il primo argomento fissato, le g
i
permettono di dire che la f
reppresentata da funzioni primitive ricorsive ( i = 0..3).


La funzione di Ackermann, utilizzando un meccanismo di ricorsione
detto 'ad incastro', cresce molto rapidamente. Ad esempio:
f(0) = f(0, 0, 0) = 0
f(1) = f(1, 1, 1) = 1
f(2) = f(2, 2, 2) = 4
f(3) = f(3, 3, 3) = 10
13
(3
27
)
una funzione calcolabile totale non ricorsiva primitiva perch cresce
pi rapidamente di ogni funzione primitiva ricorsiva.


3.9 Funzioni Ricorsive Generali

Per estendere le funzioni primitive ricorsive in modo che comprenda-
no tutte le funzioni calcolabili, sfruttiamo che data una funzione f totale,
la funzione:
g(x) = min{ y | f(x, y) = 0 }
pu essere parziale (se } y : f(x, y) = 0).
Quindi introduciamo un nuovo operatore che ci permette di fare l'e-
stensione desiderata:
Operatore di minimizzazione

y
(f(x, y) = 0) il minimo y tale che:
1) f(x, z) definito z s y e f(x, z) = 0;
2) f(x, y) = 0 se y esiste;
indefinita altrimenti.

Esempio:
Il pi piccolo y tale che f(x, y) = 0 2, ma f(x, 1)| quindi
il calcolo si fermer con z < y e precisamente con z=1.


48

Proposizione 3.9.a Se f(x, y) calcolabile, allora
y
(f(x, y)=0) calco-
labile.

Le funzioni ottenute dalle primitive ricorsive aggiungendo loperatore
di minimizzazione sono dette ricorsive generali.

Teorema 3.9.b La classe delle funzioni ricorsive generali coincide con
quella delle Turing calcolabili.
49
3.10 Esercizi conclusivi sulla computabilit

Provare che seguenti funzioni sono calcolabili ma non effettivamente:
1)

| . =
=
altrimenti
x Z x se
x f
x
0
) ) ( ( ) 2 ( 1
) (
2)

| . s
=
altrimenti
x x se
x f
x
0
) ) ( ( ) 3 ( 1
) (