Sei sulla pagina 1di 125

Appunti di Elementi di Informatica Teorica

by QuaDamge

A. A. 2006/2007
<ultima modifica 29 Settembre 2008>




INDICE

Linguaggi:

I Lezione (pag. 1) : Introduzione al Corso Alfabeti e Stringhe Automi

II Lezione (pag. 5): Automi DFA Linguaggi Regolari Introduzione Automi NDFA

III Lezione (pag. 8): Automi NDFA Relazione tra DFA ed NDFA (Teorema 2.1)

IV Lezione (pag. 14): fine Teorema 2.1 Propriet di chiusura sui Linguaggi regolari

V Lezione (pag. 19): Altre Propriet di chiusura Teorema di Kleene

VI Lezione (pag. 26): Espressioni regolari e teoremi
Seconda versione del Teorema di Kleene(prima parte)

VII Lezione (pag. 29): Seconda versione del Teorema di Kleene (seconda parte)
Pumping Lemma e teoremi conseguenti

VIII Lezione (pag. 34): Esercitazione sugli automi e le Espressioni regolari
Prima parte



Grammatiche:

VIII Lezione (pag. 37): Introduzione alle Grammatiche
Seconda parte

IX Lezione (pag. 39): Grammatiche C.F.: prime nozioni e teorema 1.2 (prima parte)

X Lezione (pag. 43): teorema 1.2 (seconda parte)

XI Lezione (pag. 46): Alberi di derivazione

XII Lezione (pag. 48): toremi sulle Derivazioni e gli Alberi di derivazione
Derivazioni estreme (a sx. e a dx.) Grammatiche Branching

XIII Lezione (pag. 52): teoremi sulla grammatica Branching e in Chomsky Normal Form Pumping Lemma
Propriet di chiusura Grammatiche Ambigue e Grammatiche Regolari

XIV Lezione (pag. 57): Grammatiche Separatrici teorema sulla Grammatica Regolare Automi a Pila

XV Lezione (pag. 62): Esempi sugli Automi Pushdown e relativi teoremi
Prima parte







Calcolabilit:

XV Lezione (pag. 64): Introduzione ai Linguaggi di Programmazione S-programmi
Seconda parte

XVI Lezione (pag. 71): Ricapitolazione e seguito concetti sugli S-programmi
Funzioni parzialmente calcolabili estensione delle Macro
Predicati - composizione di Funzioni Ricorsione

XVII Lezione (pag. 79): Classi PRC Funzioni e Predicati primitivi ricorsivi

XVIII Lezione (pag. 86): Operazioni iterate e Quantificatori Minimalizzazione
altre Funzioni e Predicati primitivi ricorsivi

XIX Lezione (pag. 98): Codifica numerica dei Programmi
Interruzione di un Predicato e
problema dellinsolvibilit dellarresto

XX Lezione (pag. 103): Teorema delluniversalit Programma Universale
Insiemi ricorsivi, non ricorsivi e primitivi ricorsivi

XXI Lezione (pag. 112): Teorema della Forma Normale Minimalizzazione propria
Insiemi ricorsivamente enumerabili e relativi teoremi
Esercitazione finale (pag. 120)



















Lettere greche utilizzate:

alfa - beta - gamma - gamma in maiuscolo - delta - delta in maiuscolo -
epsilon - ni - pi in maiuscolo - sigma - sigma in maiuscolo - tau -
phi in maiuscolo - psi - omega in maiuscolo.



Linguaggi

Prima Lezione
26/09/2006
Introduzione al Corso Alfabeti e Stringhe
Automi

Breve Introduzione

Il Corso di Elementi di Informatica Teorica si prefigge il compito di analizzare prevalentemente
problemi di:
DECISIONE
e di
GENERAZIONE

Al primo caso appartengono ad esempio problemi del tipo: x un numero primo ?, mentre al se-
condo appartengono problemi del tipo, ad esempio : qual lennesimo numero primo?.


Nozioni di base Alfabeti e Stringhe
(rif. D.S.W. pag. 4)

DEFF.: lALFABETO A un insieme finito e non vuoto di simboli;

Dallalfabeto si generano le parole: la PAROLA o STRINGA su A: una n-pla di simboli di A

Denotata cos: ( )
1 2
, , ,
n
a a a o pi semplicemente
1 2 n
a a a .

Se
1 2 n
u a a a = allora la LUNGHEZZA di u n e si scrive:

= u n

e pu essere vista come la funzione che, avendo come argomento u, restituisce la lunghezza di u.

PAROLA NULLA o STRINGA VUOTA: la parola o 0, la quale, come vedremo, importante ad
esempio per le definizioni e dimostrazioni per induzione.

Risulta: = 0 oppure = 0 0 e = = 0 0 , u u u u

(non bisogna fare confusione tra il simbolo 0, come stringa vuota, e 0, come numero zero).


Linsieme di tutte le parole su A denotato con

A



e si legge: A stella, oppure A star.

Se { } , A a b = allora { } 0, , , , , , , , , , ... A a b ab ba aa bb aab bba bbb

=


EDIT by Qd Linguaggi I Lez.
2
Il linguaggio A

infinito.

Con LINGUAGGIO si intende un sottoinsieme L di A

: L A

,
quindi un linguaggio pu essere infinito (a differenza dellalfabeto A)
.
Due linguaggi banali sono: L A

= e L = .

CONCATENAZIONE: se due stringhe , u v A

, con la scrittura:

uv o semplicemente uv

si indica la stringa che si ottiene ponendo (giustapponendo) la stringa v dopo la stringa u.
Uninferenza immediata (conseguenza della definizione appena data) che:

uv vu u v = = .

CONCATENZAZIONE REITERATA: se u A

, per convenzione si avr:



[ ] 1
u u = ,
[ ] 0
0 u = e
[ ]
volte
, 0
n
n
u uuu uu n =


(le parentesi quadre allapice [] possono anche essere omesse, avremo quindi
n
u in luogo di
[ ] n
u ).

Risulta chiaramente:
[ ] n
u n u = .

SCRITTURA AL CONTRARIO: se
1 2 1
,
n n
u A u a a a a

= , avremo:

1 2 1
R
n n
u a a a a

= .

Risulta in particolare: 0 0
R
= e, se u a = con a A ,
R
u u = .


Automi
(rif. D.S.W. pag 237)

Un AUTOMA finito, detto anche DFA (deterministic finite automaton), una struttura matematica
che rappresenta un dispositivo (non necessariamente realizzabile nella pratica, non avendo infatti limiti,
essendo un concetto teorico) che prende in input una stringa, un simbolo alla volta, da sinistra a de-
stra e cambia il suo stato interno, ovvero avvengono delle eventuali modifiche della struttura (nella pra-
tica la dimensione dellinput potrebbe essere un problema, data la complessit del problema in termini
di spazio e di tempo).
Lesempio pi semplice (e quello che si utilizzer per i fini di questo corso) quello di automa che
riconosce o meno un linguaggio, tale automa riceve in input parole di un determinato linguaggio e d
in output due possibili valori: SI oppure NO (tali valori corrispondono allo stato in cui perverr
lautoma alla fine della lettura, tale concetto sar chiaro a breve).
Linput rappresentato da una sequenza finita di simboli che pu essere arbitrariamente lunga.


EDIT by Qd Linguaggi I Lez.
3
Formalmente un AUTOMA FINITO ` sullalfabeto { }
1 2
, , ,
n
A s s s = ; con Stati
{ }
1 2
, , ,
m
Q q q q = ; F Q detto Insieme degli Stati di Accettazione (o stati finali);
1
q per convenzione
lo Stato Iniziale; costituito dalla Funzione detta di Transizione che associa ad ogni coppia
( )
,
i j
q s
uno stato
k
q :
: Q A Q , con ,
i k
q q Q e
1
1
i m
j n


;
la quintupla: ( )
1
, , , , A Q F q = ` .

Nel caso dellesempio di automa che riconosce o meno una data stringa u, se alla fine della lettura
della stringa (partendo dallo stato iniziale), lautoma si trova in uno stato q F allora diremo che
lautoma accetta la stringa u, se invece, alla fine della lettura di tutti i simboli di u, lautoma perviene in
uno stato q Q F , vorr dire che lautoma non ha accettato la stringa.


Esempio di automa finito ` :

{ } , A a b = ,
{ }
3
F q = ,
{ }
1 2 3 4
, , , Q q q q q =

Dalla tabella di transizione (che rappresenta i possibili valori che assume la funzione di transizione) si
evince che se lautoma si trova ad esempio nello stato
2
q e riceve in input il
simbolo a, non cambia stato, analogamente succede quando si trova nello
stato
3
q e riceve in input il simbolo b. Lo stato
4
q invece rappresenta uno
stato trappola (o pozzo) in quanto, nel momento in cui lautoma perviene
allo stato
4
q ci resta per sempre, indipendentemente dal simbolo che legge.

A destra la rappresentazio-
ne grafica dellautoma `
appena descritto, mediante
grafi (la freccia sul cerchio del-
lo stato
1
q indica che quello
lo stato iniziale, mentre il
doppio cerchio indica uno sta-
to di accettazione:

Ora che stato definito
lautoma ` verifichiamo, ad
esempio, che sia accettata la
stringa baba:

( )
1 4
, q b q = ,
( )
4 4
, q a q = ,
( )
4 4
, q b q = ,
( )
4 4
, q a q = .

Riscontriamo subito che
4
q F , quindi baba non accettata da ` .
a b

1
q
2
q
4
q
2
q
2
q
3
q
3
q
4
q
3
q
4
q
4
q
4
q

1
q

2
q

3
q

4
q
a
a
b
b
a
b
a
b

EDIT by Qd Linguaggi I Lez.
4
Vediamo invece la stringa aabbb:

( )
1 2
, q a q = , ( )
2 2
, q a q = , ( )
2 3
, q b q = ,
( )
3 3
, q b q = ,
( )
3 3
, q b q = .

3
q F , quindi la stringa aabbb accettata dallautoma.


Nozione di
*
:

Rappresenta unestensione della funzione alle stringhe. detta funzione delta stella ( o delta star) e
associa alla coppia ( ) ,
i
q u lo stato
k
q Q con
i
q Q e u A

. Il simbolo
k
q rappresenta lo stato a cui
perverr lautoma su A dopo aver letto (partendo dallo stato
i
q ) tutta la stringa u simbolo dopo simbo-
lo.
: Q A Q

da non confondere con : Q A Q
A

linsieme delle stringe, mentre


A linsieme dei simboli (alfabeto)
Definiamo ricorsivamente

:

passo base ( ) , 0
i i
q q

= ; ovviamente se lautoma non riceve


nulla in input, cio la stringa vuota,
il suo stato non cambier, quindi
resta in
i
q


passo ricorsivo ( ) ( ) ( )
, , ,
i i j
q v q u s

= se
j
v us = .

Per definire il passo ricorsivo per una generica stringa di lunghezza arbitraria non nulla, abbiamo spez-
zettato la stringa in due parti
j
v us = dove u una stringa (pi piccola di v) ed
j
s un simbolo
(lultimo simbolo di v), se v k = , 1 u k = .
Poich ( ) ,
i k
q u q

= , possiamo benissimo sfruttare la (che conosciamo) per passarle come argomen-


to ( ) ,
i
q u

(il cui valore non altro che uno stato) e il simbolo


j
s , quindi la scrittura ( ) ( )
, ,
i j
q u s


ben formulata, essa rappresenta in pratica lo stato a cui perverr lautoma quando avr letto prima tut-
ta la stringa u e poi il simbolo
j
s .
La definizione ricorsiva ben posta in quanto ogni stringa pu essere passata come argomento a

e,
nota la tabella di transizione dellautoma, si sar in grado di calcolarla ricorsivamente (la presenza di
j
s
ci assicura che

, nel passo ricorsivo, non riceva la stringa vuota).





Seconda Lezione
29/09/2006
Automi DFA Linguaggi Regolari
Introduzione Automi NDFA

Nellambito degli automi, laspetto implementativo non ci interessa, invece importante approfon-
dire laspetto teorico, ci interessa studiare il funzionamento degli automi, ma non come potrebbero esse-
re, nella pratica, realizzati.
Ricapitolando, un automa ` costituito dallinsieme A (alfabeto su cui opera), Q (insieme di
tutti i possibili stati dellautoma, Q un insieme finito), F (sottoinsieme -non proprio- di Q, rappresen-
ta linsieme degli stati di accettazione, o finali, di ` ), uno stato iniziale
1
q Q e una funzione (di
transizione): Q A Q ,
( )
,
p j k
q s q = con ,
p k
q q Q e
j
s A .

Ricordiamo che ( ) ,
i
q u

(con u stringa di A

) denota lo stato al quale accede un automa finito


` ( )
1
, , , q F Q A se si trova prima nello stato
i
q allestremit sinistra di u e poi quando ha com-
pletato la scansione di tutta la stringa (simbolo dopo simbolo), abbiamo:

: Q A Q



passo base ( ) , 0
i i
q q

= ;


passo ricorsivo ( ) ( ) ( )
, , ,
i i j
q v q u s

= se
j
v us =
( ( ) ,
i
q u

rappresenta lo stato di ` quando stata letta tutta la stin-


ga u).

Esempio sulluso di

:

( ) ,
i
q v

= con
j
v s = , possiamo scrivere v come
stringa 0
j
v s =

( ) ( ) ( )
, 0 , 0 ,
i j i j
q s q s

= = =
( )
,
i j
q s

Quindi : ( ) ( )
, ,
i i j
q v q s

= .


Linguaggi

Linsieme L A

detto linguaggio (in generale non detto che A

sia un linguaggio, un linguag-


gio a differenza del suo alfabeto pu anche essere infinito, essendo un sottoinsieme di A

).

Si dice che un linguaggio regolare se esiste un automa ` che lo accetta (cio che accetta tutti e
soltanto i suoi elementi, ovvero tutte e soltanto le sue stringhe), un linguaggio accettato da ` si denota
con ( ) L ` e formalmente si scrive:

EDIT by Qd Linguaggi II Lez.
6
( ) ( ) { }
1
| , L u A q u F

= ` con ( )
1
, , , q F Q A = ` .
Ci significa che il linguaggio L accettato da ` se costituito (soltanto) da tutte le stringhe u A


per cui ` , partendo dallo stato iniziale
1
q , giunge in uno degli stati finali di ` ,
k
q F .

Un linguaggio non regolare se non esiste alcun automa che lo accetta. In pratica

( ) ( )
1
: | , L L u q u Q F

`
(quindi se vi pure solo una stringa non accettata dallautoma, il linguaggio L non regolare.

TEOREMA: La regolarit di un linguaggio non dipende strettamente dallalfabeto, come mostrato da
quanto segue:
sia L A

e A B allora vale la seguente equivalenza:





L regolare, sia ` un automa che opera sullalfabeto A e che accetta L , abbiamo che ( ) L L = `
` su B: ( ) L L = ` .

Ad esempio: se { } , A a b = e { } , , B a b c = allora ` (su A): ( ) ( ) L L ` ` , con ` su B;
se chiaramente risulta L A

, { }
2
F q = abbiamo:





Vediamo un sistema generale per dimostrare la biiezione:
DIM. : Vogliamo dimostrare che se ` su B che accetta L A

` su A che accetta
L A

(restrizione di su A). banale mostrare che ` accetta L A

se e solo se ` perverr
allo stato finale senza leggere simboli o stringhe che contengono simboli appartenenti a B A , altri-
menti ( ) L L ` , o anche L A

.


1
q

2
q
b
a
a, b
: `

3
q
a, b
c
c

1
q

2
q
b
a
a, b
: `
A
B

EDIT by Qd Linguaggi II Lez.
7
DIM. : Vogliamo dimostrare che se ` su A che accetta L A

` su B che accetta L.
Partendo da ` , basta trovare almeno un ` su B che accetta L (espansione), quindi poniamo:

i
q di ` e simbolo b B A : ( ) ,
i
q b q =
e ( ) , q s q = con q F s B

Mentre le altre transizioni restano immutate rispetto a quelle dellautoma ` .

q un nuovo stato di ` (che non deve essere di accettazione), esso rappresenta lo stato trappola a cui
perviene lautoma ` se prende in input un simbolo b B A , quindi b A (vedere esempio pre-
cedente). Di conseguenza ` accetta lo stesso linguaggio di ` .


Automi Non Deterministici
(rif. D.S.W. pag. 242)

Partiamo con un esempio di Automa Non Deterministico (NDFA Nondeterministic Finite Automa-
ton) per comprenderne la natura:

sia { } , A a b = lalfabeto ed
{ }
4
F q = linsieme degli stati di ac-
cettazione, la funzione di transizione un po particolare ed co-
s descritta:

Quando lautoma NDFA perviene allo stato vuoto vuol dire
che non far nulla, anche nelleventualit che la stringa venga let-
ta fino alla fine, per c da dire che lNDFA ha la particolarit di
poter pervenire in nessuno, uno o pi stati contemporaneamente,
cio, se definita in un certo modo, lNDFA ha il potere di
percorrere pi strade differenti allo stesso tempo. Quindi se ad un certo punto lNDFA perviene allo sta-
to probabile che possa proseguire per unaltra strada. importante notare che non da confon-
dere con il cappio visto nella rappresentazione grafica, in quanto linsieme indica che una determina-
ta strada dellautoma bloccata. Il cappio invece (ad esempio
{ } { }
4 4
, q a q = ) indica che lautoma, ri-
cevendo in input il simbolo a, rimasto sempre nello stesso stato, magari al passo successivo potrebbe
transitare in un altro stato, con un input differente.


a b

1
q
{ }
1 2
, q q
{ }
1 3
, q q
2
q
{ }
4
q

3
q
{ }
4
q
4
q
{ }
4
q
{ }
4
q

Terza Lezione
3/10/2006
Automi NDFA
Relazione tra DFA ed NDFA (teorema 2.1)


Gli automi non deterministici sono un concetto teorico non realizzabile nella pratica, ma le sue
propriet sono utili per risolvere dei problemi per i quali percorrendo certe strade lungo gli stati
dellautoma, certi percorsi (rami) vengono scartati per prenderne altri (come si vedr nelle dimostrazioni
di alcuni teoremi).
Diamo ora una definizione formale di Automa Non Deterministico:

su A con Q ed F dato dalla funzione (che una funzione differente da quella utilizzata per gli au-
tomi deterministici DFA deterministic finite automata) definita cos:


( )
,
i j i
q s Q , con
i
Q Q (quindi pu essere anche )

: Q A X

X linsieme delle parti di Q
{ } |
i i
X Q Q Q =
( X Q , mentre Q X ,
( ) ,
i j
q s Q , con
i
Q X .
Se { } , Q a b = allora { } { } { } { } , , , , X a b a b = .

Mentre prima, per i DFA,
( )
,
i j
q s rappresentava uno stato, per gli NDFA
( )
,
i j
q s rappresenta un in-
sieme di stati. Quindi, in questo caso, una stringa sar accettata dallNDFA se esso perverr in almeno
uno degli stati di accettazione.
Formalizziamo questultimo concetto definendo prima la funzione

per gli NDFA, sempre ricorsi-


vamente:

:
i
Q A Q



passo base ( ) { } , 0
i i
q q

=

ricevendo la stringa vuota lNDFA resta nello stato corrente (come il DFA) solo che dobbiamo so-
stituire a
i
q il suo singleton { }
i
q per come abbiamo definito per lNDFA;

passo ricorsivo ( ) ( )
( )
,
, ,
i j
i
q q u
q w q s

=



si prende lunione di tutti gli stati a cui perviene lNDFA alla fine della lettura di u con
j
w us =
( w k = , 1 u k = ). Dopodich viene letto lultimo simbolo. Alla fine della lettura di u lautoma
non deterministico si trover in uno o pi stati, ecco perch necessario luso del simbolo di unione
, per ogni stato a cui pervenuto lNDFA viene letto lultimo simbolo
j
s della stringa w, il risultato
finale un sottoinsieme di Q,
i
Q Q ( ( ) ,
i
q u Q

).

Analogamente ai DFA , stipuliamo
1
q come stato iniziale dellNDFA.

EDIT by Qd Linguaggi III Lez.
9
Ora possiamo formalizzare che una stringa accettata da un automa non deterministico su A se:

( )
1
, , u A q u F



Ci vuol dire che lautoma non deterministico che accetta la stringa u alla fine della lettura dovr trovar-
si in almeno uno degli stati finali, ecco perch si richiede che lintersezione tra F e ( )
1
, q u

sia non
vuota (devono cio avere almeno un elemento in comune).

Il linguaggio accettato da un NDFA linsieme ( ) L ` costituito da tutte le stringhe accettate da
` (NDFA).

Da sottolineare che un DFA non affatto un particolare tipo di NDFA in quanto la ha condominio
differente:
DFA
: Q A Q

mentre
NDFA
: Q A X

, con { } |
i i
X Q Q Q = .


TEOREMA 2.1 (rif. D.S.W. pag. 244): Un linguaggio L accettato da un NDFA ` L accettato da
un DFA `

(
( )
L L = `

). Cio L accettato da un NDFA se e solo se L regolare.



DIM. : Vogliamo provare che se L regolare allora L accettato da un NDFA: ci immediato in
quanto si pu definire la { }
NDFA
( , )
i j k
q s q = in luogo di
DFA
( , )
i j k
q s q = , possiamo anche scrivere
{ }
NDFA DFA
( , ) ( , )
i j i j
q s q s = , lautoma non deterministico avr gli stessi stati (anche di accettazione)
dellautoma deterministico. chiaro che il linguaggio accettato dallautoma deterministico lo stesso
che accetter lautoma non deterministico.

DIM. : Dimostriamo ora che se L accettato da ` (dove ` un NDFA), allora L regolare,
cio ( ) L L = `

. Dobbiamo costruire un DFA che accetti il linguaggio accettato dal NDFA.


la funzione di transizione di ` , F linsieme degli stati di accettazione ( F Q ) e
{ }
, , ,
1 2
q q
m
q Q = linsieme dei suoi stati.
Vogliamo provare che ( ) ( ) L L L = = ` `

.

Costruiamo un DFA `

sullo stesso alfabeto A di ` . `

avr 2
m
stati, tale numero corrisponde a
tutte le parti di Q, cio costruiamo un automa `

con gli stati, ognuno dei quali rappresenta un sot-


toinsieme di Q (insieme degli stati di ` ), incluso linsieme vuoto . Quindi linsieme degli stati di
`

sar
{ }
1 2
2
, , ,
m
Q Q Q Q =

(
i
Q X , X linsieme delle parti di Q). Definiamo lo stato iniziale di
`

come { }
1 1
Q q = . Ora scegliamo linsieme degli stati di accettazione di `

,
{ } |
i i
Q Q F = Y ( Q Y

). Y stato scelto in modo tale da contenere tutti quegli stati di DFA
che contengono almeno un elemento (stato di NDFA) in comune a F (insieme degli stati di accettazione di ` ).
Definiamo ora la funzione di transizione di `

, ( ) ( ) , ,
i
i
q Q
Q s q s

( : Q A Q

,
NDFA
( , ) q s un
sottoinsieme di Q che quindi contiene nessuno, uno o pi elementi (insieme di stati) di Q, a ( , )
i
Q s

viene associata
lunione degli stati a cui perviene ` quando questo si trova in uno degli stati
i
q Q ).




EDIT by Qd Linguaggi III Lez.
10
Abbiamo dunque definito il seguente automa
( )
=

1
, , , , A Q Q ` Y :

A lalfabeto su cui opera anche ` ;
{ }
1 2
2
, , ,
m
Q Q Q Q =

;
{ } |
i i
Q Q F = Y ;
( ) ( ) , ,
i
i
q Q
Q s q s

;
{ }
1 1
Q q = .


Per continuare la dimostrazione necessario enunciare il seguente
LEMMA 1 (il lemma un teorema di importanza minore, o che comunque utilizzato prevalentemente per la dimo-
strazione di teoremi pi importanti): Sia R Q

(ricordiamo che Q

linsieme degli stati di


DFA
`

), si ha:

( ) , ,
i i
i i
Q R Q R
Q s Q s


=







Tale scrittura corretta per il DFA da noi definito in quanto lunione di tutti gli elementi di R an-
cora un elemento di Q

(insieme degli stati di

` ).

Il lemma dice che il

dellunione di tutti gli elementi di R e di s uguale allunione di tutti i

di
i
Q R e di s.

DIM.: poniamo:
i
i
Q R
Q Q

in pratica scegliamo R in modo tale che unendo


tutti i suoi elementi otteniamo linsieme Q
(R pu assumere quindi varie conforma-
zioni)

Possiamo quindi scrivere: ( ) , ,
i
i
Q R
Q s Q s






Dalla definizione che abbiamo dato per

di
DFA

` ( ( ) ( ) , ,
i
i
q Q
Q s q s

) possiamo scrivere:

( ) ( ) , ,
q Q
Q s q s

stiamo applicando la definizione di

solo che al
posto di
i
Q scriviamo Q


EDIT by Qd Linguaggi III Lez.
11
Sfruttando otteniamo: ( ) ( ) , ,
i i
q Q Q R q Q
q s q s

=

( ) ,
q Q
i
Q R
i
q s

(lunione delle unioni di


( ) , q s con
i
q Q e
i
Q R


Riutilizzando la definizione di

si ha:

( ) ( ) , ,
i
i
R
i i
Q R q Q Q
q s Q s


.

Concludendo = ,ovvero: ( ) , ,
i i
i
i
Q R
R Q
Q s Q s



=





.


Passiamo al LEMMA 2:

, u A

( ) ( ) , ,
i
i
q Q
Q u q u

.

Il lemma dice che, quando lautoma DFA da noi definito si trova nello stato
i
Q e legge la parola u, la
funzione di transizione su stringhe

definita su
DFA

` assumer il valore corrispondente allunione di


tutti gli stati a cui perverr lautoma non deterministico
NDFA
` quando si trover in uno degli stati q
contenuti in
i
Q e quando legge la stringa u.

DIM.: il lemma si dimostra per induzione sulla lunghezza della parola u:

passo base: 0 u = , quindi 0 u = , si ha:

{ } , 0
i i
Q Q



questa posizione vera per la definizione del caso base di ricorsione della funzione

di un generico
automa finito (deterministico), si ha infatti;

possiamo esprimere
i
Q cos: { }
i
i
q Q
Q q

=



questultima una banale inferenza,
i
Q costituito dallunione di tutti i singleton degli elementi q ap-
partenenti a
i
Q , da cui abbiamo:

{ } ( ) , 0
i i
q Q q Q
q q





EDIT by Qd Linguaggi III Lez.
12
questa uguaglianza si ricava ricordando la definizione che si data per

degli automi non determini-


stico ( ) { }
[ ]
, 0 q q

= , quindi lunione di tutti i


i
q Q sar uguale allunione di tutte le ( ) , 0 q

con
i
q Q .

Quindi per 0 u = il lemma 2 dimostrato:

( ) ( ) , 0 , 0
i i
i
q Q
Q Q q

= =

.

Ipotizzando che il lemma 2 sia vero per u l = (ipotesi di induzione), eseguiamo il seguente:

passo dinduzione: 1 u l = + , poniamo u vs = ( s A ) dove v l = , quindi immediato scrivere:
( ) ( ) , ,
i i
Q u Q vs



e

( ) ( )
( )
, , ,
i i
Q vs Q v s

=


si applicata semplicemente la definizione di

per gli automi deterministici;




( )
( ) ( ) , , , ,
i
i
q Q
Q v s q v s



in questultima uguaglianza non si fatto altro che sostituire ( ) ,
i
Q v

con ( ) ,
i
q Q
q v

, questi due
termini sono uguali per lipotesi di induzione secondo la quale il lemma 2 vero per v l =
(rammentiamo che dimostrare per induzione significa dimostrare il caso base, dopodich presumendo vero
il passo k basta dimostrare che il passo 1 k + vero, quindi la dimostrazione fatta).

Ora applichiamo il lemma 1 alla formula:

( ) ( ) ( )
, , , ,
i i
q Q q Q
q v s q v s



=






nel lemma 1 abbiamo al posto di ( ) , q v

linsieme
i
Q , del resto ( ) , q v Q

e risulta anche
( ) , q v Q


, proprio come
i
Q Q

, quindi
i
Q e ( ) , q v

fanno parte dello stesso insieme e quindi


su ( ) , q v

applicabile il lemma 1.

Ora, applicando la definizione di

per un DFA data nel teorema 2.1, otteniamo:



( ) ( ) ( )
( )
,
, , ,
i i
q Q q Q
r q v
q v s r s




EDIT by Qd Linguaggi III Lez.
13
r rappresenta uno stato, uno dei possibili stati raggiungibili dallautoma non deterministico;
ricordiamo che ( ) , q v Q

, ( ) , q v Q


e ( ) ( ) , ,
i
i
q Q
Q s q s

,
per questo lemma applicare la

invece che a
i
Q a ( ) , q v

legittimo in quanto ( ) , q v

come
i
Q
appartengono allo stesso insieme Q

(sono della stessa natura);



applichiamo adesso (a ritroso) il passo di induzione della funzione di transizione

degli automi non


deterministici ( ( ) ( )
( ) ,
, ,
j j
i
q q u
q us q s

=

) si ottiene:

( )
( )
( )
,
, ,
i i
q Q q Q
r q v
r s q vs

=

;


poich avevamo posto u vs = abbiamo:

( ) ( ) , ,
i i
q Q q Q
q vs q u


.

Quindi: ( ) ( ) , ,
i
i
q Q
Q u q u


avendo dimostrato il lemma per 1 u l = + , il teorema dimostrato.


Quarta Lezione
10/10/2006
fine teorema 2.1
Propriet di chiusura sui Linguaggi regolari


Al fine di dimostrare il teorema vediamo il terzo e ultimo lemma.

LEMMA 3: ( )
( )
L L = ` `



In base a come abbiamo definito i due automi
NDFA
` ed
DFA
`

, il lemma 3 ci dice che il linguaggio ac-


cettato da ` lo stesso che accettato da `

.

DIM.: per come abbiamo definito lautoma deterministico e per la definizione di stringa accetta da un
DFA abbiamo:

( )
( )
1
: , u L Q u



` Y

Dal lemma 2 otteniamo:
( ) { } ( ) ( )
1 1 1
, , , Q u q u q u

= =



per come abbiamo definito lo stato iniziale di `

, { }
1 1
Q q = ,
a

che applichiamo il lemma 2: ( ) ( ) , ,


i
i
q Q
Q u q u

, solo che in questo caso


{ }
1 1 i
Q Q q = = che, essendo il singleton di
1
q , un unico elemento, quindi il simbolo inutile,
1 1
q Q e
1
q lunico elemento appartenente a
1
Q .

Dobbiamo mostrare che u accettato anche da ` in modo biunivoco, dallultima uguaglianza otte-
niamo:

( )
( )
1
, u L q u

` Y

,

( )
( )
1
, u L q u F



questultima biiezione valida per come abbiamo definito `

e { } |
i i
Q Q F = Y

Dalla precedente biiezione, che nientaltro che la definizione di stringa accettata da un automa non
deterministico, deriva la seguente:
( )
( ) u L u L ` `


Ci vuol dire che
( )
( ) L L L = = ` `

il risultato che volevamo ottenere per la dimostrazione del teo-


rema 2.1.


EDIT by Qd Linguaggi IV Lez.
15
Propriet di chiusura (per i linguaggi)
(rif. D.S.W. pag. 249)

I linguaggi regolari sono chiusi rispetto a varie operazioni. Al fine di dimostrare alcuni teoremi rela-
tivi a queste propriet definiamo il seguente:

DEF.: DFA Non Restarting (NRDFA), che un automa finito deterministico che ha la seguente propriet:

( ) ( )
1
, | , q s q s q =

In pratica lNRDFA non ripassa per lo stato iniziale (non esiste alcun stato q tale che lautoma pervenga nello stato
iniziale
1
q ).

TEOREMA 4.1: Dato un DFA ` si pu costruire un NRDFA `

tale che ( )
( )
L L = ` `

.

Il teorema ci dice che un linguaggio regolare accettato anche da un automa finito deterministico non
restarting.

DIM.: Costruiamo lNRDFA `

in modo che accetti ( ) L ` . Sia { }


1 2
, , ,
n
Q q q q = linsieme degli
stati di ` con
1
q lo stato iniziale, F linsieme degli stati di accettazione ( F Q ) e la funzione di
transizione.
Q

linsieme degli stati di `

(lo costruiamo con uno stato aggiuntivo rispetto a ` ):



{ }
1 n
Q Q q
+
=

con
1
q lo stato iniziale,

La funzione di transizione di `

cos definita:

( )
( ) ( )
( )
1
1 1
se e
se e
, ,
,
,
n
q Q q s q q s
q s
q Q q s q q

=

=

e

( ) ( )
1 1
, ,
n
q s q s
+
=



Lautoma appena definito ha una funzione di transizione

che si comporta come la funzione di


` , tranne che nei casi in cui lautoma dovrebbe eventualmente transitare per lo stato iniziale
1
q , infatti
se ( )
1
, q s q = la funzione

invece di far transitare `

in
1
q , lo fa andare nel nuovo stato
1 n
q
+
.
Invece, quando `

si trova nello stato


1 n
q
+
si comporta come se stesse nello stato
1
q , infatti si ha
( ) ( )
1 1
, ,
n
q s q s
+
=

.

Definiamo ora linsieme degli stati finali F

di `

:

{ }
1
1 1
se
se
n
F q F
F
q F q F
+




EDIT by Qd Linguaggi IV Lez.
16
Nel caso in cui ` ha tra gli stati di accettazione proprio lo stato iniziale
1
q allora `

verr indiriz-
zato verso
1 n
q
+
(ovviamente se, per ipotesi, abbiamo che ` non restarting, il teorema banalmente
dimostrato).
Da notare che non sarebbe corretto definire { } { }
1 1 n
F F q q
+
=

in quanto legittimo che `

pos-
sa avere tra gli stati finali proprio { }
1
q , ad esempio quando viene letta la stringa vuota, nel caso questa
appartenga ad un linguaggio regolare, lautoma non transita in alcuno stato e resta nello stato iniziale che
sarebbe anche quello di accettazione.

Lautoma `

NRDFA cos definito accetta lo stesso linguaggio di ` anche se non ripassa per
1
q e ha
uno stato in pi. Quindi ( )
( )
L L = ` `

c.v.d.

TEOREMA 4.2 : se L e L

sono due linguaggi regolari lo anche L L



.

DIM.: Senza perdere di generalit, per il teorema 4.1 si considerano per la dimostrazione due NRDFA
` ed `

che accettano rispettivamente L e L

, tali automi operano sullo stesso alfabeto A, neanche


in questo caso si perde di generalit, infatti ricordiamo che il linguaggio riconosciuto da un automa non
dipende dallalfabeto utilizzato:

( )
NRDFA 1
, , , , A Q q F = ` e
( )
NRDFA 1
, , , , A Q q F = `

,

imponiamo inoltre che tali automi non abbiano stati in comune cio (insieme degli stati disgiunti) :
Q Q =

.

Senza perdita di generalit (per il teorema 2.1) ora costruiamo un automa non deterministico che accetti
il linguaggio L L

,

` :

( ) NDFA 1

, , , , Q q F A = `

{ } { }
1 1 1

, Q Q Q q q q =



lautoma

` ha gli stessi stati di ` ed `

tranne i loro stati iniziali


1
q e
1
q ,

` possiede un suo
stato iniziale
1

q ;


{ } { }
1 1 1 1 1
o se
altrimenti

q q F
F F q q q F
F
F F



linsieme degli stati finali

F di

` costituito da tutti gli stati finali di ` ed`

ad eccezione de-
gli stati iniziali se presenti tra gli stati iniziali, questi due vengono rimpiazzati dallo stato iniziale di

`
1

q ;

( )
( ) { } { }
( ) { } { }
1
1
se
se
,

,
,
q s q Q q
q s
q s q Q q





EDIT by Qd Linguaggi IV Lez.
17
la funzione

si comporter come i due automi finiti non restarting ` ed`

, per essendo

`
un automa non deterministico dobbiamo considerare i singleton nel condominio della funzione di transi-
zione. Manca da definire la transizione dallo stato iniziale:

( ) ( ) { } ( ) { }
1 1 1

, , , q s q s q s =



quindi lautoma

` , leggendo s quando si trova nello stato iniziale transita contemporaneamente agli


stati in cui transiterebbero ` ed `

alla lettura di s partendo dagli stati iniziali


1
q e
1
q , graficamente
possiamo rappresentarlo cos:



stato costruito un NDFA che obbligato a seguire entrambe le strade di ` ed `

.

Lautoma `

NDFA accetta entrambi (e soltanto) i linguaggi L ed L

, quindi si pu concludere che ac-


cetta il linguaggio
( )
= `

L L L , c.v.d.

Le condizioni =

Q Q e il fatto che gli automi da cui siamo partiti sono non restarting ci assicura
che `

obbligato a riconoscere unicamente



L L .


TEOREMA 4.3: Se

L A ed L regolare allora

A L regolare.

A L il complemento di L rispetto ad A.

DIM.: Come al solito per dimostrare la regolarit di

A L basta trovare un automa


finito che riconosca tale insieme. Partendo da un DFA ` su A con Q ed F sceglia-
mo un DFA ` quasi identico a ` . ` accetta tutte le stringhe che ` rifiuta,
quindi abbiamo: = F Q F (gli stati di accettazione di ` corrispondono a tutti gli stati che
non sono di accettazione per ` ), quindi il nuovo automa accetta

A L .
`
`


( )
`

( ) `

`
L
A L



EDIT by Qd Linguaggi IV Lez.
18
Ad esempio ( )
1
, , , , Q q F A ` P , { } = , A a b , { }

= 0, , , , , A a b ab aab , { } =
1 2 3
, , Q q q q ,
{ } =
3
F q , ( )
[ ] [ ]
{ } | 0, 0
n m
L b a b n m = > `


Mentre abbiamo: ( ) = `
1
, , , , Q q F A , { } = =
1 2
, F Q F q q :


evidente che lautoma ` non accetta le stringhe del linguaggio L, ma accetta
( ) { }
[ ] [ ]
{ }

= = = ` , , , , , , , , 0
n m
L A L a b aa bb ba baa b a n m .


TEOREMA 4.4 : Se
1
L ed
2
L sono linguaggi regolari allora anche
1 2
L L regolare.

DIM.: Posto

1 2
, L L A , per le leggi di De Morgan vale:
( ) ( ) ( )

=
1 2 1 2
L L A A L A L
(rif.D.S.W. pag. 2) = R S R S , nel nostro caso =
1
R L ed =
2
S L ,

=
1
R A L ,

=
2
S A L
quindi, applicando le leggi di De Morgan abbiamo:
( ) ( ) ( ) [ ]
1 2 1 2
L L A R S A A L A L

= = .

( )

1
A L e
( )

2
A L sono regolari per il teorema precedente (4.3, complemento); quindi, dal teorema
4.2 (unione) si ha che
( ) ( )




1 2
A L A L regolare; infine, riapplicando il teorema 4.3 otteniamo
che:
( ) ( )




1 2
A A L A L regolare. Quindi, essendo
( ) ( )


=

1 2 1 2
L L A A L A L si
conclude che: ( ) = `
1 2
L L L , c.v.d.

1
q

2
q
b
a
a
` :
b

3
q
1
q

2
q
b
a
a
: `
b

3
q

Quinta Lezione
13/10/2006
altre propriet di chiusura
teorema di Kleene

TEOREMA 4.5: e { } 0 sono linguaggi regolari.

DIM. : Un automa che accetta L = non ha stati di accettazione ( ( ) [ ] [ ] L L F = = = ` ),
quindi qualsiasi stringa letta da un siffatto automa non verr accettata perch non esistono stati di accet-
tazione, quindi il linguaggio accettato L = .

DIM. { } 0 : Per quanto riguarda { } 0 L = un automa che lo accetta quello che ha come stato finale
proprio lo stato iniziale: { }
1
F q = , lautoma non ha bisogno di leggere nulla per trovarsi nello stato di
accettazione, in quanto lo stato
1
q , di partenza, gi di accettazione, quindi se legge la stringa vuota 0
non fa nulla e resta in
1
q F . Chiaramente affinch lautoma accetti solo la stringa vuota e nientaltro
deve essere non restarting.

TEOREMA 4.6: Se u A

allora { } L u = regolare.

DIM.: Se 0 u = , dal teorema precedente abbiamo la dimostrazione.
Per un generico
1 2 1 l l
u a a a a
+
= con
1 2 1
, , , ,
l l
a a a a A
+
costruiamo un NDFA che riconosce soltanto
la stringa u. Possiamo definire la funzione di transizione cos:

( )
( )
{ }
1
,
,
i i i
i
q a q
q a

+
=

con 1,2, , 1 i l = + e { }
i
a A a

( ) ( ) ( ) , , ,
i i k
q a q a i k = =

{ }
2 l
F q
+
=




Lautoma abortisce la computazione ( ) se legge un simbolo che non letto al momento giusto
ovvero quando i k , mentre prosegue la computazione se i k = fino allo stato finale
2 l
q
+
.

LNDFA appena costruito accetta il linguaggio { } u , quindi { } ( ) u L = ` .

COROLLARIO 4.7: Ogni sottoinsieme FINITO di A

un linguaggio regolare.

1
q
2
q
3
q
1 l
q
+

2 l
q
+

1
a
2
a
1 l
a
+


EDIT by Qd Linguaggi V Lez.
20
DIM.: Per il teorema 4.5 se L = allora L regolare; se invece L un qualsiasi sottoinsieme di A

non
vuoto, { }
1 2
, , ,
n
L u u u = con
1 2
, , ,
n
u u u A

allora, applicando il teorema 4.6 e 4.2, si ottiene la di-


mostrazione del corollario.
Infatti per il teorema 4.6 gli insiemi { } { } { }
1 2
, , ,
n
u u u sono regolari; poi, per il teorema 4.2 si ha
che { } { } { }
1 2 n
u u u regolare, quindi il corollario dimostrato.


Teorema di Kleene
(rif. D.S.W. pag. 253)

Esistono altre propriet di chiusura di cui godono i linguaggi regolari rispetto ad operazioni nuove
che andiamo a definire:

DEF. (Concatenazione di linguaggi) i : siano
1 2
, L L A

, con la scrittura
1 2
L L i indichiamo il lin-
guaggio ottenuto dalla giustapposizione delle stringhe di
1
L con
2
L , quindi:

{ }
1 2 1 2
e | L L uv u L v L = i

Se
1
L ed
2
L sono insiemi finiti, ovviamente
1 2
L L i un insieme finito. Mentre se
1 2
, L h L k = = al-
lora
1 2
L L h k = i .


DEF. L

: sia L A

scriviamo: { }
1 2 1 2
| 0, , , ,
n n
L u u u n u u u L

= .
L

chiaramente sempre infinito e 0 L

in quanto n pu essere anche uguale a 0. Chiaramente se


L A = risulta L A

= .


TEOREMA 5.1: se L ed L

sono linguaggi regolari allora anche L L

i un linguaggio regolare.

DIM.: Coma al solito basta costruire un automa che accetti L L

i per dimostrare il teorema.


Supponiamo che ( ) L L = ` ed
( )
L L = `

, quindi avremo due DFA:

( )
DFA 1
, , , , Q q F A = `
e
( )
DFA 1
, , , , Q q F A = `

con Q Q =

,

ricordando che la regolarit di un linguaggio non dipende dallalfabeto su cui opera lautoma riconosci-
tore possiamo, senza perdere di generalit supporre che i due automi operino sullo stesso alfabeto A.

Sulla base degli automi ` ed `

costruiamo ora un automa non deterministico


NDFA

` e facciamo
in modo che questo nuovo automa accetti il linguaggio
1 2
L L i facendo s che esso segua entrambe le
strade degli automi ` ed `

. Definiamo le componenti dellautoma

` :

Q Q Q

=

,

EDIT by Qd Linguaggi V Lez.
21
1 1
q q

= ,
( )
( ) { }
( ) { }
( ) { }
( ) { }
1
per
per
per
,
, , ,
,
q s
q Q F
q s q s q s q F
q Q
q s



Lautoma
NDFA

` in pratica, quando legge un simbolo, transita in altri stati seguendo il percorso di


` , nel momento in cui si trova in uno degli stati di accettazione di ` (cio quando stata letta tutta
una stringa appartenente a L ), il suo percorso si sdoppia, proseguendo eventualmente negli stati finali di
` e iniziando il percorso di `

sino al termine della lettura della stringa appartenente a L

.

Lautoma

` quindi stato costruito in modo da leggere prima le stringhe di L e poi quelle di L

;
dobbiamo per definire linsieme degli stati di accettazione di

` :

se
se
0
0
F F F L
F F L

=
=




Tale clausola necessaria in quanto, ad esempio, parole del tipo 0 u con u L e 0 L

devono essere
riconosciute da

` , per per la definizione di

un NDFA (ma anche un DFA) non fa nulla se legge la


stringa vuota e poich 0 u u = ,

` deve accettare anche parole di L, nel caso in cui L

contenga la strin-
ga vuota, ecco perch se 0 F F F L

=

.
Mentre nel caso in cui 0 L

, non ci saranno stringhe del tipo 0 u che lautoma non deterministico do-
vr accettare, ecco perch sufficiente imporre se 0 F F L

=

.

` , per come stato realizzato accetta il linguaggio L L

i che quindi regolare.




TEOREMA 5.2: Se L un linguaggio regolare allora anche L

regolare.

DIM.: Ipotizziamo che L sia accettato da un NRDFA ` (per il teorema 4.1 luso di un NRDFA non fa perdere di
generalit alla dimostrazione, inoltre luso di un automa non restarting facilita la dimostrazione), con Q insieme degli
stati,
1
q lo stato iniziale, F linsieme degli stati di accettazione ( F Q ) e la funzione di transizione,
costruiamo un automa non deterministico

` con Q Q

= ,
1 1
q q

= ed
{ }
1
F q


= , ora definiamo la fun-
zione di transizione:
( )
( ) { }
( ) { }
{ }
( )
( )
1
se
se
,
,

,
,
,
q s
q s F
q s
q q s F
q s



In pratica laddove ` si ferma (quando finisce di leggere una stringa u L ),

` riparte daccapo
per leggere ancora pezzi di stringa fatti da stringhe di L.

Lautoma

` appena realizzato accetta L

, quindi tale linguaggio regolare.



EDIT by Qd Linguaggi V Lez.
22
Abbiamo visto molti esempi per concludere che gli automi sono degli strumenti per dimostrare la
regolarit dei linguaggi.

TEOREMA 5.2 (di Kleene): Un linguaggio L regolare L pu essere ottenuto a partire da lin-
guaggi FINITI applicando un numero finito di volte le operazioni: , ,

i .

DIM. : la dimostrazione in questo senso immediata. Bisogna infatti dimostrare che: se L un lin-
guaggio ottenibile da linguaggi finiti applicando un numero finito di volte gli operatori , ,

i allora L
un linguaggio regolare.
Dal teorema 4.7 si ha che ogni sottoinsieme finito di A

regolare, dai teoremi 4.2, 5.1 e 5.2 abbiamo


rispettivamente che lunione, la concatenazione e la stella sono operazioni che preservano la regolarit di
un linguaggio, quindi il teorema in questo verso dimostrato;

DIM. : Ora dobbiamo dimostrare che se L regolare allora L ottenibile a partire da linguaggi finiti
applicando un numero finito di volte le operazioni , ,

i .
Supponiamo che ( ) L L = ` , sia ` un DFA con { }
1 2
, ,
m
Q q q q = , stato iniziale
1
q , insieme degli
stati di accettazione F, operante sullalfabeto
{ }
1 2
, , ,
p
A s s s = e la funzione di transizione.
Definiamo il seguente insieme:

( ) { }
, 1
e tale che non transita attraverso stati nell'esaminare | , |
k
i j j l
R x A q x q q l k x

= = > ` ,
, 0
0
i j
k
>




Pi formalmente possiamo dire che
,
k
i j
R linsieme delle parole
1 2 1 r r
i i i i
x s s s s
+
= tali che:

( )
( )
( )
( )
1 1
1 2 2
1
1
1 2
, ;
, ;
, , ,
, ;
, ;
r r r
r r j
i i j
j i j
r
j i j
j i j
q s q
q s q
j j j k
q s q
q s q


+
=
=

=
=


In pratica linsieme
,
k
i j
R definisce tutte le
stringhe che fanno transitare un automa
dallo stato
i
q allo stato
j
q senza mai tran-
sitare per gli stati
1 2
, ,
k k
q q
+ +
e cos via.
Visto ci possiamo dire che linsieme
0
, i i
R
rappresentante di tutte quelle stringhe
che fanno transitare lautoma dallo stato
i
q allo stato
i
q stesso senza mai transitare
attraverso alcuno stato (visto che 0 k = ).
chiaro che esiste soltanto una stringa che
i
q
j
q
l
q
l k
- Interpretazione grafica del comportamento dellautoma quando
legge una stringa di R -

EDIT by Qd Linguaggi V Lez.
23
permette ad un automa di comportarsi in questo modo, la stringa vuota, quindi { }
0
,
0
i i
R = (poich 0 k =
lautoma non potr transitare in alcuno stato, pu solo stare in
i
q ), chiaramente
0
, i i
R un insieme finito.
Invece
( )
0
, i j i j
R

linsieme costituito da tutte quelle stringhe che fanno transitare lautoma dallo stato
i
q allo stato
j
q , ma poich 0 k = , lautoma non potr transitare in alcuno stato se non
j
q , quindi
0
, i j
R
sar costituito da stringhe di lunghezza 1, cio simboli (si ha di conseguenza che se
( )
( ) ( )
0
,
1 , ,
i j i j
x R x q x q s

= = con x s A = ), quindi anchesso finito:



( )
( ) { }
0
,
| ,
i j i j i j
R a A q a q

= = .
Sottolineare che gli insiemi mostrati sono finiti essenziale ai fini della dimostrazione del teorema, come
vedremo a breve.
Da notare che con questa nuova notazione un automa potrebbe trovarsi, alla fine della lettura di una
stringa dellinsieme
,
k
i j
R in uno stato
l
q con l k > , il vincolo riferito al fatto che lautoma non deve
transitare durante la lettura dei simboli della stringa di R, ma allinizio e alla fine della lettura della stringa
potrebbe anche trovarsi in uno stato qualsiasi.

Possiamo scrivere una formula ricorsiva (avendo gi visto il caso base
0
, i j
R ) che definisce
1
,
k
i j
R
+
in base a
insiemi di ordine minore, abbiamo:

( )
1 1
, , , 1 1, 1 1,
k k k k k
i j i j i k k k k j
R R R R R

+ +
+ + + +

=

i i


Tale formula pu essere interpretata graficamente in questo modo:



1
,
k
i j
R
+
pu essere espresso mediante operazioni applicate a
,
k
i j
R che a sua volta pu essere ricavato da
formule simili fino ad arrivare al caso base
0
, i j
R il cui contenuto noto. Ribadiamo che
1
,
k
i j
R
+
rappresenta
linsieme di tutte quelle stringhe che fanno transitare ` dallo stato
i
q allo stato
j
q , ma che non tran-
sita attraverso stati
1 2
, ,
k k
q q
+ +


utile sottolineare che non esiste un ordine tra gli stati, quindi j potrebbe benissimo essere minore di i,
k che ci vincola a non scegliere stringhe che facciano transitare ` attraverso stati
1 2
, ,
k k
q q
+ +


i
q
j
q
1 k
q
+

( )
1, 1
k
k k
R

+ +

1,
k
k j
R
+

, 1
k
i k
R
+


EDIT by Qd Linguaggi V Lez.
24
,
k
i j
R invece rappresenta una parte dellinsieme
1
,
k
i j
R
+
, infatti esso costituito dalle stringhe che fanno
transitare ` dallo stato
i
q allo stato
j
q senza passare attraverso gli stati
1
, ,
k k
q q
+
Quindi
,
k
i j
R , a
differenza di
1
,
k
i j
R
+
, non far passare lautoma attraverso lo stato
k
q , stato invece consentito per
1
,
k
i j
R
+
.

Non bisogna fare confusione su quali sono gli strumenti necessari a costruire un insieme R, infatti
dallautoma, con la funzione di transizione, gli stati e lalfabeto che si parte per costruire linsieme R e non
viceversa.

In generale ` transita una volta attraverso
i
q e
j
q e un numero arbitrario di volte attraverso
l
q , con
l k . In quanto, se ( ) k i j < sicuramente ` dovr transitare una sola volta per
( )
i j
q q , mentre po-
tr transitare un numero arbitrario di volte attraverso stati
l
q con l k .
Poich manca lo stato
1 k
q
+
al fine di costruire linsieme
1
,
k
i j
R
+
, ottenibile mediante
,
k
i j
R , dobbiamo ag-
giungere a
,
k
i j
R un altro pezzo costituito da quelle stringhe, anzi da quei pezzi di stringhe che fanno
transitare lautoma da
i
q a
j
q passando eventualmente anche per
1 k
q
+
. Possiamo dunque immaginare
la stringa
1
,
k
i j
x R
+
divisa in tre parti: x u v w = , dove u rappresenta la sottostringa di x che fa transita-
re mediante un numero finito di passi ` da
i
q a
1 k
q
+
; mentre v fa transitare ` da
1 k
q
+
in se stesso
un numero arbitrario, ma finito, di volte (ecco perch si fa uso della stella); e infine w fa transitare ` da
1 k
q
+
a
j
q sempre mediante un numero finito di passi (letture di simboli di w).

Il fatto che non si fa uso della stella nelle altre parti della formula dipende dal fatto che per la definizione
che abbiamo dato di
1
,
k
i j
R
+
, se esistono, le stringhe di tale insieme devono far transitare lautoma necessa-
riamente dallo stato
i
q allo stato
j
q , pi formalmente, rispettando la formula, da
i
q a
1 k
q
+
e poi da
1 k
q
+

j
q , se applicassimo la stella a
, 1
k
i k
R
+
e a
1,
k
k j
R
+
sarebbe consentito dire che ( )
{ }
, 1
0
k
i k
R

+
= e
( ) { }
1,
0
k
k j
R
+
= , ma in questo modo lautoma non potrebbe mai transitare dallo stato
i
q allo stato
j
q .

Mentre necessario luso del simbolo di unione di
1
,
k
i j
R
+
con ( )
, 1 1, 1 1,
k k k
i k k k k j
R R R

+ + + +
i i perch potrebbero
esistere stringhe che non passano per
1 k
q
+
, facendo transitare lautoma da
i
q direttamente in
j
q .

Dalla formula ricorsiva vista abbiamo il seguente:

LEMMA: Ogni insieme
,
k
i j
R pu essere ottenuto da linguaggi finiti applicando un numero finito di
volte gli operatori , ,

i .

DIM.: La dimostrazione deriva da quanto affermato poco fa. Procediamo per induzione su k :

k=0 : abbiamo visto prima che linsieme
0
, i j
R finito;
k=r+1, presumendo che il lemma sia vero per k=r : la tesi del lemma di nuovo data dalla
formula che abbiamo visto prima, si ha:
( )
1 1
, , , 1 1, 1 1,
r r r r r
i j i j i k k k k j
R R R R R

+ +
+ + + +

=

i i che pro-
prio la tesi, infatti linsieme dato dalluso di un numero finito di operazioni, ovvero una
volta lunione e la stella e due volta la concatenazione sullinsieme
,
r
i j
R , che per ipotesi di
induzione ottenibile da un numero finito di operazioni su linguaggi finiti.

EDIT by Qd Linguaggi V Lez.
25
Ritornando al teorema di Kleene, ricordiamo che dobbiamo dimostrare che se il linguaggio L regolare,
allora esso ottenibile da linguaggi finiti applicando su di essi un numero finito di volte le operazioni di
unione, stella e concatenazione.
Adoperando linsieme R visto prima, possiamo esprimere un linguaggio regolare L cos:

( )
1,
0|
n
j
j
j q F
L L R
>
= = `


Cio stiamo considerando tutte le stringhe che fanno transitare lautoma ` dallo stato iniziale
1
q agli
stati finali
j
q , n una quantit che dipende dal numero di stati e risulta n F .
Ricorrendo al lemma precedente otteniamo la dimostrazione, infatti
1,
n
j
R ottenibile da linguaggi finiti
applicando un numero finito di volte le operazioni di unione, stella e concatenazione, ci dato anche
dal fatto che lunione su
1,
n
j
R viene applicata un numero finito di volte, in quanto F un insieme finito.




Sesta Lezione
20/10/2006
Espressioni regolari e teoremi
seconda versione del teorema di Kleene (prima parte)


Espressioni regolari

Il teorema di Kleene visto nella lezione precedente mette in relazione i linguaggi regolari con lin-
guaggi finiti e le operazioni , ,

i ; possibile dunque dare, grazie ad esso, dei nomi ai linguaggi rego-
lari. Ogni linguaggio nominabile secondo quanto segue:

fissiamo un certo alfabeto { }
1 2
, , ,
k
A s s s = ;
si vanno a considerare tutti i linguaggi regolari ( ), L L A

` ;
definiamo il seguente insieme:
{ }
1 2
, , , , 0, , , , ,(, )
k
A s s s

=

i

In pratica abbiamo definito linsieme A

mediante elementi che rappresentano i simboli di A e le varie


operazioni, abbiamo dato un nome a tali simboli e a tali operazioni (
1
s si chiama
1
s , , 0 si chiama 0,
ecc).

Definiamo ora la classe delle espressioni regolari (rif. D.S.W. pag. 256):

per induzione diciamo che essa un sottoinsieme di A

con le seguenti clausole:



passo base:
1 2
1) , 0, , , ,
k
s s s sono espressioni regolari;

passo induttivo: 2) se e sono espressioni regolari, allora lo anche ( ) ;
3) se e sono espressioni regolari, allora lo anche ( ) i ;
4) se unespressione regolare, allora lo anche

;

passo di chiusura: 5) nientaltro unespressione regolare se non stato ottenuto applicando
(serve a escludere le clausole 1,2,3,4 un numero finito di volte.
tutti gli altri casi)

per praticit omettiamo i trattini posti sotto alle parentesi ( e )

Quella appena data una definizione sintattica, abbiamo inventato dei nomi (espressioni regolari)
adoperando i simboli:
1 2
, , , , 0, , , , , (, )
k
s s s

i . Ora diamo una denotazione semantica a quelle che
abbiamo battezzato: espressioni regolari:

sia unespressione regolare, con luso delle parentesi angolari < e > definiamo < > che rappresen-
ta un linguaggio regolare. Ecco che il simbolo acquisisce un vero significato mediante luso delle pa-
rentesi angolari ( < > viene anche detto valutazione di ).



EDIT by Qd Linguaggi VI Lez.
27
Ecco alcuni esempi adoperando questa notazione:

le espressioni regolari sullalfabeto { } , , A a b c = vengono definite mediante linsieme
{ }
, , ,0, , , , , (, ) A a b c

=

i
e sono ad esempio:
( ) ( )
a b c

i , ( )
( )
0 a b

i ,
( )
c b

i .

Si ha in base alle definizioni date per la classe delle espressioni regolari:

i
s unespressione regolare, mentre
i
s il linguaggio regolare denotato
dallespressione regolare
i
s .

se
i
s = allora { }
i i
s s = , se 0 = allora { } 0 0 = ; se = allora { } =
(si ottengono dalla clausola 1 della definizione di espressioni regolari);

se ( ) = allora ( ) =
(si ottiene dalla clausola 2 della definizione di espressioni regolari);

se ( ) = i allora ( ) = i i
(si ottiene dalla clausola 3 della definizione di espressioni regolari);

se

= allora

=
(si ottiene dalla clausola 4 della definizione di espressioni regolari, in questo caso le parentesi tonde non
sono necessarie in quanto la stella unoperazione unaria);

Quando L = , sappiamo che rappresenta L (cio L ha il nome , mentre L = ).

Altri esempi (rif. D.S.W. pag. 257):

1)
( ) ( )
( ) { } { } { } { } { }
( )
a b c
a b c a b c a b c a b c


=
= = = =
i
i i i i

(nellultima uguaglianza le parentesi angolari non sono pi necessarie in quando non vi alcuna espres-
sione regolare da denotare)

Risulta:
{ } { } { }
( )
( )
[ ]
{ }
[ ]
{ }
[ ] [ ]
{ }
, 0 , 0 | , 0 , 0
n m n m
a b c L ab n ac m w w ab n ac m

= = = = i ` ;

2)
( )
( )
( ) { } ( ) { } { } { } ( )
0
0 0 0
a b
a b a b a b a b


=
= = = =
i
i i i i

(la stringa vuota pu essere omessa in quanto gi inclusa nella stella nellespressione a destra
dellunione)

EDIT by Qd Linguaggi VI Lez.
28
Risulta: { } { } ( ) ( ) ( )
[ ]
{ }
| 0
n
a b L ab n

= = ` i ;

3)
( )
{ } { }
c b
c b c b c b


=
= = =
i
i i i

Risulta: { } { } ( )
[ ] [ ]
{ }
, , 0
n m
c b L c b n m

= = ` i .


TEOREMA 5.4 (rif. D.S.W. pag. 257): Se L un linguaggio finito allora c sempre unespressione regolare
per L tale che L =

DIM.: Dimostriamo il teorema per induzione sulla cardinalit del linguaggio, per le definizioni semanti-
che date prima valgono le seguenti biiezioni, rappresentanti i passi base dellinduzione:

1.a) L L = = ;
1.b) { } 0 0 L L = = ;
1.c) { }
( ) ( ) 1 2 1 2 3
,
m m
i i i i i i i
L x x s s s L s s s s

= = =


i i i i .

Ora, assumendo che il teorema valga per L k = (ipotesi di induzione), dimostriamo che vale anche per
1 L k = + .
Posto
1
L k = , possiamo scrivere { }
1
L L x = , con x A

( { }
1
1 L L x k = + = + ), per lipotesi
dinduzione si ha che per
1
L k = esiste unespressione regolare tale che
1
L = , si ha inoltre che,
per il passo base (1.c) { } x = , con espressione regolare. Quindi, poich { }
1
L L x = possiamo ot-
tenere unespressione regolare tale che L = ( ( ) { }
1
L x L = = = = ).
Quindi il teorema dimostrato, infatti mediante il passo induttivo pu essere costruito qualsiasi lin-
guaggio regolare finito da cui ottenere unespressione regolare che lo denota.


TEOREMA 5.5 (seconda versione del teorema di Kleene rif. D.S.W. pag. 258): In base alle definizioni
sintattiche e semantiche date prima e in base al teorema precedente, il teorema di Kleene pu essere
scritto in questo modo: Un linguaggio (non necessariamente finito) L A

regolare vi
unespressione regolare tale che L = .
DIM. : facile dimostrare il teorema da destra a sinistra, infatti, facendo uso del teorema di Kleene,
si ha che se esiste unespressione regolare tale che L = allora L un linguaggio regolare. Infatti
denota un linguaggio regolare ottenibile da linguaggi regolari finiti a cui sono applicate le opera-
zioni , ,

i un numero finito di volte ( proprio ci che ci dice il teorema di Kleene). Quindi un lin-
guaggio regolare.
La dimostrazione segue alla lezione successiva


Settima Lezione
24/10/2006
seconda versione del teorema di Kleene (seconda parte)
Pumping Lemma e teoremi conseguenti

DIM. : Nellaltro senso dobbiamo dimostrare che se L regolare allora vi unespressione regolare
tale che L = . Consideriamo limplicazione nel caso in cui L sia un insieme finito e poi nel caso in
cui sia infinito.
Se L finito, per il teorema precedente esiste unespressione regolare , tale che L = , con L regola-
re.
Nel caso in cui L infinito, si ricorre nuovamente al teorema di Kleene per il quale si ha che ogni lin-
guaggio L (non necessariamente finito) pu essere ottenuto dalla costruzione di linguaggi finiti ai quali
si applicano le operazioni , ,

i un numero finito di volte. Quindi L pu essere rappresentato da e-
spressioni regolari e le relative operazioni, da cui deriva la dimostrazione del teorema.


Un grosso limite dei linguaggi regolari che ne esistono vari che sono riconoscibili da un algoritmo,
ma non da un automa (in riferimento allentit di automa finito studiata fino ad ora, infatti esistono altri tipi di automa
pi potenti che sono capaci di riconoscere una classe pi vasta di linguaggi e non solo di quelli regolari visti sino ad ora, come
vedremo nella sezione delle grammatiche), quindi non sempre la costruzione di un automa ci aiuta a verificare
la regolarit di un linguaggio. Ecco che il PUMPING LEMMA ci viene in aiuto (rif. D.S.W. pag. 260):

TEOREMA 6.1: Sia ( ) L L = ` , dove ` un DFA con n stati. Posto x L e x n allora si pu
scrivere x nella forma uvw, con 0 v e il linguaggio L conterr tutte le stringhe della forma:

[ ]
, 0,1, 2,
i
x uv w L i

= = .

Da notare che s vero che 0 v ma pu succedere che compaia
[ ] 0
v , questo perch x pu essere e-
spresso come uvw, uvvw, uvvvw, ecc, quindi avremmo u0w, u00w, u000w, ecc per un i arbitrario, se
0 v = la stringa
[ ]
0
i
u w si potrebbe pompare allinfinito indipendentemente dal valore assunto da i, ot-
tenendo sempre lo stesso risultato e cio
[ ]
0
i
u w uw = .

Da notare anche che poich per ipotesi Q n = e x n , ` nella lettura di x transiter per almeno
1 n + stati, non necessariamente distinti, anzi, sicuramente non potr transitare per 1 n + stati tutti distin-
ti, in quanto ne ha solo n a disposizione, quindi ` transiter almeno due volte per uno stato, questo
fatto rappresenta la chiave di volta per dimostrare il lemma.

DIM.: Il pumping lemma si basa sul principio della piccionaia (accennato poco fa), cio, se abbiamo
1 n + lettere da distribuire in una piccionaia di n cassette, ovvio che una cassetta dovr contenere due
lettere.
Le 1 n + lettere corrispondono ai simboli della stringa x, mentre le n cassette della piccionaia corrispon-
dono agli n stati dellautoma ` . Dire che due lettere saranno poste in una cassetta corrisponde a dire
che lautoma ` , nella lettura di x, transiter almeno due volte in uno dei suoi stati.


In base a tale principio possiamo dunque scrivere il comportamento dellautoma ` nella lettura di x:



EDIT by Qd Linguaggi VII Lez.
30
( )
( )
( )
1
,
,
,
q u q
q v q
q w F








Lautoma legger prima la sottostringa u, che dopo una serie di transizioni, arriver nello stato q alla fine
della lettura di u; nello stato q inizier a leggere la stringa v, alla fine della lettura di v, lautoma ` si
ritrover nuovamente in q; da q lautoma ` legger lultima parte di x, cio la sottostringa w che lo
far transitare dallo stato q in uno degli stati di accettazione. Il teorema dimostrato mediante tale
comportamento, infatti per
[ ] i
v , con 0,1, 2, i = il tragitto di ` nella lettura di x si concluder sem-
pre in uno stato di accettazione.

Il pumping lemma uno strumento molto utile a verificare la NON regolarit di un linguaggio, in-
fatti non possiamo affermare che non esiste alcun automa che riconosce il linguaggio ( semplice trovare
uno o pi automi che riconoscono un dato linguaggio regolare, per la precisione se esiste un automa ne esistono infiniti che
riconoscono un dato linguaggio regolare; cosa molto pi complicata invece sarebbe quella di esibire gli infiniti automi che
NON riconoscono un dato linguaggio, al fine di dimostrare che esso non regolare; chiaro quindi che nel dimostrare che
un linguaggio non regolare lautoma non uno strumento adatto al nostro fine).
Per dimostrare che un linguaggio non regolare lo si fa per assurdo. Se il metodo diretto il seguen-
te: se (ipotesi) { } L = allora L non regolare (tesi), la dimostrazione per assurdo prevede che ne-
ghiamo la tesi, quindi assumiamo che L sia regolare. A questo punto possiamo applicare a tale linguag-
gio il pumping lemma, esibendo delle stringhe del tipo
[ ] i
x uv w = con 0 v e 0 i . La contraddi-
zione si ottiene soltanto quando per tutte le stringhe , , u v w esiste almeno un i tale che
[ ] i
uv w L . Da
cui si pu affermare con certezza che L non regolare. Tale risultato non pu essere confermato nel caso
in cui non si riesca a trovare una terna di stringhe , , u v w tali che esista un i tale che
[ ] i
uv w L (in tal
caso il pumping lemma non pi sufficiente a dimostrare la regolarit o la non regolarit del linguag-
gio, bisogna dunque ricorrere ad altri metodi). Il metodo appena descritto sar chiarito pi avanti con
un esempio molto importante.

TEOREMA 6.2 (rif. D.S.W. pag. 261): Sia ` un DFA con n stati, allora se ( ) L ` esiste una strin-
ga ( ) x L ` tale che x n < .
Il linguaggio costituito da tutte le stringhe x con x n < ovviamente finito.

DIM.: Supponiamo che x sia la parola pi piccola (lunghezza minima) accettata da `
( ( ) | x L x n < ` ). Dimostriamo il teorema per assurdo, negando la tesi, supponiamo quindi che se
( ) L ` allora esiste una stringa ( ) x L ` tale che x n . Ci sono dunque i presupposti per
applicare il pumping lemma, possiamo dunque scrivere x uvw = , con 0 v , e, se 0 i = , esiste una
stringa
[ ]
( )
0
uv w uw L = ` , segue che uw uvw < , cio uw x < e questultima disuguaglianza rap-
presenta un assurdo in quando avevamo ipotizzato che x fosse la stringa pi piccola accettata da ` e
invece il pumping lemma ci dice che esiste una parola, pi piccola di x, uw che accettata da ` , cio
appartenente a ( ) L ` , quindi il teorema dimostrato.

1
q
q
F
q
F
q F
`
u
[ ] i
v
w

EDIT by Qd Linguaggi VII Lez.
31
utile mostrare un metodo che ci permetta di stabilire se un linguaggio accettato da un automa
1
` incluso nel linguaggio accettato da un automa
2
` , cio ci stiamo chiedendo se esiste un meto-
do che ci permetta di sapere se ( ) ( )
1 2
L L ` ` . Per verificare ci basta mostrare che un dato lin-
guaggio ( ) L ` sia vuoto esprimendolo cos:

( ) ( ) ( ) ( )
1 2
L L A L

= ` ` ` quindi si ha: ( ) ( ) ( )
1 2
L L L = ` ` `

Graficamente possiamo esprimere ( ) L ` cos:

Come si pu osservare ( )
2
A L

` e ( )
1
L ` sono disgiunti quindi ( ) L ` vuoto, difatti
( ) ( )
1 2
L L ` ` .
Caso limite ( ) ( )
1 2
L L = ` ` , in questa circostanza abbiamo comunque ( ) L = ` .

Al contrario, se avessimo scritto ( ) ( )
2 1
L L ` ` , avremmo avuto ( ) L ` , come si pu vedere
dal grafico:




TEOREMA 6.3 (rif. D.S.W. pag. 261): Se ( ) L L = ` un insieme infinito allora vi sono stringhe
, , u v w A

con 0 v , tali che


[ ] i
uv w L con 0,1, i =

A differenza del pumping lemma, ci siamo ora svincolati dal numero di stati di ` e dalla lunghezza di
x. Tale teorema utile per verificare se certi linguaggi infiniti non sono regolari. Infatti basta cercare delle
stringhe del tipo x che non appartengono al linguaggio come visto prima.


TEOREMA 6.4: Sia ` un DFA con n stati, si ha che ( ) L ` un insieme infinito ( ) L `
contiene parole x (ne contiene almeno una) tali che 2 n x n < .

A


( )
1
L `
( )
2
L `
( )
2
A L

`
A


( )
2
L `
( )
1
L `
( )
2
A L

`

EDIT by Qd Linguaggi VII Lez.
32
DIM. : La dimostrazione in questo senso banale e si ottiene mediante il pumping lemma. Si deve
dimostrare che se ( ) L ` contiene parole x, tali che 2 n x n < allora ( ) L ` un insieme infinito.
Sussistono le ipotesi per applicare il pumping lemma, infatti abbiamo un linguaggio regolare ( ) L ` ,
un DFA con n stati e la stringa x ha lunghezza pari o maggiore di n. Esiste dunque stringhe
[ ] i
x uv w = ,
con 0 v e 0,1,2, i = La non finitezza di ( ) L ` diretta conseguenza del pumping lemma, infatti
se esiste una
[ ] i
x uv w = , con 0 v e 0,1,2, i = x si pu pompare a piacere al variare di i, quindi
( ) L ` conterr stringhe (non sono tutte cos) del tipo uw, uvw, uvvw, uvvvw, quindi ( ) L `
infinito.

DIM. : Ora dobbiamo dimostrare che: dato un ( ) L ` infinito allora ( ) L ` conterr parole
| 2 x n x n < . Abbiamo che, poich ( ) L ` per ipotesi infinito, esisteranno certamente parole
| 2 x x n , scegliamo una stringa di lunghezza minima lunga almeno 2n, essendo tale stringa 2 x n
la si pu certamente scomporre in due pezzi ( chiaro che ` ha almeno uno stato, quindi 1 n ). Quindi
1 2
x x x = , posto
1
x n = abbiamo di conseguenza
2
x n poich abbiamo fissato 2 x n , allora, per il
principio della piccionaia visto per la dimostrazione del pumping lemma, abbiamo che
1
x uvw = .

Nel pumping lemma non specificato, ma u e w possono essere anche stringhe vuote, soltanto su v
che c il vincolo di 0 v .

Possiamo dunque scrivere:
( )
( )
( )
1
2
,
,
,
q u q
q v q
q w x F

con 1 v n .

Quindi, poich la lettura di v genera un cappio, pos-
siamo dire che
2
uwx una stringa accettata da ` ,
( )
2
uwx L ` , ( )
1 2
, q uwx F

. Certamente risulter
2 2
uwx x n , poich
2
x n . Inoltre, poich abbia-
mo costruito
1 2
x x x = , con
1
e 1 x uvw v n = , ov-
viamente risulter
2
uwx x < (strettamente minore in quanto
nella parte sinistra della disuguaglianza, manca la v che certamente non una stringa vuota). Ricordando che si era ipo-
tizzato x quale stringa pi piccola, di lunghezza non minore di 2n ( 2 x n ), risulter dunque
2
2 uwx n < e
2
uwx una parola accettata da ` , ma x avevamo stabilito che fosse la pi piccola paro-
la di lunghezza non minore di 2n e di conseguenza una stringa pi piccola di x deve necessariamente ri-
sultare di lunghezza strettamente minore di 2n e poich
2
uwx x < e
2
uwx n avremo che
2
2 n uwx n < . In definitiva
2
uwx rappresenta la stringa appartenente al linguaggio L che soddisfa la
tesi.
Il teorema appena mostrato rappresenta un valido metodo (algoritmo) per verificare che un dato lin-
guaggio regolare sia finito o meno, baster infatti trovare una stringa x tale che, se ` ha n stati,
2 n x n < .

Il pumping lemma fornisce come avevamo gi detto un metodo per verificare la non regolarit di un
linguaggio. Ad esempio (rif. D.S.W. pag. 262) si pu dimostrare che il linguaggio
[ ] [ ]
{ }
| 0
n n
L a b n = > non
1
q q
F
q
F
q F
`
[ ] i
v
2
w x u

EDIT by Qd Linguaggi VII Lez.
33
regolare (cio non esiste nessun automa che accetta esclusivamente le stringhe di tale linguaggio e nullaltro, inoltre a e b
devono essere visti come stringhe costituite da un solo simbolo).

DIM.: per assurdo supponiamo che ( ) L L = ` . Supponiamo che ` abbia m stati. Per il pumping
lemma L infinito, inoltre esiste una stringa x, con x m , x uvw = e 0 v , abbiamo che
[ ]
{ }
| 0
i
uv w i L . Posto
[ ] [ ] l l
x a b = , risulta
[ ] [ ]
2
l l
a b l = e, poich x m , 2l m . Quindi dire
che
[ ] [ ] l l
x uvw a b = = vuol dire che v deve essere della forma
[ ]
1
l
a oppure della forma
[ ] [ ]
1 2
l l
a a oppure
ancora
[ ]
2
l
b con, necessariamente,
1 2
, l l l . In tutti tre i casi la stringa ( ) x L ` , in quanto essa
non pu avere lo stesso numero di a e di b. Infatti, nel caso in cui
[ ]
1
l
v a = , per il pumping lemma, a-
vremmo ( ) u v w L ` , ma anche ( ) ( ) u v v w L ` , che non potranno mai avere lo stesso nu-
mero di a e di b (se ce lha la prima, non pu averle la seconda e viceversa); analogamente succede per
[ ]
2
l
v b = ;
invece, nel caso in cui
[ ] [ ]
1 2
l l
v a b = si avrebbero stringhe del tipo
[ ] [ ]
( )
1 2
l l
u a b w , ma anche
[ ] [ ]
( )
[ ] [ ]
( )
1 2 1 2
l l l l
u a b a b w che certamente non sono stringhe accettate da ` .
Avendo esibito tutti i possibili casi in cui x pu presentarsi e (per ciascun caso) esiste almeno un va-
lore di l per cui x L , si conclude che certamente
[ ] [ ]
{ }
( ) | 0
n n
L a b n L = > ` .

importante ribadire che esistono s automi che accettano, tra le tante, stringhe del tipo visto pocanzi,
ma non esistono automi che accettano ESCLUSIVAMENTE tutte le stringhe appena viste, questo ci ba-
sta per dire che lautoma non accetta il linguaggio. Un automa che riconosce un dato linguaggio L deve
appunto riconoscere le stringhe di tale linguaggio e soltanto quelle (non deve riconoscerne altre).





a
b
b
a
b
a
b
b
a
a
1
q
2
q
3
q
4
q
5
q
b
a
b
b
a
a
a
b

1
q
2
q
3
q
4
q
Ottava Lezione prima parte
27/10/2006
esercitazione sugli Automi e sulle Espressioni regolari

Esercizi proposti tratti dal libro di testo:

(rif. D.S.W. pag. 241, esercizio 1 b)
Mostrare che il linguaggio L regolare costruendo un automa finito ` che lo accetti.

{ } , A a b = , L consiste in tutte le stringhe che terminano per bbab.
{ } , , , , , L bbab a bbab b bbab ab bbab ba bbab =
Costruiamo lautoma in questo modo ( )
1
, , , , A Q q F = ` dove
{ }
1 2 5
, , , Q q q q = ,
{ }
5
F q = e la
funzione di transizione la seguente:















(rif. D.S.W. pag. 241, esercizio 1 h)
Mostrare che il linguaggio L regolare costruendo un automa finito ` che lo accetti.

{ } , A a b = , L consiste in tutte le stringhe che contengono 3 a consecutive.
{ } , , , , , L aaa b aaa aaa b ab aaa aaa b aaa aaa =
Costruiamo lautoma in questo modo ( )
1
, , , , A Q q F = ` dove
{ }
1 2 3 4
, , , Q q q q q = ,
{ }
4
F q = e la
funzione di transizione la se-
guente:












a b

1
q
1
q
2
q
2
q
1
q
3
q
3
q
4
q
3
q
4
q
1
q
5
q
5
q
1
q
3
q
a b

1
q
2
q
1
q
2
q
3
q
1
q
3
q
4
q
1
q
4
q
4
q
4
q

EDIT by Qd Linguaggi VIII Lez. - I parte
35
, , A Z

1
q
2
q
3
q
4
q
5
q
10
q
9
q
8
q
7
q
6
q
0, , 9
, , A Z
0, , 9
, , A Z
0, , 9
, , A Z
0, , 9
, , A Z
0, , 9
, , A Z
0, , 9
, , A Z
0, , 9
, , A Z
0, , 9
, , A Z
0, , 9
, , A Z
(rif. D.S.W. pag. 241, esercizio 1 i)
Mostrare che il linguaggio L regolare costruendo un automa finito ` che lo accetti.

{ } , A a b = , L consiste in tutte le stringhe che NON contengono 3 a consecutive.
{ } , , , , , , L a aa ba aab abaa aababbba =
Lautoma
i
` simile a quello visto nellesercizio precedente (1.h) salvo che per linsieme
i
F che
rappresenta il complemento rispetto a Q di F, quindi
{ }
1 2 3
, ,
i
F Q F q q q = = . In pratica tutte le strin-
ghe che accettava lautoma ` non saranno accettate dallautoma
i
` . Questa soluzione stata trova-
ta in modo immediato partendo dallesercizio precedente (ci dato dal teorema 4.3, chiaro che possono esiste-
re anche soluzioni alternative, a patto che il linguaggio sia regolare, e perch sia tale basta mostrare almeno un automa che lo
accetti).



(rif. D.S.W. pag. 241, esercizio 2.a)
Mostrare che il linguaggio L regolare costruendo un automa finito ` che lo accetti.
{ } , , , ,0,1, 9 A A B Z = , L consiste in tutte le stringhe w con 1 8 w e che cominciano con
uno dei simboli , , , A B Z .
{ } { } |, , , , , , 0 7 , L w w s v s A B Z v A v

= =

Costruiamo lautoma in questo modo ( )
1
, , , , A Q q F = ` dove { }
1 2 10
, , , Q q q q = ,
{ }
2 3 9
, , , F q q q = e la funzione di transizione







, , A Z 0, ,9

1
q
2
q
10
q
2
q
3
q
3
q
3
q
4
q
4
q
4
q
5
q
5
q
5
q
6
q
6
q
6
q
7
q
7
q
7
q
8
q
8
q
8
q
9
q
9
q
9
q
10
q
10
q
10
q
10
q
10
q

EDIT by Qd Linguaggi VIII Lez. - I parte
36
(rif. D.S.W. pag. 251, esercizio 3.a)
Siano L ed L due linguaggi regolari, dimostrare che anche L L regolare.

Basta scrivere
( )
L L L A L

=


Quindi, poich L per ipotesi re-
golare, per il teorema 4.3, lo anche
A L

, mentre per il teorema 4.4 ab-


biamo che anche
( )
L A L

rego-
lare, quindi L L regolare.
















(rif. D.S.W. pag. 258, esercizii 2.a, 2.b)
Siano e due espressioni regolari, con la scrittura indichiamo che = . In base al-
la definizione appena data dimostrare le identit seguenti:

2.a) ( )
Dobbiamo mostrare che ( ) = , quindi basta scrivere: ( ) = = .

2.b) ( ) ( ) ( ) ( ) ( )

Mostriamo come ( ) ( ) ( ) =

Scriviamo: ( ) ( ) ( ) ( ) = = =

{ } { }
| , | , u v u v u w u w = { }
| , u z u z z .

Mentre: ( ) ( ) ( )
= = = { }
| , u z u z z .

Quindi possiamo concludere che ( ) ( ) ( ) ( ) ( )
vera.
L
L
A

L L

A


A L



( )
L A L


Grammatiche





Ottava Lezione Seconda parte
27/10/2006
Introduzione alle Grammatiche

Introduzione alle Grammatiche

Gli argomenti trattati fin ora (automi e linguaggi regolari) sono inerenti a quella classe di problemi
detti di decisione: abbiamo studiato delle strutture astratte (gli automi) che ci hanno permesso, ad esem-
pio, di stabilire se un certo linguaggio o non regolare, ma tale problema si pu estendere ad un in-
sieme molto pi vasto di argomenti. Nel
caso specifico degli automi c da dire per
che essi hanno dei limiti, ad esempio essi
non riconoscono linguaggi come:


[ ] [ ]
{ }
| 0
n n
a b n > .

Ora ci prestiamo ad affrontare unaltra clas-
se di problemi, quelli inerenti alla GENE-
RAZIONE, studieremo cio dei metodi che permettono di generare dei linguaggi, regolari e non rego-
lari. Usando due macchine (algoritmi), una per generare degli elementi y B , unaltra per la genera-
zioni di elementi differenti dai precedenti y B . Facendo un confronto tra i due elementi si potr sta-
bilire di che tipo il linguaggio generato. Le strutture generative che vedremo a breve permetteranno di
generare e quindi di identificare una classe
pi vasta di linguaggi (non solo regolari).
Chiameremo tali macchine GRAM-
MATICHE.
Di seguito vengono elencate le prime
nozioni riguardanti le grammatiche (rif.
D.S.W. pag. 269).
Tratteremo esclusivamente grammatiche
CONTEXT FREE o anche C.F. (cio libere
dal contesto, in seguito si chiarir tale ter-
mine).

DEFF.: Dati due alfabeti i e T disgiunti ( T = i ), gli elementi di i saranno chiamati va-
riabili, mentre gli elementi di T li chiameremo terminali. Con il termine produzione context-free indi-
chiamo unespressione su i e T di questa forma:

X h con X i e ( ) h T

i
X un simbolo mentre
( ) T

i i h una stringa
`
x B
x B
x
?
Set B
` y B x
`
y B
x
Macchine generatrici

EDIT by Qd Grammatiche VIII Lez. - II parte
38
Da sottolineare che in generale h non un terminale, ovviamente perch una stringa e i terminali non
sono stringhe ma simboli, sebbene h potrebbe in taluni casi contenere terminali o coincidere con un ter-
minale.

Ora sia P una produzione X h e siano u e v due stringhe tali che ( ) , u v T

i allora con la
notazione:

P
u v indichiamo che esistono parole ( ) , p q T

i
tali che u pXq =

e v phq =


( ) ( ) T T

i i

In altre parole v si ricava partendo da u, sostituendo al simbolo X la parola h.

Con la scrittura 0 X indichiamo la produzione nulla (che equivale ad una contrazione, una sorta di STOP
per le grammatiche, e ha una sua utilit come vedremo. 0 X fa collimare ogni simbolo di V nella stringa vuota).

Con il termine grammatica libera dal contesto indichiamo il simbolo , caratterizzato dalle variabili
(simboli) di i e dai terminali (simboli) di T; tale grammatica data da un insieme FINITO di pro-
duzioni libere dal contesto su i e T e da un simbolo designato S i (Start) detto simbolo iniziale o
assioma. Linsieme T i viene chiamato alfabeto di .

Una grammatica C.F. viene detta positiva se nessuna delle sue produzioni la produzione nulla.


Nona Lezione
31/10/2006
Grammatiche C.F.: prime nozioni e teorema 1.2 (prima parte)

Ricapitolazione concetti base Grammatiche C.F.

Il termine context-free sta a indicare che lunico vincolo che hanno p e q che devono essere delle
stringhe; a eccezione di questo vincolo, le produzioni C.F. non dipendono da un contesto particolare o
non devono sottostare a regole dipendenti dal contesto in cui vengono adoperate (contrariamente a quanto
succede ad esempio per grammatiche sensibili al contesto le quali sono costituite da produzioni del tipo e deve ri-
sultare ).

Se una grammatica C.F. con variabili in i e terminali T, se ( ) , u v T

i , scriveremo
u v

per indicare che esiste una produzione P di tale che risulti


P
u v .
Mentre la scrittura u v

rappresenta una sequenza di produzioni arbitrariamente lunga (ma pur


sempre finita). Quindi esiste una successione di stringhe
1 2
, , ,
m
u u u con
1
u u = ,
m
u v = e risulta
1 i i
u u
+

con 1 i m < (m arbitrario ma finito; si pu dire che potrebbe pure avere meno regole di produzione del
numero m).

La sequenza
1 2
, , ,
m
u u u con
1
u u = e
m
u v = detta derivazione di v da u in .

Con m si indica la lunghezza della derivazione. ovvio che la derivazione di lunghezza minima 2,
quindi 2 m (in alcuni libri di testo la lunghezza si indica con 1 m , quindi la lunghezza minima della derivazione in tal
caso sar pari a 1).
Nelle derivazioni del tipo u v

o anche u v

, eccetto che nei casi ambigui, il simbolo pu esse-


re omesso, quindi in luogo di u v

o u v

potremo scrivere u v e u v

. Inoltre la scrittura
u v pu essere vista come una derivazione di v da u di lunghezza 2, una notazione alternativa a quel-
la vista pu essere
m
u v

, con m la lunghezza della derivazione, che se pari a 2, il simbolo m pu essere


omesso.

Diamo la seguente definizione: sia una grammatica C.F., con la scrittura ( ) L indichiamo il lin-
guaggio generato da e lo definiamo cos: ( )
{ }
: | L u T S u

= e rappresenta linsieme di tutte le


stringhe u costituite da simboli terminali derivanti da S mediante un numero finito di produzioni.

Un linguaggio detto C.F. se esiste una grammatica C.F. che lo genera (discorso simile a quello fatto per i
linguaggi regolari e i rispettivi automi riconoscitori).

Esempio di grammatica
.1 es
: { } , , , _ , _ , , S SN SV Verbo Transitivo Verbo Intransitivo Articolo Nome = i ;
{ } , , , , , , , T il un gatto topo rincorre mangia dorme canta = ;
SN viene detto sintagma nominale;
SV viene detto sintagma verbale.

EDIT by Qd Grammatiche IX Lez.
40
Data
.1 es
u v

, con
1
, u u S v il gatto rincorre un topo = = = , vediamo se esiste una successione di pro-
duzioni tali che
,1 es
S il gatto rincorre un topo

mediante le seguenti produzioni:




Partendo da
1
u S = e applicando una sola produ-
zione alla volta si ha:
1
2
3
4
5
6
7
8
9
;
;
;
;
;
_ ;
;
;
( 10)
u S
u SN SV
u Articolo Nome SV
u il Nome SV
u il gatto SV
u il gatto Verbo Transitivo SN
u il gatto rincorre SN
u il gatto rincorre Articolo Nome
u il gatto rincorre un topo
m
=
=
=
=
=
=
=
=
=
=




Altro esempio (rif. D.S.W. pag. 270): dato da: { } S = i , { } , T a b = , con le due produzioni
S a S b e S a b (es.: , , , , S ab a S b aa S bb aaa S bbb ) da cui segue:
TEOREMA 1.1: il linguaggio generato da ( )
[ ] [ ]
{ }
| 0
n n
L a b n = > il quale C.F. ma non rego-
lare. Questo teorema ci fa comprendere le potenzialit delle grammatiche rispetto agli automi, le gram-
matiche C.F. possono generare anche linguaggi non regolari.


Terzo esempio riguardante le grammatiche il seguente: dimostrare che la stringa aaabbb appartie-
ne ad un linguaggio generato da una grammatica C.F. :

basta scrivere le sequenza:

1 2 3
4
1 2 3
u u u
u
S aSb aaSbb aaabbb
_
.


Nel caso delle grammatiche C.F. positive, ( ) 0 L , in quanto non pu contenere produzioni
nulle 0 X e 0 potrebbe essere un terminale se ( ) 0 L e ci significherebbe che esiste 0 X e ci
non permesso per come stato definito .

TEOREMA 1.2 (rif. D.S.W. pag. 273): L un linguaggio C.F. esiste una grammatica C.F. positiva ta-
le che ( ) L L = oppure ( ) { } 0 L = .
Questo teorema ci mostra che le produzioni nulle non sono necessarie e adoperando un metodo al-
goritmico che vedremo a breve ne possiamo fare a meno.

;
;
_ ;
_ ;
_ ;
_ ;
_ ;
_ ;
;
;
S SN SV
SN Articolo Nome
SV Verbo Transitivo SN
SV Verbo Intransitivo
Verbo Transitivo rincorre
Verbo Transitivo mangia
Verbo Intransitivo dorme
Verbo Intransitivo canta
Articolo un
Articolo il
Nome topo

;
Nome gatto

EDIT by Qd Grammatiche IX Lez.
41
DIM.: La dimostrazione necessita della definizione di un insieme chiamato KERNEL (nocciolo) di C.F.
e lo denotiamo con ( ) KER il quale rappresenta linsieme dei simboli V i , variabili tali che
0 V

.

A titolo di esempio consideriamo la grammatica C.F.
0
che ha le seguenti produzioni:

, , 0, 0 S XYYX S aX X Y

In generale pi sinteticamente possiamo anche scrivere le produzioni in questo modo (adoperando la
barra orizzontale):
| , 0, 0 S XYYX aX X Y

Il nocciolo di
0
( ) { }
0
KER , , S X Y = . Da ogni variabile dellinsieme, dopo un numero finito di
produzioni, si pu giungere alla stringa vuota 0, infatti: 0 0 0 0 S XYYX XYY XY X ,
0 X e 0 Y .

Esiste un metodo algoritmico generale utile a costruire il ( ) KER di una grammatica C.F., costi-
tuito da un numero finito di passi:

1) Passo base (diretto): definiamo linsieme:
{ }
0
C.F. | 0 una produzione di V V = i ;

2) Passo induttivo: definiamo linsieme:

{ }
1
| una produzione di e
i i i
V V

+
= i i i .

Cio linsieme
1 i +
i si costruisce in base allinsieme
i
i unito alle variabili V tali che V ,
dove
i


i e per induzione
i
i contiene tutte le variabili tali che 0

.

Facciamo un esempio riprendendo la grammatica
0
con le produzioni:
| , 0, 0 S XYYX aX X Y
Applicando il passo base dellalgoritmo otteniamo: { }
0
, X Y = i ;
applicando il passo induttivo abbiamo:
{ } { } { } { }
1 0 0
| , , , , V V X Y S X Y S

= = = i i i ,
si scelto S in quanto { } , XYYX X Y

quindi V S = . Chiaramente in questo caso si ha che
1
, 1
i
i = > i i , cio
i
i si satura in quanto
2 1 1 1 1
, ,
i
= = i i i i i i .

Questultimo concetto viene mostrato nel seguente:
LEMMA 1 (rif. D.S.W. pag. 271): se
1 k k+
= i i allora ( ) KER
k
=i . chiaro che se
1 k k+
= i i sar
inutile proseguire con la costruzione del kernel di .

DIM.: Sotto lipotesi che
1 k k+
= i i dobbiamo dimostrare che ( ) KER
k
=i e cio che
( ) KER
k
i e ( ) KER
k
i (se , Set A B , ( ) A B A B B A = ):

EDIT by Qd Grammatiche IX Lez.
42
( ) KER
k
i una conseguenza diretta del fatto che
k
i stato definito in un certo modo, in-
fatti
k
i contiene un certo numero di variabili che mediante le produzioni di portano alla parola
vuota, mentre ( ) KER stato definito come linsieme di tutte le variabili tali che mediante
lapplicazione di un certo numero di produzioni di si giunge alla parola vuota, chiaro quindi che se
k
V i allora ( ) KER V .
Meno banale dimostrare che ( ) KER
k
i , sotto le ipotesi che
1 k k+
= i i . Ci equivale a voler
dimostrare che ogni elemento ( ) KER V appartiene anche a
k
i . Adottiamo un approccio induttivo
sulla lunghezza delle derivazioni:
Passo base: (lunghezza minima della derivazione ( 2 m = ) della parola vuota partendo dalla
variabile V in ) scrivere 0 V

con 2 m = implica scrivere 0 V (infatti 0 V vuol dire


che ( ) , | e 0 p q T V pXq phq

= = i e quindi X h , per essere corretta la corrispondenza deve ri-


sultare necessariamente X V = e 0 h = ) . Scrivere 0 V vuol dire che ( ) KER V e anche
0
V i ( { }
0
| 0 una produzione di V V = i ). Ovviamente vale anche , 0
k
V k i .

Passo induttivo: supponendo vero che, date tutte le derivazioni di lunghezza m r < , costitui-
te a sinistra da variabili V, se queste V appartengono a ( ) KER , allora appartengono anche
a
k
i , vogliamo dimostrare che ci vale anche per le derivazioni di lunghezza m r . Po-
niamo
1
V = ,
1 2 1 r r

e 0
r
= , quindi ( ) KER V e
1 2

1 r r

una derivazione di lunghezza r in . Le stringhe


1 2 1
, , ,
r


sono necessariamente costituite da variabili in quanto la stringa finale deve es-
sere 0
r
= (ricordiamo che se
1 2
allora esiste una produzione del tipo pXq phq , dove p e q sono
stringhe e possono anche essere vuote ma X una lettera dellalfabeto i , quindi una variabile; per definizio-
ne ( ) KER e
k
i contengono solo variabili e sicuramente
1
V = una variabile per come abbiamo impo-
stato la dimostrazione per induzione; il fatto che le stringhe non debbano contenere terminali perch se,
ad esempio, ci fosse
1 i i

+
con
1 i
abc
+
= e c simbolo terminale, tale simbolo rimarrebbe fino alla fine
delle produzioni e non si otterrebbe quindi la stringa vuota). Dalle ultime osservazioni possiamo dire
che
1 2 1
, , ,
r



i . Ora, posto
2

1 2
successione di variabili
VV V

=
_
, otteniamo che 0
i
V

con
1, 2, , i = (ci ovvio poich abbiamo imposto
1 2
0
r
= , e quindi 0
i
V

). Pi
formalmente 0
i i
V V





, 1 i , 2 1 m r , tali derivazioni, poich si parte da
2
, avranno lunghezza al pi pari a 1 r . Quindi tutte le variabili ( ) KER
i
V . Ricordan-
do lipotesi di induzione (se derivazioni di lunghezza 1 r alla loro sinistra hanno variabili V, se appar-
tengono a ( ) KER allora appartengono anche a
k
i ), abbiamo che
i k
V i e poich in c una
produzione ( ) ( )
2 1 2
V V VV V

= e
1 2 2 k
VV V



= i , ricordando lalgoritmo
costruttivo di
1 i +
i ( { } | una produzione di ,
i i
V V

= i i ) otteniamo che
1 k
V
+
i ( { } | ,
k k
V V

= i i ) , ricordando lipotesi del lemma (
1 k k +
= i i ) si ot-
tiene
k
V i .

Decima Lezione
3/11/2006
teorema 1.2 (seconda parte)

Ricapitolazione teorema 1.2 e lemma 1, segue:
LEMMA 2 (rif. D.S.W. pag. 271): Vi un algoritmo per trasformare una grammatica C.F. in una
grammatica C.F. positiva tale che risulti: ( ) ( )
L L = oppure ( ) ( ) { } 0 L L = .

DIM.: dimostriamo il teorema elencando preliminarmente i passi dellalgoritmo:
1. si calcola il ( ) KER ;
2. allinsieme di produzioni che si ottengono dagli elementi del nocciolo di si aggiungono tutte
le produzioni di cancellando dal loro lato destro una o pi variabili appartenenti al ( ) KER ;
3. dallinsieme ottenuto si eliminano le produzioni del tipo 0 V .

Il seguente esempio chiarisce i tre passi appena descritti: consideriamo la grammatica
0
presa prima in
analisi, costituita dalle produzioni: | , 0, 0 S XYYX aX X Y .
Per ottenere
00
applichiamo il passo 1. dellalgoritmo del lemma pocanzi enunciato, allora linsieme
delle produzioni sar { } , 0, 0 S XYYX X Y ; passo 2. aggiungiamo tutte le possibili produzioni
ottenibili da
0
cancellando alla destra una o pi variabili presenti nel nocciolo, otteniamo:
{ } {
}
, 0, 0 | | | | ,
| | | | | ;
S XYYX X Y S YYX XYX XYY XY YY
S YX XX X Y aX a



al passo 3. dobbiamo eliminare dallinsieme ottenuto le produzioni nulle ottenendo:

{
}
, , , , , ,
, , , , , .
S XYYX S YYX S XYX S XYY S XY S YY
S YX S XX S X S Y S aX S a




Riprendendo la dimostrazione del lemma 2, inizialmente dobbiamo far vedere che
( ) ( ) L L = ,
quindi bisogna dimostrare che se una produzione appartiene a
( )
L allora essa appartiene anche a
( ) L . Consideriamo la produzione
1 2
V

di ma non di , ( )
1 2
, , , T

i ,
vogliamo far vedere che
1 2
V

stata ottenuta da una produzione di
0 1 1 2
: V u u u

con ( ) ( )
0 1
KER , , , u u u


, poich stiamo adoperando loperatore unario
stella, le stringhe u potrebbero essere anche vuote ( 0 u = ). Chiaramente essendo ( ) ( )
KER
i
u

con
0 i , si ha 0
i
u

. facile dedurre che


0 1 1 2 1 1 2
V u u u u


. Ci mostra che un
elemento appartenente a
( )
L appartiene anche a ( ) L (usando la grammatica C.F. e le sue produzioni, co-
stituite anche da produzioni nulle, abbiamo costruito una derivazione che genera lo stesso elemento generato dalla gramma-
tica C.F. positiva mediante lapplicazione di una serie di produzioni) quindi
( ) ( ) L L .
Ora bisogna dimostrare che se un elemento ( ) v L con 0 v , allora
( )
v L (ricordando che gli
elementi di un linguaggio generato da una grammatica C.F. sono stringhe fatte di terminali), quindi dobbiamo dimo-

EDIT by Qd Grammatiche X Lez.
44
strare che ( ) ( )
L L oppure (nel caso in cui ( ) 0 L ) ( ) ( ) { }
( )
0 L L . Dobbiamo dunque
provare che: V , se , 0 V w w

e w T

allora V w

, dimostriamolo per induzione:



passo base: derivazione di lunghezza minima 2 m = (quindi senza *) ; se V w

allora
contiene la produzione V w (poich 2 m = e V una variabile) che contenuta anche in
(poich w fatta tutta di terminali che necessariamente produrr, si vedano i due passi per la costruzione
della grammatica positiva della prima parte della dimostrazione di questo lemma) ;

passo di induzione: derivazione di lunghezza maggiore di 2 (

); se V w

tale derivazione
la si pu scrivere come
0 1 1 2
V w VwV V w w



(non si fatto altro che scomporre la derivazio-
ne) con le variabili
1 2
, , , V V V

i e le stringhe di terminali
0 1 2
, , , , w w w w T


(com-
presa 0 per via della stella). A questo punto poniamo
0 1 1 2
w w v wv v w

= dove
i i
V v

,
1, 2, , i = , allora si pu applicare lipotesi di induzione, considerando che ogni
i i
V v


ha lunghezza minore di V w

(infatti
0 1 1 2
V w VwV V w


0 1 1 2 2
w v wV w V w


0 1 1 2 2
w v w v w v w w

= , la derivazione V w

contiene le derivazioni, pi corte,


i i
V v

). Per
lipotesi di induzione si ha quindi che se
i i
V v

allora
i i
V v

di conseguenza anche la de-


rivazione, pi lunga, V w

esister per V w

(poich
0 1 1 2
w w v w v v w

= dove le stringhe
i
v
con 1, 2, , i = , sono prodotte da e le stringhe
i
w con 1, 2, , i = sono fatte di terminali anchessi
prodotti da per come abbiamo costruito lalgoritmo (passo 2) nella prima fase di dimostrazione del lemma
2.

Dunque il lemma dimostrato, ma non del tutto, infatti la dimostrazione per induzione, non sod-
disfa il caso in cui 0
i
v = . Se 0
i
v = allora 0
i
V

quindi ( ) KER
i
V a questo punto definiamo il se-
guente simbol:
0
0 se 0;
altrimenti
i
i
i
v
V
V
=

, in questo modo abbiamo escluso da le produzioni nulle, sosti-


tuendo ad esse stringhe vuote e ci basta per concludere la dimostrazione del lemma 2, infatti avremo:
0 0 0
0 1 1 2
V w V wV V w

che in ogni caso una delle produzioni di , infatti si ha
0 0 0
0 1 1 2 2 0 1 1 2
V w V wV w V w w v wv v w w


= .

Ritornando alla dimostrazione del teorema 1.2 (rif. D.S.W. pag. 273) affermiamo che un linguaggio
C.F. se e solo se esiste una grammatica C.F. positiva tale che ( ) ( ) { } ( )
0 L L L L = = :
DIM. : Se L C.F. e una grammatica C.F. tale che ( ) L L = allora si applica lalgoritmo descrit-
to nel lemma 2 (con lausilio del lemma 1 per la costruzione del kernel di ) e si costruisce una gramma-
tica C.F. positiva che soddisfi il teorema ( ( ) ( ) { } ( )
0 L L L L = = );


EDIT by Qd Grammatiche X Lez.
45
DIM. : Viceversa, data una grammatica C.F. positiva, se ( ) L L = allora L un linguaggio C.F.,
tale implicazione ovviamente vera e dimostrata immediatamente in quanto, se ( ) L L = , L chiara-
mente un linguaggio C.F.; nel caso in cui ( ) { } ( )
0 L L = si crea un nuovo simbolo (o assioma) S

e si
aggiungono alla grammatica

(ricavata da ) due nuove produzioni: S S

e 0 S

. Chiaramente si
ha che L un linguaggio C.F.:
( ) ( )

{ }

0
0
S S S
L L

=

.


Radice
Padre
Figlio
Foglia Foglia
Foglia
S
a b
c d
w abcd = = g
Esempio di albero di derivazione
Decima Prima Lezione
7/11/2006
Aberi di derivazione

Ricapitolazione lemma 2 e conclusione teorema 1.2.


ALBERI

Gli alberi sono delle strutture matematiche che servono a de-
scrivere degli insiemi tra i cui elementi ci sono delle relazioni (gli
alberi di cui discuteremo pi precisamente sono detti alberi fini-
tari e cio degli alberi in cui ogni nodo ha un numero finito di
successori).


DEF. (rif. D.S.W. pag. 273): Un albero detto -albero se:

1. la radice (root) etichettata con una variabile;
2. ogni nodo (vertex o vertice) che non una foglia (leaf )
etichettato con una variabile;
3. se un vertice ha etichetta X e i suoi immediati successori
hanno etichette
1 2
, , ,
k
(letti da sinistra a destra) al-
lora questo vertice una produzione di .


DEF.: Sia g un -albero e v un nodo (vertice) di g eti-
chettato con X, allora
v
g detto sottoalbero determinato dal nodo v. Tale sottoalbero avr radice v e i
figli della radice saranno gli immediati successori di v e cos via sino alle foglie.

DEF.: Se g un albero allora g la parola che consi-
ste nelle etichette delle foglie di g lette nellalbero da sinistra
a destra.

DEF.: Se la radice di g ha etichetta S e w = g allora
g detto albero di derivazione per w in (da S).

Vediamo un altro esempio di albero di derivazione: sia
,2 es
: , | , | S a X bY X a X a Y bY b . Tale gramma-
tica genera il linguaggio
( )
[ ] [ ]
{ }
,2
, , 0
n n
es
L a b n m = > (tale lin-
guaggio, nel caso in cui m n = non regolare ma risulta pur sempre C.F.).
Costruiamo lalbero di derivazione di una stringa generata dalla
grammatica corrente, ad esempio
[ ] [ ] 4 3
w aaaabbb a b = = . Per
costruire lalbero dobbiamo seguire le regole di produzione del-
la grammatica. Da notare che non unica la derivazione di w
da S, infatti (rif. D.S.W. pag. 274) si possono avere tre derivazioni
differenti che portano allo stesso risultato:

EDIT by Qd Grammatiche XI Lez.
47

[ ] [ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
2 3 4 4 2 4 3
1 2 3 4 5 6
2 2 2 3 2 3 3 4 3
1 2 3 4 5 6
2 3 2 3 3 3 4 3
1 2 3 4 5 6
1.
2.
3.
S a X bY a X bY a X bY a bY a b Y a b
S a X bY a X bY a X b Y a X b Y a X b a b
S a X bY a X b Y a X b a X b a X b a b





(le variabili sottolineate indicano che su esse avviene la successiva produzione)


importante sottolineare che lalbero di derivazione di w unico, indipendentemente dalle diffe-
renti derivazioni adoperate per ottenere w. Lalbero di derivazione risultante il seguente:



S
a
X
b
Y
a
a
a
X
X
Y b
b
Decima Seconda Lezione
14/11/2006
Tremi sulle Derivazioni e gli Alberi di derivazione
Derivazioni estreme (a sx. e a dx.) Grammatiche Branching

TEOREMA 1.3 (rif. D.S.W. pag. 274): Se una grammatica C.F. positiva e risulta S w

allora vi un
albero di derivazione per w in .

DIM.: Si dimostra per induzione sulla lunghezza della derivazione di w da S in .

Passo base: 1 m = , ci corrisponde a dire che S w = (per 1 m = non ci sono produzioni) e
lalbero di derivazione richiesto rappresentato da un unico vertice etichettato con S;

N.B.: A lezione, nel passo base della dimostrazione per induzione, stato considerato, giustamente, il
caso 2 m = , si ha quindi S w

, cio in ci deve essere una produzione


1 2 n
S w = e
lalbero sar fatto cosi:

Seguendo la dimostrazione del libro il passo in cui 2 m = pu essere visto come passo successivo (secon-
do caso base) a 1 m = , dove le foglie rappresentano sottoalberi.

Passo induttivo: ipotizzando che per derivazioni di w da S di lunghezza q noto lalbero di deri-
vazione, dimostriamo che ci vale anche per derivazioni di w da S di lunghezza 1 q + in , cio
che esiste lalbero di derivazione di w da S in per derivazioni di lunghezza 1 m q = + . Si ha
quindi:
1 m q m
S v w


= =


, con ( ) , v w V T

. Applicando lipotesi di induzione su S v

si ha che
esiste un albero di derivazione di v da S in . Scrivendo ora v w

(ricordando la definizione
data per u v

rif. D.S.W. pag. 269) si ha che v x X y = e


1 2 k
h
w x y =
_
( X V ,
( ) h V T

). contiene la produzione
1 2 k
X , come gi detto lalbero di derivazio-
ne di v noto per lipotesi di induzione, mentre lalbero di derivazione di w si costruisce a par-
tire dallalbero di derivazione di v aggiungendo un sottoalbero rappresentante la derivazione
v w

che sappiamo costruire sempre per lipotesi di induzione ( 1 m q < + , per la precisione
2 m = , che come abbiamo poco fa visto nella nota riguardante il caso 2 m = , a fortiori sappia-
mo costruire). Tale sottoalbero ha chiaramente radice etichettata con X. Il teorema dunque
dimostrato.





S
1

2


n


EDIT by Qd Grammatiche - XII Lez.
49
Graficamente abbiamo:












DEF.: con la scrittura
l
u v indichiamo che esiste una produzione in X z , con u x X y =
e v x z y = , ( ) y V T

e x T

.
Mentre la sequenza
1 2 l l l n
u u u detta derivazione estrema a sinistra.

Tale tipo di derivazione si ottiene applicando produzioni solo alle variabili che si trovano allestrema si-
nistra della stringa del tipo u xXy = , abbiamo dunque:
l
x X y x z y , dove xzy v = . Poich z de-
riva da X, ovvio che x non pu essere una variabile altrimenti si otterrebbe una derivazione qualsiasi, in-
vece, essendo una derivazione estrema a sinistra, deve essere prodotta la prima variabile a sinistra, che nel
nostro caso X V ( x T

e ( ) y V T

), se z un terminale allora le successive derivazioni e-
streme a sinistra si applicheranno a y che potrebbe contenere variabili. Una derivazione estrema a sinistra
(rif. D.S.W. pag. 274, 1):
l l l l l l
S a X bY aa X bY aaa X bY aaaabY aaaabbY aaaabbb


Larchetto identifica la prima variabile alla sinistra della stringa sulla quale si applica la produzione.


DEF.: Viceversa la scrittura
r
u v indica che esiste una produzione in X z , con u x X y =
e v x z y = , ma, rispetto alla definizione precedente, risulter: ( ) x V T

e y T

.
Analogamente la sequenza:
1 2 r r r n
u u u detta derivazione estrema a destra.

Dualmente rispetto a prima, in questo caso, vengono prodotte le variabili che si trovano allestrema de-
stra della stringa come si pu evincere dallesempio analogo a quello visto prima:
r r r r r r
S aXbY aXbbY a X bbb aa X bbb aaa X bbb aaaabbb


Come si pu evincere vengono prodotte soltanto le variabili allestrema destra.

Per completezza vediamo un terzo esempio di derivazione:
, l r l r l r l
S a X bY aaXbY aa X bbY aaaXbbY aaa X bbb aaaabbb


Questa derivazione non n estrema a sinistra n estrema a destra, essendo costituita sia da derivazioni
estreme a sinistra che estreme a destra. Da notare che, come nei due esempi precedenti, la prima deriva-
zione (
, l r
S a X bY

) estrema sia a sinistra che a destra.

TEOREMA (rif. D.S.W. pag. 275) Dato un albero di derivazione g per w T

si pu ottenere una de-


rivazione estrema a sinistra (a destra) di w da S, quindi w = g .

DIM.: Si costruisce una dimostrazione per induzione sulla lunghezza della derivazione.

S
x
X
y
x
X
y
1

w
v
2

k


EDIT by Qd Grammatiche - XII Lez.
50
Con la stringa:
0 1 1 2 r r
v X v X X v (con
0 1
, , ,
r
v v v T

e
1 2
, , ,
r
X X X V )
(notazioni alternative indicano q in luogo di r)

indichiamo la parola che si legge da sinistra a destra lungo lalbero di derivazione nei vertici successori
immediati della radice S.

Come gi definito i simboli v rappresentano stringhe terminali, mentre i simboli X sono le etichette dei
vertici
1 2
, , ,
n
immediati successori della radice S di g (da non confondere il simbolo v con il
simbolo ).




Passo base: ( ) 0 q r = = , produzione priva di variabili. Stiamo ipotizzando il caso in cui non esistano deri-
vazioni con lunghezza maggiore di 2 e cio che le derivazioni di lunghezza 2 non generino stringhe che contengano
variabili ma soltanto terminali.
Ovviamente in questo caso si ha immediatamente S w , con w T

,
0
w v = e 0 r = ( facile
evincere ci osservando lalbero appena mostrato, escludendo i nodi etichettati con le variabili X , in quanto assen-
ti nella produzione del passo base, e chiaramente le stringhe
0 1
, , ,
r
v v v devono essere viste come ununica stringa
che in questo caso indicata con
0
v ).
In questo caso facile osservare che
l
S w , ma anche
r
S w , la derivazione dunque e-
strema sia a sinistra che a destra. Il caso base dunque dimostrato;

Passo induttivo: ipotizzando ( ) 0 q r = > , cio che la produzione contenga almeno una variabile
X . Consideriamo gli alberi
i
i

= g g con 1, 2, , i r = . Con questa notazione indichiamo le


grammatiche
i
che hanno come assiomi
i
X , rappresentano in pratica sottoalberi di g le cui
radici sono etichettate con
i
X e le cui foglie sono etichettate con
1 0
, , ,
n
i i i
w w w
(
1 0 n
i i i i
w w w w = ). La parola che si ottiene dalla derivazione dellalbero principale sar
0 1 1 2 r r
w v wv w w v = .
Presupponendo vero il teorema per un certo 0 r > , partendo da
i
X si ha l
i i
X w

e r
i i
X w

,
con 1 i r , ipotizzando vera lultima affermazione fatta (ipotesi di induzione) possiamo giun-
S
0 0 0
1 2
0
n
v
v v v
_

1
X

n

g
1 1 1
1 2
1
m
v v v
v

_

2
X
r
X
1 2
r r r
p
r
v v v
v

_

1
g
2
g
r
g

EDIT by Qd Grammatiche - XII Lez.
51
gere alla tesi del teorema (su una lunghezza della derivazione maggiore di r) e cio che l S w

e
r S w

, e pi esplicitamente che
1 1 2
1 1 2
1 1 2
1 1 2
l o r r
l
o r r
l
o r r
l
o r r
S v X v X X v
v wv X X v
v wv w X v
v wv w w v w

e
1 1 2
1 1 2
1 1 2
1 1 2
r o r r
r
o r r
r
o r r
r
o r r
S v X v X X v
v X v X w v
v X v w w v
v wv w w v w



Da S si ottiene una derivazione estrema sia a sinistra che a destra. Tale conclusione del
teorema si ottiene applicando ricorsivamente i due passi dellinduzione.


TEOREMA 1.4 (non dim): Sia una grammatica C.F. positiva con simbolo iniziale S e terminali T. Al-
lora i seguenti enunciati sono equivalenti:
1. ( ) w L ;
2. esiste un albero di derivazione per w in ;
3. c una derivazione estrema a sinistra di w da S in ;
4. c una derivazione estrema a destra di w da S in ;


DEF.: Una grammatica C.F. positiva detta branching (ramificata o ramificante di Chomsky) se non
ha produzioni della forma X Y , con , X Y V .

Lalbero di derivazione di tale grammatica ha vertici che, se non sono foglie, non sono unici, nel senso
che ogni vertice non pu avere un solo figlio, ammenoch questo figlio non sia una foglia.
TEOREMA 1.5: Vi un algoritmo per ottenere, da una grammatica C.F. positiva, una gramma-
tica C.F. positiva e ramificante tale che si ha linvarianza ( ) ( ) L L = .


La dimostrazione segue alla lezione successiva.

Decima Terza Lezione
17/11/2006
teoremi sulla grammatica Branching e in Chomsky Normal Form
Pumping Lemma propriet di chiusura
Grammatiche Ambigue e Grammatiche Regolari


DIM.: Supponiamo prima il caso in cui contenga delle produzioni cicliche del tipo:
1 2
, X X
2 3 1
, ,
k
X X X X , chiaramente con
1 2
, , , , 0
k
X X X V k > .

1. Il primo passo consiste nelleliminare le produzioni cicliche, e sostituendo, ad ogni variabile
i
X
rimanente, il nuovo simbolo X V .

Da notare che facendo queste sostituzioni il linguaggio generato non cambia, in quanto ad esempio:
1
Y X e
1 2 1
, ,
k
X X X X , tale sequenza d gli stessi risultati di
1
Y X , possiamo dunque e-
liminare il ciclo e rimpiazzare
1
X con X .

Se una variabile
i
X S = (cio se un assioma) allora porremo X S = .

Ora supponiamo il caso in cui non contenga produzioni cicliche, in tal caso si passa al secon-
do passo.

2. Per ottenere da una grammatica branching non deve contenere produzioni del tipo X Y
tali che Y Z (cio Y non deve essere una variabile, ma un terminale ).
L dove risulta Y x e X Y con ( ) x V T

, si eliminano tali produzioni e le si rim-
piazza con X x , si ripete tale procedura fintantoch 1 x = e x V , proprio perch si vuole
ottenere, non modificando il linguaggio generato, una grammatica branching ( X Y non
ammesse, mentre sono ammesse ad esempio X YZ ).

Ripetendo il passo 2 pi volte si otterr una grammatica C.F. positiva e ramificata.


DEF.: con la dicitura Chomsky Normal Form (forma normale di Chomsky) si indica una grammatica
C.F. con variabili V e terminali T e ogni sua produzione ha una delle forme seguenti: X YZ oppu-
re X a , con , , X Y Z V e a T .

TEOREMA 3.1: Vi un algoritmo che permette di trasformare una grammatica C.F. positiva in una
grammatica C.N.F. (Chomsky Normal Form) , tale che il linguaggio generato non cambia, quind
( ) ( ) L L = .

DIM.: Per il teorema precedente possiamo supporre che sia una grammatica branching senza che la
dimostrazione perda di generalit.

1.1. Per ogni simbolo a T , si introduce la variabile
a
X ;
1.2. Si modifica rimpiazzando ogni produzione X x (dove x non un singolo terminale)
con la produzione X x , tale x si ottiene da x sostituendo ad ogni terminale a la va-
riabile
a
X ;

EDIT by Qd Grammatiche - XIII Lez.
53
Quindi se si ha X x e x aa = si ottiene ,
a a
X x x X X

= .

2. Si aggiungono tutte le produzioni
a
X a .

Chiaramente il linguaggio generato dalla grammatica ottenuta dai passi appena descritti la stessa di
( ) L e avr produzioni del tipo (ma non ancora una grammatica in C.N.F.):

I)
1 2 k
X X X X con 1 k > (del resto avevamo ipotizzato branching) pi precisamente si ha X x


con
1 2 k
x X X X

= , x

non un singolo terminale per questo 2 k ;


II) X a .

1 2
, , , ,
k
X X X X sono variabili mentre a un terminale.

Al fine di ottenere una grammatica in C.N.F. bisogna eliminare tutte le produzioni I) con 2 k > , infatti
la C.N.F. deve avere produzioni con (soltanto) due variabili, a tal fine si introduce un nuovo tipo di va-
riabile: Z che utilizzeremo in questo modo:
1 1
1 2 2
3 2 2
2 1
;
;
;
k k k
k k k
X X Z
Z X Z
Z X Z
Z X X

.

Con questo stratagemma otteniamo una grammatica C.N.F. tale che ( ) ( ) L L = .


DEF. (accenno, rif.: D.S.W. pag. 287, ex. 3): Si dice grammatica C.F. in forma normale di Greibach una
grammatica che ha ogni produzione nella forma:
1 2 k
X aYY Y con 0 k , a T e
1 2
, , , ,
k
X Y Y Y V .

TEOREMA 4.1 Pumping Lemma (non dim.): tale lemma visto per i linguaggi regolari pu essere e-
steso alle grammatiche C.N.F. in questo modo, sia una grammatica C.N.F. con n variabili e sia
( ) L L = , allora x L tale che 2
n
x = si ha che
1 1 2 2
x r q r q r

= dove:

[ ] [ ]
1 2
1 2
1 1 2 2
1. 2 ;
2. 0;
3. 0
n
i i
q r q
q q
i r q r q r L





TEOREMA 4.2 (rif. D.S.W. pag. 290 non dim.): Il linguaggio
[ ] [ ] [ ]
{ }
| 0
n n n
L a b c n = > non C.F.

Chiaramente se n avesse un limite superiore allora L sarebbe C.F., ma qui stiamo considerando il caso in
cui n possa assumere qualsiasi (tutti) valore positivo non nullo.


Risolvendo il seguente esercizio (rif. D.S.W. pag. 290, ex. 1) si scopre che anche le grammatiche C.F. han-
no dei limiti: mostrare che
[ ]
{ }
| un numero primo
i
L a i = non C.F. Tale fatto si pu dimostrare i-

EDIT by Qd Grammatiche - XIII Lez.
54
potizzando che L sia C.F., possiamo applicare il pumping lemma, si ha che (punto 3. del lemma): 0 k
[ ] [ ]
1 1 2 2
k k
r q rq r L , ma ci non possibile 0 k in quanto non avremmo sempre ripetizioni di a pari ad
un numero primo. La contraddizione ci conduce ad affermare che L non C.F.



PROPRIET DI CHIUSURA
per i linguaggi C.F.

Mostriamo tali propriet analogamente a come si fatto per i linguaggi regolari.

TEOREMA 5.1: se
1
L ed
2
L sono due linguaggi C.F. allora
1 2
L L un linguaggio C.F.

DIM.: Supponiamo che
1
L sia un linguaggio generato dalla grammatica C.F.
1
ed
2
L il linguaggio ge-
nerato dalla grammatica C.F.
2
, si ha quindi ( )
1 1
L L = ed ( )
2 2
L L = , inoltre supponiamo che
1

e
2
abbiano insiemi di variabili disgiunti fra loro, si ha quindi
1 2
V V = (con questultima posizione non
vi perdita di generalit della dimostrazione del teorema in quanto ci che interessa come risultato finale sono i terminali e
cio i linguaggi e non le parti costituenti le grammatiche).
Ora supponiamo che
1
S ed
2
S siano rispettivamente i simboli iniziali di
1
e
2
. Definiamo una
grammatica C.F. che ha come insieme di variabili { }
1 2
V V S e simbolo iniziale S.

Questo modo di dimostrare il teorema si basa sullo stesso approccio utilizzato per i teoremi sui linguaggi
regolari, in quel caso cercavamo di costruire automi (riconoscitori) mentre adesso cerchiamo di costruire
grammatiche (generatrici).

Aggiungiamo due nuove produzioni a :
1
S S e
2
S S . In conclusione la grammatica costruita
generatrice sia di
1
L che di
2
L , infatti ( ) ( ) ( )
1 2
L L L = da cui ( )
1 2
L L L = .

Ricordiamo che dire che un dato linguaggio C.F. vuol dire che esiste una grammatica che la genera,
quindi nel caso di questa dimostrazione bastato trovare unopportuna grammatica che generasse il lin-
guaggio ( ) ( )
1 2
L L .

TEOREMA 5.2: Ci sono linguaggi C.F.
1
L ed
2
L tali che
1 2
L L non un linguaggio C.F. In al-
tre parole il teorema ci assicura che la classe dei linguaggi C.F. non chiusa rispetto allintersezione.

DIM.: la dimostrazione consiste nel trovare (almeno) un esempio di linguaggio che non C.F. che sta-
to ottenuto dallintersezione di due linguaggi C.F., quindi consideriamo:

1
, grammatica C.F. con le produzioni: | , | S Sc Xc X aXb ab
tale grammatica genera il linguaggio C.F.:
[ ] [ ] [ ]
{ }
( )
1 1
| , 0
n n m
L a b c n m L = > = ;

2
, grammatica C.F. con le produzioni: | , | S aS aX X bXc bc
tale grammatica genera il linguaggio C.F.:
[ ] [ ] [ ]
{ }
( )
2 2
| , 0
m n n
L a b c n m L = > = .

chiaro che il linguaggio
[ ] [ ] [ ]
{ }
1 2
| 0
n n n
L L a b c n = > non C.F. (teorema 4.2, conseguenza del pumping lem-
ma), tale risultato ci sufficiente per ritenere dimostrato il teorema.

EDIT by Qd Grammatiche - XIII Lez.
55
COROLLARIO 5.3: non vi chiusura, per la classe dei linguaggi C.F., neanche per loperazione di
complemento, infatti: vi (almeno) un linguaggio C.F. L A

tale che A L

non C.F.

DIM.: Si adoperano le leggi di De Morgan (rif. D.S.W. pag. 2 -
( ) ( )
R S R S

= ) e possiamo scrivere:

( ) ( )
1 2 1 2 1 2 1 2
L L L L A L L A A L A L

= = =



con lausilio del teorema 5.1 e del teorema 5.2 se ne deduce che il complemento di un linguaggio
C.F. non C.F. infatti, se (per assurdo) neghiamo la tesi del teorema, cio assumiamo che A L

sia C.F.
allora, per il teorema 5.1 potremmo affermare che, posto
( ) ( )
1 2
H A L A L

= , H C.F. Prose-
guendo la dimostrazione per assurdo potremmo affermare anche che A H

C.F., ma A H

, come
visto poco fa uguale a
1 2
L L che, per il teorema 5.2 non C.F. (contraddizione), quindi il comple-
mento di un linguaggio C.F. non , in generale, C.F.


DEF. (rif. D.S.W. pag. 280): Una grammatica C.F. detta regolare se ogni sua produzione ha una delle
due forme: U aV oppure U a , con U e V variabili e a terminale.

TEOREMA 2.1. (non dim.): Se L un linguaggio regolare, allora vi una grammatica regolare tale
che ( ) L L = oppure ( ) { } 0 L L = .

TEOREMA 2.2. (non dim.): Se una grammatica regolare allora il linguaggio ( ) L generato da
gamma regolare.

COROLLARIO 2.4 (non dim.): Ogni linguaggio regolare C.F. chiaro che il contrario non vale (non vero
che ogni linguaggio C.F. regolare).


DEF. (rif. D.S.W. pag. 300): Una grammatica C.F. detta ambigua se esiste una parola ( ) u L che
ha due derivazioni estreme a sinistra. Una grammatica C.F. che non ambigua anche detta non ambigua.

Esempio (rif. D.S.W. pag. 303): consideriamo la grammatica con le seguenti produzioni:

| , , , S XY YX Y ZZ X a Z a

consideriamo la parola ( ) aaa L , tale parola ha due derivazioni estreme a sinistra, infatti, si ha:

1.
l l l l l
S XY aY aZZ aaZ aaa


2.
l l l l l
S YX ZZX aZX aaX aaa





Le due derivazioni hanno i seguenti alberi di derivazione:


EDIT by Qd Grammatiche - XIII Lez.
56


Tale ambiguit viene risolta mediante lutilizzo delle parentesi, per mezzo delle quali possibile risa-
lire in maniera univoca alla derivazione. In effetti i due alberi coincidono. Quindi la stringa prodotta
dalla derivazione 1. verr indicata come ( ) a aa , mentre la stringa della derivazione 2. verr indicata co-
me ( ) aa a . In questo modo lalbero di derivazione (unico) pu essere utilizzato per risalire univocamen-
te alla derivazione.


S
X Y
a
a
a
Z
Z
1
g
Z
a
S
Y X
a
Z
a
2
g
Decima Quarta Lezione
21/11/2006
Grammatiche Separatrici teorema sulla Grammatica Regolare
Automi a Pila


Riprendendo dallesercizio della lezione precedente, possiamo riscrivere le produzioni della gramma-
tica in questo modo: ( ) [ ] { } | , , , S X Y Y X Y Z Z X a Z a . Le produzioni che posso-
no indurre ad ambiguit devono essere provviste di parentesi distinte (differenti tra loro). La stringa aaa
si otterr nei due casi visti prima cos:

1. ( ) ( ) ( ){ } ( ){ } ( ){ } S X Y a Y a Z Z a a Z a a a
2. [ ] { } { } { } { } S Y X Z Z X a Z X a a X a a a



Il risultato concettualmente identico, ma non ambiguo, in questo modo ogni stringa pu essere
prodotta da ununica derivazione. I relativi alberi di derivazione sono i seguenti:




Luso delle parentesi essenziale per evitare ambiguit, un esempio dato nellambito algebrico dei con-
nettivi logici in cui ( ) ( ) a b c a b c .


Partendo dal concetto di grammatica ambigua e luso delle parentesi si arriva alla seguente:
DEF. (rif. D.S.W. pag. 303): Sulla base di una grammatica C.N.F. con terminali T e produzioni:

i i i
X Y Z e V a
con 1, 2, , i n = e a T

Costruiamo una nuova grammatica
S
tale che i suoi terminai siano i terminali di assieme ad altri
2n simboli (
i
e )
i
, quindi il nuovo insieme ricavato da T { } ( , ) | 1,2, ,
S i i
T T i n = = .

Le produzioni della nuova grammatica
S
saranno identiche a quelle di se della forma V a , men-
tre le produzioni di del tipo
i i i
X Y Z , in
S
assumeranno la forma: ( )
i i i i i
X Y Z per
1,2, , i n = .

La grammatica
S
appena definita prende il nome di grammatica separatrice (si dice anche che
S
il
separatore , ogni sua produzione ha una coppia distinta di parentesi ).
S
( ) X Y
( ) a
a
{ } Z
Z
( ) 1
g
[ ] Y
{ } [
a
{ } a
S
( ) 2
g
X
a
{ } [
Z
] Z
] a

EDIT by Qd Grammatiche - XIV Lez.
58
ovvio comprendere che da una grammatica
S
possibile ricavare la grammatica , basta, infatti, e-
liminare dalle sue produzioni i simboli delle parentesi (
i
e )
i
.

Ora che conosciamo la nozione di grammatica separatrice. Aggiungendo alla grammatica
.1 es
, mo-
strata nella IX lezione, le produzioni:

;
;
;
S S connettivo S
connettivo e
connettivo oppure
connettivo ma



Possiamo ottenere la stringa: v = un gatto corre e un topo canta oppure un gatto canta ottenibili non
da ununica derivazione e trasformando tale grammatica in una grammatica separatrice otterremmo una
derivazione univoca.

TEOREMA 2.3 (rif. D.S.W. pag. 282 non dim.): Un linguaggio L regolare se e solo se vi una gram-
matica regolare tale che ( ) L L = oppure ( ) { } 0 L L = .

Tale teorema rappresenta una caratterizzazione dei linguaggi regolari in termini generativi (per gli auto-
mi tale caratterizzazione era fatta in termini di riconoscimento).


Ora viene mostrato uno schema che illustra e localizza gli argomenti studiati sin ora e alcuni non
ancora trattati:

Algoritmi:
Linguaggi:
Riconoscimento Generazione
Regolari Automi Finiti Grammatiche Regolari C.F.
Context Free Automi a Pila Grammatiche C.F.

Le grammatiche regolari C.F. generatrici di linguaggi regolari hanno produzioni con una sola variabile e
un solo terminale (questo fatto fa intuire come una grammatica di questo tipo riesca a simulare in qualche
modo il comportamento dellautoma finito).

dimostrato che la classe dei linguaggi regolari inclusa propriamente (propriamente perch esiste alme-
no un linguaggio C.F. che non regolare) nella classe dei linguaggi C.F.:
R C.F.
C C . Del resto il corollario 2.4
dice proprio che ogni linguaggio regolare anche C.F., ma il viceversa non vale come dimostrato dal te-
orema 1.1 (rif. D.S.W. pag. 270) in cui viene fatto un esempio di linguaggio C.F. che non regolare.


Si introduce ora il concetto di automa a pila (o pushdown) che unentit matematica (pi potente
degli automi finiti) in grado di riconoscere i linguaggi C.F. (quindi anche i linguaggi regolari, per quanto
detto poco fa), che, oltre ad avere le propriet degli automi finiti (tradizionali) possiede una memoria
(pila o stack) per memorizzare i dati (push) o eliminarli (pop) durante la lettura dellipotetico nastro.
Formalmente diamo la seguente:
DEF.: Lautoma a pila rappresentato da un insieme di stati { }
1 2
, ,
m
Q q q q = , con
1
q stato inizia-
le, F Q insieme degli stati finali (o di accettazione), A lalfabeto usuale (il nastro costituito da parole di
questo alfabeto), un altro alfabeto detto alfabeto pila (pushdown) . Introduciamo un nuovo simbolo 0 il

EDIT by Qd Grammatiche - XIV Lez.
59
quale non appartiene n allinsieme A, n allinsieme , scriveremo quindi 0 A e 0 con
{ } 0 A A = e { } 0 = .

DEF. (rif. D.S.W. pag. 310): Per transizione di un automa a pila si intende la quintupla: :
i j
q a q h i
con a A e , h i . La transizione si interpreta in questo modo:

1.
i
q rappresenta lo stato in cui si trova lautoma a pila prima della lettura del simbolo a ;
2. a il simbolo che viene letto dallautoma se 0 a , altrimenti non viene letto nulla;
3. h il simbolo che viene estratto (pop) dalla pila se 0 h , altrimenti non viene estrat-
to nulla;
4. i il simbolo che viene inserito (push) nella pila se 0 i , altrimenti non viene in-
serito nulla;
5.
j
q lo stato in cui transiter lautoma dopo la transizione.

Come detto se 0 a = non verr letto alcun simbolo sul nastro (ovvero lautoma non si sposter lun-
go il nastro per leggere il simbolo), il fatto che 0 a = non vieta allautoma di eseguire eventuali opera-
zioni di pop e di push e di transitare eventualmente in un altro stato.

DEF.: Un automa a pila viene specificato da un numero finito di transizioni.

Il simbolo 0 rende, in qualche modo, lautoma a pila non deterministico. Difatti se 0 a = lautoma
potrebbe comunque transitare in un altro stato, anche pi di una volta, imitando, in questo modo, ci
che avviene negli automi finiti non deterministici (i quali possono leggendo un solo simbolo transitare
in pi stati contemporaneamente).

DEF.: Date le seguenti transizioni: :
i j
q a q h i e :
i k
q b q j k se distinte tra loro (ovvero se c
almeno un elemento delle due quintuple che le distingue), esse vengono dette incompatibili se si verifica una delle
seguenti condizioni:

1. a b = e = h j (in questo caso viene letto due volte lo stesso simbolo e viene fatto
il pop dello stesso simbolo due volte);

2. a b = e 0 = h oppure 0 = j (viene letto due volte lo stesso simbolo e in una delle due transizioni
non viene fatto il pop);

3. = h j e 0 a = oppure 0 b = (viene fatto il pop due volte dello stesso simbolo e in una delle due
transizioni non viene letto alcun simbolo);

4. 0 a = oppure 0 b = e 0 = h oppure 0 = j (in una delle due transizioni non viene letto
alcun simbolo e in una delle due transizioni
non viene effettuato il pop);

DEF.: Un automa a pila si dice deterministico se non possiede coppie di istruzioni incompatibili.

La definizione appena data giustificata dal fatto che con istruzioni incompatibili non assicurato il de-
terminismo dellautoma.


EDIT by Qd Grammatiche - XIV Lez.
60
DEF.: Posto u A

ed ` un automa pushdown. Con il termine u-configurazione per ` indi-


chiamo la tripla ( ) , ,
i
k q = dove k un intero 1 1 k u + ,
i
q uno stato di ` ed

una
stringa del linguaggio pushdown ( una sequenza di simboli contenuti nella pila, che in caso pu an-
che essere vuota, per via della stella), mentre u rappresenta la stringa letta dallautoma.
Intuitivamente una u-configurazione rappresenta una situazione nella quale:

u scritto nel nastro di ` ;
` osserva il k-mo simbolo della stringa u;
Se 1 k u = + la computazione di ` terminata durante la u-configurazione ;

i
q lo stato in cui si trova ` durante la u-configurazione ;
la stringa di simboli nella pila dellautoma durante la u-configurazione ;
Se 0 = allora la pila vuota nella u-configurazione .

DEF.: Nel caso dellautoma a pila non deterministico, per una coppia di u-configurazioni scrivere-
mo: ( )
( )
| : , , , ,
i j
u k q l q
`
se ` contiene una transizione :
i j
q a q h i , dove =h e
=i , con

e:
1. l k = e 0 a = ;
oppure
2. 1 l k = + e il k-mo simbolo di u a .

Da notare che il push (pop) viene fatto inserendo (estraendo) nella stringa della pila un simbolo alla vol-
ta da sinistra, ad esempio, inserendo B nella pila in cui c A, si ha: B A.

Chiaramente se 0 = h oppure 0 = i si avr rispettivamente = oppure = .

In effetti il simbolo |
`
serve a descrivere il passaggio da una configurazione allaltra di un au-
toma pushdown nella lettura di un simbolo ( 0 compreso).

DEFF.: una successione
1 2
, , ,
m
detta u-computazione di ` se valgono le seguenti condi-
zioni:
1. ( )
1
1, , 0 q = (per un q Q , lo stack vuoto e viene letto il primo simbolo di u,
lo stato non necessariamente quello iniziale);
2.
( )
1, ,
m
u p = + con p Q e


3.
1
| :
i i
u
+

`
con 1 i m < .

La prima condizione rappresenta il passo iniziale della u-computazione, la seconda condizione rap-
presenta il passo finale, mentre la terza condizione rappresenta i passi intermedi della u-computazione.

La u-computazione appena vista detta di accettazione se:

1. lo stato p a
m
uno stato di accettazione;
2. lo stato q a
1
lo stato iniziale
1
q ;
3. la pila a
m
vuota.

Diremo che u accettata da ` se vi una u-computazione di accettazione di ` .


EDIT by Qd Grammatiche - XIV Lez.
61
Con ( ) L ` indichiamo linsieme di stringhe accettate da ` ovvero il linguaggio accettato da
` : ( ) { }
| , accetta L u u A u

= ` ` (rif. D.S.W. pag. 320).



Nellesempio che segue si mostra come gli automi a pila siano capaci di riconoscere linguaggi non
regolari.
Esempio 1 (rif. D.S.W. pag. 312 ex.1): sia
1
` un automa a pila, lalfabeto dellautoma { } , a b e quello
dello stack { } A (non confondere A con lusuale simbolo dellalfabeto), insieme degli stati { }
1 2
, Q q q = ,
{ }
2
F q = , le transizioni sono le seguenti:
1 1 1 2 2 2
0 : , : 0 , : 0 q a Aq q bA q q bA q .

1
` deterministico infatti non ci sono coppie di istruzioni incompatibili tra loro; fin quando
1
`
legge il simbolo a viene fatto il push nello stack del simbolo A, questo sistema permette allautoma di tene-
re traccia del numero di a lette, invece quando vengono lette b viene effettuato il pop dallo stack del sim-
bolo A e si transita nello stato
2
q .

Il linguaggio riconosciuto da questo automa ( )
[ ] [ ]
{ }
1
| 0
n n
L a b n = > ` e lo si pu verificare facen-
do degli esempi (facendo leggere delle stringhe del linguaggio allautoma e verificando che lautoma, alla fine della lettura
si trova in uno degli stati, in questo caso
2
q , di accettazione).

Come si pu notare da questo primo esempio di automa a pila, il linguaggio riconosciuto proprio uno
di quei linguaggi non riconoscibili da automi finiti tradizionali (visti nella prima parte del corso), questo
per evincere subito la potenza di questo nuovo strumento, quale lautoma pushdown.

Proviamo a far leggere allautoma pushdown la stringa u ab = da cui si ha la u-computazione:
1 2 3
, , con ( )
1 1
1, ,0 q = , ( )
2 2
2, , q A = e ( )
3 2
3, ,0 q = , possiamo anche scriverla in questo modo:

( ) ( ) ( )
1 1 2
1 1
| | : 1, ,0 2, , 3, ,0 u q q A q
` `
.

Come possiamo notare, nella terza u-configurazione, lo stato di accettazione e lo stack vuoto, ci
vuol dire che la stringa ab stata accettata dallautoma pushdown.

Inizialmente lo stack vuoto, alla lettura del simbolo a, lautoma pushdown resta nello stato iniziale
1
q ,
mentre viene caricato il simbolo A nello stack. Alla lettura del simbolo b, lautoma pushdown transita nel-
lo stato
2
q e viene fatto il pop del simbolo A dallo stack.

Adesso facciamo un esempio con la stringa v aab = che porta alla u-computazione:
( ) ( ) ( ) ( )
1 1 2 1 3 1 4 2
1, ,0 , 2, , , 3, , , 4, , q q A q AA q A = = = = che non di accettazione in quanto in
4
lautoma pushdown s pervenuto in uno stato di accettazione ma lo stack non vuoto.

Ultima stringa su cui testare
1
` w aabb = dalla quale otteniamo la sequenza:
( ) ( ) ( ) ( ) ( )
1 1 2 2 2
1 1 1 1
| | | | : 1, , 0 2, , 3, , 4, , 5, ,0 w q q A q AA q A q
` ` ` `


Dunque la stringa aabb accettata da
1
` .

Decima Quinta Lezione prima parte
24/11/2006
esempi sugli Automi Pushdown e relativi teoremi


Esempio 2: sia
2
` con { } , ,
T
A a b c = (
T
A sta per Tape alphabet), { } ,
P
A A B = (
P
A sta per Pushdown al-
phabet), { }
1 2
, Q q q = , { }
2
F q = , le transizioni seguono il seguente schema:
1 1
0 : q a Aq ,
1 1
0 : q b Bq ,
1 2
0 : 0 q c q ,
2 2
: 0 q aA q ,
2 2
: 0 q bB q .

Anche in questo caso
2
` deterministico in quanto non ci sono coppie di istruzioni incompatibili tra
loro.
Il linguaggio riconosciuto da
2
` ( ) { }
{ } 2
| ,
R
L u c u u a b

= ` (quindi stringhe del tipo, ad esempio,
a c a , , , ab c ba aab c baa ).
Proviamo a far leggere la stringa w abcba = , otteniamo la sequenza di u-configurazioni:
( ) ( ) ( ) ( ) ( ) ( )
1 1 1 2 2 2
2 2 2 2 2
| | | | | : 1, ,0 2, , 3, , 4, , 5, , 6, , 0 w q q A q BA q BA q A q
` ` ` ` `
.

Non complicato capire il meccanismo di questo automa pushdown, alla lettura di simboli a o b allo
stato
1
q vengono caricati nello stack rispettivamente i simboli A o B, mentre allo stato
2
q vengono tolti
dallo stack rispettivamente i simboli A o B. Il cambio di stato avviene soltanto alla lettura del simbolo c.
Durante la prima parte nella lettura della stringa lo stack viene caricato, tenendo traccia della stringa u,
una volta letto c viene scaricato lo stack fin quando la stringa
R
u non viene letta tutta.

Esempio 3: Sia
3
` un automa pushdown con { } ,
T
A a b = , { } ,
P
A A B = , { }
1 2
, Q q q = , { }
2
F q = ,
le transizioni sono le seguenti:
1 1
0 : q a Aq ,.
1 1
0 : q b Bq ,
1 2
: 0 q aA q ,
1 2
: 0 q bB q ,
2 2
: 0 q aA q ,
2 2
: 0 q bB q .

Questo il caso di un automa pushdown non deterministico infatti le coppie di transizioni prima-terza
e seconda-quarta non sono compatibili tra loro (stesso stato, stesso simbolo letto, ma uno dei pop per cia-
scuna coppia 0 , cio viene fatto un pop e un push contemporaneamente). In tal caso
3
` ha la capaci-
t di seguire pi strade contemporaneamente quando si trova nello stato
1
q nel leggere a o b .

3
` riconosce il linguaggio
( ) { }
{ } 3
| , 0
R
L u u u a b u

= ` (quindi stringhe del tipo, ad esempio,


a a , ab ba , b b , abb bba , ).
Nella lettura della parola aa si ottiene:
( ) ( ) ( )
1 1 1
3
3
| | : 1, ,0 2, , 3, , aa q q A q AA
_
_
` `
( )
2
3
| 2, ,? q
`
( )
2 3
| 3, , 0 q
`
.

Come si pu notare
3
` in pi punti segue contemporaneamente strade differenti, ma, come acca-
deva per gli automi non deterministici tradizionali, non sempre certe strade vengono prese in considera-
zione, ma scartate, in questo caso due u-configurazioni vengono scartate, ( )
2
2, ,? q perch non ha senso
effettuare il push da uno stack che vuoto, ( )
1
3, , q AA s accettabile come u-configurazione ma non
permette allautoma pushdown di accettare la stringa aa, quindi viene anchessa scartata.

I linguaggi riconosciuti dagli automi pushdown
1 2 3
, ` ` ` sono tutti e tre C.F.


EDIT by Qd Grammatiche - XV Lez. - I parte
63
Come abbiamo visto gli automi a pila offrono grosse potenzialit, tuttavia esistono altri tipi di lin-
guaggi che neanche gli automi a pila sono in grado di riconoscere, per cui esistono entit matematiche
ancora pi potenti.

TEOREMA 8.3 (non dim. rif. D.S.W. pag. 316): Sia una grammatica in forma normale di Chomsky, al-
lora vi un automa a pila ` che riconosce il linguaggio generato da , si ha quindi
( )
( ) L L = ` .

TEOREMA 8.4 (non dim.): Per ogni linguaggio C.F. L, vi un automa a pila ` che riconosce tale
linguaggio, si ha quindi ( ) L L = ` .

TEOREMA 8.6 (non dim.): Per ogni automa a pila ` , ( ) L ` un linguaggio C.F.

Calcolabilit




Decima Quinta Lezione Seconda parte
24/11/2006
Introduzione ai Linguaggi di Programmazione
S-programmi

Introduzione ai Linguaggi di Programmazione
(rif. D.S.W. pag. 17)

Il linguaggio che andiamo a studiare ha istruzioni che operano su un alfabeto con apparenti limita-
zioni { } 0,1, 2, , 9 A = , come vedremo linguaggi che agiscono su questo alfabeto hanno in realt grosse
potenzialit per la soluzione dei problemi.

Attualmente si pensa che se non possibile risolvere un problema con i mezzi che abbiamo oggi a dispo-
sizione (pratici e teorici), allora il problema in questione non potr mai essere risolto, il problema di fatto
irrisolvibile. Ovviamente tale affermazione non dimostrata, ma fino ad ora risultata vera.

DEFF.: Il concetto teorico di computabilit si basa su uno specifico linguaggio di programmazione
f (o S ). Lalfabeto di tale linguaggio stato poco fa definito, le variabili avranno valori interi non ne-
gativi, in particolare denotiamo con i simboli:

1 2 3
X X X variabili di input (ingresso);
Y la variabile (unica) di output (uscita);

inoltre con i simboli:

1 2 3
Z Z Z denotiamo le variabili locali.

In qualche caso le variabili potranno essere denotate in minuscolo e il pedice 1 spesso omesso, quindi
in luogo di
1
X ad esempio, scriveremo X.
A differenza dei linguaggi di programmazione effettivamente utilizzati, il linguaggio S non ha un limite
superiore (riferito ai valori che possono assumere le variabili) per via della sua natura teorica, tuttavia lavo-
rare con questi linguaggi piuttosto semplice, soprattutto per chi ha gi un minimo di esperienza con la
programmazione.

Le istruzioni scritte e riconosciute dal linguaggio f sono sostanzialmente tre:

1 V V + incremento della variabile V;
1 V V decremento di V (se 0 V = il valore di V resta invariato);
IF GOTO 0 V L condizionale (se 0 V = si passa allistruzione successiva,
altrimenti si passa allistruzione etichettata da L).

In aggiunta alle variabili viste fino ad ora utilizziamo i simboli:
1 1 1 1 1 2 2
A B C D E A B (anche in
questo caso il pedice 1 pu essere omesso). Questi simboli servono ad etichettare le istruzioni, racchiudendo tali
simboli tra parentesi quadre [ ] , come mostrato nel seguente esempio:



EDIT by Qd Calcolabilit XV Lez. - II parte
65
[ ] 1 L V V + Il simbolo V viene considerato come una meta variabile, cio un simbolo che
Rappresenta un dato, nel nostro caso un numero intero non negativo.

Luso delle etichette indispensabile, soprattutto per le istruzioni condizionali.

Sulla base e sulla composizione delle istruzioni appena viste possiamo definire gli S-programmi, suc-
cessioni finite e ordinate di istruzioni (ovviamente a differenza degli insiemi, qui lordine con cui vengono scritte le
istruzioni e essenziale).

Per convenzione la variabile duscita Y e le variabili locali
i
Z con 1 i inizialmente hanno valore
nullo 0.

Vediamo un primo esempio di S-programma (a):

in questo caso X lunica variabile dingresso, Y quella di uscita, e come
definito, inizialmente 0 Y = .




Tale S-programma copia il valore di X in Y, formalmente scriveremo:

X viene decrementato e Y incrementato fintantoch 0 X ad ogni passo
del ciclo; se per inizialmente 0 X = , dopo la prima istruzione, X varr
sempre 0, dopodich Y verr incrementato diventando 1, poich 0 X =
durante listruzione condizionale IF il programma terminer.


Vediamo un altro esempio di S-programma (b):


Se inizialmente 0 X = , Y rimane a 0 e si esce dal programma.

La variabile Z viene utilizzata come flag per uscire dal programma al
momento opportuno.

Le istruzioni denotate con * rappresentano quello che viene chiamato
salto incondizionato.

Il programma suddiviso in due parti c e t . Il primo gruppo di
istruzioni di controllo, mentre il secondo gruppo quello che si
occupa del trasferimento vero e proprio dei valori numerici dalla
variabile X alla variabile Y.



In questo caso risulta:
Letichetta E, non facendo riferimento a nessuna istruzione esistente,
fa terminare il programma (E sta per Exit).

Lesempio appena visto rappresenta un perfezionamento dellS-programma precedente, il quale pre-
sentava un grave difetto e cio di non restituire il risultato corretto nelleventualit che X fosse nulla, in-
[ ]
IF GOTO
1
1
0
A X X
Y Y
X A

+

( )
1 se 0
altrimenti
a
x
f x
x
=

[ ]
[ ]
IF 0 GOTO
IF GOTO
IF GOTO
1
0
1
1
1
0
X A B
c Z Z
Z E
B X X
Y Y
t
Z Z
Z A

( ) 0 ,
b
x f x x =

EDIT by Qd Calcolabilit XV Lez. - II parte
66
fatti con 0 X = in uscita avremmo avuto 1 Y = e non 0 Y = . Nellesempio corrente invece, per qualsia-
si valore non negativo di X avviene la copia di X in Y (in verit non si tratta di una vera e propria copia, ma di un
trasferimento in quanto al termine del programma il valore iniziale di X va perduto diventando 0 una sorta di taglia e incol-
la quindi).

Analizziamo ora le due istruzioni contrassegnate con *: 1 Z Z + e IF GOTO 0 Z E . Esse rap-
presentano il salto incondizionato perch indipendentemente dai valori che pu assumere Z, lesecuzione
di queste due istruzione porta alla terminazione del programma. Difatti Z non sar mai non nulla e
quindi si salter allistruzione etichettata con E che, non esistendo, fa terminare il programma. La prima
istruzione ci assicura che, anche se Z fosse nulla, comunque porterebbe alla terminazione del program-
ma, essendo incrementata a 1. Il salto incondizionato stato realizzato a posta nel caso in cui si volesse
far terminare prematuramente il programma.

DEFF: Le due istruzioni viste pocanzi, assieme a tante altre, sono molto utilizzate, utile quindi
raggruppare queste istruzioni in ununica entit che chiameremo macro (il cui significato concettualmente
simile a quello adoperato per i linguaggi di programmazione effettivamente utilizzati sui calcolatori). cio una sequen-
za di istruzioni che pu essere richiamata pi volte allinterno di un S-programma indicando semplice-
mente il nome dato alla macro, senza dover, ogni volta riscrivere tutte le istruzioni di cui composta la
macro.

La sequenza di istruzioni costituenti la macro viene chiamata espansione della macro.


Nel caso del salto incondizionato utilizzato nel precedente S-programma denotiamo la macro sem-
plicemente cos:
GOTO L
e la sua espansione :

I nomi delle variabili e delle etichette non sono importanti, necessario per far
corrispondere le variabili del programma chiamante con le istruzioni
dellespansione della macro.

Come avevamo gi fatto notare i programmi (a) e (b) trasferiscono
il contenuto di X in Y , ma distruggendo (azzerando) il valore iniziale di
X. Usualmente si vuole che (durante una copia o assegnazione) il valore
di X resti intatto, come accade normalmente nelle istruzioni di assegna-
zione della maggior parte dei linguaggi di programmazione, quindi an-
diamo ad illustrare, facendo uso delle macro, il seguente S-programma
(c):
Analizzando le varie istruzioni ci si accorge che se inizialmente X nullo allora il pro-
gramma (dopo alcuni controlli e GOTO) restituir il corretto valore (nullo) di Y (se
0 X = GOTO C , se 0 Z = GOTO E , 0 X Y = = );

mentre se 0 X , prima si trasferisce il suo contenuto in Y e poi si ripristina il valore
iniziale di X in modo da ottenere dal programma i risultati desiderati (se
0 X GOTO B , avviene il trasferimento da X a Y e anche a Z, mediante la rei-
terazione di alcune istruzioni);
si perde per il contenuto di X , il quale viene ripristinato - GOTO D - trasferendo il
contenuto della variabile dappoggio Z nuovamente in X .

Chiaramente la funzione computata la stessa del programma precedente: ( ) , 0
c
f x x x =
.

IF GOTO
1
0
Z Z
Z L
+

[ ]
[ ]
[ ]
[ ]
IF 0 GOTO
GOTO
GOTO
IF 0 GOTO
GOTO
GOTO
1
1
1
1
1
A X B
C
B X X
Y Y
Z Z
A
C Z D
E
D Z Z
X X
C



+
+



+


EDIT by Qd Calcolabilit XV Lez. - II parte
67
Si fatto uso di macro che snelliscono il codice, importante far corrispondere i nomi delle variabili
e le etichette delle istruzioni, ad esempio, GOTO C ha come espansione le due istruzioni: 1 K K +
e IF GOTO 0 K C (luso della variabile K ci assicura, non essendo mai stata utilizzata, che altre variabili del pro-
gramma chiamante non vengano compromesse, ovviamente la variabile C allinterno dellespansione della macro corrisponde
alla variabile C usata per richiamare la macro, se ci fosse stata unaltra variabile nella chiamata, allora nellespansione avrem-
mo trovato lo stesso nome della variabile menzionata nella chiamata).

Anche se nellespansione della macro si usassero nomi di variabili uguali a quelli utilizzati esternamente,
bisognerebbe distinguere le variabili locali dalle altre variabili e non fare confusione con ambiguit che
sporcherebbero il risultato.

Abbiamo visto nel terzo esempio di S-programma come una semplice operazione di assegnazione
non sia cos immediata da realizzare con le operazioni atomiche che abbiamo a disposizione, oltretutto
sappiamo che lassegnazione unoperazione largamente usata nei linguaggi di programmazione, mol-
to utile quindi trasformare in macro il programma (c), tuttavia questultima, se utilizzata in un altro
programma potrebbe non funzionare correttamente in quanto, per essere sempre corretta, le variabili Y
e Z inizialmente devono essere nulle, e non detto che sia sempre cos, in quanto la variabile Y in par-
ticolare potrebbe essere stata utilizzata dal programma chiamante e contenere dei valori non nulli al
momento della chiamata della macro di assegnazione. Bisogna quindi, prima di richiamare tale macro,
azzerare il valore della variabile a cui verr assegnato il dato. Risolviamo il problema con la seguente
marco di inizializzazione
0 V
la cui espansione :


[ ]
IF GOTO
1
0
L V V
V L




Con lausilio dellultima macro vista possiamo riscrivere, in termini di macro, il programma (c) che
denoteremo con la scrittura
V V
la cui espansione la seguente:


(rif. D.S.W. pag. 21) Da notare che Z non stata inizializzata a 0 in quanto
considerata variabile locale (se nel programma chiamante viene utilizzata una
variabile con lo stesso nome Z allora questo nome deve essere cambiato), il
cui valore iniziale non viene ereditato dal programma chiamante n il suo
valore finale verr restituito al programma chiamante, pi precisamente la
variabile Z utilizzata nella marco non deve essere la stessa che,
eventualmente, verr utilizzata nel programma chiamante, il discorso
diverso invece per V (il cui nome e valore devono essere ereditati dal
programma chiamante, come visto prima nella macro GOTO L ).

dunque buona norma, per evitare confusione, utilizzare per le variabili
locali nomi differenti da quelli utilizzati nel programma chiamante, analogo
discorso vale per le etichette delle istruzioni.







[ ]
[ ]
[ ]
[ ]
IF 0 GOTO
GOTO
GOTO
IF 0 GOTO
GOTO
GOTO
0
1
1
1
1
1
V
A V B
C
B V V
V V
Z Z
A
C Z D
E
D Z Z
V V
C


+
+


+

EDIT by Qd Calcolabilit XV Lez. - II parte
68
Vediamo ora un altro importante S-programma (d) che, ricevendo in input due valori, computa la
funzione ( )
1 2 1 2
,
d
f x x x x = +
.

Viene fatto uso della macro del salto incondizionato e dellassegnazione.

Il programma effettua la somma di
1
X e
2
X ponendo il risultato in Y , ecco le istruzioni:


Inizialmente viene posto il valore
1
X in Y;
dopodich, mediante una variabile temporanea Z, Y viene incrementato di
una unit
2
X volte.

Luso della variabile Z ha lo scopo di preservare il valore di
2
X , il pro-
gramma infatti funzionerebbe anche senza lutilizzo della variabile
temporanea Z, ma alla fine il valore di
2
X andrebbe perso e, per lo stesso
principio per cui stata progettata la precedente macro di assegnazione,
anche in questo caso si vuole che le variabili di entrata restino intatte.


Proseguiamo col mostrare un altro S-programma (e) (rif. D.S.W. pag. 22) che esegue il prodotto di due
interi e che computa la funzione ( )
1 2 1 2
,
e
f x x x x =
:


La moltiplicazione viene interpretata come una sequenza di somme, vengo-
no infatti eseguite
2
X somme di
1
X :
volte
2
1 1 1
X
X X X + + +
_


Luso delletichetta
2
E , apparentemente non necessario, verr spiegato a
breve. Come si pu notare viene fatto uso della macro
1 1
Z X Y + la cui
espansione , in sostanza, il programma precedente. Ci sono per da fare
alcune riflessioni, il programma precedente sommava
1
X e
2
X e poneva il
risultato in Y , se volessimo utilizzarlo come macro, cos com, nel contesto
di questo programma avremmo il seguente codice:


Se osserviamo con attenzione i nomi delle variabili possiamo accorgerci che
utilizzando questo codice non otterremo il risultato sperato nel programma
chiamante, per via di ambiguit nelluso delle etichette e delle variabili. Luso del
GOTO E ad esempio porterebbe alla terminazione prematura del programma (e
non solo della macro come si potrebbe pensare), invece si vuole che, una volta
terminata la macro si ritorni al programma chiamante. Quindi necessario fare
uso di unaltra etichetta (
2
E ) sia nellespansione della macro che nel programma
chiamante. Altro problema rappresentato dalla variabile Y che, nel contesto
del programma chiamante, confusa con la variabile
1
Z (abbiamo
1 1
Z X Y + e non
1 2
Y X X + ). Quando nel programma chiamante scri-
viamo listruzione
1 1
Z X Y + ci aspettiamo che i valori di
1
X e di Y, dopo
lesecuzione della macro restino immutati e la loro somma venga memorizzata in
1
Z , ma ci non avviene nellespansione qui mostrata, oltre al problema
delletichetta E. Quindi vanno cambiati i nomi di alcune variabili ed etichette.


[ ]
[ ]
1
2
IF GOTO
GOTO
GOTO
0
1
1
Y X
Z X
B Z A
E
A Z Z
Y Y
B


+
[ ]
[ ]
[ ]
2 2
2
2 2
1 1
2 1
IF GOTO
GOTO
GOTO
0
1
E
Z X
B Z A
E
A Z Z
Z X Y
Y Z
B

[ ]
[ ]
1
IF GOTO
GOTO
GOTO
0
1
1
Y X
Z Y
B Z A
E
A Z Z
Y Y
B


+

EDIT by Qd Calcolabilit XV Lez. - II parte
69
Vediamo ora la corretta espansione da utilizzare per il programma chiamante con gli accorgimenti
appena suggeriti:


[ ]
[ ]
1 1
3
2 3 2
2
2 3 3
1 1
2
IF GOTO
GOTO
GOTO
0
1
1
Z X
Z Y
B Z A
E
A Z Z
Z Z
B


+



Vediamo lultimo S-programma ( f ) che, seppur con qualche limitazione, effettua la sottrazione di
due interi, ponendo il risultato nella variabile di uscita:

Analizzando il programma si scopre che esso computa la se-
guente funzione: ( )
1 2 1 2
,
f
f x x x x = se
1 2
x x mentre d un
risultato indeterminato se
1 2
x x < , infatti il programma entra in
un ciclo infinito (loop), tale condizione viene indicata mediante
il simbolo
Il loop avviene quando in A la variabile Y nulla, in tal caso si ritorna
(GOTO A) nuovamente allistruzione A e questo processo si ripete allinfinito.

Formalmente possiamo scrivere la seguente funzione computata
dal programma :
( )
1 2 1 2
1 2
se
,
altrimenti
f
x x x x
f x x

.

La funzione appena descritta prende il nome di funzione parziale il cui concetto importante per
apprendere che non tutte le funzioni possono essere computate dagli S-programmi. Formalmente ab-
biamo:

DEFF. (rif. D.S.W. pag. 3): Se una funzione f ha come dominio di definizione un sottoinsieme di N
(sottoinsieme improprio A N ) diremo che f una funzione parziale sullinsieme N dei naturali.
Nel caso in cui la funzione parziale N abbia come dominio N stesso ( N N ), allora tale funzione
detta totale (cio sempre definita per tutti i valori di N ).

(rif. D.S.W. pag. 25) Con il termine asserzione (statement) indichiamo unistruzione che pu avere una
delle seguenti forme:


4. IF GOTO
1. 1
2. 1
3.
0
V V
V V
V V
V L
+



[ ]
[ ]
[ ]
1
2
IF GOTO
GOTO
IF GOTO
GOTO
GOTO
0
0
1
1
Y X
Z X
C Z A
E
A Y B
A
B Y Y
Z Z
C




EDIT by Qd Calcolabilit XV Lez. - II parte
70
La terza istruzione detta istruzione pigra (dummy) in quanto la sua esecuzione allinterno di un
programma non porta ad alcun effetto.
Formalmente unistruzione una delle quattro asserzioni viste, precedute o meno da [ ] L che
unetichetta generica data allistruzione.

Un S-programma una successione finita di istruzioni.

La lunghezza c di un S-programma c il numero delle sue istruzioni.

Un S-programma di lunghezza 0 detto programma vuoto ( privo di istruzioni da cui ( ) 0 f x = x ).

Come abbiamo visto, le variabili di un programma, durante lesecuzione dello stesso, possono assu-
mere valori differenti, ci suggerisce la seguente definizione:

Lo stato di un problema c una lista di equazioni nella forma V m = , con V nome della variabile
ed m il suo valore, tale che:

1. vi unequazione per ogni variabile di c ;
2. non vi sono due equazioni con la stessa variabile.

Quindi uno stato indica i valori che possono assumere in certi istanti, non necessariamente iniziali,
le variabili del programma.
Se uno stato del programma c , il valore di V allo stato il numero q tale che V q =
una delle equazioni di .

Unistantanea (snapshot) di un programma c una coppia ordinata ( ) , i con 1 1 i n + , il sim-
bolo n corrisponde alla lunghezza (numero di istruzioni) del programma, mentre e uno stato ad un
certo istante dellesecuzione del programma, in altre parole ( ) , i rappresenta il valore delle variabili
nellistante precedente lesecuzione della i-ma istruzione di c .


Decima Sesta Lezione
01/12/2006
Ricapitolazione e seguito concetti sugli S-programmi
funzioni parzialmente calcolabili - estensione delle macro
predicati - composizione di funzioni - ricorsione


Ricapitolazione concetti preliminari sugli S-programmi.

Data listantanea ( ) , i di c , i il numero di istruzione corrente, mentre lassegnazione cor-
rente di valori delle variabili.

DEFF.: Unistantanea ( ) , i di c detta terminale se 1 i = + c .

( ) , i detta non terminale se vi unistantanea ( ) , j che successore di ( ) , i .

Diamo una definizione per casi (in base alle asserzioni) di istantanea successore ( ) , j di ( ) , i :

1. la i-ma istruzione di c 1 V V + e contiene tra le equazioni V m = , allora 1 j i = + e si
ottiene da rimpiazzando V m = con 1 V m = + ;

2. la i-ma istruzione di c 1 V V e contiene tra le equazioni V m = , allora 1 j i = + e , se
0 m , allora si otterr da rimpiazzando V m = con 1 V m = , altrimenti (se 0 m = ) = ;

3. la i-ma istruzione di c V V , allora 1 j i = + e = ;

4. la i-ma istruzione di c IF GOTO 0 V L allora = (essendo unasserzione di controllo e non di
modifica delle variabili, lo stato non cambia, ma il numero di istruzione potrebbe cambiare, se si effettua il salto), di-
stinguiamo due sottocasi:

4.1. se 0 V = , contiene lequazione 0 V = , allora 1 j i = + (il salto non avviene e si prosegue con la suc-
cessiva istruzione);

4.2. se 0 V , contiene lequazione V m = e, se letichetta L non fa riferimento a nessuna istru-
zione allora 1 j n = + (il programma termina, in questo caso listantanea successore di ( ) , i unistantanea
terminale ( ) 1, n + ). Mentre se fa riferimento a una o pi istruzioni, j sar il pi piccolo numero
tale che la j-ma istruzione etichettata con L (ovvero la prima che si incontra dallalto verso il
basso -per evitare diramazioni non deterministiche non facenti parte della natura degli S-programmi).

Lultimo caso visto spiega anche il comportamento del programma in situazioni nelle quali ci sono
pi istruzioni contrassegnate con la stessa etichetta, in tal caso si fa riferimento sempre alla prima che
si incontra (le altre verranno ignorate come se non esistessero).


(rif. D.S.W. pag. 29): Un calcolo (computation) di un S-programma c una successione finita di istan-
tanee
1 2
, , ,
k
s s s (lordine dei pedici non deve essere casuale) tale che
1 i
s
+
con 1,2, , 1 i k = successore di
i
s
ed
k
s unistantanea terminale.


EDIT by Qd Calcolabilit XVI Lez.
72
Un processo di calcolo non terminale (da non confondere con lomonimo stato) di c una successione
infinita di istantanee
1 2
, , s s , tale che
1 i
s
+
con 1,2, i = successore di
i
s .

(rif. D.S.W. pag. 28) Sia c un S-programma e siano
1 2
, ,
m
r r r N con 1 m (m indica il numero di varia-
bili della funzione computata da c ), con lo stato di c dato dalle equazioni
1 1
, X r =
2 2
, X r = , , 0
m m
X r Y = = e dalle equazioni 0 V = per ogni altra variabile di c (variabili locali, in ogni
caso che non siano variabili di ingresso , 1
i
X i m o di uscita Y ) denotiamo lo stato iniziale di c e con ( ) 1,
istantanea iniziale, con tali condizioni possono verificarsi due casi:

1. vi un calcolo di c :
1 2
, , ,
k
s s s (non si confonda s con r), allora con la scrittura
( )
( )
1 2
, , ,
m
m
r r r
c
indichiamo il valore di Y allistantanea terminale
k
s con ( )
1
1, s = ;

0 = se il programma terminante.

2. non vi un calcolo di c (se listantanea iniziale ( ) 1, ) (ci non vuol dire che il
programma non sta girando, ma che entra in un loop infinito). In tal caso ( )
( )
1 2
, , ,
m
m
r r r
c

assume un valore indefinito .

In effetti con la definizione appena data si formalizzato il comportamento di c al termine della
computazione e a partire dallistantanea iniziale di c .

Esempio 1: prendiamo in analisi il programma (b) che copiava il contenuto della variabile X in Y:
( )
(1)
b
x x =
c
chiaramente ( 1 m = in quanto la variabile dingresso soltanto X ; X x = ; non dimentichiamo che im-
plicito considerare il valore di
(1)
b

c
presupponendo listantanea iniziale ( ) 1, ).

Esempio 2: consideriamo il programma:
1
1
X X
X X
+
+
, la cui istantanea iniziale, con stato iniziale,
: ( ) ( 1, 1, = { })
1
, 0 X r Y = = . Dopo lesecuzione della prima istruzione abbiamo { } ( )
1
2, 1, 0 X r Y = + =
e, dopo la seconda istruzione abbiamo { } ( )
1
3, 2, 0 X r Y = + = che listantanea terminale. La variabile Y
non viene menzionata nelle istruzioni del programma, quindi il suo valore resta immutato e cio nullo,
abbiamo dunque: ( )
(1)
1
0 r =
c
.

Esempio 3 (rif. D.S.W. pag. 31): consideriamo il programma c con le seguenti istruzioni:

[ ]
IF GOTO
1
0
A X X
X A
+

(loop infinito)

Abbiamo la seguente istantanea iniziale { } ( )
1
1, , 0 X r Y = = e poi { } ( )
1
2, 1, 0 X r Y = + = ,
{ } ( )
1
1, 1, 0 X r Y = + = , { } ( )
1
2, 2, 0 X r Y = + = , da cui chiaramente ( )
(1)
1
r =
c
,
1
0 r .

DEFF. (rif. D.S.W. pag. 30): Per ogni c e per ogni intero positivo m, la funzione ( )
( )
1 2
, , ,
m
m
x x x
c

la funzione di m argomenti calcolata dal programma c .


EDIT by Qd Calcolabilit XVI Lez.
73
Da notare che m un numero che si riferisce al numero di argomenti della funzione calcolata dal
programma e non dipende (o non si riferisce) al numero di variabili di input del programma, ovvero il
numero di argomenti della funzione calcolata dal programma non legato al numero di variabili di in-
put del programma. Ci si evince da due casi particolari: abbiamo c con n variabili di input con
m n < (cio nella funzione
( ) m

c
compaiono meno argomenti del numero di variabili di input dellS-programma c ), nel
calcolo della funzione risulter:
1 1 2 2 1
, , , , 0, , 0
n n n m
r X r X r X r r
+
= = = = = , cio le variabili che non
fanno riferimento ad argomenti della funzione calcolata verranno considerati nulli anche se magari non
effettivamente cos;
viceversa, se m n > (quindi abbiamo pi argomenti della funzione che variabili di input del programma) i valori degli
argomenti non facenti riferimento a variabili del programma verranno semplicemente ignorati.

Per comprendere meglio i concetti appena descritti facciamo degli esempi di funzioni il cui numero
di argomenti non corrisponde al numero di variabili di input del relativo programma. Facciamo riferi-
mento ai programmi (c) e (d ).
Come ricordiamo il programma (c) effettuava unassegnazione, ha una sola variabile di input e abbiamo
( )
(1)
1 1
c
r r =
c
, qui abbiamo fatto combaciare il numero di argomenti della funzione con il numero di va-
riabili di input che pari a 1. Mentre se volessimo conoscere il valore della funzione calcolata da (c) che
ha per due argomenti avremmo ( )
(2)
1 2 1
,
c
r r r =
c
, chiaramente il valore
2
r viene ignorato non essendo
corrispondente di alcun valore di variabile di input.
Ora riferiamoci al programma (d ) che effettuava la somma di due interi contenuti nelle due variabili di
input e la trasferiva nella variabile di uscita Y, abbiamo ( )
(2)
1 2 1 2
,
c
r r r r = +
c
, mentre
( )
(3)
1 2 3 1 2
, , r r r r r = +
c
,
largomento
3
r viene ignorato.
Vediamo ora il caso opposto ( )
(1)
1 1 1
0
c
r r r = + =
c
, in questo caso lo 0 rimpiazza in qualche modo la va-
riabile del programma che non ha corrispondenza con alcuna variabile (
2
r non esiste, mentre
2
X si).

DEFF.: Sia g una funzione parziale (con una o pi variabili) su N , allora g si dice parzialmente calco-
labile se esiste un S-programma c che la calcola e cio se per ogni m-pla ( )
1 2
, , ,
m m
m
r r r S N risul-
ta ( ) ( )
( )
1 2 1 2
, , , , , ,
m
m m
g r r r r r r =
c
.

Da sottolineare che nel caso in cui ( )
1 2
, , ,
m
g r r r = e ( )
( )
1 2
, , ,
m
m
r r r =
c
non si pu concludere
assolutamente che
( ) m
g =
c
in quanto il simbolo non numericamente esprimibile.

Una funzione detta calcolabile se totale ed parzialmente calcolabile (una funzione totale definita in
tutto il suo dominio, cio per ogni m-pla di argomenti
1 2
, , ,
m
r r r ).

Le funzioni parzialmente calcolabili vengono chiamate anche ricorsive parziali, analogamente le fun-
zioni calcolabili, cio sia totali che ricorsive parziali, vengono anche dette ricorsive.

Ad esempio, dal programma visto prima:


[ ]
IF GOTO
1
0
A X X
X A
+

si ha ( )
(1)
x =
c
che una funzione indefinita per ogni


EDIT by Qd Calcolabilit XVI Lez.
74
valore di x, possiamo dunque affermare che il dominio della funzione linsieme vuoto che pur
sempre un sottoinsieme di N (rif. D.S.W. pag. 3), quindi possiamo affermare che la funzione del program-
ma suindicato appartiene alla Classe delle funzioni ricorsive parziali quindi una funzione ricorsiva par-
ziale (o anche parzialmente calcolabile) pur non essendo definita per alcun naturale ( quindi scorretto af-
fermare che la funzione vista nellesempio non calcolabile).



Estensione delle macro
(rif. D.S.W. pag. 32)

Facendo riferimento alluso delle macro, la seguente scrittura

( )
1 2
, , ,
n
W f V V V

Rappresenta il trasferimento del valore di ( )
1 2
, , ,
n
f V V V , calcolato da qualche S-programma, nella
variabile W. In effetti lespansione della macro una sequenza di istruzioni che calcola
( ) ( )
( )
1 2 1 2
, , , , , ,
n
n n
V V V f V V V =
c
, quindi f una funzione calcolabile o parzialmente calcolabile e
W rappresenta una variabile generica (che potrebbe anche essere uno degli argomenti
i
V di f ) .

Ricorrendo a regole generali per quanto riguarda luso appropriato dei nomi delle variabili e delle e-
tichette delle istruzioni, si pu ottenere uno schema generale per costruire espansioni di macro inserite
in programmi chiamanti (per il dettaglio vedere D.S.W. pagg. 32-33).

Un caso particolare si presenta quando risulta ( )
1 2
, , ,
n
W f V V V e ( )
1 2
, , ,
n
f V V V = , allora
anche la funzione calcolata dal programma chiamante la macro dar luogo ad un valore indeterminato.
Ad esempio, il seguente programma fa uso di macro le cui estensioni calcolano funzioni che assu-
mono valori indeterminati per certi elementi del dominio:


1 2
3
Z X X
Y Z X

+
Poich la macro
1 2
Z X X che fa riferimento al programma (f )

computa la funzione ( )
1 2 1 2
1 2
se
,
altrimenti
f
x x x x
f x x

che per certi valori indeterminata, questa inde-


terminazione verr in qualche modo tramandata alla funzione chiamante che infatti computa la funzio-
ne
( )
( )
1 2 3 1 2
(3)
1 2 3
se
, ,
altrimenti
x x x x x
x x x
+

c
.

Per ovviare a questi inconvenienti possiamo arricchire il nostro linguaggio di programmazione, oltre
che con luso (opportuno) delle macro, anche con luso dei predicati (pi articolati del tradizionale
0 V ) allinterno dei costrutti selettivi IF.

DEF.: Un predicato P su un insieme S una funzione totale tale che a S risulta:

EDIT by Qd Calcolabilit XVI Lez.
75

( ) ( )
( ) ( )
oppure
1
0
vero
falso
P a
P a

(in realt P pu avere anche pi di un argomento).




Unosservazione interessante che luso dei predicati non pu essere adoperato per realizzare metodi al-
goritmici capaci di prevedere se un algoritmo andr in loop oppure no (si pu apprendere che un algoritmo
entrato in loop esclusivamente quando entra in loop e non prima, vale ovviamente il contrario e cio che non si pu sapere a
priori se un algoritmo non andr mai in loop o meno, ma ci non basta per affermare, in generale, che un programma non si
arrester mai, in quanto un programma entrato in un ipotetico loop potrebbe anche fermarsi da un momento allaltro, am-
menoch noi non conosciamo le istruzioni del programma. Un ipotetica macchina che esegue un programma non pu pre-
vedere se questo avr un calcolo (finito) o meno, tale certezza si ha solo se il programma termina). Conseguenza di que-
sto concetto si vedr pi avanti quando si esibir un predicato che non calcolabile mediante un S-
programma.
Altro concetto da sottolineare che facilmente si fa confusione tra predicato e funzione parzialmente
calcolabile. Un predicato una particolare funzione che ha vita propria indipendentemente dagli S-
programmi, un predicato una funzione che, per come stata definita, sempre totale (e pu assumere
solo e soltanto i vaori 1 e 0) al di l del fatto che possa o non possa essere calcolata da un S-programma
(potr capitare di incontrare funzioni che a prima vista sembrano predicati per come sono strutturati, ma nel momento in
cui ci si accorge che tali presunti predicati assumono valori indeterminati o differenti da 0 o da 1, possiamo subito affermare
che non sono predicati, ma funzioni, poi se tali funzioni sono calcolabili o parzialmente calcolabili questo un altro discor-
so).

Con luso delle macro la forma generale che assume il costrutto di selezione :

( )
1 2
IF GOTO , , ,
n
P V V V L


la cui espansione la seguente:

Viene calcolato P memorizzato il risultato in Z;
se P vero alloro 0 Z quindi si va allistruzione L;
altrimenti 0 Z = e la macro termina.



Vediamo ora lesempio con un predicato largamente utilizzato:

IF 0 V = GOTO L

ecco la sua espansione (non si badato alluso corretto dei nomi delle variabili
e delle etichette delle istruzioni):

in questo caso il valore del predicato memorizzato in Y e X corrisponde a V ;
si ricordi che Y inizialmente nullo;
se 0 X la macro termina (GOTO E) e il valore di Y
resta nullo, il programma chiamante passa allistruzione successiva;
se invece 0 X = allora 1 Y = e il programma chiamante passa allistruzione L;
Nellesempio quindi, se il predicato " 0" V = vero assumer un valore
non nullo, quindi si passer allistruzione L.

( )
1 2
IF GOTO
, , ,
0
n
Z P V V V
Z L


IF GOTO 0
1
X E
Y Y

+

EDIT by Qd Calcolabilit XVI Lez.
76
DEF. (rif. D.S.W. pag.34-35) : Essendo P una particolare funzione, ha senso dire che P o non calcola-
bile, quindi si parla di predicato calcolabile o non calcolabile in base alle definizioni date prima di funzio-
ni calcolabili (essendo i predicati funzioni totali, non ha senso parlare di parziale calcolabilit, abbiamo dunque che se esi-
ste un S-programma che calcola il predicato P, allora P calcolabile).

Mediante una generalizzazione possiamo fornire un esempio di predicato calcolabile che il seguente:

IF
0 V > GOTO L

Il quale chiaramente una generalizzazione dellistruzione IF GOTO 0 V L .




Composizione di funzioni
(rif. D.S.W. pag. 39)

Mostriamo un metodo per combinare loutput di una o pi funzioni allinput di unaltra funzione
(ad una o pi variabili) sulla base delle funzioni composte del tipo: ( ) ( ) ( )
h x f g x = . Diamo pertanto
la seguente definizione per formalizzare e generalizzare il concetto:

DEF.: Sia f una funzione di k variabili e siano
1 2
, , ,
k
g g g funzioni di n variabili. Se scriviamo
( ) ( ) ( ) ( ) ( )
1 2 1 1 2 2 1 2 1 2
, , , , , , , , , , , , , , ,
n n n k n
h x x x f g x x x g x x x g x x x = allora si dice che h ot-
tenuta per composizione da f e
1 2
, , ,
k
g g g .

Attenzione a non confondere il numero n di variabili di h con il numero di variabili k di f , si sarebbe
portati a pensare che essendoci unuguaglianza tra h ed f il numero di argomenti di h debba coincidere
con quello di f , ma h una funzione composta i cui argomenti sono
1 2
, , ,
n
x x x e non
1 2
, , ,
k
g g g ,
quindi luguaglianza definita pocanzi ben posta.
Del resto ha senso scrivere ad esempio che ( ) ( )
1 1 2
,
j k
f x f x x = se si applica la diagonalizzazione
dellargomento, cio si impone ( )
1 1 2
, x x x con
1 2
x x = , le funzioni sono uguali sebbene
j
f ha un ar-
gomento mentre
k
f ne ha due.

Ovviamente le funzioni
1 2
, , , ,
k
f g g g non sono necessariamente totali e h sar calco-
lata quando tutte le funzioni ( )
1 1 2 1
, , ,
n
g x x x z = , ( )
2 1 2 2
, , ,
n
g x x x z = , ,
( )
1 2
, , ,
k n k
g x x x z = ed ( )
1 2
, , ,
n
f z z z saranno calcolate. Tale imposizione pu essere
giustificata facendo uso delle macro e verificando la correttezza delluguaglianza in
questo modo:


durante la computazione vengono calcolate
prima tutte le funzioni
1 2
, , ,
k
g g g
e memorizzati i valori rispettivamente
in
1 2
, , ,
k
Z Z Z ;
dopodich le variabili Z vengono adoperate
per il calcolo di f il cui valore viene
memorizzato in Y


( )
( )
( )
( )
1 1 1 2
2 2 1 2
1 2
1 2
, , ,
, , ,
, , ,
, , ,
n
n
n
k k
k
f
Z g X X X
Z g X X X
Z g X X X
Y Z Z Z

.

EDIT by Qd Calcolabilit XVI Lez.
77

La marco vista utile per dimostrare il teorema seguente:

TEOREMA 1.1 (banale rif. D.S.W. pag 39): Se h ottenuta per composizione delle funzioni (parzialmen-
te) calcolabili
1 2
, , , ,
k
f g g g allora h (parzialmente) calcolabile.

DEF.: dobbiamo dimostrare che se
1 2
, , , ,
k
f g g g sono (parzialmente) calcolabili allora anche h (par-
zialmente) calcolabile, ci immediato osservando la macro , infatti per dimostrare che h (parzial-
mente) calcolabile dobbiamo fornire un S-programma che la calcola utilizzando le funzioni (parzialmen-
te) calcolabili (per ipotesi)
1 2
, , , ,
k
f g g g . ovvio che se ( )
1 2
, , ,
n i i
Z g X X X , con 1 i k , e
( )
1 2
, , ,
k
Y f Z Z Z sono (parzialmente) calcolabili, ne deriva che h (parzialmente) calcolabile.



Ricorsione
(rif. D.S.W. pag. 40)

DEF.: Supponiamo che k sia una costante e h una funzione definita
in questo modo:
g una funzione totale di due variabili, allora diremo che h
ottenuta da g per ricorsione primitiva o semplicemente per ricorsione .

TEOREMA 2.1: Se h ottenuto da g per ricorsione primitiva e posto g calcolabile (g per definizione to-
tale), allora h anchessa calcolabile (quindi totale anchessa).

DIM.: facile provare che una funzione costante del tipo ( ) f x k = calcolabile, infatti essa calcolata
ad esempio dallS-programma:


1
1
volte
1
Y Y
Y Y
k
Y Y
+

+

.
queste istruzioni rappresentano lespansione della macro
Y k
.

La macro appena vista la utilizziamo per calcolare la funzione h ottenuta da g per ricorsione primitiva:


si calcola prima k e si memorizza il risultato in Y;

se largomento di h 0 allora si esce dal programma e ( ) 0 h k Y = = ;
altrimenti (per hp. g calcolabile quindi il suo valore viene
calcolato e memorizzato in Y ) viene effettuato il calcolo di ( ) ( ) ( ) 1 , h t g t h t + =
un passo alla volta incrementando il parametro t partendo da 0, cio seguendo la
sequenza:
( )
( ) ( ) ( )
0
1 ,
h k
h t g t h t
=
+ =
[ ]
( )
IF GOTO
GOTO
0
,
1
1
Y k
A X E
Y g Z Y
Z Z
X X
A

+


EDIT by Qd Calcolabilit XVI Lez.
78

( )
( ) ( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( )
0
1 0, 0 0,
2 1, 1
1 2, 2
1, 1
h k Y
h g h g k
h g h
h x g x h x
h x g x h x
= =
= =
=
=
=
.



Avendo fornito un S-programma che calcola h abbiamo dimostrato il teorema.


Complichiamo un po il concetto appena visto in modo da dare una definizione pi generale di ricor-
sione.

DEF.: Sia:

( ) ( )
( ) ( ) ( )
1 2 1 2
1 2 1 2 1 2
, , , ,0 , , ,
, , , , 1 , , , , , , , , ,
n n
n n n
h x x x f x x x
h x x x t g t h x x x t x x x
=
+ =





allora la funzione h a 1 n + variabili si dice ottenuta per ricorsione primitiva o semplicemente per ricor-
sione dalle funzioni totali f (di n variabili) e g (di 2 n + variabili).

TEOREMA 2.2: Sia h ottenuta dalle funzioni a pi variabili f e g per ricorsione primitiva (secondo
la definizione appena vista), se f e g sono calcolabili allora h anchessa calcolabile.

DIM.: Come per il teorema precedente, basta trovare un S-programma che calcola h (questa strategia ricorda
quella adoperata per dimostrare teorema sui linguaggi regolare e C.F. per i quali si esibivano rispettivamente automi ricono-
scitori e grammatiche generatrici). Ricordiamo che per ipotesi g ed f sono calcolabili, il seguente S-
programma calcola h, il cui schema del tutto simile a quello dellS-programma utilizzato per la dimo-
strazione del teorema precedente :

viene memorizzato il valore di f in Y
il parametro t della funzione h rappresentato dalla variabile
1 n
X
+


se risulta ( )
1 2
, , , , 0
n
h x x x il programma termina e il suo valore di
uscita sar ( )
1 2
, , , , 0
n
Y h x x x
altrimenti parte il ciclo che calcola la funzione ricorsiva partendo
da
1
1, ,
n
t t X
+
= =




( )
[ ]
( )
1 2
1
1 2
1 1
IF GOTO
GOTO
, , ,
0
, , , , ,
1
1
n
n
n
n n
Y f X X X
A X E
Y g Z Y X X X
Z Z
X X
A
+
+ +

Decima Settima Lezione


5/12/2006
Classi PRC
Funzioni e Predicati primitivi ricorsivi


Classi PRC
(rif. D.S.W. pag. 42)

DEFF.: Sia data una classe V di funzioni totali, si dice che essa una classe PRC ( primitive recursively clo-
sed ) se:
1. V contiene le funzioni iniziali (che definiremo tra poco);
2. V contiene funzioni ottenute da funzioni, che appartengono a V , mediante composi-
zione e ricorsione primitiva.

Le seguenti funzioni sono chiamate funzioni iniziali :

( ) 1 s x x = + funzione successore ;
( ) 0 n x = funzione nulla ;
( )
1 2
, , ,
n
i n i
u x x x x = con 1 i n funzioni di proiezione .


TEOREMA 3.1: La classe delle funzioni calcolabili una classe PRC.

DIM.: Dobbiamo dimostrare che le funzioni iniziali e le funzioni ottenute mediante composizione e ri-
corsione primitiva da funzioni della classe PRC sono calcolabili. I teoremi 1.1 (composizione di funzioni), 2.1
(ricorsione con una variabile) e 2.2 (ricorsione con pi variabili) dimostrano parte del teorema, manca da verifica-
re che le funzioni iniziali siano calcolabili, quindi bisogna esibire degli S-programmi che le computi-
no. La funzione successore ( ) 1 s x x = +
calcolata dal programma
1 Y X +
, mentre la funzione
( ) 0 n x =
calcolata dal programma vuoto , infine le (infinite) funzioni di proiezione
( )
1 2
, , ,
n
i n i
u x x x x =
sono calcolate dai programmi
i
Y X
.
Quindi possiamo concludere che la classe delle funzioni calcolabili una classe PRC.

DEF.: Una funzione detta primitiva ricorsiva (il concetto di funzione primitiva ricorsiva diverso da quello
di funzione appartenente ad una classe PRC sebbene i due concetti siano strettamente connessi fra loro) se pu essere ot-
tenuta dalle funzioni iniziali applicando un numero finito di volte composizione e ricorsione primitiva,
da cui abbiamo:

COROLLARIO 3.2: La classe delle funzioni primitive ricorsive una classe PRC, la cui dimostrazione
immediata.

DEF.: Si distinguono tre sottoclassi:


1
V : classe PRC di funzioni totali calcolabili da S-programmi;

2
V : classe di funzioni primitive ricorsive;

3
V : classe di tutte le funzioni totali su N.


EDIT by Qd Calcolabilit XVII Lez.
80
TEOREMA 3.3 (rif. D.S.W. pag. 43): Una funzione primitiva ricorsiva se e solo se appartiene a tutte
le classi PRC (quindi linsieme delle funzioni primitive ricorsive rappresenta il nucleo di ogni classe PRC, intersezione di
tutte le classi PRC).

DIM. : Dimostrare che se una funzione appartiene a tutte le classi PRC allora una funzione primiti-
va ricorsiva una cosa abbastanza semplice, in quanto per il corollario 3.2 la classe delle funzioni primi-
tiva ricorsive una classe PRC (una funzione che appartiene a tutte le classi PRC per il corollario 3.2 apparterr anche
alla classe PRC delle funzioni primitive ricorsive, quindi deve essere necessariamente una funzione primitiva ricorsiva).

DIM. : Vogliamo ora dimostrare che se una funzione primitiva ricorsiva allora appartiene ad ogni
classe PRC (e non solo alla classe PRC delle funzioni primitive ricorsive). Sia f una funzione primitiva ricorsiva e
V una classe PRC qualsiasi, vogliamo dimostrare che f V . Essendo f primitiva ricorsiva essa deriva
( ottenuta) da una serie di funzioni
1 2
, , ,
n
f f f , dove ogni funzione o deriva dalle precedenti mediante
composizione o ricorsione, oppure una funzione iniziale. Le funzioni iniziali (per la definizione data di
classe PRC) appartengono alla classe PRC V e (sempre per definizione) vi appartengono anche tutte le
funzioni ottenute per ricorsione o per composizione, quindi f V da cui (avendo considerato V co-
me una qualunque classe PRC) abbiamo che f appartiene alla classe PRC, pi precisamente f appartiene
a ogni classe PRC.

COROLLARIO 3.4: Ogni funzione primitiva ricorsiva calcolabile (ci non vuol dire necessariamente che
ogni funzione appartenente ad una classe PRC qualsiasi calcolabile, si ribadisce il fatto che il concetto di funzione primitiva
ricorsiva differente da quello di funzione appartenente ad una classe PRC). Il contrario non sempre vero, infatti esistono
funzioni calcolabili che non sono primitive ricorsive.

DIM.: La dimostrazione immediata, osservando il teorema precedente si ha che ogni funzione primiti-
va ricorsiva appartiene ad ogni classe PRC e ciascuna classe PRC costituita da funzioni calcolabili (per la
definizione di classe PRC e per il teorema 3.1).

Dagli ultimi concetti visti si pu affermare che una qualsiasi classe PRC deve contenere almeno le
funzioni primitive ricorsive, in pi pu contenere altre funzioni totali purch soddisfino le propriet di
cui devono godere le funzioni appartenenti ad una classe PRC (si richiede cio che siano totali e ottenute
dalle funzioni iniziali o da altre funzioni appartenenti alla classe mediante composizione e ricorsione, da
cui si pu intuire che una classe PRC potrebbe contenere anche funzioni iniziali non calcolabili,
limportante che il gruppo di funzioni iniziali sia almeno rappresentato dalle infinite funzioni succes-
sore, nulla e di proiezione, ma ci non vieta che possano esistere classi PRC costitute da funzioni iniziali
aggiuntive). importante fissare bene i concetti visti fino ad ora, in quanto molto di ci che seguir si
baser su questi concetti.


Diamo ora un elenco di funzioni primitive ricorsive (e quindi calcolabili):

1) x y + ( )
1
, f x y x y = +

Vediamo come ricavare la funzione adoperando solo le operazioni di ricorsione e composizione:


( )
( ) ( )
1
1 1
,0 ,
, 1 , 1
f x x
f x y f x y
=
+ = +
da cui ricaviamo:
( ) ( )
( ) ( ) ( )
1
1 1
1 1 1
,0 ,
, 1 , , ,
f x u x
f x y g y f x y x
=

+ =



EDIT by Qd Calcolabilit XVII Lez.
81
con ( ) ( ) ( )
3
1 1 2 3 2 1 2 3 2
1 , , , , x g x x x s u x x x = + =

Per comprendere meglio luso della ricorsione primitiva riscriviamo la formula utilizzando le lettere
adottate per la definizione di ricorsione primitiva per funzioni a pi variabili, abbiamo:

( ) ( )
( ) ( ) ( )
1
1 1 1
1 1 1
, 0
, 1 , , ,
, h x u x
h x t g t h x t x
=
+ =


dove chiaramente h corrisponde a
1
f ,
1
x a x, t a y e g a
1
g .

Abbiamo ottenuto tali equazioni adoperando le operazioni di composizione (in particolare
1
g stata ot-
tenuta componendo le funzioni iniziali proiezione e successore) e ricorsione primitiva.

La funzione 1) quindi ricorsiva primitiva dunque calcolabile (sebbene gi sapessimo che tale funzione era
calcolata dal programma (d) ora sappiamo che anche primitiva ricorsiva).

Vediamo ora un altro esempio di funzione primitiva ricorsiva:

2) x y ( )
2
, h x y x y =

ottenibile da:


( )
( ) ( )
2
2 2
,0 0,
, 1 ,
h x
h x y h x y x
=
+ = +
da cui:
( ) ( )
( ) ( ) ( )
2
2 2 2
,0 0,
, 1 , , ,
h x n x
h x y g y h x y x
= =
+ =


con ( ) ( ) ( ) ( )
3 3
1 2 3 1 2 1 2 3 3 1 2 3
, , , , , , , g x x x f u x x x u x x x = , dove chiaramente
1
f la funzione som-
ma vista prima.

Si ha difatti: ( ) ( ) ( ) ( ) ( )
3 3
1 2 1 2 3 3 1 2 3 1 2 3 2 3 2
, , , , , , , f u x x x u x x x f x x x x h x y x = = + = + .

Le formule viste, osservando la natura delle funzioni utilizzate, portano ad affermare che la funzione
2
h primitiva ricorsiva.

3) ! x (fattoriale)
( ) ( )
0! 1,
1 ! ! x x s x
=
+ =
,

pi precisamente se ( )
3
! x h x = abbiamo:
( )
( ) ( ) ( )
3
3 3 3
0 1,
1 ,
h
h t g t h t
=
+ =


con ( ) ( )
3 1 2 1 2
, g x x s x x = che primitiva ricorsiva in quanto pu essere scritta cos:

( ) ( ) ( ) ( )
2 2
3 1 2 1 1 2 2 1 2
, , , g x x s u x x u x x = (chiaramente il prodotto usato una funzione primitiva ricorsiva),

quindi la funzione fattoriale una funzione primitiva ricorsiva.

EDIT by Qd Calcolabilit XVII Lez.
82
Le funzioni che abbiamo visto sono state costruite mediante le funzioni iniziali che possono essere
immaginate come dei mattoni, mentre la ricorsione primitiva e la composizione sono il cemento con il
quale costruire le funzioni primitive ricorsive; ogni volta che viene aggiunta una funzione al nostro ba-
gaglio di funzioni ricorsive primitive possiamo adoperarla a mo di mattone per costruire funzioni pri-
mitive ricorsive pi complesse, proprio come abbiamo fatto per la funzione
3
g , per costruire la quale
abbiamo adoperato il prodotto visto in precedenza, mentre sottinteso che la funzione ( )
3
0 h ottenu-
ta da ( ) 0 s . Osservando tale principio si ottengono le seguenti funzioni potenza e predecessore:

4)
y
x
0
1
1,
y y
x
x x x
+
=
=
(da notare che in questo caso
0
0 1 = );

5) ( )
5
p x ( )
5
se
se
1 0
0 0
x x
p x
x

=

=

da cui abbiamo:
( )
( )
5
5
0 0,
1
p
p t t
=
+ =


In questo caso la funzione
5
p pu essere computata dalla singola istruzione: 1 X X , risulta
( )
( )
( )
5
1
5
p x x =
c
con
5
: 1 X X c .

In termini di funzioni iniziali le due funzioni appena viste si ottengono come segue:

4)
( ) ( ) ( )
( ) ( ) ( )
4
4 4
, 0 1,
, 1 , , ,
h x s n x
h x t g t h x t x
= =
+ =
con ( ) ( ) ( ) ( )
3 3
4 1 2 3 2 2 1 2 3 3 1 2 3 2 3
, , , , , , , g x x x h u x x x u x x x x x = = ;


5)
( )
( ) ( ) ( )
5
5 5 5
0 0,
1 ,
p
p t g t p t
=
+ =
con ( ) ( )
2
5 1 2 1
, g x x u t = .


Proseguiamo la rassegna di funzioni primitive ricorsive:
6) x y
`
(differenza tra x e y)
se
0 se
x y x y
x y
x y

=

<

`
il puntino serve a distinguere tale funzione
da quella vista in precedenza x y il cui valore per x y < indefinito, mentre in questo caso non lo , la funzione 6
dunque totale (altrimenti non ci sarebbero neanche i presupposti per affermare che essa primitiva ricorsiva).
In termini di ricorsione primitiva la 6 diventa:


( ) ( )
5
0 ,
1
x x
x t p x t
=
+ =
`
` `
e in termini di funzioni iniziali abbiamo:


( ) ( )
( ) ( ) ( )
1
6 1
6 6 6
,0 ,
, 1 , , ,
h x u x x
h x y g y h x y x
= =
+ =
con ( ) ( ) ( )
3
6 1 2 3 5 2 1 2 3
, , , , g x x x p u x x x =



EDIT by Qd Calcolabilit XVII Lez.
83
7) x y (valore assoluto della differenza tra x e y), tale funzione pu essere scritta in termini di fun-
zioni primitive ricorsive precedentemente definite: ( ) ( ) x y x y y x = +
` `
.

Se x y ( ) ( ) ( ) 0 x y y x x y x y + = + = ` ` , mentre se x y < si ha ( ) ( ) x y y x + = ` `
( ) 0 y x y x = + = . In entrambi i casi otteniamo il valore assoluto della differenza tra x e y .


8) ( )
8
x (rivelatore dello 0) ( )
8
se
se
1 0
0 0
x
x
x

la quale pu essere espressa in questo mo-


do: ( )
8
1 x x =
`
(se 0 x = , ( )
8
1 0 1 x = = , mentre se 0 ( 1) x si ha ( )
8
1 0 x x = = ).

Alternativamente si pu esprimere la funzione 8 in termini di ricorsione primitiva in questo modo:


( )
( )
8
8
0 1,
1 0 t

=
+ =
.

Oltre alle funzioni primitive ricorsive mostriamo due predicati primitivi ricorsivi (rif. D.S.W. 49):

9) x y = ( )
9
se
se
1
,
0
x y
d x y
x y
=

la quale si pu ottenere cos: ( ) ( )


9 8
, d x y x y =

Se x y = , si ha ( ) ( ) ( )
9 8 8
, 0 1 d x y x y = = = , altrimenti si ha ( ) ( )
9 8
, 0 d x y x y = =
poich 0 x y .


10) x y ( )
10
se
altrimenti
1
,
0
x y
h x y

ottenibile da: ( )
8
x y
`
.

Se x y , si ha ( ) ( ) ( )
10 8 8
, 0 1 h x y x y = = =
`
, altrimenti si ha ( ) ( )
10 8
, h x y x y = =
`

( )
8
0 x y = = .

TEOREMA 5.1: Sia V la classe PRC. Se P e Q sono predicati appartenenti a V , allora lo sono anche
P , P Q e & P Q .

DIM.: Basta ricondurre tali predicati a equazioni primitive ricorsive, si ha: ( )
8
P P = ,
& P Q P Q = e, utilizzando le leggi di De Morgan, ( ) ( ) ( ) ( )
& P Q P Q P Q = = .

Il teorema appena visto importante perch la tesi uno strumento essenziale per costruire un vastissi-
mo numero di predicati primitivi ricorsivi.


Dallultimo teorema mostriamo un altro predicato primitivo ricorsivo:

11) x y < ( )
11
se
altrimenti
1
,
0
x y
h x y
<

ottenibile cos:


EDIT by Qd Calcolabilit XVII Lez.
84
( ) ( ) & x y x y x y < = (minore e non uguale) oppure cos:

( ) x y y x < (non maggiore e non uguale).


TEOREMA 5.4 (definizione per casi rif. D.S.W. pag. 50): Sia V una classe PRC, siano g e h funzioni ap-
partenenti a V e sia P un predicato anchesso appartenente a V . Se:

( )
( ) ( )
( )
if then
else
1
1 2 1 2
1 2
1 2
se
altrimenti
, , , , , , ,
, , ,
, , ,
P
n n
n
n
P g x x x x x x
f x x x
h x x x
=

allora f una funzione primitiva ricorsi-


va, cio appartenente anchessa alla classe PRC V .

Ci che abbiamo appena visto pu essere interpretato con un costrutto selettivo, se il predicato P vero
(cio uguale a 1) allora la funzione f sar uguale a g altrimenti la funzione f sar uguale ad h .

DIM.: la dimostrazione ovvia poich basta scrivere f sottoforma di espressioni contenenti funzioni pri-
mitive ricorsive, si ha:

( ) ( ) ( ) ( ) ( ) ( )
1 2 1 2 1 2 1 2 8 1 2
, , , , , , , , , , , , , , ,
n n n n n
f x x x g x x x P x x x h x x x P x x x = + .

Se P vero risulta: ( ) ( ) ( ) ( )
8 1 2 1 2 1 2
, , , , , , , , , 1 1
n n n
f x x x g x x x h x x x = + =
( ) ( ) ( )
1 2 1 2 1 2
, , , , , , 0 , , ,
n n n
g x x x h x x x g x x x = + = ;

se P falso si ha: ( ) ( ) ( ) ( )
8 1 2 1 2 1 2
, , , , , , , , , 0 0
n n n
f x x x g x x x h x x x = + =
( ) ( )
1 2 1 2
, , , 1 , , , 0
n n
h x x x h x x x = + = .

COROLLARIO 5.5: Sia V una classe PRC, siano
1 2
, , , ,
m
g g g h funzioni ad n variabili appartenenti,
assieme ai predicati
1 2
, , ,
m
P P P anchessi ad n variabili, alla classe V , posto:

( ) ( )
1 2 1 2
, , , & , , , 0
i n j n
P x x x P x x x = ,
1 2
, , ,
n
x x x e 1 i j m < (i predicati possono essere
o tutti falsi oppure al pi
uno solo vero e gli altri falsi)
Se:
( )
( ) ( )
( ) ( )
( ) ( )
( )
1 1 2 1 1 2
2 1 2 2 1 2
1 2
1 2 1 2
1 2
se
se
se
altrimenti
, , , , , , ,
, , , , , , ,
, , ,
, , , , , , ,
, , ,
n n
n n
n
m n m n
n
P
P
P
g x x x x x x
g x x x x x x
f x x x
g x x x x x x
h x x x

allora f appartiene a V .

Il fatto che uno solo dei predicati pu essere vero perch il valore di f deve essere univoco, infatti se
fossero veri due predicati, f dovrebbe assumere due valori contemporaneamente e ci non consentito.
Il corollario pu essere interpretato come uno switch (o case, costrutto di selezione esteso dei linguaggi di
programmazione).


EDIT by Qd Calcolabilit XVII Lez.
85
DIM.: La dimostrazione va fatta per induzione su m (numero dei predicati):

(passo base) 1 m = : il corollario dimostrato perch si riduce al teorema 5.4;
(passo induttivo) 1 m+ : presupponendo che il corollario sia vero per m. Basta ricondurre il caso
per 1 m+ a quello di m in questo modo:

( )
( ) ( )
( ) ( )
( ) ( )
( )
1 1 2 1 1 2
2 1 2 2 1 2
1 2
1 1 2 1 1 2
1 2
se
se
se
altrimenti
, , , , , , ,
, , , , , , ,
, , ,
, , , , , , ,
, , ,
n n
n n
n
m n m n
n
P
P
P
g x x x x x x
g x x x x x x
f x x x
g x x x x x x
h x x x
+ +



ora se poniamo:
( )
( ) ( )
( )
1 1 2 1 1 2
1 2
1 2
se
altrimenti
, , , , , , ,
, , ,
, , ,
m n m n
n
n
P g x x x x x x
h x x x
h x x x
+ +



dal teorema 5.4 possiamo affermare che h V , possiamo allora riscrivere f cos:

( )
( ) ( )
( ) ( )
( ) ( )
( )
1 1 2 1 1 2
2 1 2 2 1 2
1 2
1 2 1 2
1 2
se
se
se
altrimenti
, , , , , , ,
, , , , , , ,
, , ,
, , , , , , ,
, , ,
n n
n n
n
m n m n
n
P
P
P
g x x x x x x
g x x x x x x
f x x x
g x x x x x x
h x x x



Abbiamo dunque ridotto il problema a dimensione m che per ipotesi di induzione vero, quindi il
corollario dimostrato.

Decima Ottava Lezione
12/12/2006
operazioni iterate e quantificatori
minimalizzazione
altre funzioni e predicati primitivi ricorsivi

Operazioni Iterate e Quantificatori
(rif. D.S.W. pag. 52)

TEOREMA 6.1: Sia V una classe PRC. Se ( )
1 2
, , , ,
n
f t x x x V allora appartengono a V anche le
funzioni cos definite:
( ) ( )
1 2 1 2
0
, , , , , , , ,
n n
y
t
g y x x x f t x x x
=
=

e ( ) ( )
1 2 1 2
0
, , , , , , , ,
n n
y
t
h y x x x f t x x x
=
=

.

DIM.: Bisogna dimostrare il teorema adoperando le seguenti equazioni ricorsive:

( ) ( )
( ) ( ) ( )
1 2 1 2
1 2 1 2 1 2
0, , , , 0, , , , ,
1, , , , , , , , 1, , , ,
n n
n n n
g x x x f x x x
g t x x x g t x x x f t x x x
=
+ = + +


e

( ) ( )
( ) ( ) ( )
1 2 1 2
1 2 1 2 1 2
0, , , , 0, , , , ,
1, , , , , , , , 1, , , ,
n n
n n n
h x x x h x x x
h t x x x h t x x x f t x x x
=
+ = +




Le funzioni ( )
1 2
, , , ,
n
g t x x x e ( )
1 2
, , , ,
n
h t x x x si ricavano da queste formule di ricorsione finch
non si risale a ( )
1 2
0, , , ,
n
f x x x , quindi il teorema dimostrato.

Qualche volta la sommatoria o la produttoria cominceranno da 1 t = e non 0 t = , scriveremo quin-
di:
( ) ( )
1 2 1 2
1
, , , , , , , ,
n n
y
t
g y x x x f t x x x
=
=

e ( ) ( )
1 2 1 2
1
, , , , , , , ,
n n
y
t
h y x x x f t x x x
=
=

.

Per la relativa dimostrazione bisogna sostituire i casi base delle formule ricorsive viste poco fa con que-
ste:
( )
1 2
0, , , , 0
n
g x x x = e ( )
1 2
0, , , , 1
n
h x x x = da cui, pi formalmente, abbiamo il seguente:

COROLLARIO 6.2 (rif. D.S.W. pag. 53): Sia V una classe PRC, se ( )
1 2
, , , ,
n
f t x x x V allora appar-
tengono a V anche le due funzioni:
( ) ( )
1 2 1 2
1
, , , , , , , ,
n n
y
t
g y x x x f t x x x
=
=

e ( ) ( )
1 2 1 2
1
, , , , , , , ,
n n
y
t
h y x x x f t x x x
=
=

.


TEOREMA 6.3 (teorema analogo al precedente, ma relativo ai predicati, rif. D.S.W. pag. 53 si veda anche, per i quan-
tificatori limitati, D.S.W. pag. 7): Se il predicato ( )
1 2
, , , ,
n
P t x x x V , con V classe PRC, allora apparten-
gono a V anche i predicati:

( ) ( )
1 2
, , , ,
n
y
t P t x x x


e
( ) ( )
1 2
, , , ,
n
y
t P t x x x


.

EDIT by Qd Calcolabilit XVIII Lez.
87

Tali scritture indicano rispettivamente i predicati
U
Q e
E
Q , in particolare le scritture ( )
y
t

e
( )
y
t

vengono chiamate rispettivamente quantificatore universale limitato e quantificatore esistenziale


limitato. Limitato indica il fatto che hanno significato soltanto per valori minori o uguali di y . Pi e-
splicitamente il predicato
U
Q pu essere scritto cos:
( ) ( )
1 2 1 2
per ogni se risultano veri tutti i predicati allora vero
| , , , , , , , ,
n U n
U
t y P Q
t y P t x x x Q y x x x




e
U
Q pu essere espresso come segue:

( ) ( )
( )
( )
( ) ( )
( )
1 2 1 2 1 2 1 2
il predicato vero soltanto se sono veri tutti i predicati
, , , , 0, , , , & 1, , , , & & , , , ,

U n n n n
U
Q P
Q y x x x P x x x P x x x P y x x x


;


Mentre il predicato
E
Q viene cos espresso:
( ) ( )
1 2 1 2
esiste almeno un per cui vero il predicato allora vero
| , , , , , , , ,
n U n
U
t y P Q
t y P t x x x Q y x x x




e
E
Q pu essere espresso come segue:

( ) ( )
( )
( )
( ) ( )
( )
1 2 1 2 1 2 1 2
| | |
il predicato vero soltanto se almeno uno dei predicati vero
, , , , 0, , , , 1, , , , , , , ,
E n n n n
E
Q P
Q y x x x P x x x P x x x P y x x x
.

Passiamo alla dimostrazione del teorema:
DIM.: In modo immediato si giunge a dimostrare del teorema osservando che:

( ) ( ) ( )
1 2 1 2
0
affinch la produttoria valga 1 tutti i predicati devono essere veri
, , , , , , , , 1
n n
t y
y
t
t P t x x x P t x x x

=

=






e
( ) ( ) ( )
1 2 1 2
0
affinch la sia non nulla, almeno un predicato deve essere vero
, , , , , , , , 0
n n
t y
y
t
t P t x x x P t x x x


.

Avendo espresso i predicati mediante espressioni primitive ricorsive appartenenti alla classe PRC il
teorema dimostrato.

Da notare che il predicato
U
Q pu essere anche espresso cos:

( ) ( ) ( )
1 2 1 2
0
il predicato uguale alla produttoria dei predicati che se
risultano tutti veri rende la produttoria pari a 1 che
corrisponde a valore vero
, , , , , , , ,
n n
t y
y
t
P
t P t x x x P t x x x

=

=




EDIT by Qd Calcolabilit XVIII Lez.
88
Non si pu esprimere in maniera analoga il predicato
E
Q in quanto il valore della sommatoria potrebbe essere 0, 1 o
anche valori maggiori di 1 (non ammessi per desumere il valore di un predicato, vero o falso, non sarebbe quindi pi consi-
derato un predicato, ma una funzione), mentre nel caso precedente la produttoria poteva assumere soltanto valori pari a 0 o
a 1.

Analogamente a quanto succedeva nel teorema 6.1 (in cui esisteva la variante in cui t partiva da 1 e non da 0),
nel caso attuale talvolta potremmo utilizzare le seguenti scritture:

( )
y
t
<
e ( )
y
t
<
( y < e non y )

Il teorema rimarrebbe valido se esprimiamo i quantificatori come segue:

( ) ( ) ( ) ( )
1 2 1 2
esiste almeno una tale che e vero
, , , , & , , , ,
n n
t y t y
t y t y P
t P t x x x t t y P t x x x
<




e


( ) ( ) ( ) ( )
1 2 1 2
per ogni risulta che se allora pu anche essere falso,
mentre se , affinche il predicato sia vero, deve essere
necessariamente vero
, , , , , , , ,

n n
t y t y
U
t y t y P
t y Q P
t P t x x x t t y P t x x x
<
=

=





Vediamo ora altri esempi di predicati primitivi ricorsivi:

12) | y x (y un divisore di x) ( vero 3 | 12 , mentre falso 3 | 13 ).

Adoperando gli ultimi teoremi visti si scopre che questo predicato primitivo ricorsivo infatti si pu e-
sprimere cos:

( ) ( ) |
x
y x t y t x

= in effetti si cerca il primo valore non maggiore di x per cui y t x = .


Lo si cerca non maggiore in quanto se t x > si avrebbe
x
y
t
= e 0 1 y < che non pu essere un divi-
sore (intero) di x ;

13) ( ) Primo x (x un numero primo)

un predicato primitivo ricorsivo anche questo, infatti:

( )

( ) ( ) { }
un numero primo
a eccezione dell'1 e di se stesso
deve essere >1
non deve avere divisori
Primo 1 & 1 |
x
x x t t t x t x

> = =
_
.




EDIT by Qd Calcolabilit XVIII Lez.
89
Minimalizzazione
(rif. D.S.W. pag 55)

Dal teorema 6.1 sappiamo che se il predicato ( )
1 2
, , , ,
n
P t x x x V con V classe PRC, allora la
funzione:
( ) ( ) ( )
1 2 1 2
0 0
, , , , , , , ,
n n
y
u
u t
g y x x x P t x x x
= =
=


appartiene a V .

Analizziamo la funzione supponendo per prima cosa che il predicato P per un valore
0
t y sia:

( )
1 2 0
per , , , , 0
n
P t x x x t t = <

mentre si ha:
( )
0 1 2
, , , , 1
n
P t x x x =

In altre parole
0
t rappresenta il pi piccolo valore che pu assumere t che rende vero il predicato P. Per
valori di
0
t t < il predicato risulta falso, mentre per
0
t t = il predicato vero (non ci interessa sapere il valore
del predicato per valori di
0
t t > ) .

Da ci possiamo affermare che:

( ) ( )
0
1 2
0 0
se
se
1
, , , ,
0
n
u
t
u t
u t
P t x x x
=
<



Se
0
u t < abbiamo ( ) ( )
1 2
0
, , , ,
n
u
t
P t x x x
=

= ( )
0
0
u
t

=
0
1
u
t =

= 1 ;
mentre se
0
u t = otteniamo ( ) ( )
1 2
0
0
, , , ,
n
t
t
P t x x x
=
=


( ) ( ) ( ) ( )
0 1 2 0 1 2
0
0
1, , , , , , , ,
1
n n
t
t
P t x x x P t x x x
=

( ) 1 1 = 1 0 0 = = ;

chiaramente per valori
0
u t > il risultato rispetto al caso precedente non cambia, infatti si avrebbe una
produttoria in cui compare almeno uno 0, quindi lespressione varr sempre 0 da
0
t in poi.

Chiaramente, poich lo 0 non porta contributo alla somma, possiamo riscrivere la funzione g in
questo modo:

viene fatto il conteggio di tutte le volte che lespressione
risulta vera;

quindi la funzione g altro non che il pi piccolo valore

0
t per cui ( )
1 2
, , , ,
n
P t x x x vero

Lespressione ( ) ( )
1 2
0 0
, , , ,
y u
n
u t
P t x x x
= =

va interpretata come un contatore di predicati falsi.


( )
1 2 0
0
0
sommatoria di tutti i valori assunti dalla
produttoria a partire da 0 fino ad arrivare
a
, , , , 1
n
u t
u t
g y x x x t
<
<
= =


EDIT by Qd Calcolabilit XVIII Lez.
90
DEF.: Definiamo ora la seguente scrittura:

( )
( ) ( ) ( )
1 2 1 2
1 2
se
altrimenti
, , , , , , , , ,
min , , , ,
0
n n
n
y
t y
g y x x x t P t x x x
P t x x x



In pratica se esiste un minimo questo varr almeno 1, se non esiste (alcun predicato vero) varr 0.

Quindi ( )
1 2
min , , , ,
n
t y
P t x x x

rappresenta il pi piccolo valore che pu assumere ( ) y t per il quale il


predicato P risulta vero, questo se t esiste; se questo valore t non esiste la funzione assume valore nullo.

Utilizzando i teoremi 5.4 (itthenelse) e 6.3 (quantificatori limitati) abbiamo il seguente:

TEOREMA 7.1: Sia V una classe PRC, se ( )
1 2
, , ,
n
P x x x V e risulta
( ) ( )
1 2 1 2
, , , , min , , , ,
n n
t y
f y x x x P t x x x

= , allora ( )
1 2
, , , ,
n
f y x x x V .

DIM.: Come gi anticipato la dimostrazione si ricava adoperando i teoremi 5.4 e 6.3, la quale imme-
diata.
Dal teorema 6.3 si dimostra che ( ) ( )
1 2
, , , ,
n y
t P t x x x

primitiva ricorsiva, quindi con questa


ipotesi, dal teorema 5.4 (definizione per casi) si dimostra anche che ( )
1 2
min , , , ,
n
t y
P t x x x

primitiva
ricorsiva e che quindi appartiene ad una classe PRC.

DEF.: Loperazione min
t y
viene chiamata minimalizzazione (limitata).

Grazie allultima definizione data, possiamo definire unaltra funzione primitiva ricorsiva:

14) x y

(parte intera base del quoziente x y )
( 7 2 3, 2 3 0 = =

)

Mediante la minimalizzazione otteniamo:

( ) min 1
t x
x y t y x

= + >

da notare che compare min
t x
e non min
t y
, infatti se comparisse y, ad
esempio 5 1

non darebbe il risultato corretto, in quanto 1 y =
e ( ) [ ] min 1 0
t y
t y x

+ > = .

Quindi la 14 una funzione primitiva ricorsiva.

Luso della minimalizzazione funziona per tentativi, ovvero x y

il pi piccolo intero t x tale che
( ) 1 t y x + > . Facciamo un esempio 5 2 2 =

, partendo da 0 t = , il predicato risulta falso:
( ) 1 1 2 5 t y x + > > / / ; andiamo avanti con 1 t = , il predicato risulta ancora falso: ( ) 1 t y x + > /
2 2 5 >/ ; proviamo per 2 t = , il predicato in questo caso vero infatti si ha: ( ) 1 t y x + >
3 2 5 > . Quindi 5 2 2 t = =

. Il predicato in questo caso risulta vero 2 t , ma la ricerca si inter-
rompe a 2, che, avendo adoperato la minimalizzazione limitata, rappresenta il minimo valore per cui risul-
ta vero il predicato.

EDIT by Qd Calcolabilit XVIII Lez.
91
Importante notare che per come stata definita la 14 il caso particolare di 0 0 x =

, (infatti
( ) [ ] min 1 0
t x
t y x

+ > = , in quanto per tutti i valori di t x il predicato risulter sempre falso, non esistendo alcun valore
di t per cui sia vero il predicato, per come stata definita la minimalizzazione limitata).

Dalla 14 ricaviamo la
15) ( ) , R x y (funzione resto (reminder), della divisione tra x e y)

E possiamo esprimerla cos: ( ) ( )
, R x y x y x y =

` che chiaramente primitiva ricorsiva.

La formula si ottiene in quanto ( ) ( ) ( ) , , x x y y R x y R x y x x y y = + =

`
.

Anche per questa funzione c un caso particolare, risulta ( ) ,0 R x x = (infatti ( ) 0 0 x x =

`

0 x x = =
`
).

Altra funzione importante la seguente:
16)
n
p con 0 n > (n-mo numero primo)

Stabiliamo che
0
0 p = , quindi avremo
1 2 3 4 5
2, 3, 5, 7, 11, p p p p p = = = = =

Per esprimere
n
p ci serviamo delle equazioni di ricorsione, abbiamo:

( )
0
1
! 1
0,
min Primo &
n n
n
t p
p
p t t p
+
+
=

= >



Per verificare la correttezza delluguaglianza dobbiamo verificare che valga la disequazione:
( )
1
! 1
n n
p p
+
+ . L ( ) 1 n mo + numero primo si ricava utilizzando n mo numero primo ricorsiva-
mente e corrisponde al pi piccolo numero ( ) t che sia primo e sia (ovviamente) maggiore di
n
p , il va-
lore ( ) t per non deve essere maggiore di ! 1
n
p + .

Notiamo che vale luguaglianza:
( )! 1 1
n
i i
p
K
p p
+
= + con
intero e
0
K
i n <
.
Essendo
1
i
p

/
N ( 2
i
p ) ed essendo
( )!
n
i
p
p
N (risulta infatti
( )
( ) 1
! n n i
n
i
p p p
p
p

=
3 2
i
p

/

N ) possiamo
affermare che
i
p non divide ( )! 1
n
p + , ovvero ( )! 1
n
p + non divisibile per nessun numero primo
1 2
, , ,
n
p p p (risulta
infatti
( ) ( ) ! 1 ! 1
n n
i i i
p p
p p p
+
= + che rappresenta la somma di una quantit intera per unaltra non intera, il cui risultato una
quantit non intera). Da questultima affermazione potrebbe risultare che:

a) (out) o ( )! 1
n
p + un numero primo (un numero primo non divisibile per numeri primi minori di es-
so e ci basta per affermare che un numero primo non divisibile per alcun numero minore di esso, mag-
giore di 1; numeri minori di esso non primi comunque non lo dividono, in quanto costituiti da numeri
primi che non lo dividono, insomma credo che ci siamo capiti );


EDIT by Qd Calcolabilit XVIII Lez.
92
b) (out) oppure ( )! 1
n
p + divisibile per un numero primo maggiore di
n
p (questa uneventualit del
tutto possibile).

In entrambi i casi quindi possiamo affermare che esiste un numero primo q tale che:
( )! 1
n n
p q p < + (infatti se vale a) allora ( )! 1
n n
p p + > e ci non esclude che tra ( )! 1
n
p + e

n
p ci siano altri numeri primi; se invece vale b) deve esistere un numero
primo maggiore di
n
p che divide ( )! 1
n
p + , appunto q).

Quindi abbiamo che ( )
1
! 1
n n
p p
+
+ (poich se ( )! 1
n n
p q p < + allora ( )
1
! 1
n n n
p p q p
+
< + ), ci assicura
la correttezza delluguaglianza ( )
1
! 1
min Primo &
n
n n
t p
p t t p
+
+
= >


.

Tale procedimento deriva dalla dimostrazione di Euclide circa linesistenza di un estremo superiore
dellinsieme dei numeri primi (insieme infinito), la quale si dimostra per assurdo.

Abbiamo dato per scontato che
n
p fosse una funzione primitiva ricorsiva, dimostriamolo:

sia: ( ) ( ) , min Primo &
t z
h y z t t y

= >

la quale calcola il pi piccolo numero primo t tale che
y t z < e

sia: ( ) ( ) , ! 1 k x h x x = + che calcola il pi piccolo numero primo t tale che ! 1 x t x < + .

Le funzioni appena definite sono primitive ricorsive e le possiamo adoperare per riscrivere la formu-
la ricorsiva usata per definire
n
p , si ha:

( )
0
1
0,
n n
p
p k p
+
=
=
possiamo quindi concludere che
n
p una funzione primitiva ricorsiva.

Tale funzione calcolabile importante per farci capire che, ad esempio, linguaggi con stringhe di lun-
ghezza p, con p numero primo, non sono C.F., mentre gli S-programmi hanno la capacit di generare nu-
meri primi. Inoltre i numeri primi, per le loro propriet, sono importanti (essenziali) per la numerazione di
Gdel che vedremo a breve.

Vale la pena notare che, utilizzando i vari teoremi visti e le macro in modo opportuno, possiamo ef-
fettivamente costruire un S-programma f che realmente calcoli
n
p , ma tale programma sarebbe e-
stremamente inefficiente (per calcolare
n
p bisogna calcolare prima tutti i numeri primi precedenti
i
p
con 0 i n < < ).

DEF.: Andiamo ora ad analizzare la minimalizzazione quando questa non limitata, la rappresen-
tiamo cos:
( )
1 2
min , , , ,
n
y
P x x x y intendendo il pi piccolo valore che pu assumere y per cui
il predicato ( )
1 2
, , , ,
n
P x x x y risulta vero.

Mentre nella minimalizzazione limitata veniva rappresentato il pi piccolo valore t y ( limite su-
periore) per cui valeva il predicato P.


EDIT by Qd Calcolabilit XVIII Lez.
93
Non avendo per limiti, in questo caso, se non ci dovesse essere alcun valore di y per cui sia vero il
predicato ( )
1 2
, , , ,
n
P x x x y allora il valore che assume la minimalizzazione non limitata indefinito,
in quanto non in grado di stabilire se c un valore y per cui valga P ammenoch questo valore non esi-
sta.
Quindi si capisce bene che la minimalizzazione non limitata pu produrre funzioni che non sono
totali. Chiaro esempio di questo concetto il seguente:

[ ] min
z
x y y z x = + = la quale indefinita se x y < (infatti la funzione continuer a testare allinfinito
y z x + = che sar sempre falso).

Il prossimo teorema formalizza il concetto secondo cui esistono predicati del tipo ( ) , P x y che sono
primitivi ricorsivi tali che ( ) min ,
y
P x y una funzione che non primitiva ricorsiva:
TEOREMA 7.2 (rif. D.S.W. pag. 58): Se ( )
1 2
, , , ,
n
P x x x y un predicato calcolabile e
( ) ( )
1 2 1 2
, , , min , , , ,
n n
y
g x x x P x x x y = allora g una funzione parzialmente calcolabile (cio non detto
che sia totale).

DIM.: semplice dimostrare il teorema, basta trovare un S-programma che calcola ( )
1 2
, , ,
n
g x x x :


[ ] ( )
1 2
IF GOTO
GOTO
, , , ,
1
n
A P X X X Y E
Y Y
A
+

il programma cicla finch Y non soddisfa il predicato

Tale programma dimostra che ( )
1 2
, , ,
n
g x x x parzialmente calcolabile (ma non detto che g sia an-
che totale, in quanto potrebbe assumere un valore indefinito , se il predicato P risultasse falso per
qualsiasi valore di Y.

Unosservazione, se volessimo realizzare un predicato mediante composizione di funzioni, del tipo ad e-
sempio: ( )
( ) 0 1 2
min , , , ,
n
y
P P x x x y , questa di fatto una funzione parzialmente calcolabile, non essen-
do totale (poich min potrebbe assumere valore intederminato ) non pu essere considerata un predica-
to parzialmente calcolabile in quanto per definizione i predicati sono funzioni totali. Quindi
0
P non un
predicato.



Funzioni di Accoppiamento
e
Numerazione di Gdel
(per la codifica numerica dei programmi rif. D.S.W. pag. 59)

Ora vediamo un metodo di codifica che ci permette di esprimere in modo biunivoco un dato S-
programma mediante i numeri, tale codifica / decodifica assicurata dallutilizzo di particolari funzioni
primitive ricorsive, dette di accoppiamento e mediante luso dei numeri primi in modo opportuno (esiste

EDIT by Qd Calcolabilit XVIII Lez.
94
ununica rappresentazione per fattori di numeri primi per ciascun numero naturale, dal teorema fondamentale
dellaritmetica).

DEF.: Andiamo a definire le funzioni di accoppiamento (pairing functions - dette anche di angioletto). Tali
funzioni servono a codificare in modo univoco coppie di numeri naturali, mediante la rappresentazione
di un intero, come segue:

( ) , 2 2 1 1
x
x y y = +
` tale funzione primitiva ricorsiva.

Poich risulta ( ) 2 2 1 0
x
y + , loperazione
`
non dar mai come risultato 0, se non quando
( ) 2 2 1 1
x
y + = , quindi possiamo trattare
`
come una normale sottrazione (cio le lacune di ` in questo ca-
so non hanno effetto) e ci consentito spostare l1 al primo membro delluguaglianza:

( ) , 1 2 2 1
x
x y y + = + .

Sia z un numero intero dato, allora lequazione , x y z = avr ununica soluzione (rif. D.S.W. pagg. 59-60).

DEF.: Dalla funzione di accoppiamento posso definire altre due funzioni primitive ricorsive:

( ) l z e ( ) r z (dette rispettivamente il sinistro di z e il destro di z) e risulta:

( ) l z x = e ( ) r z y = e dallequazione di accoppiamento risulta:

( ) l z z e ( ) r z z poich , 1 x y z < + .

Possiamo esprimere le due funzioni appena definite mediante funzioni primitive ricorsive, ricordan-
do anche che ( ) x l z = e ( ) y r z = sono uniche, cos:

( ) ( ) ( )
min ,
z
x z
l z y z x y

= =

e

( ) ( ) ( )
min ,
z
y z
r z x z x y

= =

.

Possiamo interpretare tali funzioni dicendo che ( ) ( ) ( )
l z r z il pi piccolo numero ( ) x y per cui
vale lequazione , z x y = , se esiste un ( ) y z x z che soddisfa tale uguaglianza.

Quindi, se la funzione di accoppiamento ci permette di ricavare z da x e da y, le funzioni sinistro e
destro ci permettono di ricavare rispettivamente x e y da z. Di conseguenza la seguente biiezione vera:

( ) ( ) , & x y z x l z y r z = = = .



Ricapitoliamo le propriet delle funzioni viste mediante il seguente:

EDIT by Qd Calcolabilit XVIII Lez.
95
TEOREMA 8.1 (sulla funzione di accoppiamento): Le funzioni , x y , ( ) l z ed ( ) r z hanno le se-
guenti propriet:

1. sono primitive ricorsive ;
2.
( )
, l x y x = ed
( )
, r x y y = ;
3. ( ) ( ) , l z r z z = ;
4. ( ) ( ) , l z r z z .


Ora andiamo a definire una funzione primitiva ricorsiva per la codifica e decodifica di unarbitraria
sequenza di numeri, ovvero definiamo il numero di Gdel:
DEF.: Chiamiamo numero di Gdel della sequenza ( )
1 2
, , ,
n
a a a la seguente funzione primitiva ri-
corsiva (indicando in parentesi quadre [ ] la sequenza da codificare):

[ ]
1 2
1
, , ,
n i
i
n
a
i
a a a p
=
=

(chiaramente
i
p sta per li-mo numero primo)

Tale funzione (assieme ad unaltra funzione che vedremo a breve) ci permette di effettuare una codi-
fica / decodifica biunivoca della sequenza ( )
1 2
, , ,
n
a a a , in quanto viene fatto uso dei numeri primi e si
fa leva sul teorema fondamentale dellaritmetica (ricordiamolo, secondo il quale ogni intero ha una fattorizzazione
unica di numeri primi).

Esempio di numero di Gdel per la sequenza ( ) 3, 1, 5, 4, 6 , viene cos espresso: [ ] 3, 1, 5, 4, 6 ed uguale
a
3 1 5 4 6 3 1 5 4 6
1 2 3 4 5
2 3 5 7 11 319013 847 075 000 p p p p p = = . Trattando con numeri primi e po-
tenze facile ottenere valori spropositati molto facilmente.

Per ogni n fissato la funzione [ ]
1 2
, , ,
n
a a a primitiva ricorsiva.

La numerazione di Gdel soddisfa la seguente propriet: se [ ] [ ]
1 2 1 2
, , , , , ,
n n
a a a b b b = allora
, 1
i i
a b i n = .
Questultima implicazione proprio conseguenza di quanto detto prima circa lunicit della fattorizza-
zione di numeri primi. Per c da considerare un caso particolare:

[ ] [ ]
1 2 1 2
, , , , , , , 0
n n
a a a a a a =

e pi in generale:
[ ] [ ]
1 2 1 2
, , , , , , , 0, 0, , 0
n n
a a a a a a = .

Ci accade perch
0
1
1
n
p
+
= , tale fattore lascia immutata la produttoria, in pratica, aggiungendo zeri
in coda alla sequenza di numeri, il numero di Gdel non cambia. Quindi per convenzione il numero di
Gdel pari a 1 corrisponde alla sequenza vuota, sequenza di lunghezza 0. A eccezione di questo caso la
biunivocit comunque assicurata per tutti gli altri casi, infatti se si aggiunge uno o pi zeri in testa o in
mezzo alla sequenza il numero di Gdel cambia.


EDIT by Qd Calcolabilit XVIII Lez.
96
Esempi: [ ]
2 3
2, 3 2 3 108 = = e [ ]
2 3 0
2, 3, 0 2 3 5 108 = = ; ma [ ]
0 2 3
0, 2, 3 2 3 5 1125 = = e anche
[ ]
2 0 3
2, 0, 3 2 3 5 500 = = .

Ora definiamo una funzione primitiva ricorsiva che ci utile per la decodifica dei numeri di Gdel:

( )
i
x e lo chiameremo i-mo componente del numero di Gdel (o anche funzione di proiezione).

Se [ ]
1 2
, , ,
n
x a a a = allora ( ) , 1
i
i
x a i n = e pu essere espresso mediante la seguente funzione
primitiva ricorsiva:

( ) ( )
1
min |
t
i
i
t x
x p x
+

=

da cui si possono verificare i casi particolari in cui ( )
0
0 x = e ( ) 0 0,
i
i = .

La funzione appena vista cerca il pi piccolo intero ( ) t x tale che
1 t
i
p
+
non divide x (stiamo dunque cer-
cando un esponente t proprio perch i numeri della sequenza codificati compaiono come esponenti). Pi intuitiva sarebbe
stata la funzione se avessimo avuto a disposizione una funzione primitiva ricorsiva massimo cosicch a-
vremmo potuto definire li-mo componente del numero di Gdel in questo modo: ( ) ( )
max |
t
i
i
t x
x p x

=
pi semplicemente.

Vediamo un esempio per comprendere come opera la funzione appena vista che fa uso del minimo: ri-
facciamoci allesempio visto prima sul numero di Gdel 1125 x = , vogliamo calcolare ( )
2
x , quindi dob-
biamo cercare il pi piccolo intero ( ) t x tale che ( ) ( )
1 1
2
3 | 1125
t t
p x
+ +
= = / . Iniziamo a cercare il nu-
mero t partendo da 0, per 0 t = abbiamo che ( )
1
2
3 | 1125
t
p
+
= , quindi andiamo avanti incrementando t,
quindi per 1 t = abbiamo ( )
1 2
2
3 | 1125
t
p
+
= ; proseguiamo per 2 t = per cui otteniamo
( )
1 3
2
3 | 1125
t
p
+
= / . Quindi ci fermiamo nella ricerca e possiamo concludere che ( ) 2
i
x t = = .


Definiamo unaltra funzione primitiva ricorsiva:

( ) ( ) ( ) ( )
( ) ( )
Lt min 0& 0
i j x
i x
x x j j i x

= =

e la chiameremo lunghezza (length) della sequenza [ ]
1 2
, , ,
n
a a a x =

Definiamo tale sequenza in modo tale che 0
n
a (in quanto se cos non fosse la sequenza con uno o
pi 0 in coda differirebbe ma non varierebbe il numero x, quindi non si avrebbe univocit nel risultato).
Luso del quantificatore universale ci assicura che tutto il predicato (min) sia vero se i assume un valore ta-
le che il predicato risulti sempre vero j x (serie di 0 alla coda della sequenza).
Cerchiamo di interpretare la funzione: ( ) ( ) min 0 &
i
i x
x

, se la sequenza fosse fatta di tutti 0 allora il


predicato( ) 0 &
i
x sarebbe sempre falso (da 0 i = a i x = ) quindi il valore che assumerebbe
( ) ( ) min 0 &
i
i x
x

sarebbe pari a 0.
Se la sequenza fosse invece priva di zeri, il predicato ( ) 0
i
x (senza considerare il membro a destra di
&) sarebbe vero per tutta la lunghezza della sequenza, ci comprometterebbe la conta di i. Quindi dob-

EDIT by Qd Calcolabilit XVIII Lez.
97
biamo vedere cosa accade allaltro membro del predicato & e cio ( ) ( )
( )
0
j x
j j i x

= che deve ri-


sultare falso, in modo da rendere falso tutto largomento di min. Quindi ci deve essere almeno un valore
j x per cui deve essere falso sia j i che ( ) 0
j
x = e ci assicurato dal fatto che ad esempio, poich
avevamo ipotizzato una sequenza priva di zeri sicuramente si presenter la condizione in cui j i / per
j n e ( ) 0
j
x =/ , ci si verificher fintantoch i n < . A quel punto min termina la conta e restituisce il
risultato corretto.
La presenza di uno o pi zeri in coda non compromette il risultato che pari alla lunghezza della se-
quenza priva di zeri in coda; infatti da unanalisi della funzione, il predicato allinterno del min risulter
vero se dopo lanalisi di uno 0 termina la sequenza o seguono soltanto altri zeri nel caso in cui j, superato i,
se ci sono numeri diversi da 0, render falso il predicato ( ) 0
j
j i x =
meglio, anzi meno peggio di cos non so spiegarlo, purtroppo.

Da quanto analizzato possiamo affermare che ( ) ( ) Lt 0 Lt 1 0 = = (ricordiamo che per convenzione il nume-
ro di Gdel pari a 1 rappresenta la sequenza vuota, mentre un numero di Gdel pari a 0 non esiste). Inoltre se ad esempio
[ ]
2
20 2 5 2, 0, 1 x = = = , allora risulter, quando verr effettuata la ricerca ( )
3
1 x = , ma ( )
4
0 x = come ogni ( )
i
x per
3 i > , la ricerca avr termine quando verr raggiunto il limite superiore e cio a ( ) ( )
20
0
x
x x = = . Poich per 3 i > tutti i
( ) 0
i
x = , il risultato sar ( ) Lt 20 3 = .
Osserviamo infine che se 1 x > (come del resto deve essere) e risulta ( ) Lt x n = , allora |
n
p x e nessun
primo pi grande di
n
p divide x. Non sarebbe la stessa cosa se ci fossero zeri in coda alla sequenza. Da
ci affermiamo che:
[ ] ( )
1 2
Lt , , , 0
n n
a a a n a = (altrimenti [ ] ( )
1 2 1
Lt , , , , 0 1
n
a a a n

= ).

Riassumiamo le funzioni di decodifica viste, mediante il seguente:
TEOREMA 8.3 (sulla sequenza numerica rif. D.S.W. pag. 62):

a. [ ] ( )
1 2
se 1 ,
altrimenti
, , ,
0
i
n
i
i n a
a a a

[ ] ( ) ( )
1 2
, , ,
n i i i
a a a x a = = ;


b. ( ) ( ) ( ) ( )
1 2
se , , , Lt
n
x x x x n x =

( ) ( ) ( ) [ ] [ ]
1 2 1 2
, , , , , ,
n n
x x x a a a x = =

( ) Lt n x = se non ci sono zeri in coda alla sequenza;
( ) Lt n x > se c uno o pi zeri in coda alla sequenza.


Decima Nona Lezione
14/12/2006
Codifica numerica dei programmi
Interruzione di un predicato e problema
dellinsolvibilit dellarresto

La codifica numerica dei programmi
(rif. D.S.W. pag. 65)

Vediamo ora come associare ad un programma c , di un linguaggio f , un numero (codifica),
che indichiamo cos: ( ) # c , il cui programma (decodifica) potr essere recuperato mediante questo
numero. Per iniziare fissiamo i nomi delle variabili nellordine seguente:


1 1 2 2 3 3
Y X Z X Z X Z (anche in questo caso i pedici 1 possono essere omessi);

per le etichette abbiamo:


1 1 1 1 1 2 2 2 2 2 3
A B C D E A B C D E A .

Lordine delle variabili e delle etichette importante e non deve cambiare, in tal modo possiamo de-
finire notazioni indicanti la posizione di ogni variabile/etichetta in base al nome:

( ) # V posizione variabile;
( ) # L posizione etichetta (label)

Esempi: ( )
2
# 4 X = ; ( ) # 1 Y = ; ( ) # 3 Z = ; ( ) # 5 E = .

Ora poniamo con la lettera I unistruzione (etichettata o meno) del linguaggio f e scriviamo:

( ) # , , I a b c = (le parentesi angolari indicano chiaramente funzioni di accoppiamento) dove:

1. se I non ha etichetta, allora 0 a = ;
se I ha etichetta L, allora ( ) # a L = ;

2. se V una variabile menzionata in I, allora ( ) # 1 c V = ;

3. se lenunciato di I : V V o 1 V V + o 1 V V

allora si ha rispettivamente: 0 b = o 1 b = o 2 b = ;

4. se lenunciato di I IF GOTO 0 V L allora si ha: ( ) # 2 b L = + .

Esempio: il numero dellistruzione non etichettata 1 X X + , , a b c , poich listruzione senza
etichetta 0 a = , mentre ( ) # 1 2 1 1 c X = = = , infine, poich listruzione 1 V V + , si ha 1 b = . Si
ha quindi ( ) # 0, 1, 1 I = ( )
1
0, 2 2 1 1 1 = + 0, 5 = ( )
0
2 2 5 1 1 10 = + = .

EDIT by Qd Calcolabilit XIX Lez.
99
Altro esempio: [ ] 1 A X X + che la stessa istruzione dellesempio precedente ma questa volta e-
tichettata, quindi si ha ( ) # a A = 1 = , mentre b e c restano immutate, si dunque ( ) # 1, 1, 1 I =
1, 5 = ( )
1
2 2 5 1 1 21 = + = .

Da notare che per ogni numero q dato vi ununica istruzione I tale che ( ) # I q = , quindi con
qualche stratagemma, da q, possiamo risalire ad a, b e c , quindi alletichetta (se c) dellistruzione, al
tipo di istruzione e alla variabile rispettivamente.
Calcoliamo inizialmente a che uguale a ( ) ( )
, , l q l a b c a = = , chiaramente se ( ) 0 l q = allora
listruzione I non ha etichetta, altrimenti I avr come etichetta la ( ) l q -ma lettera della nostra lista ini-
zialmente definita.
Per risalire al nome della variabile c menzionata in I dobbiamo calcolare ( ) ( )
r r q =
( ) ( )
, , r r a b c =
( )
, r b c c = = , il cui valore (precisamente 1 c + ) chiaramente indica la posizione del
nome della variabile nella nostra lista.
Per risalire infine allenunciato di I calcoliamo: ( ) ( )
l r q =
( ) ( ) ( )
, , , l r a b c l b c b = = e chiara-
mente se risulta
( ) ( )
0 l r q = allora I sar: V V ;
se ( ) ( )
1 l r q = allora I sar: 1 V V + ;
se ( ) ( )
2 l r q = allora I sar: 1 V V ;
se ( ) ( )
2 0 l r q j = > allora I sar: IF GOTO 0 V L
ed L corrisponde alla j-ma lettera della lista delle etichette.


Infine definiamo ( ) # c , con c programma costituito dalle istruzioni
1 2
, , ,
k
I I I (facendo rife-
rimento alla numerazione di Gdel), il numero descritto dalla funzione:

( ) ( ) ( ) ( )
1 2
# # , # , , # 1
k
I I I =

c
( ) #
1
1
I
i
i
k
i
p
=
=

.

In particolare il programma vuoto ( ) [ ] # 0 1 1 1 0 = = = (viene sottratto un 1 al numero di Gdel per assi-
curare una corrispondenza tra numero di programma e istruzioni e viceversa, infatti se non ci fosse questa sottrazione il nu-
mero di programma 0 non corrisponderebbe ad alcuna sequenza di numeri codificata mediante numerazione di Gdel).

importante notare che listruzione senza etichetta Y Y ha come numero 0, 0, 0 0 = e, per
evitare ambiguit, nella numerazione di Gdel in coda alla sequenza, per convenzione si stabilisce che
nessun programma debba avere come ultima istruzione Y Y (se cos non fosse un qualsiasi ( ) # c potreb-
be corrispondere a pi programmi c aventi un numero differente di istruzioni Y Y in coda alla sequenza di istruzioni,
verrebbe cos meno lunivocit della decodifica programmi differenti potrebbero avere lo stesso numero ( ) # c ).

Chiaramente la decodifica del numero ( ) # 0 I = , con I non corrispondente allultima istruzione del
programma, corrisponder (regolarmente) allenunciato Y Y .




EDIT by Qd Calcolabilit XIX Lez.
100
Interruzione di un predicato
(rif. D.S.W. pag. 68)

Introduciamo un predicato particolare: ( ) HALT , x y , definiamolo:
DEF.: per un dato y, posto c un S-programma tale che ( ) # y = c . Allora il predicato
( ) HALT , x y risulter vero se ( )
(1)
x
c
definita, falso se ( )
(1)
x
c
indefinita. In altre parole possiamo
scrivere che: ( ) il programma di numero si ferma sull'ingresso HALT , x y y x

.

TEOREMA 2.1: ( ) HALT , x y non un predicato calcolabile.

DIM.(a): Si dimostra per assurdo, supponendo cio che ( ) HALT , x y sia un predicato calcolabile (chia-
ramente mediante un S-programma). Quindi, se ( ) HALT , x y fosse calcolabile, possiamo utilizzarlo
allinterno di un S-programma sottoforma di macro, in questo modo (X contiene un valore qualsiasi):

[ ] ( )
:
IF GOTO HALT , A X X A
c
e chiaramente risluter:


( )
( )
( )
(1)
se
se
HALT , ,
0 HALT ,
x x
x
x x



Il programma, se ( ) HALT , x x vero, cicler allinfinito, altrimenti si ferma e il valore di uscita di Y
sar nullo.

Ora poniamo ( )
0
# y = c , allora, utilizzando la definizione data per il predicato ( ) HALT , x y , per in
relazione al numero di programma di c , ( )
0
# y = c otteniamo:

( )
0
HALT , x y risulta vero se ( )
(1)
x =
c
(valore determinato)

nel nostro caso lunico valore determinato che assume il programma c 0 e ci avviene quando
( ) HALT , x x falso (cio quando ( ) HALT , x x ); viceversa abbiamo che:

( )
0
HALT , x y risulta falso se ( )
(1)
x =
c


e ci avviene quando il predicato ( ) HALT , x x vero (per come stato concepito il programma, inizia a ciclare
allinfinito), possiamo quindi affermare che (poich ( ) ( )
0
HALT , HALT , x x x y ( ) HALT , x x
( )
0
HALT , x y ):
( ) ( )
0
HALT , HALT , x y x x .

Siamo giunti a questa conclusione senza che essa dipendesse da particolari valori di x, cio tale biiezione
valida per qualsiasi valore di x, quindi in particolare valida anche per
0
x y = da cui otterremmo:

( ) ( )
0 0 0 0
HALT , HALT , y y y y che chiaramente una contraddizione.

EDIT by Qd Calcolabilit XIX Lez.
101
Il teorema dunque dimostrato.

DIM.(b): Il teorema pu essere dimostrato anche seguendo un ragionamento differente, basandoci
sullanalisi di una particolare matrice (rif. D.S.W. pag. 89) costituita da un insieme di funzioni
( ) 1
unarie
relative a vari set di istruzioni, pi precisamente indichiamo con
n
c , 0 n il programma di numero
n, possiamo dunque costruire la matrice infinita dei valori che possono assumere le funzioni unarie
( ) 1
n

c

parzialmente calcolabili (che quindi possono assumere valori determinati o indeterminati a seconda di
come sono definite le funzioni
( ) 1
n

c
calcolate dai relativi programmi, abbiamo:

( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( )
(1) (1) (1)
(1) (1) (1)
(1) (1) (1)
0 0 0
1 1 1
2 2 2
input
num.
prog.
0 1 2
0 1 2
0 1 2



c c c
c c c
c c c



. . .
. . .


Sulla prima riga sono rappresentati tutti i valori che pu assumere la funzione ( )
(1)
0
x
c
calcolata dal
programma
0
c di numero 0 al variare di x, ovvero il programma vuoto, quindi la prima riga ha valori
tutti uguali in quanto, al variare dellinput, loutput non cambia. Invece le altre righe rappresentano i
valori che assumono le funzioni calcolate da programmi non vuoti e quindi possono essere diverse tra
loro, chiaramente anche possibile che alcuni valori possano essere uguali, il caso generale prevede que-
sta possibilit non essendo specificati i programmi che stiamo rappresentando.
In particolare per sulla diagonale principale della matrice sono rappresentate le funzioni calcolate
da programmi il cui valore di input corrisponde al numero di programma.
A questo punto, per dimostrare il teorema basta far vedere che i valori
(1)

c
relativi al programma
c visto per la precedente dimostrazione non compaiono nella matrice (la matrice rappresenta tutti i possibili
valori che possono assumere tutti i programmi che calcolano funzioni parzialmente calcolabili, quindi se in questa matrice
non compare una funzione vuol dire che questa funzione non parzialmente calcolabile, cio non pu essere calcolata). Per
assurdo avevamo assunto che ( ) HALT , x y fosse un predicato calcolabile e avevamo costruito il pro-
gramma c essendo giunti alla biiezione:
( ) ( )
(1)
HALT , x x x =
c
,

tale fatto lo possiamo scrivere anche cos:

( ) ( )
(1) (1)
x
x x x = =
c c
(per come stato definito il predicato HALT)

Ci significa (dando uninterpretazione allultima biiezione) che una riga (quella corrispondente al pro-
gramma c ) costituita da soli tutti zeri se e soltanto se la diagonale della matrice costituita da tutti
valori indeterminati, ma ci una contraddizione perch se si trovassero soltanto valori indeterminati
sulla diagonale della matrice allora, in corrispondenza della riga del programma c avremmo almeno

EDIT by Qd Calcolabilit XIX Lez.
102
un elemento della matrice che assume valore indeterminato andando in contraddizione col fatto che sul-
la riga del programma c dovremmo trovare soltanto zeri. Quindi il teorema dimostrato.

Tale metodo appena visto fa uso del concetto di diagonalizzazione (sulla diagonale della matrice i due
argomenti del predicato HALT coincidono) ed un metodo utile a dimostrare che certi insiemi non sono
ricorsivi come vedremo.

Nellambito dellinformatica si pu operare con numeri o simboli indifferentemente, tale affermazione
provata ad esempio da quanto visto fino ad ora circa la codifica dei programmi.

Lultimo teorema visto ci fa capire una cosa importante e cio che, non essendo calcolabile
( ) HALT , x y , non esiste un algoritmo che, dato un programma scritto in un linguaggio f con un da-
to input, sia in grado di determinare se tale programma si fermer
( )
o meno
( )
sullinput dato (in
altri termini possiamo dire che la codifica dei programmi non permette di risolvere problemi di ricono-
scimentoarresto).

Questultimo concetto viene chiamato: problema dellinsolvibilit dellarresto (unsolvability of the hal-
ting problem) da cui deriva un altro concetto:
TESI di Church-Touring (rif. D.S.W. pag. 69): ogni funzione parzialmente calcolabile mediante un al-
goritmo parzialmente calcolabile (da un S-programma). Ci vuol dire che si presuppone (essendo sol-
tanto una tesi congettura non dimostrata) che se non esiste un S-programma che calcola una certa
funzione, allora tale funzione non sar calcolabile da nessun metodo algoritmico.

In particolare quindi, se ( ) HALT , x y non calcolabile da un S-programma, non sar calcolabile da
nessun altro metodo algoritmico.

La suddetta una tesi in quanto molto complicato formalizzare unipotesi che definisca corretta-
mente il concetto di algoritmo, quindi, sebbene abbia valore da 70 anni e pi, potrebbe, in futuro, rive-
larsi non sempre vera, in tal caso la tesi si rivelerebbe falsa.

Alla luce di questa tesi e del teorema poco fa dimostrato si pu affermare che non affatto possibile sta-
bilire (predire) se un dato programma con un dato input si fermer o meno dopo un certo numero di pas-
si. In quanto affermarlo vuol dire che il programma prima o poi si fermer, ma se non si ferma subito ci
non vuol dire che non si fermer mai, n possiamo affermare con certezza che non si fermer mai. La cer-
tezza la possiamo avere soltanto nelleventualit che il programma termini.
Ad esempio, consideriamo una congettura (teorema non dimostrato) della teoria dei numeri secondo cui
ogni numero pari 4 la somma di due numeri primi. Tale asserzione prende il nome di congettura di
Goldbach ed chiaramente dimostrata per piccoli numeri come 4 2 2 = + , 6 3 3 = + , 8 3 5 = + , , ma
non stato dimostrato che ogni numero pari 4 somma di due numeri primi. chiaro che con facilit
possiamo costruire un S-programma che verifica la veridicit (parziale) di questa congettura, verificando
un numero pari alla volta, il programma non termina (se terminasse vorrebbe dire che stato trovato un
numero pari per cui non vale la congettura) , ma ci non basta per asserire che la congettura vera, ipote-
ticamente potrebbe darsi che prima o poi il programma termini, ma se ci non accade non possiamo af-
fermarlo con certezza matematica. In 250 anni dalla formulazione di questa congettura nessuno ha trovato
un programma o comunque un metodo che la dimostri (cosa che al contrario stata fatta, dopo secoli, circa lultimo
teorema di Fermat).


Ventesima Lezione
19/12/2006
Teorema delluniversalit programma universale
Insiemi ricorsi, non ricorsivi e primitivi ricorsivi


Per quanto visto finora si portati a pensare che non vi una strada semplice per realizzare in modo
generale problemi di calcolo sui numeri, tra poco vedremo che ci non vero (rif. D.S.W. pag. 70).

DEF.: 0 n > definiamo la seguente notazione:


( )
( )
( )
( )
1 2 1 2
, , , , , , ,
n n
n n
x x x y x x x =
c
con ( ) # y = c .

La funzione (la cui notazione allapice non deve essere confusa con quella delle funzioni , infatti
( ) n
ha 1 n +
argomenti e non n) rappresenta una sorta di interprete che prende in input i dati
1 2
, , ,
n
x x x e il numero di
programma ( ) # y = c e restituisce proprio il valore che restituirebbe la funzione (a n variabili) calcola-
ta da c , cio
( ) n

c
(che coincide con il valore della variabile Y allo snapshot terminale).

TEOREMA 3.1 (delluniversalit): 0 n > la funzione
( )
( )
1 2
, , , ,
n
n
x x x y parzialmente calcolabi-
le (cio esiste un S-programma che calcola la funzione corrispondente a
( ) n
).

DIM.: la dimostrazione viene fatta mostrando un S-programma
n
h , detto programma universale, che
calcola appunto una funzione ( )
( )
( )
( 1)
1 2 1 1 2
, , , , , , , ,
n n
n n n
n
x x x x x x x y
+
+
=
h
.

Da notare che sebbene la funzione
( 1) n
n

+
h
assuma gli stessi valori della funzione da calcolare
( ) n
y

c
con i
parametri
1 2
, , ,
n
x x x chiaro che le due funzioni sono differenti, nel senso che una svolge il compito di
calcolare, laltra invece viene calcolata ma ha un significato legato al programma c , oltretutto le due fun-
zioni hanno un numero di parametri differenti.

LS-programma
n
h , come anticipato, funger da interprete, infatti vengono letti i dati di input corri-
spondenti allS-programma c , dopodich viene letto il numero ( ) # y = c del programma c , poi
interpretate ed eseguite le varie istruzioni del programma c sui dati
1 2
, , ,
n
x x x in modo tale da ot-
tenere:
( )
( )
( ) ( )
( 1) ( )
1 2 1 1 2 1 1 2
, , , , , , , , , , ,
n n n
n n n n n
n
x x x x x x x x x x x
+
+ +
= =
h c


con ( )
1
#
n
x y
+
= = c .

Al fine di costruire il programma universale
n
h faremo abbondante uso di macro. Si ricorda che le va-
riabili ed etichette omesse corrisponderanno al valore 0 nella codifica di Gdel (ad esempio se volessimo co-
dificare lo stato: 0 Y = ,
1
2 X = ,
2
1 X = otterremmo
0 0 2 0 1 2
2
2 3 5 7 2 3 5 7 3 7 63
Y X X
= = = , il fattore
0
5 corri-
sponde al valore omesso della variabile Z che nella sequenza stabilita delle etichette delle variabili si trova tra X e
2
X ). Da
notare che le variabili di input
1 2
, , ,
n
x x x hanno tutte posizione pari.



EDIT by Qd Calcolabilit XX Lez.
104
In primis il programma universale memorizza due valori: K ed S:

K corrisponde al numero di istruzione che deve essere eseguito;

S il numero di Gdel [ ]
1 2
0, , 0, , 0 0,
n
x x x della sequenza di variabili di input (ricordando
quanto detto prima circa la posizione pari delle variabili
1 2
, , X X nella codifica numerica del pro-
gramma).

Vediamo passo passo il funzionamento di
n
h che dar come risultato finale di output la variabile:


( )
( )
1 2 1
, , ,
n
n n
Y X X X X
+
= con
1 n
X
+
chiaramente uguale a ( ) # y = c
da non confondere la y (minuscola) con Y (maiuscola)
essendo due valori con significati differenti.

Per rendere pi semplice la comprensione del programma universale faremo liberamente uso di nomi ed
etichette, senza cio rispettare in modo rigoroso le regole dettate dal linguaggio f .

Iniziamo col descrivere le prime tre righe del programma rappresentate da tre macro:


1
1 1
n
Z X
+
+ (memorizzazione numero programma);

( )
2
1
2
i
n
X
i
i
S p
=

(codifica stato);

3 1 K (memorizzazione primo passo prima istruzione);


1. In Z viene memorizzato ( ) ( ) ( )
1 2
# , # , , #
m
I I I

cio il numero di Gdel relativo alla sequen-
za di m istruzioni dellS-programma c , con ( )
1
#
n
X
+
= c ( ) ( ) ( ) [ ] ( )
1 2
# , # , , # 1
m
I I I = ;

2. In S, come gi detto, vengono codificate le variabili di input, ricordando che hanno posto pari
(ecco perch luso di
2i
p -numeri primi di posto pari), si ha dunque:

[ ]
1 2
0, , 0, , ,0,
n
S X X X =

3. Come anticipato anche per K, tale variabile rappresenta il contatore distruzione e, ovviamente,
quando il programma parte, viene inizializzato a 1.

Proseguiamo con la descrizione delle istruzioni seguenti:

[ ] ( )
( ) or
IF GOTO 4 Lt 1 0 C K Z K F = + = (controllo numero istruzione);

4. Viene effettuato un controllo sul numero di istruzione corrente, infatti ( ) Lt Z corrisponde alla
lunghezza della sequenza di istruzioni del programma c , come vedremo K verr incrementato
di una unit quando verr eseguita unistruzione di c . Quando saranno state eseguite tutte le
m istruzioni di c , K sar uguale a 1 m+ . Vedremo dopo il significato del predicato 0 K = .

EDIT by Qd Calcolabilit XX Lez.
105
Una volta eseguite tutte le istruzioni di c (o se 0 K = ), il programma
n
h salter allultima i-
struzione [ ] ( ) Final F che restituir loutput Y.
Se non sono state ancora eseguite tutte le istruzioni di c ,
n
h passa allistruzione:


( ) ( )
5
k
U r Z (decodifica istruzione corrente);

5. Inizialmente 1 K = , quindi ( ) ( )
1
#
K
Z I = cio il numero codificato della prima istruzione di
c . In generale ( )
i
Z corrisponde alli-ma istruzione di c .
Ricordiamoci che il numero di unistruzione I ( ) # , , I a b c = , quindi ( ) ( )
# , r I b c = . In c
e in b sono contenute rispettivamente le informazioni relative alleventuale variabile menzionata
nellistruzione e al tipo di istruzione (che pu essere una di queste: istruzione pigra, incremento, decremento,
salto condizionale). Essendo dunque ,
K
U b c = , U contiene informazioni sulla variabile e sulla K-
ma istruzione di c ;



( ) 1
6
r U
P p
+
(memorizzazione posizione variabile);

6. Con questa macro stiamo memorizzando in P le informazioni relative allindividuazione della
variabile su cui eseguire la K-ma istruzione, infatti ( ) r U c = , quindi ( ) 1 1 r U c + = + corrispon-
de alla posizione della variabile della K-ma istruzione. Di conseguenza
1 c
p
+
rappresenta il
( ) 1 c + mo numero primo corrispondente alla posizione della variabile codificata in S.

Ricordiamoci che ( ) 1 # c V + = non il valore della variabile V, bens la posizione nella lista
( )
1 2
Y X Z X ; inoltre rammentiamo che la seconda istruzione dellS-programma
n
h codifica i
valori delle variabili ( )
2
, , ,
n
X X X assieme alla loro posizione, ogni base ( )
2i
p della potenza di cia-
scun fattore della produttoria corrisponde alla posizione (pari) nella lista dei nomi delle variabili, mentre
allesponente menzionato il relativo valore: ( )
1 2 4 2
0
1 2
.
n
X X X X
n n
i
i n
S p p p p
+
=
= =

. Di conseguenza, co-
noscendo il ( ) 1 c + mo numero primo e il suo esponente, risaliamo rispettivamente alla posizione e al va-
lore della variabile corrispondente.


( ) IF GOTO 7 0 l U N = (analisi tipo istruzione pigra);

( ) IF GOTO 8 1 l U A = (analisi tipo istruzione incremento);

7. Ricordando che , U b c = allora ( ) l U b = che corrisponde al tipo di istruzione associato. Se
( ) 0 l U = dovr essere eseguita listruzione pigra V V , quindi, in pratica, il programma uni-
versale non deve fare nulla e passare semplicemente allistruzione successiva, ci viene gestito
dallistruzione [ ] ( ) Null N come vedremo in seguito;


EDIT by Qd Calcolabilit XX Lez.
106
8. Analogamente, per listruzione 8 si controlla il valore di b, il quale se pari a 1, vorr dire che
deve essere fatto un incremento 1 V V + e poi passare allistruzione successiva, ci viene ge-
stito dallistruzione [ ] ( ) Add A come vedremo in seguito;

Se ( ) 0,1 l U ci vuol dire che listruzione da eseguire pu essere o un decremento o un salto con-
dizionato (costrutto di selezione), per effettuare il decremento, per necessario che ci si assicuri che
la variabile da decrementare sia non nulla:


( ) IF GOTO 9 | P S N (controllo variabile nulla);

9. Se la variabile da decrementare fosse nulla avremmo
0
1
1
c
p
+
= , quindi | P S
/
e si passerebbe
allistruzione successiva di c (anche in questo caso listruzione [ ] N gestisce il passaggio
allistruzione successiva da eseguire).

Ricordiamo che P rappresenta la posizione, nella lista delle variabili, della variabile corrente sottoforma
di numero primo, mentre in S memorizzata la successione di variabili codificate (in qualche modo rap-
presenta la codifica dello stato corrente del programma c ), quindi se la variabile corrispondente alla po-
sizione rappresentata da P fosse nulla avremmo che se
k
P p = ed
( )
0
1 2 3 4
1
2
Y X Z X
k
S p p p p p
=
= , al-
lora
( )
0
1 2 3 4
1
2
|
Y X Z X
k k
p p p p p p
=

/
. chiaro che lo stato iniziale prevede la codifica delle sole varia-
bili di input
i
X , ma con lesecuzione di varie istruzioni lo stato codificato potrebbe arricchirsi di nuovi fat-
tori (corrispondenti alle variabili temporanee
i
Z e chiaramente Y ).

Anche nel caso in cui listruzione da eseguire fosse stata del tipo IF GOTO 0 V L (anzich
1 V V ) essendo nulla la variabile in questione si passerebbe comunque allistruzione succes-
siva anzich allistruzione L essendo falso il predicato 0 V .

Nel caso in cui la variabile corrente fosse non nulla allora bisognerebbe verificare se effettuare il suo
decremento o il salto condizionato:

( ) IF GOTO 10 2 l U M = (controllo istruzione di decremento);

10. se ( ) 2 l U = allora 2 b = , bisogna dunque effettuare il decremento della variabile corrente, tale
operazione viene eseguita dallistruzione [ ] ( ) Minus M che vedremo dopo;


( )
( ) ( ) ( )
Lt
11 min 2
i
i Z
K l Z l U

+ =

(salto condizionato);

GOTO 12 C (prossima istruzione)

11. Nel caso in cui ( ) 0,1,2 l U e la variabile su cui operare non nulla, bisogna effettuare il salto
condizionato passando allistruzione etichettata con L il cui valore, riferito alla posizione nella
lista delle etichette, contenuto in ( ) # 2 b L = + .


EDIT by Qd Calcolabilit XX Lez.
107
[ ]
[ ]
[ ]
[ ]
[ ]
no
GOTO
si
D
A
B
A
C A

Poich un programma potrebbe avere pi istruzioni con la stes-


sa etichetta per preservare il determiniamo ed evitare ambiguit,
si considera letichetta di ordine minore (cio quella che viene prima,
leggendo le istruzioni dallalto verso il basso, come nellesempio a destra).

Ecco perch si fa uso della funzione min. Poich K rappresenta
il valore della prossima istruzione da eseguire, di norma, al ter-
mine di ogni istruzione di c , K viene incrementato di una u-
nit, ma in questo caso particolare la prossima istruzione da ese-
guire L , quindi K deve essere aggiornato in modo da conte-
nere il valore relativo alletichetta L di ordine minore
(nelleventualit ci siano pi etichette L ). Viene quindi fatta una ricerca per trovare il numero
di istruzione che compare, nellS-programma c , per primo, corrispondente a L .
Il valore di L contenuto in ( ) l U , pi precisamente ( ) ( ) # 2 l U b L = = + . Quindi vengono
fatti dei confronti tra ( ) l U ed ( ) ( )
2
i
l Z + fintantoch i confronti danno esito negativo (ricor-
diamo che Z contiene la codifica delle istruzioni del programma c e quindi tutte le informazioni relative ad esse
e quindi anche alle eventuali etichette, ( )
i
Z corrisponde dunque al numero codificato della i-ma istruzione ed
( ) ( ) 2
i
l Z + corrisponde alleventuale (posizione) etichetta delli-ma istruzione di c ).
K assumer il pi piccolo valore di i per cui verificata luguaglianza.
Chiaramente, se il salto condizionato fa riferimento ad una etichetta inesistente, K assumer va-
lore 0.
Se L

non esiste allora 0 K = in quanto la minimalizzazione stata definita in modo tale da essere nul-
la se non viene trovato alcun valore ( ) 0 Lt i Z che soddisfa il predicato, la ricerca in verit dovrebbe
partire da 1 i = corrispondente allanalisi delletichetta della prima istruzione, ma, per come stata defini-
ta la minimalizzazione, si parte da 0 e ci non compromette la ricerca.


12. In ogni caso dopo la ricerca delletichetta (che sia stata trovata o meno) si salta di nuovo
allistruzione [ ] C che contiene il controllo 0 K = a cui si era accennato prima. Tale controllo
serve proprio a verificare che letichetta del salto condizionato esista o meno, in caso negativo il
programma universale termina e viene restituito il valore di uscita Y (istruzione [ ] F ); se invece
0 K allora si passer allesecuzione della K-ma istruzione;


[ ] 13 / M S S P


(decremento)


13. Questa la macro relativa alloperazione di decremento richiamata dallistruzione 10. Se viene
eseguita listruzione 13 vuol dire che il decremento pu essere effettuato e ci vuol dire che
| P S . Essendo i valori delle variabili memorizzati in S sottoforma di esponenti dei numeri pri-
mi, la sottrazione di una unit da una variabile V, corrisponder alla divisione di S per il numero
primo corrispondente alla posizione assunta dalla variabile, quindi se, ad esempio, S =
2 4 2
1 2
X X X V
j n
n
p p p p = , ( ) # V j = e V = , per ottenere 1 V , si ha: / S P = /
j
S p =
1
2 4 2
1 2
X X X
j n
n
p p p p

= . Anche in questo caso vale lappunto fatto prima riguardante i pedici pari dei
fattori, cio non detto che S sia costituito esclusivamente da fattori i cui pedici sono numeri pari per via
delleventuale utilizzo di variabili
i
Z o della variabile di output Y .
Quindi S verr aggiornato per contenere la variabile decrementata e si procede con:

EDIT by Qd Calcolabilit XX Lez.
108
GOTO 14 N (salto incondizionato di fine istruzione)


14. Questa istruzione sar descritta a breve;



[ ] 15 A S S P (incremento)

15. Se listruzione da eseguire lincremento della variabile corrente, se per il decremento si fatto
uso della divisione per P, in modo del tutto equivalente, secondo lo stesso principio delle pro-
priet delle potenze, viene effettuata la moltiplicazione per P di S e aggiornato il valore di S.
Quindi ad esempio, se
2 4 2
1 2
X X X V
j n
n
S p p p p = , ( ) # V j = e V = , per ottenere 1 V + , si
ha: S P =
j
S p = =
1
2 4 2
1 2
X X X
j n
n
p p p p
+
, in questo caso V pu anche essere nullo a-
vremmo quindi
2 4 2
1 2
X X X
n
n
S p p p = ed
j
S p =
2 4 2
1 2
X X X
j n
n
p p p p ;

[ ] 16 1 N K K + (aggiornamento variabile prossima istruzione)


16. Terminata loperazione di decremento o di incremento, prima di passare alla prossima istruzio-
ne di c , si aggiorna K incrementandolo di una unit in modo che
n
h sia in grado di eseguire
le istruzioni successive di c , difatti la variabile K viene utilizzata per fare i controlli (istruzione
[ ] C ) sulla K-ma istruzione (se esiste);

GOTO 17 C (salto alla gestione della prossima istruzione)


17. Conclusa listruzione e aggiornato K si ritorna allistruzione [ ] C in modo da eseguire nuova-
mente tutte le operazioni utili allesecuzione della prossima istruzione
K
I di c ;

[ ] ( )
1
18 F Y S (memorizzazione valore di output)


18. Terminate tutte le operazioni (o nel caso in cui il programma termini prematuramente per un
errore), viene memorizzato in Y il valore di output calcolato dal programma che chiaramente si
trova nella prima posizione (per convenzione) della sequenza di variabili memorizzate in S ,
quindi ( )
1
Y S . Nel caso in cui non venga fatta alcuna assegnazione a Y, tale variabile rester
nulla (sebbene magari siano state effettuate operazioni di incremento, decremento, ecc su altre variabili).


EDIT by Qd Calcolabilit XX Lez.
109
Abbiamo concluso la descrizione del programma universale che ora vediamo nel complesso, unendo
tutte le macro:


( )
[ ] ( )
( ) ( )
( )
( )
( )
( )
( )
( )
( ) ( ) ( )
[ ]
[ ]
[ ]
[ ] ( )
1
2
1
1
Lt
IF GOTO
IF GOTO
IF GOTO
IF GOTO
IF GOTO
GOTO
GOTO
GOTO
:
1
1
Lt 1 0
0
1
|
2
min 2
/
1
i
n
n
n
X
n
i
K
r U
i
i Z
i
Z X
S p
K
C K Z K F
U r Z
P p
l U N
l U A
P S N
l U M
K l Z l U
C
M S S P
N
A S S P
N K K
C
F Y S
+
=
+

= + =

=
=
=

+ =

h



chiaro che
n
h la chiave per dimostrare il teorema, infatti grazie ad esso possiamo affermare che
se scriviamo
( )
( )
( )
( )
( )
( )
1 2 1 2 1 2
, , , ,0 , , , , ,1 , , , , ,2 ,
n n n
n n n
x x x x x x x x x 0 n > (lultimo para-
metro delle funzioni corrisponde al numero di programma), indichiamo la sequenza di tutte le funzioni
parzialmente calcolabili, quindi abbiamo dimostrato il teorema. Possiamo anche scrivere:


( )
( )
( )
( )
1 2 1 2
, , , , , , ,
n n
y n n
x x x x x x y = e se 1 n = possiamo anche omettere lapice:

( ) ( )
( )
( )
1
, ,
y
x x y x y = = .


Il programma universale pu essere modificato per eseguire unaltra operazione utile e cio il conteg-
gio dei passi eseguiti dal programma c .



EDIT by Qd Calcolabilit XX Lez.
110
Da questultimo risultato si ha:
DEF. (rif. D.S.W. pag. 74): con la scrittura
( )
( )
1 2
STP , , , ,
n
n
x x x t
si definisce un predicato tale che:


( )
( )
1 2
STP , , , ,
n
n
x x x t [ Il programma di numero y si ferma in un numero
di passi m t su ingresso
1 2
, , ,
n
x x x ]
e


( )
( )
1 2
STP , , , ,
n
n
x x x t [ Vi un calcolo del programma y di lunghezza 1 l t + ,
se parte dagli input
1 2
, , ,
n
x x x ]

Quindi il predicato appena definito vero soltanto se il programma c con ( ) # y = c e con in-
gresso
1 2
, , ,
n
x x x si ferma dopo un numero finito di passi m t e allo stesso tempo se esiste un calcolo
(si ricordi la definizione di calcolo, rif. D.S.W. pag. 27 e 29) di lunghezza 1 l t + (in quanto si parte dallo stato
iniziale 1, quando non stata eseguita ancora alcuna istruzione di c , e si termina con lo stato finale
1 t + , dopo che tutte le istruzioni sono state eseguite.

I predicati appena visti (le due biiezioni), essendo conseguenza dellaggiunta dellistruzione contatore
1 W W + a
n
h , sono calcolabili. Ci non vuol dire che il problema dellarresto sia stato risolto in quanto qui ab-
biamo un limite dato dal valore t, che ci permette di affermare con certezza che un programma termina o meno entro un
numero di passi non superiore a t , ma non che un programma termina a fronte di un numero di passi non stabilito. Inoltre
il predicato non calcolabile HALT ha valore soltanto per programmi che ricevono in input un solo valore.

Segue un importante risultato:
TEOREMA 3.2 (del conta passi): 0 n > il predicato ( )
1 2
STP , , , ,
n
x x x t primitivo ricorsivo.


Insiemi ricorsivi, non ricorsivi e primitivi ricorsivi
(rif. D.S.W. pag. 78)

Si pu parlare di problemi risolvibili o non risolvibili in termini insiemistici, strettamente connessi
ai predicati, a tal proposito definiamo una particolare funzione:
DEF. (rif. D.S.W. pag. 6): Con il termine funzione caratteristica intendiamo un predicato P sullinsieme
S (dominio), se R S e risulta:

( )
se ,
se
1
0
x R
x R
P x

e abbiamo: ( ) { }
| R a R P a = .

Cio linsieme R pu essere definito mediante luso del predicato P che la funzione caratteristica
dellinsieme R (cio stabilisce se un elemento appartiene o non appartiene a R a seconda che risulti ri-
spettivamente vero o falso il predicato P).

indifferente adoperare una notazione insiemistica o mediante la funzione caratteristica.

Un esempio il seguente: ( )
se primo,
altrimenti
1
0
x
f x

=

chiaramente ( ) f x rappresenta la funzione




EDIT by Qd Calcolabilit XX Lez.
111
caratteristica dellinsieme dei numeri primi: ( ) { }
| p f p N e risulta anche ( ) ( ) Primo f x x = .

Altro esempio ( ) HALT , x y il quale pu essere visto come la funzione caratteristica dellinsieme:

( ) ( ) { }
2
, | HALT , x y x y N

che rappresenta linsieme di tutte le coppie ordinate ( ) , x y tali che lS-programma di numero y si ferma
sullingresso x.

Pi in generale abbiamo:
DEF.: Dire che un insieme
m
B N :

non calcolabile (non ricorsivo) oppure
calcolabile (ricorsivo) oppure
primitivo ricorsivo

(si sta stabilendo cio che B appartiene ad una certa classe di funzioni calcolabili o non calcolabili o pri-
mitive ricorsive)

vuol dire che la funzione caratteristica ( )
1 2
, , ,
m
P x x x di B rispettivamente:

non calcolabile
calcolabile
primitiva ricorsiva


Quindi il problema di sapere se una funzione calcolabile o meno (e se primitiva ricorsiva o me-
no) si riconduce al problema di sapere se la relativa funzione caratteristica calcolabile o meno (e se
primitiva ricorsiva o meno). Analogamente possiamo dire che se esiste lS-programma che computa la
funzione caratteristica allora esiste lS-programma che computa la funzione data (generatrice).


Ventesima Prima Lezione
21/12/2006
Teorema della forma normale
Minimalizzazione propria
Insiemi ricorsivamente enumerabili e relativi teoremi


Forniamo ora dei concetti (indispensabili a dimostrare il teorema della forma normale che vedremo
a breve) secondo cui possibile effettuare la codifica dello stato di un programma (rif. D.S.W. pag. 74-
75), indichiamo quindi con z lo stato codificato ad un certo istante del programma, quindi s =
[ ]
2
, , , , Y X Z X
1 2 3 4
2
Y X Z X
p p p p = . Quindi possiamo affermare che anche unistantanea ( ) , i
pu essere codificata (mediante le funzioni di accoppiamento), se ( ) # s = allora ( ) ( )
# , , i i s x = =
e, poich questultimo un numero che codifica unistantanea, da esso possiamo ricavare il suo succes-
sore (solo un accenno) che definiamo come segue:

DEF.: ( ) SUCC , , x y i s = con , i s numero dellistantanea successore di ( ) , i e
y numero del programma, x la codifica dello stato .

Si pu dimostrare che tale funzione primitiva ricorsiva.

DEF.:
( )
( ) ( )
1 2 2
1
INIT , , , 1,
n
n i
i
n
x
i
x x x p
=
=

questa rappresenta listantanea iniziale
del programma.

Per la quale le variabili Y, Z,
2
, 0 Z = , quindi si considerano solo i numeri primi di posto pari corri-
spondenti alle variabili di input
i
X .

Anche in questo caso la funzione primitiva ricorsiva.

Ora, mediante luso delle funzioni appena definite, possiamo definire una funzione che a partire
dalle variabili di input
1 2
, , ,
n
x x x , dal numero di programma y e da un indice i, pu risalire allo snap-
shot codificato alli-mo passo del programma:
DEF.: Ricorsivamente diamo la seguente definizione:

passo base:
( )
( )
( )
( )
1 2 1 2
SNAP , , , , ,0 INIT , , ,
n n
n n
x x x y x x x = ,
passo ricorsivo:
( )
( )
( )
( )
( )
1 2 1 2
SNAP , , , , , 1 SUCC SNAP , , , , , ,
n n
n n
x x x y i x x x y i y + = .

Essa rappresenta la funzione che restituisce lo snapshot codificato dopo lesecuzione di un certo numero
di istruzioni (ultimo argomento i della funzione).

Eruditi delle nozioni appena argomentate passiamo al seguente:
TEOREMA 3.3 (della forma normale rif. D.S.W. pag. 75-76): Sia ( )
1 2
, , ,
n
f x x x una funzione par-
zialmente calcolabile. Allora vi un predicato primitivo ricorsivo ( )
1 2
, , , ,
n
R x x x y tale che:

( ) ( )
( ) 1 2 1 2
, , , min , , , ,
n n
z
f x x x l R x x x z = .

EDIT by Qd Calcolabilit XXI Lez.
113
DIM.: Possiamo affermare che esiste un numero
0
y di un programma che calcola ( )
1 2
, , ,
n
f x x x , in-
fatti per ipotesi ( )
1 2
, , ,
n
f x x x parzialmente calcolabile. Dobbiamo dimostrare che vale luguaglianza
( ) ( )
( ) 1 2 1 2
, , , min , , , ,
n n
z
f x x x l R x x x z = e che ( )
1 2
, , , ,
n
R x x x y un predicato primitivo ricorsivo.
Il predicato seguente utile a dimostrare il teorema:

( )
( )
( ) ( ) ( )
( )
( ) ( ) ( ) ( )
( )
( )
1 2 0
1 2
1 2 0
1
STP , , , , , &
, , , ,
SNAP , , , , ,
n
n
n
n
n
x x x y r z
R x x x z
r x x x y r z l z



che chiaramente un predicato primitivo ricorsivo. Cerchiamo di interpretarlo.
Il predicato ( )
1 2
, , , ,
n
R x x x z vero se e soltanto se sono entrambi veri i due predicati:

a.
( )
( ) ( )
1 2 0
STP , , , , ,
n
n
x x x y r z e
b.
( )
( ) ( ) ( ) ( )
( )
1 2 0
1
SNAP , , , , ,
n
n
r x x x y r z l z =

a. vero quando il programma di numero
0
y si ferma dopo al pi ( ) r z passi (il valore di z deve essere
interpretato come il valore , , quindi ( ) l z = corrispondente ad un numero che identifica il valore di usci-
ta del programma, mentre ( ) z r = rappresenta un valore corrispondente al numero di passi effettuati dal pro-
gramma);

b. spezzettiamo il predicato e interpretiamo le varie parti:

( )
( ) ( )
1 2 0
SNAP , , , , ,
n
n
x x x y r z rappresenta la codifica dello snapshot del programma di nume-
ro
0
y al passo ( ) r z e per come stata definita la funzione SNAP, sar uguale ad un numero del
tipo , i k , con i indice dellistruzione e k pari al numero codificato dello stato prima
dellesecuzione della i-ma istruzione ( [ ]
2
, , , , k Y X Z X = -non propriamente corretto utilizzare i
nomi delle variabili per indicare la codifica dei valori che essi contengono, ma per comodit e per una maggiore
comprensione utilizziamo questa notazione). Dunque risulta:


( )
( ) ( ) ( )
1 2 0
SNAP , , , , ,
n
n
r x x x y r z k =
e anche:

( )
( ) ( ) ( ) ( )
( )
1 2 0
1
1
SNAP , , , , ,
n
n
r x x x y r z k = e cio il valore della variabile Y.

Di conseguenza il predicato b vero quando ( ) Y l z = , e quindi quando risulta: ( ) l z =
( )
1 2
, , ,
n
f x x x = .

Dunque il predicato ( )
1 2
, , , ,
n
R x x x z vero se e soltanto se z assume un valore tale che il pro-
gramma di numero
0
y si ferma dopo al pi ( ) r z passi e se il valore della variabile Y (relativo allo snap-
shot finale) uguale a ( ) l z .


EDIT by Qd Calcolabilit XXI Lez.
114
Ritornando alla tesi del teorema la scrittura ( ) ( )
1 2
min , , , ,
n
z
R x x x z rappresenta il valore minimo
che deve assumere z affinch il predicato R sia vero e ci avviene nel momento in cui z assume un valore
, tale che il programma di numero
0
y si ferma dopo al pi passi e restituisce il valore
Y = ( )
1 2
, , ,
n
f x x x = . Quindi chiaro che ( ) ( ) ( )
( ) 1 2 1 2
, , , min , , , ,
n n
z
f x x x l R x x x z = .

Essendo per ipotesi f parzialmente calcolabile possibile che per certi valori di input la funzione re-
stituisca un valore indeterminato e che quindi non si fermi, dobbiamo assicurarci che luguaglianza
( ) ( ) ( )
( ) 1 2 1 2
, , , min , , , ,
n n
z
f x x x l R x x x z = valga anche in questo caso particolare, avendo usato una
minimalizzazione non limitata, essendo il predicato R mai vero (non si ferma), otterremo un valore in-
determinato anche per ( ) ( )
( ) 1 2
min , , , ,
n
z
l R x x x z .
Abbiamo dunque dimostrato che luguaglianza vale e che i predicati usati sono primitivi ricorsivi, il
teorema dunque dimostrato.

Grazie al teorema appena dimostrato abbiamo dato una caratterizzazione per le funzioni parzial-
mente calcolabili che non pi legata agli S-programmi (non un caso che questo teorema abbia delle analogie
molto forti con il teorema di Kleene visto per i linguaggi regolari).

Il teorema della forma normale ci utile per dimostrare il seguente:
TEOREMA 3.4: Una funzione parzialmente calcolabile se e solo se si pu ottenere a partire dal-
le funzioni iniziali applicando un numero finito di volte la composizione, la ricorsione (primitiva) e la
minimalizzazione (questultima viene applicata solo una volta).

DIM. : Dobbiamo dimostrare che se una funzione si pu ottenere dalla funzioni iniziali applicando
un numero finito di volte la composizione, la ricorsione e la minimalizzazione allora tale funzione par-
zialmente calcolabile. I teoremi 1.1, 2.1, 2.2, 3.1 e 7.2 (risp. rif. D.S.W. pagg. 39,40,41,42,58) dimostrano che se
una funzione ottenuta mediante lapplicazione di un numero finito di volte, a partire dalla funzioni
iniziali (teor. 3.1), la composizione (teor. 1.1), la ricorsione (teor. 2.1 e 2.2), la minimalizzazione (teor. 7.2) allora
tale funzione parzialmente calcolabile. Quindi la prima parte del teorema dimostrata.

DIM. : Ora dobbiamo dimostrare che se una funzione parzialmente calcolabile allora essa si pu
ottenere a partire dalle funzioni iniziali applicando un numero finito di volte la composizione, la ricor-
sione e la minimalizzazione e lo facciamo adoperando il teorema della forma normale. Difatti il teorema
della forma normale ci permette di esprimere qualsiasi funzione parzialmente calcolabile f come segue:

( ) ( )
1 2 1 2
, , , min , , , ,
n n
y
f x x x l R x x x y

=


con R predicato primitivo ricorsivo
(per la tesi del teorema della forma normale)

Tale funzione chiaramente ottenuta da un numero finito di operazioni di composizione, ricorsione e
minimalizzazione. In particolare si fatto uso di una sola minimalizzazione e della composizione con la
funzione primitiva ricorsiva l (essendo primitiva ricorsiva ottenibile da funzioni iniziali).

Il teorema dunque dimostrato.


EDIT by Qd Calcolabilit XXI Lez.
115
DEF. (rif. D.S.W. pag. 77): Quando ( )
1 2
min , , , ,
n y
R x x x y una funzione totale (cio quando
1 2
, , ,
n
x x x vi almeno un valore di y per cui il predicato ( )
1 2
, , , ,
n
R x x x y vero) si dice che ab-
biamo applicato loperazione di minimalizzazione propria (o regolare) su R.
Quindi ( )
1 2
min , , , ,
n
y
l R x x x y



totale se lo anche ( )
1 2
min , , , ,
n
y
R x x x y da cui abbiamo
il seguente:
TEOREMA 3.5: Una funzione calcolabile se e solo se pu essere ottenuta dalle funzioni iniziali
mediante un numero finito di operazioni di composizione, ricorsione e minimalizzazione propria.

DIM.: La dimostrazione deriva direttamente dal teorema precedente e dalla definizione di minimalizza-
zione propria.


Insiemi Ricorsivamente Enumerabili
(rif. D.S.W. pag. 78)

Ricordiamo che un insieme si dice:

primitivo ricorsivo se la sua funzione caratteristica primitiva ricorsiva

ricorsivo (calcolabile) se la sua funzione caratteristica calcolabile.


DEF.: Un insieme B N si dice ricorsivamente enumerabile (r.e.) se esiste una funzione parzialmen-
te calcolabile unaria ( ) g x tale che: ( ) { }
| B x g x = N .
Quindi B linsieme di tutti quei valori per cui la funzione unaria (se esiste) ( ) g x definita. In altri
termini B r.e. se coincide con il dominio di definizione di una funzione parzialmente calcolabile
( ) g x . Se c un programma che calcola la funzione ( ) g x allora B linsieme di tutti gli input su
c per cui alla fine c si ferma. Da questultima osservazione andiamo ad analizzare i cosiddetti pro-
blemi di semidecisione o di semiriconoscimento secondo cui si pu realizzare un programma per stabilire
se un dato valore x fa arrestare il programma, da cui x B (con B r.e.), ma se volessi stabilire se x B
(con B r.e.) ci non possibile in quanto impossibile prevedere se un programma terminer o meno.

Ricorrendo alla tesi di Church ci potrebbero essere algoritmi generali per stabilire se x appartiene o me-
no ad un insieme r.e. B purch tali algoritmi non siano (necessariamente) scritti nel linguaggio f degli
S-programmi (perch per dimostrare la tesi bisogna generalizzare il problema e non specializzarlo al solo
linguaggio f ). Tali algoritmi vengono chiamati: procedure di semidecisione.

TEOREMA 4.3: Se un insieme B ricorsivo allora B anche r.e.

Il contrario come vedremo (Teorema 4.7) non vale.

DIM.: Per ipotesi abbiamo che (ad esempio) ( )
B
f x la funzione caratteristica di B ed ricorsiva (cio
calcolabile), ci vuol dire che il predicato x B calcolabile.



EDIT by Qd Calcolabilit XXI Lez.
116
Quindi possiamo costruire un programma c che calcola la funzione (ad esempio) ( ) h x :

[ ] ( ) IF GOTO 0
B
A f X A = o anche: [ ] ( ) IF GOTO A X B A .

Ci ci assicura che se linput un elemento dellinsieme B, per come stato costruito, il programma
termina ( ( ) h x ) altrimenti entra in un loop infinito ( ( ) h x =), abbiamo dunque:

( ) { }
| B x h x = N quindi il teorema dimostrato.

Il passaggio da notazione insiemistica a proposizionale ci permette di dimostrare i seguenti teoremi:

TEOREMA 4.1 (rif. D.S.W. pag. 79): Se B e C sono insiemi appartenenti ad una classe PRC V (cio se
possono essere espressi mediante funzioni caratteristiche appartenenti a V ) allora vi appartengono an-
che:
B C , B C e B (complemento di B).

DIM.: La dimostrazione unimmediata conseguenza del teorema 5.1 (rif. D.S.W. pag. 49 - P Q , & P Q e
P ) la cui tesi ci permette di esprimere mediante predicati i tre insiemi B C , B C e B .

Nellambito delle funzioni [ ]
1 2
, , ,
m
x x x e ( )
i
x della numerazione di Gdel possiamo porre la nostra
attenzione a sottoinsiemi di
m
N , abbiamo:
TEOREMA 4.2: Posto V classe PRC e
m
B N con 1 m . Allora B V se e solo se B V con
[ ] ( ) { }
1 2 1 2
, , , | , , ,
m m
B x x x x x x B = N (chiaramente B

N ).

DIM. : Dobbiamo dimostrare che se B V allora B V , dunque se ( )
1 2
, , ,
B m
P x x x la funzio-
ne caratteristica di B (per ipotesi B V quindi ( )
1 2
, , ,
B m
P x x x primitivo ricorsivo per il Teorema della forma nor-
male) possiamo costruire la funzione caratteristica di B cos:

( ) ( ) ( ) ( ) ( ) ( )
1 2
, , , &Lt & 0
B
m B
P x P x x x x m x

>

Ci vuol dire che la funzione caratteristica di B vale 1 se e soltanto se x un naturale tale che la m-pla
( ) ( ) ( ) ( )
1 2
, , ,
m
x x x B , se la lunghezza della sequenza codificata in x non maggiore di m e chiara-
mente se [ ]
1 2
, , , 0
m
x x x x = > (per come stata definita la numerazione di Gdel). Poich ( )
B
P x

primitiva
ricorsiva B V .

DIM. : Vogliamo ora dimostrare che se B V allora BV . Se indichiamo con ( )
B
P x

la funzio-
ne caratteristica di B allora possiamo scrivere:

( ) [ ] ( )
1 2 1 2
, , , , , ,
B m m B
P x x x P x x x



Cio la m-pla ( )
1 2
, , ,
m
x x x B se e soltanto se [ ]
1 2
, , ,
m
x x x x B = , poich abbiamo espresso la
funzione caratteristica di B mediante il predicato [ ] ( )
1 2
, , ,
m B
P x x x

che primitivo ricorsivo, B V .





EDIT by Qd Calcolabilit XXI Lez.
117
Conseguenza importante del teorema appena dimostrato che linsieme:

[ ] ( ) { }
, | HALT , x y x y N non calcolabile poich non lo la relativa funzione
caratteristica e cio ( ) HALT , x y .


TEOREMA 4.4: Linsieme B ricorsivo se e solo se B e B sono entrambi r.e.

DIM. : Se B ricorsivo, allora dal teorema 4.1, lo anche B e dal teorema 4.3 ricaviamo che, poich
B e B sono ricorsivi allora B e B sono anche r.e.

DIM. : Se B e B sono entrambi r.e. dobbiamo provare che B ricorsivo, a tal fine possiamo scrivere:

( ) { }
| B x g x = N e ( ) { }
| B x h x = N (con ( ) g x e ( ) h x parzialmente
calcolabili per la definizione di insiemi r.e.)

Supponendo che ( ) g x venga calcolata dal programma c ed ( ) h x dal programma d , posto
( ) # p = c e ( ) # q = d . Allora possiamo scrivere un programma che calcola linsieme B, cio che cal-
cola la funzione caratteristica di B (tale metodo prende il nome di incastro (dovetailing) di due algoritmi
adoperando il teorema 3.2 del contapassi secondo cui la funzione STP primitiva ricorsiva):


Se il programma c di numero p si ferma su ingresso X dopo al pi T
passi, il programma a sinistra rappresentato restituisce 1 (istruzione
[ ] C ), ci vuol dire che X B , essendo B linsieme costituito dai natu-
rali tali che la funzione ( ) g x calcolata da c sia determinata ( ).
Se invece il programma p non si ferma dopo al pi T passi, ci potreb-
be corrispondere al fatto che X B , per verificare ci si esegue il predi-
cato STP sul programma d , in caso negativo si incrementa T e si ripe-
tono i controlli sul programma c sempre su ingresso X ma in base ad
un numero di passi maggiore ( 1 T + ), in caso positivo si traduce questa cosa in X B e si esce dal programma descritto a
sinistra, il quale ritorna 0 (ricordiamo che STP un predicato calcolabile).

Il programma descritto di fatto una funzione caratteristica per B che ricorsiva, quindi B ricorsivo.

TEOREMA 4.5: Se B e C sono insiemi r.e. allora lo sono anche B C e B C .

DIM. : Posto ( ) { }
| B x g x = N e ( ) { }
| C x h x = N
(chiaramente g e h sono parzialmente calcolabili)

Sia ( ) f x la funzione calcolata dal programma:


( )
( )
Y g X
Y h X

in pratica il programma termina soltanto quando sia ( ) g x che ( ) h x


terminano, possiamo affermare quindi che:

[ ]
( )
( )
( )
( )
[ ]
1
1
IF GOTO
IF GOTO
GOTO
STP , ,
STP , ,
1
1
A X p T C
X q T E
T T
A
C Y
+


EDIT by Qd Calcolabilit XXI Lez.
118
( ) { }
| B C x f x = N che rappresenta la definizione di insieme r.e. essendo ( ) f x par-
zialmente calcolabile.

DIM. : Per ottenere la dimostrazione ci serviamo nuovamente dellalgoritmo dincastro. Posto di
nuovo ( ) { }
| B x g x = N e ( ) { }
| C x h x = N , posto ( ) # p = c e ( ) # q = d i numeri dei pro-
grammi che calcolano rispettivamente ( ) g x e ( ) h x , consideriamo ora la funzione ( ) k x calcolata dal
seguente programma:

Il programma simile a quello visto prima per in questo ca-
so possiamo affermare che ( ) k x soltanto quando almeno
uno dei due programmi p o q termina su ingresso X dopo al
pi T passi, di conseguenza possiamo concludere che:

( ) { }
| B C x k x = N . Il teorema dunque dimostrato.


DEF.: Con il simbolo
n
W indichiamo linsieme:

( ) { }
| ,
n
W x x n = N ( ( ) { } | x g x = N con ( ) g x parzialmente calcolabile
dal programma c e ( ) # n = c )

Ne segue:
TEOREMA 4.6 (dellenumerazione): Un insieme B r.e. se e solo se esiste un n tale che
n
B W = .

DIM.: unimmediata conseguenza della definizione data per ( ) , x n .

Si ha infatti ( ) { } ( ) { } | | ,
n
B W B x g x x x n = = = N N con ( ) g x parzialmente cal-
colabile dal programma c e ( ) # n = c .

Il teorema deve il suo nome al fatto che la sequenza
0 1 2
, , , W W W rappresenta una enumerazione di
tutti gli insiemi r.e., scandisce cio tali insiemi in base al numero di programma ( ( ) # = c 0, 1, 2,).

DEF.: Con K indichiamo il seguente insieme:

{ } |
n
K n n W = N ( ( ) { } | , n n n = N con ( ) # n = c )


Esso rappresenta linsieme di tutti i naturali per cui i programmi di numero n si fermano su ingresso n,
tale insieme pu essere identificato tra gli elementi della diagonale della matrice delle funzioni unarie
( ) 1
vista prima:





[ ]
( )
( )
( )
( )
1
1
IF GOTO
IF GOTO
GOTO
STP , ,
STP , ,
1
A X p T E
X q T E
T T
A
+

EDIT by Qd Calcolabilit XXI Lez.
119



Non detto per che tutti i numeri corrispondenti ai
programmi che calcolano le funzioni sulla diagonale sia-
no tutti appartenenti allinsieme K, in quanto alcuni e-
lementi sulla diagonale potrebbero assumere valori inde-
terminati .









Da quanto visto possiamo affermare che:

( ) ( ) , HALT ,
n
n W n n n n .

Allora K rappresenta linsieme di tutti gli interi n tali che il programma di numero n si ferma su in-
gresso n, da cui abbiamo:

TEOREMA 4.7: K un insieme r.e. ma non ricorsivo.

DIM.: Per assurdo supponiamo che K sia ricorsivo, quindi, per il Teorema 4.4, abbiamo che sia K che
K sono r.e. Sappiamo per certo che K r.e. infatti, essendo ( ) { }
| , K n n n = N , ( ) , n n per il
Teorema 3.1 delluniversalit certamente parzialmente calcolabile, quindi la scrittura
( ) { }
| , K n n n = N rispecchia la definizione di insieme r.e.
Ora, se anche K fosse r.e., per il Teorema 4.6 dellenumerazione, si avrebbe
i
K W = per qualche i. Da
ci conseguirebbe che
i
i W i K (se
i
i W allora i K e viceversa, essendo uguali), ma si ha anche che
(per definzione { } |
n
K n n W = N )
i
i K i W (nel caso in cui i n = , cio effettuando la diagonalizzazione),
da cui si avrebbe i K i K , ma ci assurdo ( K il complemento di K quindi i K i K ). Quindi
linsieme K r.e. ma non ricorsivo e inoltre si apprende che K non r.e.

A tale conclusione si pu giungere anche mostrando che, poich ( ) { } | HALT , K n n n = N , HALT
rappresenta la funzione caratteristica che definisce K, essendo ( ) HALT , x y (in particolare
( ) HALT , x x ) un predicato non calcolabile, allora K non calcolabile (cio non ricorsivo, per definizio-
ne un insieme si dice non calcolabile o non ricorsivo se la sua funzione caratteristica non calcolabile).


( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( )
(1) (1) (1)
(1) (1) (1)
(1) (1) (1)
0 0 0
1 1 1
2 2 2
input
num.
prog.
0 1 2
0 1 2
0 1 2



. . .
. . .
c c c
c c c
c c c
Esercitazione di fine Corrso
9/01/2007


Esercizio 1 (rif. D.S.W. pag. 28, ex.1): Sia c il programma (b) (rif.
D.S.W. pag. 19), scrivere un calcolo di c iniziando dallo snapshot
( ) 1, con { } 2, 0, 0 X Y Z = = = = .

Abbiamo la sequenza:

( )
1
1, s = ; { } ( )
2
4, 2, 0, 0 s X Y Z = = = = ;
{ } ( )
3
5, 1, 0, 0 s X Y Z = = = = ; { } ( )
4
6, 1, 1, 0 s X Y Z = = = = ;
{ } ( )
5
7, 1, 1, 1 s X Y Z = = = = ; { } ( )
6
1, 1, 1, 1 s X Y Z = = = = ;
{ } ( )
7
4, 1, 1, 1 s X Y Z = = = = ; { } ( )
8
5, 0, 1, 1 s X Y Z = = = = ;
{ } ( )
9
6, 0, 2, 1 s X Y Z = = = = ; { } ( )
10
7, 0, 2, 2 s X Y Z = = = = ;
{ } ( )
11
1, 0, 2, 2 s X Y Z = = = = ; { } ( )
12
2, 0, 2, 2 s X Y Z = = = = ;
{ } ( )
13
3, 0, 2, 3 s X Y Z = = = = ; { } ( )
14
8, 0, 2, 3 s X Y Z = = = =

14
s listantanea terminale.

Esercizio 2 (rif. D.S.W. pag. 28, ex.2): Creare un programma c tale che per ogni calcolo
1 2
, , ,
k
s s s di
c con ( )
1
1, s = risulta 5 k = .

Possiamo scrivere il seguente programma che soddisfa la traccia dellesercizio:



Qualsiasi sia linput vi sar sempre un calcolo per cui
5 k
s s = .




Esercizio 3 (rif. D.S.W. pag. 31, ex.1): Sia c il seguente programma:





calcolare
( )
( )
1
x
c
.

Sia 0 X r = : poich 0 X si salta allistruzione etichettata con A (la prima), quindi 1 X r = + ;
allistruzione successiva risulta ancora 0 X , quindi si salta allistruzione A (sempre la prima) e
2 X r = + , si capisce bene che questo meccanismo non avr mai termine, quindi in questo caso la fun-
zione calcolata dal programma assume valore indeterminato.

[ ]
[ ]
1 IF 0 GOTO
2
3 IF GOTO
4
5
6
7 IF GOTO
8
1
0
1
1
1
0
X A B
Z Z
Z E
B X X
Y Y
Z Z
Z A


+
+

1
2
3
4
5
1
1
1
1
X X
X X
X X
X X
+

+

[ ]
[ ]
IF GOTO
IF GOTO
0
1
0
1
X A
A X X
X A
A Y Y

+

EDIT by Qd Esercitazione
121
Mentre, se 0 X = , dalla prima istruzione si passa alla seconda, quindi 1 X = , alla terza istruzione risul-
ta X non nulla quindi si salta allistruzione etichettata con A (sempre la prima); si deduce che anche in
questo caso la funzione calcolata dal programma non assumer mai valori determinati, si ha dunque:

( )
( )
1
x x =
c
N .

Esercizio 4 (rif. D.S.W. pag. 36, ex.5): Sia ( ) P x un predicato calcolabile. Dimostrare che la seguente
funzione parzialmente calcolabile:

( )
( )
1 2 1 2
1 2
se
altrimenti

,
x x P x x
f x x
+ +



(il comportamento di P non ci interessa, cio non ci interessa sapere per quali valori sar vero o falso).

Essendo ( ) P x calcolabile per ipotesi possiamo adoperarlo allinterno di un S-programma che calco-
li ( )
1 2
, f x x :

Chiaramente tale programma calcola la funzione ( )
1 2
, f x x , quindi
possiamo affermare che essa parzialmente calcolabile, avendo esibi-
to un S-programma che la calcola.


Esercizio 5 (rif. D.S.W. pag. 36, ex.6): Sia ( ) P x un predicato calcolabile. Dimostrare che la funzione se-
guente parzialmente calcolabile:

( )
( ) se vi sono almeno numeri tali che
altrimenti
1 1
P
r n P n
EX r
=

.

In pratica ( ) 1
P
EX r = se r il numero minimo di predicati ( ) P n
veri (se ad esempio ( ) 0 1 P = , ( ) 1 1 P = , ( ) 2 0 P = , ( ) 3 1 P = , ( ) 0 P k = 4 k
allora risulter: ( ) 0 1
P
EX = , ( ) 1 1
P
EX = , ( ) 2 1
P
EX = , ( ) 3 1
P
EX = , ( ) 4
P
EX = ,
( ) 5
P
EX = , in quanto il predicato P vero soltanto per 3 valori di x). Si deve
dunque realizzare un programma che verifichi che ( ) P x sia vero alme-
no r volte e quindi che restituisca come output il valore 1, in caso con-
trario deve entrare in un loop infinito, il programma a destra calcola
( )
P
EX r .
Se avessimo voluto dimostrare invece che ( )
P
EX r era primitiva ricorsiva
non era sufficiente esibire un S-programma che la calcolasse, ma avremmo
dovuto esprimere la funzione utilizzando le funzioni iniziali adoperando un
numero finito di volte composizione di funzioni e ricorsione primitiva.

Esercizio 6 (rif. D.S.W. pag. 43, ex.2): Dimostrare che la classe di tutte le funzioni totali una classe PRC.

Sappiamo che una qualsiasi classe PRC costituita da funzioni totali. Le funzioni ottenibili dallo schema
di ricorsione e composizione di funzioni appartenenti ad una classe PRC sono ancora totali, infatti la
classe PRC chiusa rispetto alla ricorsione e composizione. Quindi possiamo affermare che la classe delle
funzioni totali PRC.

[ ] ( )
1 2
IF GOTO
Z X X
A P Z A
Y Z
+

[ ] ( )
[ ]
[ ]
IF GOTO
IF GOTO
GOTO
IF GOTO
0
1
1
1
0
1
X C
A P Z B
Z Z
A
B X X
Z Z
X A
C Y
=
+

+


EDIT by Qd Esercitazione
122
Esercizio 7: Dimostrare che la classe di tutte le funzioni totali unarie non enumerabile.

Si pu dimostrare esibendo una funzione che non appartiene alla enumerazione, possiamo adoperare il
metodo della diagonale. Supponiamo per assurdo che tale classe sia enumerabile, avremo: ( )
0
f x ,
( )
1
f x , ( )
2
f x , , ( )
n
f x , x N. Ora definiamo la funzione ( ) ( ) 1
x
g x f x = + la quale chia-
ramente una funzione totale, quindi deve trovarsi nella enumerazione, cio deve esiste un indice k tale
che ( ) ( )
k
g x f x = . Ma se scegliamo un valore di x uguale proprio a k (diagonalizzazione) avremo:

( ) ( ) ( ) 1
k k
f k g k f k = = +

Che chiaramente impossibile, quindi la classe non enumerabile.

Esercizio 8 (rif. D.S.W. pag. 47, ex.2): Dimostrare che k N la funzione ( ) f x k = primitiva ricorsi-
va.

Bisogna esprimere la funzione adoperando composizione e ricorsione applicate alle funzioni iniziali un
numero finito di volte, si ha quindi:
( ) ( ) ( ) ( ) ( )
f x s s s s n x =

La funzione successore s deve essere applicata k volte e la funzione nulla n una sola volta, abbiamo quin-
di una funzione primitiva ricorsiva.

Esercizio 9 (rif. D.S.W. pag. 54, ex.1): Dimostrare che la seguente funzione primitiva ricorsiva:

( )
se un quadrato perfetto
altrimenti
2
2 1
x x
g x
x

=

+



Per dimostrare che la funzione primitiva ricorsiva dobbiamo sostituire allipotesi se x un quadrato per-
fetto un predicato primitivo ricorsivo come il seguente:

( ) ( ) ( )
2
,
x
P x y y x y

=

Non difficile dimostrare che le due funzioni ( ) 2 f x x = e ( ) 2 1 h x x = + sono primitive ricorsive,
quindi possiamo riscrivere ( ) g x cos:
( )
( ) ( )
( )
se
altrimenti
, f x P x y
g x
h x



La quale risulta primitiva ricorsiva (rif. teorema 5.4, definizione per casi D.S.W. pag. 50).

Esercizio 10 (rif. D.S.W. pag. 58, ex.5): Sia ( ) , R x t un predicato primitivo ricorsivo e

( ) ( ) , max ,
t y
g x y R x t

=

cio ( ) , g x y il pi grande valore t y per cui ( ) , R x t vero, in caso contrario (cio se non c alcun va-
lore per cui il predicato vero) allora ( ) , 0 g x y = , vogliamo dimostrare che tale funzione primitiva ricorsi-
va.


EDIT by Qd Esercitazione
123
Possiamo esprimere la funzione ( ) , g x y come segue:

( ) ( ) ( ) ( )
{ }
, min , ,
u y t y
g x y R x t R x u u t

= >



Non avendo a disposizione una funzione primitiva ricorsiva max, si simula il suo comportamento assi-
curando che il massimo valore per cui vero il predicato ( ) , R x t equivale al minimo, ma aggiungendo
anche la clausola che non deve esistere alcun valore maggiore di t che rende vero il predicato

Esercizio 11 (rif. D.S.W. 77, ex.1): Sia ( )
u
x la funzione universale che calcola il programma di nume-
ro u. Si deve dimostrare che per ogni u esistono infiniti numeri v per cui ( ) ( )
u v
x x = x N.

Possiamo costruire, a partire dal programma c di numero u con n istruzioni, il nuovo programma
i
c di numero v, di 1 n + istruzioni, aggiungendo al programma c dopo la sua ultima istruzione
listruzione pigra:
i i
Z Z (se avessimo aggiunto come ultima istruzione Y Y allora u v = - rif. D.S.W. pag. 67).
chiaro che ( ) ( ) # #
i
c c #, ma i due programmi calcolano la stessa funzione. Tale metodo pu es-
sere applicato un numero infinito di volte fornendo infiniti valori di v che soddisfano sempre
luguaglianza: ( ) ( )
u v
x x = . Ci ci fa capire che se esiste un programma per una funzione parzialmente calcolabile
allora ne esistono infiniti che calcolano la stessa funzione (analogamente a quanto accade per gli automi).

Esercizio 12 (rif. D.S.W. 85, ex.7-a): Siano A e B due insiemi. Provare o confutare che:

se A B r.e. A e B sono entrambi r.e.

Limplicazione falsa, il controesempio dato dallinsieme N che r.e. e pu essere visto come
lunione di K e K , sappiamo che K r.e. ma non K .

Esercizio 13 (sulle grammatiche C.F. - rif. D.S.W. 287, ex.1-a): Esibire una grammatica C.F. che genera il se-
guente linguaggio:
( )
[ ] [ ]
{ }
| 0
j i
L a b j i = > .

La grammatica C.F. ha le seguenti produzioni: | | S ab aSb aS e chiaramente genera il linguaggio
suindicato.









N.B.: Questi erano solo alcuni dei tanti (e differenti) esercizi che esistono circa gli argomenti visti, vivamente consigliato,
al fine di superare lesame di svolgere un numero consistente di esercizi, prendendo spunto dal libro di testo e dalle indica-
zioni dei Professori, nonch ovviamente partire da una buona conoscenza dei concetti teorici, senza i quali sarebbe molto
difficile risolvere gli esercizi, soprattutto quelli sulla calcolabilit.

In bocca al lupo a Tutti Qd.