eserciziario per il corso di - the computer science … questa dispensa di esercizi svolti, parte...

86
Eserciziario per il corso di Verona, Settembre 2004 Fondamenti dell’Informatica: Linguaggi Formali e Calcolabilit` a Dott.ssa Isabella Mastroeni Dipartimento di Informatica Universit` a degli Studi di Verona Strada Le Grazie 15 37134 Verona, Italy [email protected] 1

Upload: hoangdung

Post on 18-Feb-2019

225 views

Category:

Documents


0 download

TRANSCRIPT

Eserciziario per il corso di

Verona, Settembre 2004

Fondamenti dell’Informatica:Linguaggi Formali e Calcolabilita

Dott.ssa Isabella Mastroeni

Dipartimento di InformaticaUniversita degli Studi di VeronaStrada Le Grazie 1537134 Verona, [email protected]

1

Indice

Prefazione 5

Capitolo 1. Linguaggi Formali 71. Linguaggi regolari 72. Proprieta dei linguaggi regolari 253. Linguaggi context free 284. Proprieta dei linguaggi context free 36

Capitolo 2. Modelli formali per il calcolo 431. Macchine di Turing 432. Funzioni ricorsive 493. Programmi for-while 53

Capitolo 3. Teoria della ricorsivita 611. Insiemi e funzioni ricorsive 612. Teorema di Rice 633. Ricorsivita di insiemi 654. Riducibilita funzionale 685. Insiemi creativi e produttivi 74

3

Prefazione

Questa dispensa di esercizi svolti, parte dal presupposto che un corso parti-colarmente teorico e impegnativo come Fondamenti dell’Informatica venga neces-sariamente corredato di un supporto applicativo, dove si renda evidente l’utilitaconcreta di teoremi e lemmi visti a lezione, dei quali, altrimenti, si farebbe faticaa comprendere l’importanza. L’esperienza insegna infatti che molte volte se unteorema complesso e accompaganto da un esempio pratico, questo puo essere unforte incentivo alla comprensione capillare (totale) dell’argomento senza tralascia-rne aspetti che potrebbero, ad un primo approccio, apparire come estremamenteastratti.

Per cui, uno strumento come questo, e stato pensato e realizzato come unostrumento di approfondimento del corso e non come prima e unica sede di stu-dio: questo leverebbe l’aspetto affascinante di ricerca e di sfida che un corso comeFondamenti dell’Informatica rappresenta.

Desidero ringraziare il Prof. Roberto Giacobazzi, il Prof. Agostino Dovier e laDott.ssa Mila Dalla Preda per il contributo dato nella stesura della prima versionedi questo eserciziario, ora ampiamente rielaborato ed arricchito. Desidero inoltreringraziare moltissimo tutti gli studenti del corso di Fondamenti dell’Informaticadegli anni accademici 2001/2002, 2002/2003 e 2003/2004, che con il loro inpegno estudio hanno contribuito al miglioramento di tale eserciziario al fine di renderlo piupreciso, corretto e completo nelle spiegazioni. Per questo ringrazio in particolareNicola Bombieri, Matteo Gozzi e Castellini Alberto.

5

CAPITOLO 1

Linguaggi Formali

Dato un insieme di simboli Σ, un linguaggio formale e un insieme di stringhedefinite a partire da tale alfabeto. Un linguaggio formale puo essere accettato daun automa a stati finiti (DFA, NFA, ε-NFA), puo essere descritto mediante unaespressione regolare e puo essere generato mediante una grammatica.

1. Linguaggi regolari

Ricordiamo che gli automi a stati finiti sono completamente descritti dallamatrice di transizione specificando gli stati finali e notando che q0 rappresentasempre lo stato iniziale, da cui parte il processo di riconoscimento di un linguaggioeseguito dall’automa. La matrice di transizione sara rappresentata come una tabella

s0 s1 s2 . . .

q0

q1 q2

...

Questa matrice permette di rappresentare graficamente la relazione δ di transizione.Si ha che un linguaggio e regolare se esiste un automa che lo riconosce (accetta).Per rappresentare graficamente gli automi useremo cerchietti per gli stati (quellifinali saranno cerchiati doppi) e archi etichettati con i simboli dell’alfabeto per rap-presentare le transizioni tra i vari stati dovute ai simboli evidenziati nelle etichette.Nei seguenti esercizi chiederemo di dimostrare che un linguaggio e regolare, per farequesto si deve mostrare un automa che lo riconosce e si deve mostrare che effettiva-mente esso riconosce tutte e sole le stringhe del linguaggio considerato. In tal casosi deve mostrare per induzione sulla lunghezza delle stringhe che ogni stringa e ac-cettata dall’automa se e solo se appartiene al linguaggio. In particolare si dimostraprima che se una stringa sta nel linguaggio allora, nell’automa, termina in uno statofinale, e poi che se una stringa non sta nel linguaggio allora, nell’automa, terminain uno stato non finale. Infine un altro classico esercizio consiste nel minimizzareun automa e per far cio si esegue una partizione iniziale degli stati in due classi,stati finali e stati non finali. Poi si partizionano ancora le classi, considerando chese q ′, appartenente alla classe C, con un certo simbolo finisce in uno stato che nonappartiene a C, allora q ′ forma una nuova classe insieme a tutti gli stati di C checon lo stesso simbolo vanno nella stessa classe, altrimenti q ′ rimane in C. Poi siripete, nello stesso modo, con le transizioni dovute ad ogni altro simbolo ottenendouna nuova partizione per ciscun simbolo. A questo punto si intersecano le varie par-tizioni ottenute e si riparte dal risultato. Tutte queste operazioni vengono ripetutefinche non si raggiunge il punto fisso del procedimento.In questo sezione vedremo anche degli esercizi riguardanti le espressioni regolari.

7

8 1. LINGUAGGI FORMALI

Le espressioni regolari sono espressioni formali che permettono di rappresentare ilinguaggi regolari, ovvero ad ogni espressione regolare corrisponde sempre un au-toma a stati finiti. D’ora in poi useremo la notazione a+ def

= aa∗ = a∗a e si avra

che a+ + ε = a∗.

Esercizio 1.1. Si provi che se Σ 6= ∅, allora Σ∗ e numerabile.

Soluzione. Se Σ 6= ∅ e Σ e finito allora occorre individuare una corrispondenza biu-nivoca con i numeri naturali per mostrare che Σ∗ e numerabile. Tale corrispondenzasi ottiene, banalmente ordinando i simboli di Σ e iniziando a numerare le stringhesecondo la loro lunghezza, a partire da quella di lunghezza 0 (indicata con ε), pros-eguendo con quelle di lunghezza uno, che sono in numero finito, a seguire quelledi lunghezza due, anche queste in numero finito ecc. Formalmente consideriamoΣ = a0, . . . , an e quindi possiamo eseguire le seguenti associazioni.

0 → ε

1 → a0

2 → a1

3 → a2

. . .

n → an

n+ 1 → a0a0

n+ 2 → a0a1

n+ 3 → a0a2

n+ 4 → a0a3

. . .

2n + 1 → a1a0

2n + 2 → a1a1

. . .

Se Σ e infinito per mostrare che l’insieme e numerabile si deve procedere in mododiverso. Ordiniamo le stringhe nel seguente modo:

0 → ε

1 → a0

2 → a1

3 → a0a0

4 → a0a1

5 → a1a0

6 → a1a1

7 → a2

8 → a2a0

9 → a0a2

10 → a2a1

11 → a1a2

12 → a2a2

13 → a0a0a0

14 → a0a0a1

15 → a0a1a0

16 → a1a0a0

17 → a0a0a2

18 → a0a2a0

19 → a2a0a0

20 → a0a1a1

21 → a1a0a1

. . .

L’idea e quella di introdurre un numero finito di elementi scrivendo tutte le possibilistringhe ottenibili con questi elementi, di lunghezza massima pari al numero dielementi introdotti. In questo modo si trattano sempre insiemi finiti. 2

Esercizio 1.2. Si determini il linguaggio accettato dall’automa rappresentatomediante la seguente matrice di transizione dove F = q1.

0 1

q0 q1 q2

q1 q1 q1

q2 q1 q0

Soluzione. Disegnamo l’automa:

1. LINGUAGGI REGOLARI 9

GFED@ABC?>=<89:;q1

0

1

GFED@ABCq0

0

OO

1 ++ GFED@ABCq2

1

kk

0

`BBBBBBBBBBB

Definiamo formalmente l’automa come M = 〈q0, q1, q2, 0, 1, δ, q0, q1〉 e, con-siderando che solo lo 0 porta nello stato finale, deduciamo che il linguaggio ri-conosciuto e L(M) =

x ∈ Σ∗

∣∣ in x occorre almeno uno 0. Dimostriamo che

questo e il linguaggio effettivamente riconosciuto dall’automa. Verifichiamo cioe:

(1) x ∈ L ⇒ x ∈ L(M): ∀x ∈ Σ∗ t.c. x = v0w con v,w ∈ Σ∗ e v contenente

solo 1, allora δ(q0, x) ∈ F, cioe δ(q0, x) = q1

(2) x /∈ L ⇒ x /∈ L(M): ∀x ∈ Σ∗ t.c. x = 11 . . . 1(senza 0) allora δ(q0, x) /∈ F,

cioe δ(q0, x) 6= q1

Innanzitutto, da come e costruito l’automa e banale notare che valgono le seguenti

uguaglianze: δ(q0, 1 . . . 10) = q1 e ∀w ∈ Σ∗ . δ(q1, w) = q1. Sia data la stringax = v0w con v,w ∈ Σ∗ e v contenente solo 1 senza 0

δ(q0, x) = δ(q0, v0w)

= δ(q0, 1 . . . 10w)

= δ(q1, w)

= q1 ∈ F

A questo punto dimostriamo per induzione sulla lunghezza di x la seconda con-

dizione. Per |x| = 0 vale δ(q0, ε) = q0 6= q1 (base). Supponiamo ora che se |x| ≤ n

allora δ(q0, x) 6= q1, dunque

δ(q0, x1) = δ(δ(q0, x), 1) (Per def. di δ)= δ(qi, 1), i 6= 1 (Per ipotesi induttiva)6= q1

per come e definito l’automa, ovvero da uno stato non finale, con 1, si va semprein uno stato non finale. 2

Esercizio 1.3. Si verifichi che i seguenti linguaggi, con Σ = 0, 1, sonoregolari:

(1) l’insieme di tutte le stringhe tali che il penultimo simbolo e 0;(2) l’insieme di tutte le stringhe tali che il terzultimo simbolo e 0;

Soluzione. Per dimostrare che un certo linguaggio e regolare e sufficiente costruireun automa che lo riconosca, e dimostrare che cio avviene.

(1) Ecco l’automa che riconosce il primo linguaggio:

10 1. LINGUAGGI FORMALI

GFED@ABCq0

1 0 ++ GFED@ABCq1

1

~~||||

||||

|||

0

GFED@ABC?>=<89:;q2

0

>>|||||||||||1

OO

GFED@ABC?>=<89:;q3

0

TT1

kk

Formalmente M = 〈q0, q1, q2, q3, 0, 1, δ, q0, q2, q3〉. Dimostriamoche questo automa effettivamente riconosce l’insieme di tutte le stringhetali che il penultimo elemento e 0. Per ottenere cio dimostriamo qualcosadi piu forte, ovvero dimostriamo che per i ∈ 0, 1, 2, 3 si ha

δ(qi, w00) = q3 δ(qi, w10) = q1

δ(qi, w01) = q2 δ(qi, w11) = q0

Poiche per definizione di δ si ha che δ(qi, wu) = δ(δ(qi, w), u) = δ(q ′i, u),

allora non e piu necessaria l’induzione ed e sufficiente dimostrare che perogni i si ha

δ(qi, 00) = q3 δ(qi, 10) = q1

δ(qi, 01) = q2 δ(qi, 11) = q0

perche qi e generico e la proprieta che stiamo cercando di verificare e sugliultimi simboli. Questo significa che non ci interessa cio che succede primadi questi simboli e quindi notiamo che

• se x = 00 ⇒ δ(q0, 00) = δ(δ(q0, 0), 0) = δ(δ(q0, 0), 0) = δ(q1, 0) =

q3 ∈ F;• se x = 01 ⇒ δ(q0, 01) = δ(δ(q0, 0), 1) = δ(δ(q0, 0), 1) = δ(q1, 1) =

q2 ∈ F;• se x = 10 ⇒ δ(q0, 10) = δ(δ(q0, 1), 0) = δ(δ(q0, 1), 0) = δ(q0, 0) =

q1 /∈ F;• se x = 11 ⇒ δ(q0, 11) = δ(δ(q0, 1), 1) = δ(δ(q0, 1), 1) = δ(q0, 1) =

q0 /∈ F.(2) Ecco l’automa che riconosce il secondo linguaggio:

GFED@ABCq0

1 0 ++ GFED@ABCq1

1 ++

0tt

GFED@ABCq2

0

1

~~||||

||||

|||

GFED@ABCq3

0

1

BBB

BBBB

BBBB

GFED@ABC?>=<89:;q4

0

OO

1

UU

GFED@ABC?>=<89:;q7

1

OO

0

ff

GFED@ABC?>=<89:;q6

0

JJ1

33 GFED@ABC?>=<89:;q5

1

JJ

0

>>|||||||||||

1. LINGUAGGI REGOLARI 11

da cuiM = 〈q0, q1, q2, q3, q4, q5, q6, q7, 0, 1, δ, q0, q4, q5, q6, q7〉. Di-mostriamo ora che effettivamente tale automa riconosce il linguaggio. Perfar cio dobbiamo dimostrare che qualunque stringa in cui il terzultimoelemento e 0 viene accettata dall’automa e che nessn’altra stringa vieneaccettata. In particolare possiamo dimostrare qualcosa di piu forte, ovveroche qualunque sia qi con i ∈ 0, . . . , 7 e qualunque sia w ∈ Σ∗ si ha che

δ(qi, w000) = q6 δ(qi, w100) = q3

δ(qi, w001) = q5 δ(qi, w101) = q2

δ(qi, w010) = q7 δ(qi, w110) = q1

δ(qi, w011) = q4 δ(qi, w111) = q0

Ora poiche per definizione δ(qi, wu) = δ(δ(qi, w), u) = δ(q ′i, u), analoga-

mente a prima e sufficiente dimostrare che per ogni i si ha

δ(qi, 000) = q6 δ(qi, 100) = q3

δ(qi, 001) = q5 δ(qi, 101) = q2

δ(qi, 010) = q7 δ(qi, 110) = q1

δ(qi, 011) = q4 δ(qi, 111) = q0

e questo si puo verificare banalmente dalla definizione dell’automa, comeabbiamo visto al punto precedente.

2

Esercizio 1.4.

(1) Si dimostri che il linguaggio composto da stringhe di 0 e 1 tali che:• ci sono almeno due 0 consecutivi, e• non vi sono mai due 1 consecutivi

e regolare.(2) Si determini l’automa minimo che riconosce tale linguaggio.

Soluzione. Il linguaggio che ci interessa e composto dall’intersezione tra il lin-guaggio che accetta stringhe con almeno due 0 consecutivi e il linguaggio che accettastringhe dove non occorrono due 1 consecutivi. Osserviamo che il linguaggio chenon accetta stringhe con due 1 consecutivi e il complemento di quello che accettasolo le stringhe con due 1 consecutivi. Definiamo quindi:

L1 = w : w ha almeno due 0 consecutivi

L2 = w : w ha almeno due 1 consecutivi

Se L1, L2 sono regolari, allora: L = L1 ∩ L2 e regolare per la proprieta di chiusura,dove con L indichiamo il linguaggio descritto dall’esercizio. Disegnamo l’automaM1 relativo al linguaggio L1:

GFED@ABCq0

1 0 ++ GFED@ABCq1

1

kk

0 ++ GFED@ABC?>=<89:;q2

0,1

che puo essere formalizzato come M1 = 〈q0, q1, q2, 0, 1, δ, q0, q2〉. Dimostri-amo che l’automa M1 effettivamente riconosce il linguaggio L1. In particolare,quindi, dobbiamo dimostrare che per ogni stringa x si abbia che x ∈ L1 se e solo sex ∈ L(M1). Per ottenere cio possiamo dimostrare le seguenti implicazioni: quando

12 1. LINGUAGGI FORMALI

x ∈ L allora x ∈ L(M), quando invece x /∈ L allora x /∈ L(M). Abbiamo quattrocasi possibili riguardo alla struttura delle stringhe:

• x non contiene 0 (ovvero x /∈ L): allora banalmente dalla definizione

dell’automa si ha δ(q0, x) = q0 /∈ F (ovvero x /∈ L(M));• x termina con uno 0 e prima contiene solo 1 (ovvero x /∈ L): allora

banalmente si verifica che δ(q0, x) = q1 /∈ F (ovvero x /∈ L(M));• x contiene 0 sempre seguiti da almeno un 1 (ovvero x /∈ L): cio significa che

la stringa e del tipo x = v01w, dove v non contiene 0. Allora dimostriamoper induzione sulla presenza di 01 nella stringa che lo stato in cui l’automa

termina non e finale. Notiamo che δ(q0, 01) = q0, per definizione, sup-

poniamo quindi che per ipotesi induttiva δ(q0, w) = q0 (dove w non con-

tiene 0 consecutivi), allora δ(q0, v01w) = δ(δ(q0, v), 01w) = δ(q0, 01w) =

δ(δ(q0, 01), w) = δ(q0, w) = qi /∈ F, in quanto ricade in uno dei casi giavisti (ovvero x /∈ L(M));

• x contiene due 0 consecutivi (ovvero x ∈ L): x = v00w, dove v noncontiene 0 consecutivi (cade in uno dei casi precedenti ma non terminacon 0 altrimenti gli 0 evidenziati non sarebbero i primi consecutivi), quindi

δ(q0, v) = q0, inoltre e evidente che per ogni w ∈ Σ∗ si ha δ(q2, w) = q2,

da cui δ(q0, v00w) = δ(q0, 00w) = δ(q1, 0w) = δ(q2, w) = q2 (ovverox ∈ L(M)).

Disegnamo ora l’automa M2 relativo al linguaggio L2.

GFED@ABCq0

0 1 ++ GFED@ABCq1

0

kk

1 ++ GFED@ABC?>=<89:;q2

0,1

formalizzato: M2 = 〈q0, q1, q2, 0, 1, δ, q0, q2〉. La dimostrazione che l’automaM2 effettivamente riconosce il linguaggio L2 e analoga alla precedente. L’automaM3, che vogliamo riconosca il linguaggio complementare a L2 (cioe tale che L(M3) =

L(M2)), si ottiene facilmente dall’automa M2 invertendo stati finali e non finali.

GFED@ABC?>=<89:;q0

0 1 ++ GFED@ABC?>=<89:;q1

0

kk

1 ++ GFED@ABCq2

0,1

e lo si formalizza come M3 = 〈q ′0, q

′1, q

′2, 0, 1, δ, q ′

0, q′0, q

′1〉. Dato che i lin-

guaggi regolari sono chiusi rispetto all’intersezione proviamo a costruire l’automarichiesto dall’esercizio in modo automatico a partire da M1 e M3 (l’idea e: M =

M1 ∩M3)Siano M1 = 〈Q1, Σ, δ1, F1, q0〉 e M3 = 〈Q3, Σ, δ3, F3, q

′0〉 gli automi sopra definiti.

Si costruisce l’automa che ha come stati il prodotto cartesiano degli stati dei dueautomi, quindi ogni stato del nuovo automa sara una coppia del tipo 〈qi, qj〉 conqi ∈ Q1 e qj ∈ Q3. L’insieme degli stati finali sara l’insieme costituito da coppiedi stati finali, F =

〈qi, qj〉

∣∣ qi ∈ F1, qj ∈ F3

(se si fosse interessati all’unione,

basterebbe sostituire ∨ al posto di ∧). E evidente che lo stato (qi, qj), attraversoun simbolo a, raggiunge lo stato (qk, qh) solo se δ1(qi, a) = qk e δ3(qj, a) = qh.

1. LINGUAGGI REGOLARI 13

Possiamo allora scrivere la matrice di transizione di M:

0 1

p0 = (q0, q′0) (q1, q

′0) (q0, q

′1)

p1 = (q0, q′1) (q1, q

′0) (q0, q

′2)

p2 = (q0, q′2) (q1, q

′2) (q0, q

′2)

p3 = (q1, q′0) (q2, q

′0) (q0, q

′1)

p4 = (q1, q′1) (q2, q

′0) (q0, q

′2)

p5 = (q1, q′2) (q2, q

′2) (q0, q

′2)

p6 = (q2, q′0) (q2, q

′0) (q2, q

′1)

p7 = (q2, q′1) (q2, q

′0) (q2, q

′2)

p8 = (q2, q′2) (q2, q

′2) (q2, q

′2)

dove p0 . . . p8 sono i nomi che daremo agli stati del nuovo automa che risulta essere:

GFED@ABCp01 //

0

GFED@ABCp11 //

0

~~||||

||||

|||

GFED@ABCp2

0

1

ww

GFED@ABCp3

0

1

>>||||||||||| GFED@ABCp4

1

>>|||||||||||

0

~~||||

||||

|||

GFED@ABCp5

1

OO

0

GFED@ABC?>=<89:;p6

0

JJ1

// GFED@ABC?>=<89:;p71

//0

oo GFED@ABCp8

0,1

TT

formalizzato M = 〈p0, p1, p2, p3, p4, p5, p6, p7, p8, 0, 1, δ, p0, p6, p7〉. Non res-ta che minimizzare l’automa, utilizzando l’algoritmo di minimizzazione.Iniziamo dividendo gli stati dell’automa in due classi: C1 = p6, p7 e C2 =

p0, p1, p2, p3, p4, p5, p8, dove C1 raccoglie gli stati finali e C2 quelli non finali.Partizioniamo ora le classi, considerando che se partendo da q ′, con 0 si finisce inuno stato che non appartiene alla classe a cui appartiene q ′, allora q ′ forma unanuova classe insieme a tutti quelli della sua classe che con lo stesso simbolo vannonella stessa classe, altrimenti rimane in quella di partenza. Poi si ripete con le tran-sizioni dovute a 1 ottenendo una nuova partizione. A questo punto si intersecano ledue partizioni ottenute e si riparte dal risultato. In Fig. 1 abbiamo rappresentatol’intero processo di minimizzazione, dove in tutte le diramazioni quelle di sinistrarappresentano le transizioni dovute allo 0, mentre quelle di destra rappresentanole transizioni dovute a 1. In tale figura osserviamo che l’ultima partizione e quellafinale; si nota che gli stati p2, p5, p8 possono essere considerati come un unico statoche indichiamo con ⊥. Per semplificare l’automa notiamo che p4 non ha archi en-tranti, ovvero non puo essere mai raggiunto, quindi lo togliamo. L’automa minimorisulta percio essere il seguente.

14 1. LINGUAGGI FORMALI

p0, p1, p2, p3, p4, p5, p8p6, p7

p6, p7p0, p1, p2, p5, p8

p3, p4

p0, p1, p2, p5, p8

p3, p4

p6 p7

p3 p4 p2, p5, p8

p6 p7 p0 p1

p6 p7p0, p1 p2, p5, p8

p3, p4

p0, p1, p2, p5, p8

p3, p4

p6 p7

p3, p4 p2, p5, p8p6 p7 p0, p1

p3 p4 p2, p5, p8p6 p7 p0 p1

p0, p1, p2, p3, p4, p5, p8p6 p7

p3, p4 p2, p5, p8p6 p7 p0, p1

0 1

0

0

1

1

Figura 1. Processo di minimizzazione dell’Esercizio 1.4

GFED@ABCp01 //

0

GFED@ABCp1

1

0

~~

GFED@ABCp3

0

1

>> ?>=<89:;⊥

0,1

GFED@ABC?>=<89:;p6

0

JJ1

// GFED@ABC?>=<89:;p7

1

OO

0oo

che formalizzato diventa M = 〈p0, p1, p3, p6, p7,⊥, 0, 1, δ, p0, p6, p7〉. 2

Esercizio 1.5. Si determini il DFA equivalente all’NFA:

0 1

q0 q0 q0, q1

q1 q1 q0, q2

q2 q1, q2 q0, q1, q2

1. LINGUAGGI REGOLARI 15

ove F = q2. Qual e il linguaggio accettato?

Soluzione. Ecco il grafico dell’NFA.

GFED@ABC?>=<89:;q2

0

1

0,1

1

GFED@ABCq0

0,1

77 1++ GFED@ABCq1

1

kk

0

gg

1

ZZ

Da cui M = 〈q0, q1, q2, 0, 1, δ, q0, q2〉. Ricordiamo che, dato un NFA, M =

〈Q,Σ, δ, q0, F〉, esiste sempre un DFA M ′ = 〈℘(Q), Σ, δ ′, q0, F ′〉 equivalente, dove:

• F ′ = P ⊆ Q : P ∩ F 6= ∅;• δ ′(P, a) =

⋃p∈P δ(p, a), per P ∈ ℘(Q).

Costruiamo la matrice di transizione per il DFA:

0 1

∅ ∅ ∅q ′

0 q0 q0 q0, q1

q ′1 q1 q1 q0, q2

q ′2 q2 q1, q2 q0, q1, q2

q ′3 q0, q1 q0, q1 q0, q1, q2

q ′4 q0, q2 q0, q1, q2 q0, q1, q2

q ′5 q1, q2 q1, q2 q0, q1, q2

q ′6 q0, q1, q2 q0, q1, q2 q0, q1, q2

Quindi (eliminando gli apici per semplicita) si ha F = q2, q4, q5, q6 e la matricediventa

0 1

q0 q0 q3

q1 q1 q4

q2 q5 q6

q3 q3 q6

q4 q6 q6

q5 q5 q6

q6 q6 q6

Possiamo quindi disegnare il DFA,

16 1. LINGUAGGI FORMALI

GFED@ABCq0

0

1

GFED@ABCq1

0

1

GFED@ABC?>=<89:;q2

0

1

BBB

BBBB

BBBB

GFED@ABCq3

0

1

GFED@ABC?>=<89:;q4

0,1

~~||||

||||

|||

GFED@ABC?>=<89:;q5

0

771

// GFED@ABC?>=<89:;q6

0,1

gg

che formalizzato eM = 〈q0, q1, q2, q3, q4, q5, q6, 0, 1, δ, q0, q2, q4, q5, q6〉. No-tiamo che gli stati associati a q1, q2, q4, q5 possono essere eliminati, dal momentoche non verranno mai raggiunti a partire dallo stato iniziale. In questo modootteniamo il DFA cercato.

GFED@ABCq0

0

1 // GFED@ABCq3

0

1 // GFED@ABC?>=<89:;q6

0,1

che formalizzato diventa M = 〈q0, q3, q6, 0, 1, δ, q0, q6〉. A questo punto sipuo dimostrare che il linguaggio accettato e il linguaggio descritto dall’insiemedi stringhe L =

x∣∣ x contiene almeno due 1

. Come negli esercizi precedenti

dobbiamo dimostrare due implicazioni: quando x ∈ L allora x ∈ L(M) e quandox /∈ L allora x /∈ L(M). Possiamo notare che rispetto alla quantita di 1, una genericastringa puo essere di tre tipi:

• x non contiene 1 (ovvero x /∈ L): In tal caso abbiamo x = 0 . . . 0, per

come e definito l’automa, questo significa che δ(q0, x) = q0 /∈ F (ovverox /∈ L(M));

• x contiene un solo 1 (ovvero x /∈ L): In tal caso abbiamo x = u1v con

u, v ∈ 0∗, allora per come e definito l’automa abbiamo che δ(q0, u1v) =

δ(q0, 1v) = δ(q3, v) = q3 /∈ F (ovvero x /∈ L(M));• x contiene almeno due 1 (ovvero x /∈ L): In tal caso abbiamo x = u1v1w

dove u, v ∈ 0∗ ew ∈ (1+0)∗, allora per la definizione dell’automa abbiamo

che δ(q0, u1v1w) = δ(q0, 1v1w) = δ(q3, v1w) = δ(q3, 1w) = δ(q6, w) =

q6 ∈ F (ovvero x ∈ L(M)).

2

Esercizio 1.6. Si determini, usando le tecniche di trasformazione standard, ilDFA minimo equivalente all’automa

1. LINGUAGGI REGOLARI 17

GFED@ABCq0

0++

0

GFED@ABCq2

1

0

kk

0

zzGFED@ABCq1

0

KK

0

::

1 33 GFED@ABC?>=<89:;q3

0

[[

Si determini inoltre, dimostrando formalmente la propria affermazione, il linguag-gio riconosciuto dal DFA minimo calcolato.

Soluzione. Per prima cosa costruiamo la matrice di transizione dell’NFA:

0 1

q0 q1, q2 ∅q1 q0, q2 q3

q2 q1, q0 q3

q3 q0 ∅

Definiamo adesso gli stati del DFA, ma non prendiamo tutti i possibili sottoinsiemidi q0, q1, q2, q3, prendiamo solo quelli che effettivamente vengono condideratidall’automa. Siano innanzitutto p0 = q0, p1 = q1, p2 = q2, p3 = q3, lecui transizioni sono quelle definite nella tabella precedente. Poi prendiamo p4 =

q1, q2, p5 = q0, q2, p6 = q0, q1 e p7 = ∅. Infine prendiamo l’unione di quelliraggiungibili a partire da questi, ovvero p8 = q0, q1, q2. Notiamo che l’unicostato contenente q3, ovvero finale, e p3. A questo punto possiamo costruire lanuova matrice

0 1

p0 p4 p7

p1 p5 p3

p2 p6 p3

p3 p0 p7

p4 p8 p3

p5 p8 p3

p6 p8 p3

p7 p7 p7

p8 p8 p3

Ora disegnamo l’automa solo con gli stati effettivamente raggiungibili a partire dap0.

GFED@ABCp4

1

0

GFED@ABCp0

0rr

1

GFED@ABCp8

1

22

0 GFED@ABC?>=<89:;p3

0

88

1

22 GFED@ABCp7

0,1

18 1. LINGUAGGI FORMALI

Ora dobbiamo minimizzare tale automa. Partiamo dalla suddivisione tra stati finalie non: p0, p4, p7, p8 e p3. Vediamo che con 0 la suddivisione rimane inalterata,mantre con 1 e evidente che p4, p8 si divide da p0, p7. Otteniamo quindi lapartizione p3, p0, p7 e p4, p8. Da questa l’unica divisione avviene ancora con0 che distingue gli stati p0 e p7, otteniamo quindi la suddivisione finale p0, p3,p7, p4, p8. Per cui l’automa finale minimo e

GFED@ABCp8

1 &&

0 GFED@ABCp0

0rr

1

GFED@ABC?>=<89:;p3

0

88

1

22 GFED@ABCp7

0,1

Vediamo infine che il linguaggio riconosciuto dall’automa e

L =x ∈ Σ∗

∣∣ |x| ≥ 2, x = 0y1 con y ∈ Σ∗ e in y ogni 1 e seguito da almeno due 0

Dimostriamo per casi che se x ∈ L allora x ∈ L(M) e che se x /∈ L allora x /∈ L(M).

• Se |x| < 2 allora x /∈ L e nell’automa abbiamo che δ(p0, x) /∈ F;

• Se x = y0 allora x /∈ L ed effettivamente per ogni pi tale che δ(p0, y) = pi

allora si ha, per definizione di M che δ(pi, 0) /∈ F;

• Se x = 1y allora x /∈ L ed effettivamente δ(p0, 1y) = δ(p7, y) = p7 /∈ F;• Sia x = 0y1, allora vediamo per induzione su |y| che se y contiene almeno

un 1 seguito da 01 o 1a allora δ(p8, y) = p7, se invece ogni 1 e seguito da

almeno due 0 ma y termina con 1 allora δ(p8, y) = p3, se invece termina

con 10 allora δ(p8, y) = p0, nell’ultimo caso invece δ(p8, y) = p8.

Sia |y| = 3, se y = a00, allora δ(p8, a00) = p8, se y = 101, allora

δ(p8, 101) = p7, se y = 11a allora δ(p8, 10a) = p7 qualunque sia a, se

y = 001 allora δ(p8, 001) = p3 e se infine y = 010 allora δ(p8, 010) = p0.Consideriamo ora valida l’ipotesi induttiva per z tale che |z| = n, prendi-amo ora y = za, se in z ogni 1 e seguito da almeno due 0 e terminante

con 1, allora δ(p8, z) = p3, se a = 0 allora y termina con 10 ed effetti-vamente δ(p3, 0) = p0; se invece a = 1 allora si hanno due 1 consecutivied effettivamente δ(p3, 1) = p7. Se invece z e terminante con 10 allora

δ(p8, z) = p0 quindi se a = 0 ritroviamo che ogni 1 e seguito da almenodue 0 ed effettivamente δ(p0, 0) = p8; se invece a = 1, allora abbiamo un1 seguito da 01 e infatti δ(p0, 1) = p7. Infine se tutti gli 1 sono seguiti da

almeno due 0 allora δ(p8, z) = p8, quindi se a = 0 abbiamo δ(p8, 0) = p8,mentre se a = 1, allora abbiamo y terminante con 1 ed effettivamente

δ(p8, 1) = p3. Sia ora z con un 1 seguito da 01 o 1b, allora δ(p8, z) = p7

e, qualunque sia a non cambia la situazione, infatti δ(p7, a) = p7. Ora sein y ogni 1 e seguito sempre da almeno due 0 allora x ∈ L e nell’automa ab-

biamo che δ(p0, 0y1) = δ(p8, y1) = δ(p8, 1) = p3 ∈ F. Altrimenti per ogni

pi ∈ p0, p3, p7 abbiamo che δ(p0, 0y1) = δ(p8, y1) = δ(pi, 1) = p7 /∈ F.

2

1. LINGUAGGI REGOLARI 19

Esercizio 1.7. Sia Σ = 0, . . . , 9. Si dimostri che il linguaggio:

L = ε ∪

an . . . a0 : ai ∈ Σ,n ≥ 0, an 6= 0,

(n∑

i=0

ai10i

)mod 3 = 0

e regolare. Si dia inoltre una dimostrazione informale di correttezza dell’automa(ovvero si spieghi il principio usato per la costruzione dell’automa). Si riscriva poil’automa con l’alfabeto Σ = 0, 1, 2 e si dia una dimostrazione formale di correttezzaper lo stesso linguaggio.

Soluzione. Dobbiamo determinare un automa che accetti solo le stringhe di cifrein base 10 che rappresentano numeri divisibili per 3. Si sa che un numero in base10 e divisibile per 3 se la somma delle cifre che lo compongono e ancora divisibileper 3; questa e l’idea che sta alla base del seguente automa.

GFED@ABCq2

0,3,6,9

ww

1,4,7

2,5,8

GFED@ABCq1

0,3,6,9

2,5,8 ..

1,4,7

::

GFED@ABC?>=<89:;q0

0,3,6,9

gg

1,4,7

ff2,5,8

OO

L’idea e quella di considerare che una cifra divisibile per tre (0, 3, 6, 9) non cambialo stato di divisibilita per tre del numero. Quando invece abbiamo una cifra cheaggiunge una unita rispetto alla divisibilita per tre (1, 4, 7) allora per terminare inuno stato finale abbiamo bisogno di un’altra cifra che aggiunga due unita (2, 5, 8)ad un multiplo di tre. Analogo il viceversa, in tal modo siamo sicuri che la sommadelle sequenze di numeri che portano in uno stato finale e un multiplo di tre.Riscriviamo ora l’utoma con l’alfabeto ristretto a Σ = 0, 1, 2 (vedi figura a pag.20).Dimostriamo per induzione sulla lunghezza della stringa x che se x ∈ L, ovveroΣixi mod 3 = 0, allora x ∈ L(M) (dove M e l’ultimo automa disegnato) e sex /∈ L, ovvero Σixi mod 3 6= 0, allora x /∈ L(M). In particolare dimostriamo che se

Σixi mod 3 = 1 allora δ(q0, x) = q1 e se Σixi mod 3 = 2 allora δ(q0, x) = q2.

Base: Sia |x| = 1, allora abbiamo tre casi possibili:

Se x = 0 (ovvero x ∈ L), allora δ(q0, 0) = q0 ∈ FSe x = 1 (ovvero x /∈ L), allora δ(q0, 1) = q1 /∈ FSe x = 2 (ovvero x /∈ L), allora δ(q0, 2) = q2 /∈ F

Induzione: Sia valido l’enunciato per ogni stringa di lunghezza n, consid-eriamo x = va tale che |x| = |v| + 1 = n + 1. Questo significa che valel’ipotesi induttiva per v. Dunque possiamo distinguere tre casi:

• y ∈ L: In tal caso, per ipotesi, abbiamo che Σiyi mod 3 = 0, e

per ipotesi induttiva abbiamo che δ(q0, y) = q0, quindi possiamo

20 1. LINGUAGGI FORMALI

distinguere ancora tre casi:

Se a = 0 allora (Σiyi + a) mod 3 = 0, ovvero x ∈ L,

allora δ(q0, y0) = δ(q0, 0) = q0 ∈ FSe a = 1 allora (Σiyi + a) mod 3 = 1, ovvero x /∈ L,

allora δ(q0, y1) = δ(q0, 1) = q1 /∈ FSe a = 2 allora (Σiyi + a) mod 3 = 2, ovvero x /∈ L,

allora δ(q0, y2) = δ(q0, 2) = q2 /∈ F

• y /∈ L e δ(q0, y) = q1: In tal caso, per ipotesi induttiva, abbiamo cheΣiyi mod 3 = 1. Abbiamo percio tre casi:

Se a = 0 allora (Σiyi + a) mod 3 = 1, ovvero x /∈ L,

allora δ(q0, y0) = δ(q1, 0) = q1 /∈ FSe a = 1 allora (Σiyi + a) mod 3 = 2, ovvero x /∈ L,

allora δ(q0, y1) = δ(q1, 1) = q2 /∈ FSe a = 2 allora (Σiyi + a) mod 3 = 0, ovvero x ∈ L,

allora δ(q0, y2) = δ(q1, 2) = q0 ∈ F

• y /∈ L e δ(q0, y) = q2: In tal caso, per ipotesi induttiva, abbiamo cheΣiyi mod 3 = 2. Abbiamo percio tre casi:

Se a = 0 allora (Σiyi + a) mod 3 = 2, ovvero x /∈ L,

allora δ(q0, y0) = δ(q2, 0) = q2 /∈ FSe a = 1 allora (Σiyi + a) mod 3 = 0, ovvero x ∈ L,

allora δ(q0, y1) = δ(q2, 1) = q0 ∈ FSe a = 2 allora (Σiyi + a) mod 3 = 1, ovvero x /∈ L,

allora δ(q0, y2) = δ(q2, 2) = q1 /∈ F

GFED@ABCq2

0

ww

1

2

GFED@ABCq1

0

2 ..

1

::

GFED@ABC?>=<89:;q0

0

gg

1

ff2

OO

2

Esercizio 1.8. Si verifichi che il seguente linguaggio e regolare:

L =x ∈ 0, 1

∣∣ x#mod 5 = 0

dove x# e il numero decimale rappresentato dalla stringa binaria x e mod rappre-senta l’operazione che restituisce il resto della divisione intera tra i numeri a cui eapplicata.

1. LINGUAGGI REGOLARI 21

Soluzione. Ricordiamo che, data la stringa binaria x = x0x1 . . . x|x|−1, possiamo

calcolare il decimale rappresentato nel seguente modo: x# = Σi=0i=|x|−1xi ∗ 2|x|−i−1.

Inoltre, questa corrispondenza ci dice anche che se la stringa binaria y e tale che y =

x0, allora y# = x# ∗ 2, mentre se y = x1 allora y# = (x# ∗ 2)+ 1. Questi fatti sonoimportanti per capire come interpretare la lettura di un 1 o di uno 0 in una stringabinaria rappresentante numeri decimali. A questo punto dobbiamo determinarel’automa che riconosce le stringhe binarie rappresentanti numeri decimali divisibiliper 5, ovvero tali che il loro modulo nella divisione per 5 e zero. Puo essere utilecapire cosa succede proprio al modulo nella divisione per 5 quando moltiplichiamoper 2 (ovvero leggiamo uno 0 nella rappresentazione binaria) o moltiplichiamo per2 e sommiamo 1 (ovvero leggiamo un 1 nella rappresentazione binaria):

n mod 5 = 0 ⇒ (n ∗ 2 mod 5 = 0 e n ∗ 2 + 1 mod 5 = 1)

n mod 5 = 1 ⇒ (n ∗ 2 mod 5 = 2 e n ∗ 2 + 1 mod 5 = 3)

n mod 5 = 2 ⇒ (n ∗ 2 mod 5 = 4 e n ∗ 2 + 1 mod 5 = 0)

n mod 5 = 3 ⇒ (n ∗ 2 mod 5 = 1 e n ∗ 2 + 1 mod 5 = 2)

n mod 5 = 4 ⇒ (n ∗ 2 mod 5 = 3 e n ∗ 2 + 1 mod 5 = 4)

Queste relazioni ci suggeriscono di costruire l’automa in modo che ogni stato ri-conosca le stringhe con un particolare modulo nella divisione per 5. Con questaidea costruiamo il seguente automa:

GFED@ABC?>=<89:;q0

0

1

BBB

BBBB

BBBB

GFED@ABCq20 //

1oo GFED@ABCq4

1

gg

0

GFED@ABCq1

1

77

0

OO

GFED@ABCq30oo

1

``BBBBBBBBBBB

A questo punto, per dimostrare la correttezza dell’automa, dimostriamo per in-duzione qualcosa di piu forte, ovvero dimostriamo i seguenti fatti:

x#mod 5 = 0 ⇒ δ(q0, x) = q0

x#mod 5 = 1 ⇒ δ(q0, x) = q1

x#mod 5 = 2 ⇒ δ(q0, x) = q2

x#mod 5 = 3 ⇒ δ(q0, x) = q3

x#mod 5 = 4 ⇒ δ(q0, x) = q4

Base: Consideriamo le stringhe binarie rappresentanti i piu piccoli numerinaturali con diverso modulo nella divisione per 5, ovvero i numeri chevanno da 0 a 4:

x = 0 ⇒ x#mod 5 = 0 e δ(q0, 0) = q0

x = 1 ⇒ x#mod 5 = 1 e δ(q0, 1) = q1

x = 10 ⇒ x#mod 5 = 2 e δ(q0, 10) = δ(q1, 0) = q2

x = 11 ⇒ x#mod 5 = 3 e δ(q0, 11) = δ(q1, 1) = q3

x = 100 ⇒ x#mod 5 = 4 e δ(q0, 100) = δ(q1, 00) = δ(q2, 0) = q4

Induzione: Consideriamo ora una generica stringa x di lunghezza n e sup-poniamo che per quasta valga l’ipotesi induttiva. Dimostriamo allora che

22 1. LINGUAGGI FORMALI

la tesi vale anche per le stringhe y di lunghezza n + 1. Costruiamo ladimostrazione per casi, a seconda delle ipotesi su x e a seconda di comeotteniamo y a partire da x, ovvero consideriamo y = xa con a ∈ 0, 1.x ∈ L (e x#

mod 5 = 0):Sia y = x0, allora abbiamo che y# = x# ∗ 2 e quindi y#

mod 5 = 0,questo implica che y ∈ L. Ora notiamo che, applicando l’ipotesi

induttiva δ(q0, x) = q0, otteniamo la tesi δ(q0, y) = δ(q0, x0) =

δ(q0, 0) = q0. Sia y = x1, allora abbiamo che y# = x# ∗ 2 + 1

e quindi y#mod 5 = 1, questo implica che y /∈ L. Ora notiamo

che, applicando l’ipotesi induttiva δ(q0, x) = q0, otteniamo la tesi

δ(q0, y) = δ(q0, x1) = δ(q0, 1) = q1.x /∈ L e x#

mod 5 = 1:Sia y = x0, allora abbiamo che y# = x# ∗ 2 e quindi y#

mod 5 = 2,questo implica che y /∈ L. Ora notiamo che, applicando l’ipotesi

induttiva δ(q0, x) = q1, otteniamo la tesi δ(q0, y) = δ(q0, x0) =

δ(q1, 0) = q2. Sia y = x1, allora abbiamo che y# = x# ∗ 2 + 1

e quindi y#mod 5 = 3, questo implica che y /∈ L. Ora notiamo

che, applicando l’ipotesi induttiva δ(q0, x) = q1, otteniamo la tesi

δ(q0, y) = δ(q0, x1) = δ(q1, 1) = q3.x /∈ L e x#

mod 5 = 2:Sia y = x0, allora abbiamo che y# = x# ∗ 2 e quindi y#

mod 5 = 4,questo implica che y /∈ L. Ora notiamo che, applicando l’ipotesi

induttiva δ(q0, x) = q2, otteniamo la tesi δ(q0, y) = δ(q0, x0) =

δ(q2, 0) = q4. Sia y = x1, allora abbiamo che y# = x# ∗ 2 + 1

e quindi y#mod 5 = 0, questo implica che y ∈ L. Ora notiamo

che, applicando l’ipotesi induttiva δ(q0, x) = q2, otteniamo la tesi

δ(q0, y) = δ(q0, x1) = δ(q2, 1) = q0.x /∈ L e x#

mod 5 = 3:Sia y = x0, allora abbiamo che y# = x# ∗ 2 e quindi y#

mod 5 = 1,questo implica che y /∈ L. Ora notiamo che, applicando l’ipotesi

induttiva δ(q0, x) = q3, otteniamo la tesi δ(q0, y) = δ(q0, x0) =

δ(q3, 0) = q1. Sia y = x1, allora abbiamo che y# = x# ∗ 2 + 1

e quindi y#mod 5 = 2, questo implica che y /∈ L. Ora notiamo

che, applicando l’ipotesi induttiva δ(q0, x) = q3, otteniamo la tesi

δ(q0, y) = δ(q0, x1) = δ(q3, 1) = q2.x /∈ L e x#

mod 5 = 4:Sia y = x0, allora abbiamo che y# = x# ∗ 2 e quindi y#

mod 5 = 3,questo implica che y /∈ L. Ora notiamo che, applicando l’ipotesi

induttiva δ(q0, x) = q4, otteniamo la tesi δ(q0, y) = δ(q0, x0) =

δ(q4, 0) = q3. Sia y = x1, allora abbiamo che y# = x# ∗ 2 + 1

e quindi y#mod 5 = 4, questo implica che y /∈ L. Ora notiamo

che, applicando l’ipotesi induttiva δ(q0, x) = q4, otteniamo la tesi

δ(q0, y) = δ(q0, x1) = δ(q4, 1) = q4.

2

1. LINGUAGGI REGOLARI 23

Esercizio 1.9. Si provino o refutino le seguenti identita:

(1) r+ s = s + r

(2) r(st) = (rs)t

(3) r∗(r + t)∗ = (r + t)∗

(4) ∅∗ = ε

Soluzione.

(1) r+ s = s + r.Siano R e S gli insiemi associati alle espressioni regolari r e s. Perdefinizione si ha che x ∈ R + S se e solo se x ∈ R ∨ x ∈ S, che equiv-ale a dire x ∈ R+ S se e solo se x ∈ R∪ S. Possiamo percio concludere cher + s implica R ∪ S e che s + r implica S ∪ R, dove R ∪ S = S ∪ R per lacommutativita dell’unione.

(2) r(st) = (rs)t.Siano R, S e T gli insiemi associati alle espressioni regolari r, s e t. Si devemostrare che R(ST) = (RS)T , ovvero che x ∈ R(ST) se e solo se x ∈ (RS)T :

x ∈ R(ST) ⇔ x = ry con r ∈ R, y ∈ ST⇔ x = rst con r ∈ R, s ∈ S, t ∈ T⇔ x = vt con v ∈ RS, t ∈ T⇔ x ∈ (RS)T

(3) r∗(r + t)∗ = (r + t)∗.Siano R e T gli insiemi associati alle espressioni regolari r e t. Si devemostrare che R∗(R + T)∗ = (R + T)∗. Per ottenere questo verifichiamol’inclusione nei due sensi. Dimostriamo (R + T)∗ ⊆ R∗(R + T)∗ Sia x ∈(R + T)∗ allora x = xε ∈ R∗(R + T)∗. Dimostriamo invece R∗(R + T)∗ ⊆(R + T)∗. Se x ∈ R∗(R + T)∗ allora x = ru con r ∈ R∗ e u ∈ (R + T)∗,allora r ∈ R∗ vuol dire che r = w1 . . . wm con wi ∈ R e u ∈ (R + T)∗

vuol dire che u = v1 . . . vn dove vi ∈ R oppure vi ∈ T . Quindi si hache x = ru = (w1 . . . wmv1 . . . vn) ∈ (R + T)∗. Si e quindi dimostratal’uguaglianza.

(4) ∅∗ = ε.L’uguaglianza non e vera, dato che ∅∗ e l’insieme vuoto, mentre ε = ε el’insieme che contiene unicamente la striga vuota ε (quindi e non vuoto).

2

Esercizio 1.10. Si determini l’automa deterministico minimo per il linguaggiodenotato dall’espressione regolare: (0∗ + 1∗ + (01)∗).

Soluzione. Costruiamo l’ε-NFA che riconosce tale linguaggio:

24 1. LINGUAGGI FORMALI

GFED@ABC?>=<89:;q1

0

GFED@ABCq0

ε

OO

ε //

ε

GFED@ABC?>=<89:;q2

1

GFED@ABC?>=<89:;q3

0 ++ GFED@ABCq4

1

kk

formalmente abbiamo M = 〈q0, q1, q2, q3, q4, 0, 1, ε, δ, q0, q1, q2, q3〉. La di-mostrazione che questo automa effettivamente riconosce il linguaggio desiderato ebanale e deriva dal teorema di equivalenza tra linguaggi denotati da espressioniregolari e linguaggi regolari.Ricaviamo dall’ε-NFA, l’NFA equivalente. Si ricorda che dato un ε-NFA definitocome M = 〈Q,Σ, δ, q0, F〉 esiste sempre un NFA M ′ = 〈Q,Σ, δ ′, q0, F

′〉 tale cheL(M) = L(M ′) dove

• F ′ =

F ∪ q0 Se ε-closure(q0) ∩ F 6= ∅F altrimenti

• δ ′(q, a) = δ(q, a).

Definiamo la matrice di transizione di M ′ come

0 1

q0 q1, q4 q2

q1 q1 ∅q2 ∅ q2

q3 q4 ∅q4 ∅ q3

Disegnamo M ′:

GFED@ABC?>=<89:;q1

0

GFED@ABC?>=<89:;q0

0

OO

1 //

0

BBB

BBBB

BBBB

GFED@ABC?>=<89:;q2

1

GFED@ABC?>=<89:;q3 0++ GFED@ABCq4

1

kk

che formalmente si scrive M ′ = 〈q0, q1, q2, q3, q4, 0, 1, δ, q0, q0, q1, q2, q3〉.Dato l’NFA si ricava il DFA equivalente come visto nell’Esercizio 1.5. Definiamola matrice di transizione per il DFA, ottenuta rinominando gli stati nel seguente

2. PROPRIETA DEI LINGUAGGI REGOLARI 25

modo: p0 = q0, p1 = q1, p2 = q2, p3 = q3, p4 = q4, p5 = q1, q4,p6 = ∅. Gli stati mai raggiungibili da q0 e quelli non considerati nella traduzionedell’automa sono omessi per semplicita denotazionale.

0 1

p0 p5 p2

p1 p1 p6

p2 p6 p2

p3 p4 p6

p4 p6 p3

p5 p1 p3

p6 p6 p6

Disegnamo il DFA:

GFED@ABC?>=<89:;p00 //

1

GFED@ABC?>=<89:;p50 //

1

GFED@ABC?>=<89:;p1

0

1

xxGFED@ABC?>=<89:;p2

1

JJ0 // GFED@ABCp6

0,1

JJGFED@ABC?>=<89:;p3

1oo

0 // GFED@ABCp41oo

0

ff

definito come M = 〈p0, p1, p2, p3, p4, p5, p6, 0, 1, δ, p0, p0, p1, p2, p3, p5〉. Sap-piamo che questo automa riconosce effettivamente il linguaggio desiderato grazie aiteoremi che regolano le trasformazioni tra espressioni regolari e ε-NFA, tra ε-NFAe NFA, e tra NFA e DFA.Applicando l’algoritmo di minimizzazione, come negli esercizi precedenti, si control-la se l’automa ottenuto e quello minimo. Per prima cosa partizioniamo gli stati del-l’automa in due classi: C1 = p0, p1, p2, p3, p5 e C2 = p4, p6 dove C1 raccoglie glistati finali e C2 gli stati non finali. Partizioniamo quindi le classi, considerando gliarchi etichettati con 0: ovvero otteniamo la partizione p0, p5, p1p2p3p4, p6,ripetiamo il processo considerando gli archi etichettati con 1 e otteniamo la par-tizione p0, p2, p5p3, p1p4p6. Intersechiamo ora le due partizioni e otteniamop0, p5p2p1p3p4p6. Iteriamo il procedimento considerando nuovamente lo0: p0p1p2p3p4p5p6, a questo punto ci fermiamo dato che ogni classecontiene un solo stato; questo indica che l’automa e minimo. 2

2. Proprieta dei linguaggi regolari

In questa sezione vedremo come dimostrare alcune proprieta dei linguaggi re-golari. In particolare utilizzeremo il Pumping Lemma per i linguaggi regolari alfine di verificare quando un linguaggio non e regolare. A questo scopo quando unlinguaggio risulta essere intuitivamente non regolare, ovvero non contiene una certaregolarita nella definizione o necessita di una certa memoria per il suo riconosci-mento allora per ogni costante k, presa una particolare stringa z tale che |z| > k, sidimostra che per ogni suddivisione di z del tipo z = uvw tale che |uv| ≤ k e |v| > 0,

26 1. LINGUAGGI FORMALI

esiste sempre almeno un naturale i ∈ N tale che uviw non sta nel linguaggio chestiamo considerando.

Esercizio 2.1. Si dimostri che il linguaggio

L = 0n1m0m+n : m,n ≥ 0

non e regolare.

Soluzione. Vediamo che, per riconoscere una stringa del linguaggio bisogna teneretraccia della quantita iniziale di 1 e 0 e quindi il linguaggio e intutivamente nonregolare. Per dimostrare cio utilizziamo il Pumping Lemma. Supponiamo perassurdo che il linguaggio L sia regolare, allora per il Pumping Lemma dei linguaggiregolari ∃k ≥ 0 t.c. ∀z ∈ L tale che |z| ≥ k esistono u, v,w tali che z = uvw,|uv| ≤ k, |v| ≥ 1 e ∀i ≥ 0 uviw ∈ L. Ipotizziamo dunque esista k e prendiamo z ∈ Ltale che z = 0k1k02k allora |z| > k infatti |z| = 4k. Dobbiamo suddividere la stringa

z =

k︷ ︸︸ ︷00 . . . 0

k︷ ︸︸ ︷11 . . . 1

2k︷ ︸︸ ︷00 . . . 0

Vi e un unico tipo di suddivisione di z in u, v,w tale che |uv| ≤ k il quale consistein u = 0a, v = 0b con b ≥ 1, allora qualunque sia b risulta che (per i = 0)si ha uw = 0k−b1k02k e poiche 2k 6= k + k − b allora uw /∈ L, che e assurdoperche avevamo supposto che il linguaggio fosse regolare. Quindi avendo suppostoil linguaggio regolare si e arrivati a un assurdo perche abbiamo trovato una stringaper cui non vale il Pumping Lemma; si puo allora concludere che il linguaggio none regolare. 2

Esercizio 2.2. Dimostrare formalmente che il linguaggio

L =0n02n ∣∣ n ∈ N

non e regolare.

Soluzione. Intuitivamente il linguaggio non e regolare perche per accettare unastringa deve tenere memoria del numero di zeri che ha gia letto. Per dimostrareche L non e regolare utilizziamo il Pumping Lemma per i linguaggi regolari. Inparticolare dimostriamo che per ogni k ∈ N esiste una z ∈ L tale che |z| > k e taleche per ogni suddivisione z = uvw, tale che |uv| ≤ k e v > 0, esiste un naturalei ∈ N tale per cui uviw /∈ L.

Per ogni k prendiamo z = 0k02k

e per ogni suddivisione z = uvw dimostriamoche uv2w /∈ L. Sia |v| = m > 0 per le ipotesi del Pumping Lemma. E chiaro che|uvw| = k+2k per cui |uv2w| = k+2k +m. A questo punto perche la nuova stringa

uv2w stia in L la sua lunghezza deve essere k ′ + 2k ′

per qualche k ′ ∈ N, ovverok + 2k +m = k ′ + 2k ′

. Questo fatto implica che k ′ > k, essendo m > 0, e dunqueesiste m ′ ∈ N r 0 tale che k ′ = k+m ′, percui otteniamo le seguenti equazioni:

k + 2k +m = k +m ′ + 2k+m ′ ⇔m = m ′ + 2k+m ′

− 2k = m ′ + 2k(2m ′

− 1) > 2k > k

essendo m ′ > 0. A questo punto e evidente che l’unico modo perche uv2w stia inL e quello di prendere |v| = m > k, ma questo implica che |uv| ≥ |v| > k, ovverole uniche suddivisioni che permettono a uv2w di restare in L non sono ammissibilidal Pumping Lemma. Questo significa che, nelle ipotesi del Pumping Lemma,

2. PROPRIETA DEI LINGUAGGI REGOLARI 27

uv2w /∈ L, i.e. L non e regolare. 2

Esercizio 2.3. Dimostrare formalmente che il linguaggio

L =

x ∈ 0, 1∗

∣∣∣∣il numero di occorrenze di 0 in x euguale al numero di occorrenze di 1

non e regolare.

Soluzione. Il linguaggio non e intuitivamente regolare perche per accettare unastringa deve tenere memoria distintamente del numero di 0 e del numero di 1 letti.Per dimostrare che non e regolare usiamo il Pumping Lemma. Come nell’esercizioprecedente, per ogni costante k dobbiamo prendere una stringa del linguaggio lacui lunghezza e maggiore di k e poi dobbiamo ragionare sulle possibili suddivisionidella stringa. Sia allora, per ogni k, z = 0k1k. E evidente che questa e una stringadel linguaggio in quanto ha banalmente lo stesso numero di 0 e 1. A questo puntoprendiamo z = uvw tali che |uv| ≤ k e |v| > 0, e evidente che i queste condizioni vpuo solo contenere 0 e questo significa che per ogni i > 1 la stringa uviw contienepiu 0 che 1 e dunque non sta nel linguaggio L. Per la verifica formale consideriamo|v| = m, allora

∀i > 1 . uviw = 0k+m(i−1)1k

dove, essendo per ipotesi m > 0 e i > 1 si ha k +m(i − 1) > k, ovvero uviw /∈ L.Questo dimostra che L non e regolare. 2

Esercizio 2.4. Dimostrare formalmente che il linguaggio

L =0m1n1n0m

∣∣ m,n ∈ N, m+ n > 0

non e regolare.

Soluzione. Il linguaggio non e intuitivamente regolare perche per accettare unastringa nella lettura dell’ultimo gruppo di 0 e necessario ricordare il numero di0 letti all’inizio della stringa. Per dimostrare che L non e regolare utilizziamo ilPumping Lemma. Quindi per ogni k ∈ N prendiamo la stringa z = 0k+11k1k0k+1

che chiaramente sta in L e tale che ha sempre almeno due 0. A questo puntoprendiamo z = uvw tali che |uv| ≤ k e |v| > 0, e evidente che in queste condizioni vpuo solo contenere 0 e questo significa che per ogni i > 1 la stringa uviw contienepiu 0 nel primo gruppo che nell’ultimo gruppo di 0 e dunque non sta nel linguaggioL. Per la verifica formale consideriamo |v| = m, allora

∀i > 1 . uviw = 0k+m(i−1)1k1k0k

dove, essendo per ipotesi m > 0 e i > 1 si ha k +m(i − 1) > k, ovvero uviw /∈ L.Questo dimostra che L non e regolare. 2

Esercizio 2.5. Dimostrare formalmente che il linguaggio

L =x ∈ 0, 1∗

∣∣ x e palindrome

non e regolare.

28 1. LINGUAGGI FORMALI

Soluzione. Ricordiamo che una stringa e palindrome se e indifferente legger-la da destra a sinistra o da sinistra verso destra, ad esempio sono palindromi lestringhe anbman qualunque sia il valore dei naturali m ed n. Il linguaggio none intuitivamente regolare in quanto, un automa, per accettare una stringa devetenere memoria di come e fatta la prima meta della stringa per riconoscere la sec-onda meta. Per dimostrare che il linguaggio non e regolare utilizziamo il PumpingLemma. Dunque per ogni k ∈ N prendiamo z = 0k10k che charamente sta nellinguaggio. Consideriamo ora una generica suddivisione di z del tipo z = uvw taleche |uv| ≤ k e |v| > 0. In tal caso e evidente che in queste condizioni v puo solocontenere 0 e questo significa che per ogni i > 1 la stringa uviw contiene piu 0nel primo gruppo che nell’ultimo gruppo di 0 e dunque non sta nel linguaggio L.Formalmente possiamo verificare che se |v| = m allora

∀i > 1 . uviw = 0k+m(i−1)10k

dove, essendo per ipotesi m > 0 e i > 1 si ha k +m(i − 1) > k, ovvero uviw /∈ L.Questo dimostra che L non e regolare. 2

Esercizio 2.6. Dimostrare formalmente che il linguaggio

L =0n1m

∣∣ m,n ∈ N, n < m

non e regolare.

Soluzione. Il linguaggio non e intuitivamente regolare perche per accettare unastringa, quando conta il numero di 1 deve ricordarsi del numero di 0. Per dimostrareche il linguaggio non e regolare utilizziamo il Pumping Lemma. Dunque per ognik ∈ N prendiamo z = 0k1k+1 che chiaramente sta nel linguaggio. Consideriamoora una generica suddivisione di z del tipo z = uvw tale che |uv| ≤ k e |v| > 0.In tal caso e evidente che in queste condizioni v puo solo contenere 0 e dunqueposso sempre trovare un i tale che uviw porta il numero di 0 ad essere maggioredel numero di 1. Formalmente possiamo verificare che se |v| = m allora

uv2w = 0k+m1k+1

dove, essendo per ipotesi m > 0 si ha k +m ≥ k + 1, ovvero uv2w /∈ L. Questodimostra che L non e regolare. 2

3. Linguaggi context free

Una grammatica e un insieme di regole che permettono di generare un lin-guaggio. Un ruolo fondamentale tra le grammatiche e costituito dalle grammatichelibere dal contesto mediante le quali vengono solitamente descritti i linguaggi diprogrammazione. Un linguaggio generato da un tale grammatica e detto libero dalcontesto. Nei seguenti esercizi verra richiesto di trasformare grammatiche CF ingrammatiche in forma normale di Chomsky. Ricordiamo che una grammatica e informa normale di Chomsky se ogni produzione e nella forma: A → a o A → AB

oppure S → ε (solo una puo essere di questo tipo). E possibile ottenere la forma nor-male di Chomsky nel seguente modo. Prima di tutto definiamo una transizione conuna nuova variabile per ogni simbolo terminale, sostituendo le variabili ai simbolinelle transizioni esistenti. Dopo di che, dove ci sono piu di due variabili associamo

3. LINGUAGGI CONTEXT FREE 29

al gruppo dalla seconda in poi una nuova variabile mediante una transizione e sos-tituiamo nelle transizioni esistenti. In altri esercizi verra richiesto di dimostrare cheun linguaggio e CF, per far cio e sufficiente mostrare una grammatica CF che logenera e dimostrare che cio avviene. Ovvero bisogna dimostrare che ogni stringaappartiene al linguaggio se e solo se e generata dalla grammatica. In particolare sidimostra per induzione sulla lunghezza della stringa che ogni stringa nel linguag-gio e generata dalla grammatica e si dimostra per induzione sulla lunghezza delladerivazione che se esiste una derivazione nella grammatica allora la stringa generatasta nel linguaggio.Infine facciamo vedere come e possibile trasformare una generica grammatica in unain forma normale di Greibach e come si definisce l’automa a pila corrispondente.

Esercizio 3.1. Si definisca la grammatica CF in forma normale di Chomskyche genera tutte le stringhe palindrome sull’alfabeto 0, 1 (ad esempio abbiamo che00100, 010010 sono palindrome mentre 0101, 01001 non lo sono).

Soluzione. Consideriamo la seguente grammatica che genera stringhe palindromesui simboli 0, 1:

S → ε|0|1|0S0|1S1

Dimostriamo che tale grammatica genera effettivamente tutte e solo le stringhepalindromi. In particolare dobbiamo dimostrare che se x e palindrome allora es-iste una derivazione S ⇒∗ x e che se esiste una derivazione S ⇒∗ x allora x epalindrome. Il primo fatto viene dimostrato per induzione sulla lunghezza |x| dellastringa x, mentre il secondo fatto viene dimostrato per induzione sulla lunghezza kdella derivazione.1. x palindrome allora S ⇒∗ x: Per induzione su |x|.

Base: |x|=0, ovvero x = ε, ed e evidente che S → ε.Induzione: Supponiamo che per ogni y palindrome tale che |y| < k esiste

una derivazione S ⇒∗ y. Consideriamo x palindrome tale che |x| = k. Sex e palindrome allora x = uv oppure x = uav con a ∈ 0, 1 e u, v ∈ 0, 1∗

tali che v e uguale a u rovesciata. Se x = uv allora x = u ′aav ′, cona ∈ 0, 1, u = u ′a e v = av ′. Consideriamo ora y = u ′v ′, e facileverificare che y e ancora palindrome ed e tale che |y| < k, allora per ipotesiinduttiva abbiamo che S ⇒∗ y = u ′v ′. Ma allora esiste la derivazioneS ⇒∗ u

′Sv ′ per cui possiamo costruire la seguente derivazione:

S ⇒∗ u′Sv ′ → u ′aSav ′ → u ′aav ′ = x

Quindi abbiamo trovato una derivazione per x. Analogo il caso in cuix = uav.

2. S ⇒k x allora x palindrome: Per induzione su k.

Base: k = 1 allora S → ε, S → 0 e S → 1, dove ε, 0, 1 sono tutte palindromi.Induzione: Supponiamo che se S ⇒k x allora x e palindrome, vediamo cosa

succede se prendiamo una derivazione lunga k+1. Se x e palindrome allorax = uv oppure x = uav con a ∈ 0, 1 e u, v ∈ 0, 1∗, tali che v e ugualea u rovesciata. In ogni caso avere una derivazione per x significa averela derivazione S ⇒k−1 uSv, allora possiamo vedere cosa puo succedere ad

30 1. LINGUAGGI FORMALI

una generica derivazione lunga k + 1:

S ⇒k−1 uSv → uaSav → uaav (oppure uabav)

dove a, b ∈ 0, 1. Allora e evidente che in ogni caso otteniamo stringhepalindromi.

Ricordiamo che una grammatica e in forma normale di Chomsky se ogni produzionee nella forma: A → a o A → AB oppure S → ε (solo una puo essere di questotipo). Ecco come e possibile ottenere la forma normale di Chomsky. Prima ditutto definiamo una transizione con una nuova variabile per ogni simbolo terminale,sostituendo le variabili ai simboli nelle transizioni esistenti:

S → ε|0|1|ASA|BSB

A → 0

B → 1

Dopo di che, dove ci sono piu di due variabili associamo al gruppo dalla secondain poi una nuova variabile mediante una transizione e sostituiamo nelle transizioniesistenti.

S → ε|0|1|AD|BE

A → 0

B → 1

D→ SA

E → SB

ottenendo in tal modo la grammatica in forma normale di Chomsky. 2

Esercizio 3.2. Dimostrare formalmente che il linguaggio

L = 0n1m0m+n : m,n ≥ 0

e context free.

Soluzione. Costruiamo la grammatica G che genera L:

S → ε|A|B

A → 0A0|B|00

B → 1B0|10

Dimostriamo ora che tale grammatica genera esattamente L. Per far cio dobbiamodimostrare che quando una stringa x sta nel linguaggio, x ∈ L, allora esiste unaderivazione nella grammatica che genera x, S ⇒∗ x, mentre quando esiste unaderivazione nella grammatica per x, S ⇒∗ x, allora si ha che x ∈ L. Il primo fattoviene sempre dimostrato per induzione sulla lunghezza di x, mentre il secondo vienedimostrato per induzione sulla lunghezza della derivazione.1. x ∈ L allora S ⇒∗ x: Per induzione su |x|.

Base: Se |x| = 0, allora x = ε e per la definizione della grammatica abbiamoS → ε;

Induzione: Supponiamo che per ogni y ∈ L tale che |y| < k allora esisteuna derivazione in G per y, ovvero S ⇒∗ y. Prendiamo ora x ∈ L tale che|x| = k, allora esisteranno n,m ∈ N tali che x = 0n1m0m+n. Supponiamom ≥ 2 e consideriamo la stringa y = 0n1m−10m−1+n allora |y| < k equindi esiste una derivazione S ⇒∗ 0

n1m−10m−1+n = 0n1m−2100m−2+n.Per come e definita la grammatica, se esiste una derivazione come quella

3. LINGUAGGI CONTEXT FREE 31

appena descritta, allora ne esiste ua per S ⇒∗ 0n1m−2B0m−2+n quindi

possiamo costruire la derivazione

S ⇒∗ 0n1m−2B0m−2+n → 0n1m−21B00m−2+n

→ 0n1m−1100m−1+n = 0n1m0m+n = x

Quindi abbiamo trovato una derivazione per x. In modo del tutto analogopossiamo trovare derivazioni simili quando m < 2. Vediamo il caso in cuim = 1. Supponiamo allora che x = 0n100n, possiamo costruire la seguentederivazione considerando che per ipotesi induttiva esiste la derivazione per0n0n

S ⇒∗ 0nA0n → 0nB0n → 0n1B00n → 0n100n = x

Infine quando m = 0 allora ci basta mostrare che la grammatica permettesempre di generare una stringa di 0 di lunghezza pari, e questo e semplice-mente dimostrabile per induzione sulla lunghezza della stringa a partiredalla definizione della grammatica.

2. S ⇒k x allora x ∈ L: Per induzione su k.

Base: Se n = 1, allora l’unica derivazione di un solo passo e S → ε e perdefinizione di L abbiamo che ε ∈ L;

Induzione: Supponiamo che se una derivazione e di lunghezza k alloraS ⇒k y implichi y ∈ L. Consideriamo allora tutte le possibili derivazionidi lunghezza k + 1. Se y ∈ L allora significa che y = 02n, oppurey = 1n0n oppure y = 0n1m0n+m, per qualche n,m ∈ N. La di-mostrazione andrebbe fatta per tutti e tre i casi, noi ne considereremouno solo, essendo gli altri casi analoghi. Sia allora y = 0n1m0n+m taleche S ⇒k 0

n1m0n+m = 0n1m−1100n+m−1. Se una tale derivazione es-iste allora, per la definizione della grammatica si ha che esiste anche laderivazione S ⇒k−1 0

n1m−1B0n+m−1 ma allora possiamo costruire la solola seguente derivazione di lunghezza k + 1:

S ⇒k−1 0n1m−1B0n+m−1 → 0n1m−11B00n+m−1

→ 0n1m100n+m = 0n1m+10n+m+1 ∈ L

Analoghe dimostrazioni possono essere fatte per gli altri casi.

2

Esercizio 3.3. Sia |x|a definito come il numero di occorrenze del simbolo anella stringa x. Dimostrare formalmente che il linguaggio

L =x ∈ 0, 1∗

∣∣ |x|0 = |x|1

e context free.

Soluzione. Per dimostrare che un linguaggio e context free dobbiamo definireuna grammatica e dimostrare che il linguaggio e generato da questa grammatica.Vediamo dunque la grammatica che genera il linguaggio. Questa deve essere taleche ogniqualvolta aggiunge uno 0 (rispettivamente un 1) allora deve aggiungereanche un 1 (respettivamente uno 0).

S → ε|S0S1S|S1S0S

32 1. LINGUAGGI FORMALI

Dimostriamo ora che questa grammatica effettivamente genera tutte e sole le stringhedel linguaggio L1. In particolare dobbiamo dimostrare che se x ∈ L allora esiste unaderivazione S ⇒∗ x e che se esiste una derivazione S ⇒∗ x allora x ∈ L. Il primofatto viene dimostrato per induzione sulla lunghezza |x| della stringa x, mentre ilsecondo fatto viene dimostrato per induzione sulla lunghezza k della derivazione.1. x ∈ L allora S ⇒∗ x: Per induzione su |x|.

Base: |x| = 0, ovvero x = ε, allora notiamo che S → ε.Induzione: Supponiamo che per ogni y ∈ L tale che |y| < k allora esiste

una derivazione S ⇒∗ y. Prendiamo x ∈ L tale che |x| = k, allora peripotesi abbiamo che |x|0 = |x|1, in tal caso inoltre e immediato notareche in x deve esserci almeno un’occorrenza della stringa 01 oppure dellastringa 10. Supponiamo ci sia 01, l’altro caso e analogo. Dunque abbiamoche x = u01v, consideriamo la stringa y = uv, allora |y|0 = |x|0 − 1 =

|x|1 − 1 = |y|1, ovvero y ∈ L e |y| = h < k, quindi per ipotesi induttiva

abbiamo che S ⇒∗ y. E banale dimostrare che, per come e definita lagrammatica, se S ⇒∗ y, allora possiamo sempre riordinare le produzionidella derivazione in modo che, se y = y0y1y2 · · ·yn−1, allora

S ⇒∗ y0Sy1Sy2S . . . Syh−1S ⇒h y

ovvero possiamo portare tutte le produzioni del tipo S → ε alla fine delladerivazione, e prima di applicare queste abbiamo esattamente la stringafinale in cui ogni simbolo terminale si trova tra due simboli non terminaliS. Questo implica che se S ⇒∗ y = uv, allora esiste la derivazione

S ⇒ Sy0Sy1Sy2S . . . Syh−1S ⇒h−1 uSv → uv

e quindi possiamo costruire la derivazione per x

S ⇒ Sy0Sy1Sy2S . . . Syh−1S ⇒h−1 uSv → uS0S1Sv ⇒3 u01v = x

2. S ⇒k x allora x ∈ L: Per induzione su k.

Base: k = 1, allora S → ε, con ε ∈ L.Induzione: Supponiamo che se S ⇒k x allora x ∈ L, vediamo cosa succede

per le derivazioni lunghe k + 1. Se S ⇒k x allora, per come e definita lagrammatica, e evidente che per ogni coppia u, v ∈ 0, 1∗ tale che x = uv,esista una derivazione S ⇒k−1 uSv → x. Ma allora possiamo costruiresolo la seguente derivazione di lunghezza k + 1:

S ⇒k−1 uSv → uSaSbSv ⇒3 uabv

dove a, b ∈ 0, 1 con a 6= b e gli ultimi tre passi sono tutti applicazionidella produzione S → ε. Allora e evidente che |uabv|0 = |uv|0 + 1 =

|uv|1 + 1 = |uabv|1, ovvero anche la nuova stringa sta in L.

2

1Si noti che la grammatica S → ε|0S1|1S0 non general la stringa 0110 che invece sta nel

linguaggio L, quindi non puo essere la grammatica che genera L

3. LINGUAGGI CONTEXT FREE 33

Esercizio 3.4. Dimostrare formalmente che il linguaggio

L =0m1n1n0m

∣∣ m,n ∈ N, m+ n > 0

e context free.

Soluzione. Per dimostrare che un linguaggio e context free dobbiamo definireuna grammatica e dimostrare che il linguaggio e generato da questa grammatica.Vediamo dunque la grammatica che genera il linguaggio. Questa deve essere taleche ogniqualvolta aggiunge uno 0 allora deve aggiungerne un altro permettendo diespandere solo tra i due 0. Una volta finito di aggiungere 0 deve poter aggiungeresolo 1 e sempre a coppie. Almeno due 0 o due 1 ci devono essere essendom+n > 0.

S → 00|0S0|A

A → 11|1A1

Dimostriamo ora che questa grammatica effettivamente genera tutte e sole le stringhedel linguaggio L. In particolare dobbiamo dimostrare che se x ∈ L allora esiste unaderivazione S ⇒∗ x e che se esiste una derivazione S ⇒∗ x allora x ∈ L. Il primofatto viene dimostrato per induzione sulla lunghezza |x| della stringa x, mentre ilsecondo fatto viene dimostrato per induzione sulla lunghezza k della derivazione.1. x ∈ L allora S ⇒∗ x: Per induzione su |x|.

Base: |x| = 2, ovvero x = 00 oppure x = 11. Allora abbiamo le seguentiderivazioni:

S → 00

S → A → 11

Induzione: Supponiamo che per ogni y ∈ L tale che |y| < k si abbia S ⇒∗ y.Consideriamo x ∈ L tale che |x| = k, allora si avra che x = 0m1n1n0m =

0m1n−1111n−10m. Consideriamo y = 0m1n−11n−10m, e evidente che y ∈L e che |y| < k, quindi per ipotesi induttiva esiste la derivazione S ⇒∗ y.Ovvero esiste la derivazione S ⇒∗ 0

m1n−2A1n−20m → 0m1n−11n−10m =

y. A partire da questa derivazione possiamo allora costruire la seguentederivazione:

S ⇒∗ 0m1n−2A1n−20m → 0m1n−1A1n−10m → 0m1n1n0m = x

Analogo il caso in cui x sia composta solo da 0 o solo da 1.

2. S ⇒k x allora x ∈ L: Per induzione su k.

Base: k = 1, allora S → 00 e 00 appartiene a L.Induzione: Supponiamo che se S ⇒k x allora x ∈ L e vediamo cosa succede

ad una derivazione lunga k + 1. Se x ∈ L allora x = 0m1n1n0m e quindila derivazione e la seguente S ⇒k−1 0

m1n−1A1n−10m → 0m1n1n0m. Aquesto punto, a partire da tale derivazione, possiamo costruire la possibilederivazione lunga k+ 1.

S ⇒k−1 0m1n−1A1n−10m → 0m1nA1n0m → 0m1n+11n+10m ∈ L

Analoga la dimostrazione nel caso in cui x = 02m oppure x = 12n.

2

34 1. LINGUAGGI FORMALI

Esercizio 3.5. Dimostrare formalmente che il linguaggio

L =0n1m

∣∣ m,n ∈ N, n < m

e context free.

Soluzione. Per dimostrare che un linguaggio e context free dobbiamo definireuna grammatica e dimostrare che il linguaggio e generato da questa grammatica.Vediamo dunque la grammatica che genera il linguaggio. Questa deve essere taleche ogniqualvolta aggiunge uno 0 allora deve aggiungere un 1 espandendo sempretra 0 e 1, dopo deve aggiungere almeno un altro 1.

S → A|B

A → 0A1|B

B → 1|1B

Dimostriamo ora che questa grammatica effettivamente genera tutte e sole le stringhedel linguaggio L. In particolare dobbiamo dimostrare che se x ∈ L allora esiste unaderivazione S ⇒∗ x e che se esiste una derivazione S ⇒∗ x allora x ∈ L. Il primofatto viene dimostrato per induzione sulla lunghezza |x| della stringa x, mentre ilsecondo fatto viene dimostrato per induzione sulla lunghezza k della derivazione.1. x ∈ L allora S ⇒∗ x: Per induzione su |x|.

Base: |x| = 1, ovvero x = 1, ed esiste la derivazione S → B → 1.Induzione: Supponiamo che per ogni stringa y ∈ L tale che |y| < k si abbia

che S ⇒∗ y. Consideriamo x ∈ L tale che |x| = k, allora x = 0n1m conn < m. Consideriamo y = 0n−11m−1, allora e evidente che se n < m

allora n− 1 < m− 1, quindi y ∈ L e inoltre |y| < k. Per ipotesi induttivaabbiamo che S ⇒∗ y. In particolre, per come e definita la grammatica,la derivazione sara del tipo S ⇒∗ 0

n−1A1n−1 ⇒m−n 0n−11m−1 = y. Ma

allora a partire da questa derivazione possiamo definire la seguente per x.

S ⇒∗ 0n−1A1n−1 → 0nA1n ⇒m−n 0n1m = x

Analoga la dimostrazione nel caso in cui x = 1m.

2. S ⇒k x allora x ∈ L: Per induzione su k.

Base: k = 2 allora S → B → 1 e 1 ∈ L.Induzione: Supponiamo che se S ⇒k x allora x ∈ L, vediamo cosa succede

per una derivazione lunga k + 1. Se x ∈ L allora x = 0n1m, per cui laderivazione e del tipo S ⇒k−1 0

n1m−1B → 0n1m. A partire da questapossiamo allora costruire la possibile derivazione lunga k+ 1:

S ⇒k−1 0n1m−1B → 0n1mB → 0n1m+1 ∈ L

Analoga la dimostrazione nel caso in cui x = 1m.

2

Esercizio 3.6. Si trasformi la seguente grammatica in una in forma normaledi Greibach e si definisca l’automa a pila corrispondente.

S → AA|0

A → SS|1

3. LINGUAGGI CONTEXT FREE 35

Soluzione. Per prima cosa diamo un ordine alle variabili ridenominando le vari-abili nel seguente modo:

A1 → A2A2|0

A2 → A1A1|1

Passo 1: Poiche le parti a destra delle produzioni da A1 iniziano con terminalio con variabili di indice maggiore, consideriamo inizialmente solo la produzioneA2 → A1A1. In questa sostituiamo al posto della prima occorrenza diA1 le possibiliproduzioni per A1, in tal modo otteniamo la seguente grammatica equivalente:

A1 → A2A2|0

A2 → A2A2A1︸ ︷︷ ︸α1

| 0A1︸︷︷︸β1

| 1︸︷︷︸β2

Adesso applichiamo il Lemma dell’eliminazione della ricorsione sinistra (vedi dis-pense) alle produzioni dalla variabileA2 definendo la nuova variabile B e riscrivendole produzioni nel seguente modo:

A1 → A2A2|0

A2 → 0A1|1|0A1B|1B

B → A2A1|A2A1B

Passo 2: A questo punto tutte le derivazioni da A2, nella parte destra, inizianocon simboli terminali. Queste produzioni sono utilizzate per rimpiazzare A2 nellealtre produzioni:

A1 → 0A1A2|1A2|0A1BA2|1BA2 |0

A2 → 0A1|1|0A1B|1B

B → A2A1|A2A1B

Passo 3: Infine, quando tutte le variabili della grammatica originale sono nellaforma voluta, sistemiamo anche le derivazioni dalla nuova variabile B,

A1 → 0A1A2|1A2|0A1BA2|1BA2|0

A2 → 0A1|1|0A1B|1B

B → 0A1A1|1A1|0A1BA1|1BA1|0A1A1B|1A1B|0A1BA1B|1BA1B

ottenendo la grammatica in forma normale di Greibach equivalente alla grammat-ica data2.Costruiamo ora l’automa a pila che riconosce il linguaggio generato dalla grammat-ica data riscritta con i nomi delle variabili originali:

S → 0|0SA|0SBA|1A|1BA

A → 0S|0SB|1|1B

B → 0SS|0SBS|0SSB|0SBSB|1S|1SB|1BS|1BSB

2Notiamo che nel nostro caso, vista la semplicita della grammatica, i passi 2 e 3 potevano

essere fatti contemporaneamente, in generale questo non e possibile perche le parti destre delle

produzioni da B potrebbero iniziare con diversi simboli non terminali e non tutte con lo stesso

come nel nostro caso.

36 1. LINGUAGGI FORMALI

Definiamo quindi l’automa M = 〈q, 0, 1, S,A, B, q, S, ∅, f〉 dove la funzione ditransizione f e definita dalla seguente tabella:

q ε 0 1

S q, ε q,A

q, SA q, BA

q, SBA

A q, S q, ε

q, SB q, B

B q, SS q, S

q, SBS q, SB

q, SSB q, BS

q, SBSB q, BSB

2

4. Proprieta dei linguaggi context free

In questa sezione vedremo come dimostrare alcune proprieta dei linguaggi con-text free. In particolare utilizzeremo il Pumping Lemma per i linguaggi centext freeal fine di verificare quando un linguaggio non e context free. A questo scopo quan-do un linguaggio risulta essere intuitivamente non context free, ovvero necessita didi memorizzare piu informazioni per il riconoscimento delle sue stringhe allora perogni costante k, presa una particolare stringa z tale che |z| > k, si dimostra cheper ogni suddivisione di z del tipo z = uvwxy tale che |vwx| ≤ k e |vx| > 0, esistesempre almeno un naturale i ∈ N tale per cui uviwxiy non sta nel linguaggio chestiamo considerando.

Esercizio 4.1. Si verifichi formalmente se i linguaggi

L1 =02n10n

∣∣ n ∈ N

L2 =02n10n2 ∣∣ n ∈ N

sono context free (nel caso lo siano trovare la grammatica, dimostrare la sua cor-rettezza e evidenziare dove fallisce il Pumping Lemma).

Soluzione. Consideriamo L1, e facile notare che il linguaggio e context free, inparticolare esso e generato dalla grammatica S → 1 | 00S0. Dimostriamo talefatto formalmente. Supponiamo x ∈ L1 allora dobbiamo dimostrare, per induzionesu |x| che esiste una derivazione S ⇒∗ x. Se |x| = 1, ovvero x = 1, allora eevidente che S → 1. Supponiamo che per ogni stringa y ∈ L1 tale che |y| < k

si abbia S ⇒∗ y, consideriamo x ∈ L1 tale che |x| = k. Se x ∈ L1 allora x =

02n10n. Prendiamo ora y = 02n−210n−1, e evidente che y ∈ L1 e che |y| < k,allora per ipotesi induttiva abbiamo che S ⇒∗ y. Quindi abbaimo la derivazione

4. PROPRIETA DEI LINGUAGGI CONTEXT FREE 37

S ⇒∗ 02n−2S0n−1 → 02n−210n−1. Allora a partire da tale derivazione possiamo

costruire quella per x:

S ⇒∗ 02n−2S0n−1 → 02n−200S00n−1 = 02nS0n → 02n10n = x

D’altra parte dimostriamo ora che se S ⇒k x allora x ∈ L1 per induzione su k. Sek = 1 allora S → 1 e 1 ∈ L1. Supponiamo ora che se S ⇒k x allora x ∈ L1, vediamocosa succede alle derivazioni lunghe k + 1. Se x ∈ L1 allora x = 02n10n, quindi laderivazione e del tipo S ⇒k−1 0

2nS0n → 02n10n. A partire da questa possiamodescrivere la derivazione lunga k + 1:

S ⇒k−1 02nS0n → 02n00S00n = 02n+2S0n+1 → 02n+210n+1 ∈ L1

Quindi abbiamo dimostrato che il linguaggio e context free. Vediamo ora dovesarebbe fallito il Pumping Lemma se avessimo provato ad utilizzarlo per dimostrareche il linguaggio non era context free. Per ogni k ∈ N prendiamo la stringa z =

02k10k e consideriamo ogni possibile suddivisione z = uvwxy. Se v o x contiene 1allora banalmente per ogni i > 1 si ha che uviwxiy /∈ L1. Se v e x sono entrambenel primo o nel secondo gruppo di 0 allora ancora banalmente abbiamo che per ognii > 1 si ha uviwxiy /∈ L1 perche il primo gruppo non conterrebbe piu esattamenteil doppio di 0 rispetto al secondo. Consideriamo infine v nel primo gruppo e x nelsecondo, allora uviwxiy = 0k ′

10k ′′

dove k ′ = 2k + |v|(i − 1) e k ′′ = k + |x|(i − 1).Allora uviwxiy ∈ L1 se e solo se k ′ = 2k ′′ e questo vale per ogni suddivisionetale che |v| = 2|x|. Questo significa che per ogni z ∈ L1 trovo una suddivisioneche rispetta le ipotesi del Pumping Lemma e tale per cui uviwxiy ∈ L1, ovvero ilteorema non dice nulla sul linguaggio L1.

Consideriamo ora L2, in particolare dimostriamo che tale linguaggio non econtext free. Per provare cio utilizziamo il Pumping Lemma per i linguaggi contextfree, ovvero per ogni costante k troviamo una stringa z del linguaggio tale che |z| ≥ ke, per ogni suddivisione z = uvwxy tale che |vwx| < k e |vx| > 0, dimostriamo cheesiste almeno un i ∈ N tale per cui uviwxiy non appartiene al linguaggio. Per ogni

k ∈ N prendiamo la stringa z = 02k10k2

e consideriamo ogni possibile suddivisionez = uvwxy. Se v o x contiene 1 allora banalmente per ogni i > 1 si ha cheuviwxiy /∈ L2 perche aumenta il numero di 1. Se v e x sono entrambe nel primo onel secondo gruppo di 0 allora ancora banalmente abbiamo che per ogni i > 1 si hauviwxiy /∈ L2 perche il primo gruppo non conterrebbe piu un numero di 0 che stanella stessa relazione rispetto al numero di 0 del secondo. Consideriamo infine v nel

primo gruppo e x nel secondo, allora uviwxiy = 02h ′

10h2

dove 2h ′ = 2k+ |v|(i−1)

e h2 = k2 + |x|(i − 1). Vediamo con quali ipotesi sulla suddivisione otteniamouviwxiy ∈ L2. Quest’ultimo fatto avviene se e solo se h ′ = h, ovvero se il seguentesistema ha soluzione:

2h = 2k + |v|(i− 1)

h2 = k2 + |x|(i− 1)

che puo essere risolto come4h2 = 4k2 + |v|2(i − 1)2 + 4k|v|(i − 1)

4h2 = 4k2 + 4|x|(i− 1)

da cui l’equazione

4k2 + |v|2(i− 1)2 + 4k|v|(i − 1) = 4k2 + 4|x|(i− 1) semplificando4|x| = 4k|v| + |v|2(i − 1)

38 1. LINGUAGGI FORMALI

Ora per ogni i > 1 si ha che |v| > 0, altrimenti |vx| = 0, e quindi 4|x| > 4k|v| ovvero|x| > k|v|, ma questo implica che |vwx| ≥ |vx| > k. Sappiamo pero che una talesuddivisione non e accettata nel Pumping Lemma, quindi per ogni suddivisione cherispetta le condizioni del torema si ha che uviwxiy /∈ L2, ovvero il linguaggio none context free. 2

Esercizio 4.2. Si dimostri formalmente che i linguaggi

L1 =0k02k2 ∣∣ k ∈ N

L2 =0k02k ∣∣ k ∈ N

non sono context free.

Soluzione. Consideriamo L1 e dimostriamo che non e context free. Per provare cioutilizziamo il Pumping Lemma per i linguaggi context free, ovvero per ogni costantek troviamo una stringa z del linguaggio tale che |z| ≥ k e, per ogni suddivisionez = uvwxy tale che |vwx| < k e |vx| > 0, dimostriamo che esiste un i ∈ N tale percui uviwxiy non appartiene al linguaggio. Per ogni k ∈ N prendiamo la stringa

z = 0k02k2

e consideriamo ogni possibile suddivisione z = uvwxy. Dimostriamoche per ogni suddivisione abbiamo che uv2wx2y /∈ L1, per fare cio consideriamo lalunghezza di questa nuova stringa |uv2wx2y| = |z| + |vx| = k + 2k2 + |vx|, perchetale stringa stia il L1 e evidente che deve esistere un h ∈ N tale che k+ 2k2 + |vx| =

h + 2h2. Naturalmente da tale relazione si ha h > k, ovvero esiste n > 0 tale cheh = k + n, quindi la relazione si riscrive nella seguente equazione:

k + 2k2 + |vx| = k+ n+ 2(k + n)2 = k+ n+ 2k2 + 2n2 + 4kn

da cui risolvendo si ottiene la relazione |vx| = 4kn+2n2 +n > k essendo n > 0, maallora |vwx| ≥ |vx| > k. Questo significa che le uniche suddivisioni che permettono auv2wx2y di restare nel linguaggio non sono ammesse dal Pumping Lemma e quindiL1 non e context free.

Consideriamo ora L2 e dimostriamo che non e context free. Per provare cioutilizziamo il Pumping Lemma per i linguaggi context free, ovvero per ogni costantek troviamo una stringa z del linguaggio tale che |z| ≥ k e, per ogni suddivisionez = uvwxy tale che |vwx| < k e |vx| > 0, dimostriamo che esiste un i ∈ N tale percui uviwxiy non appartiene al linguaggio. Per ogni k ∈ N prendiamo la stringa

z = 0k02k

e consideriamo ogni possibile suddivisione z = uvwxy. Dimostriamoche per ogni suddivisione abbiamo che uv2wx2y /∈ L2, per fare cio consideriamo lalunghezza di questa nuova stringa |uv2wx2y| = |z|+ |vx| = k+ 2k + |vx|, perche talestringa stia il L2 e evidente che deve esistere un h ∈ N tale che k+2k2+|vx| = h+2h.Naturalmente da tale relazione si ha h > k, ovvero esiste n > 0 tale che h = k+n,quindi la relazione si riscrive nella seguente equazione:

k+ 2k + |vx| = k + n + 2(k+n) = k + n + 2k2n

da cui risolvendo si ottiene la relazione |vx| = 2k(2n − 1) + n > 2k > k essendon > 0, ma allora |vwx| ≥ |vx| > k. Questo significa che le uniche suddivisioni chepermettono a uv2wx2y di restare nel linguaggio non sono ammesse dal PumpingLemma e quindi L2 non e context free. 2

4. PROPRIETA DEI LINGUAGGI CONTEXT FREE 39

Esercizio 4.3. Si dimostri formalmente che il linguaggio

L =0n∣∣ n e primo

non e context free.

Soluzione. Dimostriamo che il linguaggio non e context free. Per provare cioutilizziamo il Pumping Lemma per i linguaggi context free, ovvero per ogni costantek troviamo una stringa z del linguaggio tale che |z| ≥ k e, per ogni suddivisionez = uvwxy tale che |vwx| < k e |vx| > 0, dimostriamo che esiste un i ∈ N tale percui uviwxiy non appartiene al linguaggio. Per ogni k ∈ N prendiamo la stringaz = 0n dove n e il piu piccolo numero primo tale che n ≥ k, e consideriamo ognipossibile suddivisione z = uvwxy. Dimostriamo che per ogni suddivisione abbiamoche per almeno un i > 0 si ha uviwxiy /∈ L, per fare cio consideriamo la lunghezzadi questa nuova stringa:

|uviwxiy| = |z| + |v|(i− 1) + |x|(i− 1) = n + |vx|(i− 1)

Prendiamo ora i = n+1, allora otteniamo |uvn+1wxn+1y| = n+ |vx|n = n(|vx|+1).Adesso, poiche sappiamo per ipotesi che |vx| > 0 allora |uvn+1wxn+1y| 6= n ed edivisibile sia per n che per |vx| + 1, ovvero non e primo, quindi non appartiene adL. Abbiamo in tal modo dimostrato che L non e context free. 2

Esercizio 4.4. Si consideri il linguaggio

L =0m10n10mn

∣∣ m,n ∈ N

Si dimostri che L non e context free.

Soluzione. Dimostriamo che il linguaggio non e context free. Per provare cioutilizziamo il Pumping Lemma per i linguaggi context free, ovvero per ogni costantek troviamo una stringa z del linguaggio tale che |z| ≥ k e, per ogni suddivisionez = uvwxy tale che |vwx| < k e |vx| > 0, dimostriamo che esiste un i ∈ N tale percui uviwxiy non appartiene al linguaggio. Per ogni k ∈ N prendiamo la stringa

z = 0k10k10k2

e consideriamo ogni possibile suddivisione z = uvwxy. Dimostriamoche per ogni suddivisione abbiamo che si ha uv2wx2y /∈ L. Andiamo per casi. Sev, oppure x, contiene almeno uno degli 1 allora e evidente che uv2wx2y /∈ L inquanto aumenta il numero di 1. Se entrambi v e x sono nello stesso gruppo di 0allora e ancora evidente che uv2wx2y /∈ L in quanto si aumenta un gruppo di 0senza aumentare gli altri due perdendo la relazione tra le quantita di 0 dei diversigruppi. supponiamo allora che v e x siano in gruppi di zeri diversi. In particolaresupponiamo che v sia nel primo gruppo e x sia nel secondo. Questo significa che

uv2wx2y = 0k+|v|10k+|x|10k2

. Perche tale stringa stia nel linguaggio deve valereche k2 = (k + |v|)(k + |x|) = k2 + k|vx| + |v||x|, ovvero k|vx| + |v||x| = 0, possibile see solo se |vx| = 0 e dunque non ammesso dal Pumping Lemma. Infine notiamo cheabbiamo esaurito tutti i casi. Infatti non puo accadere che v sia nel primo gruppodi 0 e x nel terzo perche cio significherebbe che |w| > k, ovvero che |vwx| > k,assurdo per ipotesi. Percui la dimostrazione che L non e context free e conclusa. 2

Esercizio 4.5. Si consideri il linguaggio

L =a1a2b1b2 . . . bn ∈ Σ∗

∣∣ n ≥ 2, ∃k < n . a1a2 = bkbk+1

40 1. LINGUAGGI FORMALI

e si dimostri che L ′ =a1a2b1b2 . . . bn ∈ L

∣∣ n e potenza di 2

non e contextfree.

Soluzione. Dimostriamo che il linguaggio non e context free. Per provare cioutilizziamo il Pumping Lemma per i linguaggi context free, ovvero per ogni costantek troviamo una stringa z del linguaggio tale che |z| ≥ k e, per ogni suddivisionez = uvwxy tale che |vwx| < k e |vx| > 0, dimostriamo che esiste un i ∈ N tale percui uviwxiy non appartiene al linguaggio. Per ogni k ∈ N prendiamo la stringaz = a1a2b1b2 . . . bn con n = 2k e consideriamo ogni possibile suddivisione z =

uvwxy. Dimostriamo che per ogni suddivisione abbiamo uv2wx2y /∈ L, per farecio consideriamo la lunghezza di questa nuova stringa, sapendo che |z| = 2 + 2k:

|uv2wx2y| = |z| + |vx| = 2 + 2k + |vx|

2

Perche tale stringa stia nel linguaggio, in particolare deve anche esistere un h ∈ Ntale che 2 + 2k + |vx| = 2 + 2h. Essendo l’esponenziale una funzione crescente eevidente che tale relazione implica che h > k, essendo |vx| > 0, dunque esiste m > 0

tale che h = k+m. Possiamo percio riscrivere l’equazione come 2k + |vx| = 2k+m =

2k2m, ovvero |vx| = 2k(2m − 1) > 2k > k essendo m > 0. Questo significa chele uniche suddivisioni che permetterebbero a uv2wx2y di restare in L non sonoammesse dal Pumping Lemma. Ovvero abbiamo dimostrato che L non e contextfree.

Esercizio 4.6. Sia Σ = 0, 1 e si consideri la famiglia, al variare di i ∈ N, diinsiemi:

S(i) = w ∈ Σ∗ : il simbolo i-esimo di w a partire da sinistra e uno 0

Si collochino nella gerarchia di Chomsky i linguaggi:

L1 =⋃

i e un numero dispari

S(i)

L2 =⋃

i e un quadrato perfetto

S(i)

In particolare,

(1) Qualora uno di loro sia regolare, se ne fornisca l’automa minimo che loaccetta. Si dimostri che e minimo e che accetta esattamente tale linguag-gio.

(2) Qualora uno di loro non sia regolare, lo si dimostri formalmente. Si ver-ifichi inoltre l’appartenenza (o meno) all’insieme dei linguaggi liberi dalcontesto.

Soluzione. Consideriamo prima il linguaggio:

L1 =⋃

i e un numero dispari

S(i)

Il linguaggio L1 contiene tutte le stringhe del tipo: 0xxx . . . , xx0x . . . , xxxx0x . . . ,ecc. con x ∈ 0, 1. Questo linguaggio e regolare, infatti riusciamo a costruire unautoma che lo descrive:

4. PROPRIETA DEI LINGUAGGI CONTEXT FREE 41

GFED@ABCq0

1 //

0

GFED@ABCq1

0,1oo

GFED@ABC?>=<89:;q2

0,1

77

descritto come M = 〈q0, q1, q2, 0, 1, δ, q0, q2〉. Dimostriamo ora che L1 =

L(M) dimostrando separatamente che: se x ∈ L1 allora x ∈ L(M), mentre se x /∈ L1

allora x /∈ L(M). Dimostriamo entrambe le cose per induzione sulla lunghezza dellastringa. Notiamo comunque che e banale dimostrare (sempre per induzione sulla

lunghezza della stringa) che se z /∈ L1 allora quando |z| e pari si ha che δ(q0, z) = q0,

mentre quando |z| e dispari allora δ(q0, z) = q1.

Base:: Sia |x| = 1. Se x = 0 allora, per definizione di L1, si ha che x ∈ L1

e per definizione di M abbiamo δ(q0, 0) = q2 ∈ F, ovvero x ∈ L(M). Seinvece x = 1, allora x /∈ L1 e inoltre per definizione di M abbiamo cheδ(q0, 1) = q1 /∈ F;

Induzione:: Supponiamo che se |y| = n e y ∈ L1 allora y ∈ L(M), mentre sey /∈ L1 allora y /∈ L(M). Consideriamo allora x = ya tale che |x| = n + 1.Se y ∈ L1 allora esiste i ∈ N dispari tale che yi = 0, ma tale 0 si trovain posizione dispari anche dentro x = ya, quindi x ∈ L1. D’altra parte

notiamo che, per ipotesi induttiva si ha δ(q0, y) = q2 ∈ F, allora per

definizione diM, qualunque sia a, abbiamo δ(q0, ya) = δ(q2, a) = q2 ∈ F.Se invece y /∈ L1 allora non esiste in y nessuna posizione dispari contenente0. A questo punto se a = 1 allora siamo sicuri che x = ya /∈ L1. D’altra

parte, in tal caso, sappiamo per ipotesi induttiva che δ(q0, y) /∈ F e per

come e definito M, questo implica che anche δ(q0, ya) /∈ F.Consideriamo ora a = 0, in tal caso se n + 1 e dispari allora x ∈ L1.Inoltre questo significa che n e pari quindi, per quanto detto abbiamo che

δ(q0, ya) = δ(q0, a) = q2 ∈ F. Se infine n + 1 e pari allora e evidente

che x = ya /∈ L1 e d’altra parte si ha che n e dispari quindi δ(q0, ya) −

δ(q1, a) = q0 /∈ F.

Banalmente si dimostra la minimalita di tale automa.

Consideriamo ora il linguaggio:

L2 =⋃

i e un quadrato perfetto

S(i)

Notiamo che la condizione di essere un quadrato perfetto non e, intuitivamente, unacondizione che rappresenta un fatto regolare, in quanto i quadrati perfetti cresconoin modo esponenziale, e dunque difficile che esistano un automa o una grammaticacapaci di riconoscerlo, per questo dimostriamo direttamente che il linguaggio non eCF. Dimostriamo cio usando il Pumping Lemma per i linguaggi CF (non essendoCF, non e nemmeno regolare, dato che i linguaggi regolari sono un sottoinsiemedei linguaggi CF). Percio per ogni costante k troviamo una stringa z del linguaggio

42 1. LINGUAGGI FORMALI

tale che |z| ≥ k e, per ogni suddivisione z = uvwxy tale che |vwx| < k e |vx| > 0,dimostriamo che esiste un i ∈ N tale per cui uviwxiy non appartiene al linguaggio.Allora preso k ≥ 0 consideriamo

z =

h−1︷ ︸︸ ︷1 . . . 1 0

dove h = k2. Dimostriamo che qualunque sia la lunghezza |vx| si ha che la stringauv2wx2y /∈ L. Per prima cosa supponiamo che sia v che x siano nel gruppo di 1.Allora notiamo che

|uv2wx2y| = |z| + |vx| = k2 + |vx|

Affinche tale stringa stia il L deve esistere m ∈ N tale che k2 + |vx| = m2, ovvero lalunghezza della nuova stringa deve ancora essere un quadrato. Essendo il quadratouna funzione crescente ed essendo, per ipotesi del Pumping Lemma, |vx| > 0 siha che m > k quindi ∃n ∈ N . m = k + n con n > 0. Questo significa chek2 + |vx| = (k + n)2 = k2 + 2kn + n2, ovvero |vx| = 2kn + n2. Poiche n estrettamente maggiore di 0, altrimenti |vx| = 0, si ha che l’equazione appena scrittaimplica |vx| > k, assurdo perche le ipotesi del Pumping Lemma impongono |vx| ≤ k.Consideriamo ora invece il caso in cui v o x comprendano lo 0 finale. Allora notiamoche uv0wx0y = 1h per qualche h ∈ N e questo chiaramente significa che la nuovastringa non ha nessuno 0 in una posizione che e un quadrato perfetto perche nonha 0 in assoluto. Questo significa che il linguaggio dato non e CF. 2

CAPITOLO 2

Modelli formali per il calcolo

1. Macchine di Turing

Le Macchine di Turing sono un modello per rappresentare in modo formaleuna macchina in grado di eseguire algoritmi costituiti da passi elementari e discretidi calcolo. Una Macchina di Turing (MdT) e completamente definita dalla ma-trice funzionale che definisce la funzione δ di transizione tra le configurazioni dellamacchina. Una configurazione e rappresentata da una coppia 〈sj, qi〉 costituita dalsimbolo letto sul nastro sj e dallo stato corrente della macchina qi. Ad ogni con-figurazione corrisponde un’azione Ak che consiste in uno spostamento della testinaverso destra (R) o sinistra (L). Il comportamento di una MdT e quindi descrivibilemediante una tabella in cui le righe rappresentano gli stati del controllo mentrele colonne rappresentano i simboli di ingresso. In una generica cella della matriceviene descritta l’azione eseguita dalla macchina nello stato corrispondente in riga eleggendo dal nastro il simbolo corrispondente in colonna.

sj

qi qr sk L

In questo caso, l’azione compiuta, essendo il controllo nello stato qi e leggendoil simbolo sj, e in questo caso:

• Scrivere il simbolo sk al posto di sj;• Portarsi nello stato (interno) qr;• Spostare la testina sul nastro a sinistra (L).

Il tipico problema riguardante i modelli formali per il calcolo e quello di codi-ficare un algoritmo per risolvere un dato problema in uno dei formalismi scelto, adesempio le Macchine di Turing. Prima di svolgere alcuni esercizi proviamo a dareuno schema generale per la risoluzione di problemi di questo tipo, nel caso delleMacchine di Turing.

Si inizia col definire quale e la configurazione da cui la nostra macchina inizierala computazione e quale sara la configurazione alla fine. A questo punto descriv-iamo l’algoritmo con il quale intendiamo risolvere il problema. Scendendo poi indettaglio, definiamo l’insieme di simboli necessari e il perche della loro introduzione.Definiamo infine l’insieme degli stati che vogliamo utilizzare descrivendo, per og-nuno, quali operazioni esegue la macchina e in che modo evolve la computazione.Ogni stato introdotto deve essere quindi descritto in termini delle informazioni chequesto stato descrive rispetto alla computazione prevista per la macchina. Alla finecostruiamo la matrice di transizione che definisce la funzione di transizione δ.

43

44 2. MODELLI FORMALI PER IL CALCOLO

Esercizio 1.1. Costruire una Macchina di Turing che ordina in modo crescenteda sinistra a destra una sequenza di 0, 1 sapendo che 0 < 1.

Soluzione.

La configurazione iniziale da cui parte la computazione e del tipo

. . . $ $ $ 1

⇑q0

1 0 . . . 1 0 $ $ $ . . .

mentre quella finale, con la stringa ordinata, e

. . . $ $ $ $⇑q3

0 . . . 1 $ $ $ . . .

Descriviamo ora l’algoritmo con cui vogliamo risolvere il nostro problema e la fun-zione di ogni stato della Macchina di Turing che stiamo costruendo. Per ordinareuna sequenza di 0 e 1 possiamo pensare di scorrere la stringa da sinistra a destrafinche non incontriamo un 1; a questo punto vogliamo cercare uno 0 con cui scam-biarlo, allora scorriamo tutta la stringa verso destra per cercare il primo 0 da destra.Una volta trovato eseguiamo lo scambio e ripetiamo l’algoritmo fino al completoordinamento della stringa.

L’insieme dei simboli che utilizzeremo e Σ = $,&, 0, 1, dove & verra utilizzatoper marcare gli 1 da spostare.Infine gli stati necessari sono

q0 =: la macchina va a destra finche non trova il primo 1 da spostare, quandolo trova lo marca con un & e va in q1.

q1 =: scorre la stringa a destra fino in fondo e va in q2.q2 =: torna a sinistra cercando il primo 0 da sostituire con un 1, se lo trova

lo sostituisce se invece trova prima un & vuol dire che la stringa e giaordinata e rimette 1 al posto di &; in ogni caso la macchina va nello statoq3.

q3 =: scorre la stringa a sinistra, se trova & lo sostituisce con uno 0 comple-tando lo scambio e va in q0, altrimenti scorre tutta la stringa e termina.

Dunque una possibile definizione della funzione δ e

δ $ & 0 1

q0 q0 0 R q1 & R

q1 q2 $ L q1 0 R q1 1 R

q2 q3 1 L q3 1 L q2 1 L

q3 q0 0 L q3 0 L q3 1 L

Si osservi che qualora la stringa sia nulla, il comportamento della macchina ecomunque consistente con quanto specificato dell’esercizio.

2

Esercizio 1.2. Costruire la Macchina di Turing che calcoli la somma di duenumeri forniti in notazione binaria.

1. MACCHINE DI TURING 45

Soluzione. Supponiamo di inserire i due numeri di seguito separati da $ e cheall’inizio della computazione la testina sia sulla cifra meno significativa del secondonumero a partire da sinistra, cioe supponiamo che la configurazione iniziale sia deltipo

. . . $ $ $ 1 0 $ 1 0

⇑q0

$ $ $ . . .

mentre quella finale, con la testina alla destra del risultato, e del tipo

. . . $ $ $1 0 0 $⇑q0

1 1 $ $ $ . . .

dove alla destra della testina troviamo una sequenza di 1 priva di significato.Vediamo ora l’algoritmo che intendiamo implementare. Per eseguire la somma

procediamo eseguendo una successione dei seguenti passi: sottraiamo un’unita alnumero a destra della posizione iniziale e successivamente aggiungiamo l’unita all’al-tro numero fino a quando il primo diventa una stringa di 0. Per la costruzione dellaMacchina di Turing che eseguira la somma useremo l’insieme di simboli Σ = $, 0, 1,mentre gli stati necessari sono

q0 =: la macchina esegue la sottrazione binaria togliendo un’unita al numeroa destra e va in q1; se il numero e gia zero allora la macchina rimane inq0 e quando trova $ termina.

q1 =: scorre la stringa a sinistra fino al $ tra i due numeri e va in q2.q2 =: esegue la somma binaria di un’unita al numero a sinistra e va in q3.q3 =: scorre la stringa a destra fino al $ tra i due numeri e va in q4.q4 =: scorre ancora la stringa a destra finche la testina non si trova dopo

entrambi i numeri e va in q0.

Percio una possibile definizione della funzione δ e

δ $ 0 1

q0 q0 1 L q1 0 L

q1 q2 $ L q1 0 L q1 1 L

q2 q3 1 R q3 1 R q2 0 L

q3 q4 $ R q3 0 R q3 1 R

q4 q0 $ L q4 0 R q4 1 R

2

Esercizio 1.3. Definire una Macchina di Turing che decida quale tra duestringhe di zeri sia la piu lunga e descrivere il modo utilizzato dalla macchina perfornire la risposta.

Soluzione. Vediamo da quale tipo di configurazione iniziale partira la macchina

. . . $ $ $ 0 . . . 0 I

⇑q0

0 . . . 0 $ $ $ . . .

46 2. MODELLI FORMALI PER IL CALCOLO

dove I e un simbolo nuovo che utilizziamo per dividere le due stringhe di zeri. Allafine della computazione ci possiamo trovare in due situazioni. Se le due stringhesono uguali esse si troveranno alla sinistra della testina, altrimenti la stringa piulunga si trovera alla destra di quest’ultima.

Descriviamo ora l’algoritmo con cui intendiamo risolvere il problema. Comin-ciamo cercando e marcando il primo zero a sinistra del simbolo I, a questo puntoritorniamo in centro e andiamo a cercare e marcare il primo zero nella stringa didestra. Successivamente riportiamo la testina al centro e ripetiamo il procedimento.Se non trovo piu zeri andando verso sinistra allora controllo a destra, se ci sonoancora zeri significa che la stringa a destra e piu lunga altrimenti sono uguali. Seinvece non trovo piu zeri andando verso destra allora la stringa piu lunga e quelladi sinistra.

L’insieme di simboli che utilizzeremo e Σ = $,&, ∗, I, 0, dove I va inseritoper dividere le stringhe, & viene usato per marcare gli zeri contati nella stringa disinistra mentre ∗ viene usato per marcare gli zeri contati nella stringa di destra.Infine descriviamo gli stati necessari

q0 =: la macchina cerca il primo zero verso sinistra, lo marca e va in q1; senon trova alcuno zero allora va in q2.

q1 =: scorre la sequenza verso destra cercando il primo zero nell’altra stringa,quando lo trova lo marca e va in q0. Se non trova zeri la macchina va inq4.

q2 =: la macchina torna verso destra dopo non aver trovato zeri a sinistra;se non trova altri zeri decide che le stringhe sono uguali e termina, seinvece trova almeno uno zero va in q3.

q3 =: scorre la sequenza e si ferma tra le due stringhe decidendo che quelladi destra e piu lunga.

q4 =: scorre tutta la sequenza verso sinistra e termina decidendo che lastringa di sinistra e piu lunga.

A questo punto definiamo la funzione δ che implementa l’algoritmo appena descritto

δ $ 0 I & ∗q0 q2 $ R q1 & R q0 I L q0 & L q0 ∗ Lq1 q4 $ L q0 ∗ L q1 I R q1 & R q1 ∗ Rq2 q3 0 L q2 I R q2 0 R q2 0 R

q3 q3 0 L q3 0 L

q4 q4 0 L q4 I L q4 0 L q4 0 L

Come si puo notare, abbiamo definito la funzione in modo che alla fine dellacomputazione le stringhe siano nuovamente di zeri. 2

Esercizio 1.4. Si definisca la Macchina di Turing che sposta la testina di nposizioni a destra rispetto alla posizione iniziale supponendo che n sia fornito innotazione binaria.

Soluzione. Supponiamo che la macchina parta da una configurazione iniziale deltipo

. . . $ $ $ 0 1 . . . 1 0 I

⇑q0

$ $ $ . . .

1. MACCHINE DI TURING 47

dove il numero n e inserito alla sinistra della posizione iniziale.Alla fine della computazione la testina si trovera spostata di n posizioni a de-

stra rispetto al simbolo I che rappresenta la posizione iniziale. L’algoritmo cheintendiamo implementare consiste nel togliere un’unita al numero binario e con-seguentemente aggiungere un ∗ a destra. Si ripetono queste operazioni fino a quan-do il numero e azzerato, a questo punto facciamo scorrere alla macchina tutti gliasterischi (esattamente n) e terminiamo.

L’insieme dei simboli che utilizziamo e Σ = $, I, ∗, 0, 1 mentre gli stati sono

q0 =: la macchina esegue la sottrazione di un’unita e va in q1; se il numeroe gia zero va in q3.

q1 =: aggiunge un asterisco a destra del punto iniziale e va in q2.q2 =: ritorna sulla posizione iniziale e va in q0.q3 =: scorre tutta la stringa di zeri fino a I, continua oltrepassando tutti gli

asterischi e termina.

Possiamo quindi definire la funzione δ della Macchina di Turing nel seguentemodo

δ $ 0 1 I ∗q0 q3 $ R q0 1 L q1 0 R q0 I L

q1 q2 ∗ L q1 0 R q1 1 R q1 I R q1 ∗ Rq2 q0 I L q2 ∗ Lq3 q3 0 R q3 1 R q3 I R q3 ∗ R

2

Esercizio 1.5. Costruire la Macchina di Turing in grado di calcolare il val-ore n2 dove n e dato come input in notazione unaria (ad esempio il numero 3 erappresentato da tre zeri).

Soluzione. Supponiamo che la testina si trovi inizialmente sulla cifra piu a destradella rappresentazione del numero n, supponiamo cioe che la configurazione inizialesia del tipo

. . . $ $ $ 0 . . . 0 0

⇑q0

$ $ $ . . .

Alla fine della computazione il risultato sara tutto alla destra della testina espressosempre in notazione unaria.

L’algoritmo che intendiamo utilizzare consiste nella ripetizione dei seguentipassi. Si marcano, uno alla volta, con degli ∗ gli zeri del numero dato e, ognivolta, si aggiunge uno zero alla destra della posizione iniziale fino ad aver copiatointeramente l’input; a questo punto si marca in modo differente uno degli zeri e siripetono i passi precedenti. Si continua in questo modo finche il valore n non sarastato copiato esattamente n volte.

L’insieme dei simboli necessari e Σ = 0, 1, ∗,&, $, dove ∗ serve a marcare glizeri gia copiati durante la singola copiatura del numero n, & viene utilizzato permarcare gli zeri dopo che il numero e stato copiato interamente (il numero di &

indica il numero di volte in cui e stata copiata l’intera stringa), e 1 ha la stessa

48 2. MODELLI FORMALI PER IL CALCOLO

funzione di ∗ per lo 0, cioe viene utilizzato per marcare il & nella singola copiaturadel numero. Descriviamo infine gli stati che dobbiamo utilizzare

q0 =: la macchina marca lo zero o il & per aggiungere uno zero alla de-stra della posizione iniziale e va in q1; se non ne trova significa che hacompletato una copiatura del numero e va in q3.

q1 =: aggiunge uno zero a destra del punto iniziale e va in q2.q2 =: ritorna a sinistra fino al primo asterisco e va in q0.q3 =: ripone tutti gli 1 a & per poterli ricontare nella copiatura successiva,

marca un asterisco con & e va in q4.q4 =: cerca il primo ∗, lo pone a zero per poterlo contare nella copiatura

successiva e va in q5; se non trova asterischi significa che l’operazione estata completata e termina.

q5 =: completa l’operazione di sostituzione degli ∗ con gli zeri e, quandotrova il primo zero torna in q0.

Possiamo ora definire la matrice di transizione

δ 0 ∗ & 1 $q0 q1 ∗ R q0 ∗ L q1 1 R q0 1 L q3 $ Rq1 q1 0 R q1 ∗ R q1 1 R q2 0 L

q2 q2 0 L q0 ∗ Lq3 q4 & R q3 & R

q4 q4 0 L q5 0 R

q5 q0 0 L q5 0 R

2

Esercizio 1.6. Definire la Macchina di Turing in grado di riconoscere il lin-guaggio an b2n : n ∈ N e descrivere il modo in cui la macchina fornisce larisposta.

Soluzione. Supponiamo che venga data in input una sequenza di simboli a e b,lo scopo della nostra macchina e quello di controllare se tale sequenza appartiene omeno al linguaggio fornito dal testo.Consideriamo una configurazione iniziale del tipo

. . . $ $ $ a

⇑q0

a . . . b b $ $ $ . . .

mentre quella finale e del tipo

. . . $ $ $ 0 ∗⇑q5

a . . . b b $ $ $ . . .

dove lo 0 sta ad indicare, nel caso particolare, che la stringa non appartiene allinguaggio; in generale la risposta si trovera alla sinistra della testina e sara 1 sela stringa appartiene al linguaggio, 0 altrimenti; invece alla destra della testinapossiamo trovare una stringa composta da a, b e ∗.

Il modo in cui la macchina decidera l’appartenenza consiste nel cercare la primaa, marcarla, andare in fondo alla stringa a destra per controllare che non finiscacon una a e controllare che ci siano due b. A questo punto si ripetono questi passi

2. FUNZIONI RICORSIVE 49

finche non finisce la stringa o fino a quando una delle condizioni precedenti risultanon verificata.

L’insieme di simboli di cui necessitiamo e Σ = a, b, ∗, 0, 1, $, dove ∗ e usatoper marcare le a e le b gia contate mentre 0 e 1 sono usati per dare la risposta. Aquesto punto descriviamo gli stati necessari

q0 =: la macchina marca la prima a andando verso destra e va in q1; setrova una b la stringa non puo appartenere al linguaggio e quindi va inq5 mentre se non trova piu a o b significa che la stringa e vuota o e statainteramente controllata e dunque va in q6.

q1 =: cerca la prima b verso destra, la marca e va in q2; se non la trova vain q5.

q2 =: si sposta ancora a destra e se trova una b la marca e va in q3; se nonla trova va in q5.

q3 =: scorre l’intera stringa verso destra, se trova una a va in q5 altrimentiquando raggiunge la fine della stringa va in q4.

q4 =: ritorna a sinistra fino all’inizio della stringa e va in q0.q5 =: scorre tutta la stringa verso sinistra; quando arriva alla fine scrive 0

e va in q7.q6 =: scorre tutta la stringa verso sinistra; quando arriva alla fine scrive 1

e va in q7.q7 =: termina.

Si noti che gli ultimi tre stati e i simboli 0 e 1 hanno come unica funzione quella difornire la risposta e terminare.

A questo punto possiamo costruire la matrice di transizione della Macchina diTuring cercata

δ a b $ ∗ 0 1

q0 q1 ∗ R q5 b L q6 $ L q0 ∗ Rq1 q1 a R q2 ∗ R q5 $ L q1 ∗ Rq2 q5 a L q3 ∗ R q5 $ Lq3 q5 a L q3 b R q4 $ Lq4 q4 a L q4 b L q0 $ R q4 ∗ Lq5 q5 a L q5 b L q7 0 R q5 ∗ Lq6 q6 a L q6 b L q7 1 R q6 ∗ Lq7

2

2. Funzioni ricorsive

Anche per il modello formale di calcolo definito dalle funzioni ricorsive (parzialio totali che siano) bisogna codificare un algoritmo per risolvere un dato problemanel formalismo dato. Innanzitutto, dobbiamo cercare di costruire un algoritmoche risolva il nostro problema in modo ricorsivo. Questo significa che il risultatodeve essere ottenuto mediante composizione (composizione di funzioni, ricorsioneprimitiva, minimizzazione o µ-ricorsione) ed utilizzando solamente la funzione stessache stiamo definendo ed eventualmente altre funzioni ricorsive che siano note o aloro volta definibili in modo ricorsivo. Per semplicita le funzioni gia definite nelle

50 2. MODELLI FORMALI PER IL CALCOLO

dispense o in esercizi precedenti non vengono ridefinite ma si considerano comenote.

Esercizio 2.1. Si definisca la funzione primitiva ricorsiva ndiv : N → N che,dato x ∈ N, fornisce il numero dei suoi divisori.

Soluzione. Per risolvere il problema utilizziamo delle proprieta dei divisori di unnumero intero. Sappiamo che un numero e divisore di x se la divisione tra x e talenumero fornisce resto 0. Poiche possediamo gia una funzione ricorsiva che fornisceil resto di una divisione intera possiamo pensare di contare tutti i numeri tali chela divisione di x con essi dia 0. La funzione che fornisce il resto e mod(x,y) mentreun’altra funzione utile e sg(z); questa infatti, applicata a mod(x,y) mi restituisce 1se il numero y e divisore di x, 0 altrimenti. Ricordiamo che:

Segno:sg(0) = 0

sg(y + 1) = S(0)

Inoltre definiamo sg(x) = −(1, sg(x)).Modulo:

Assumiamo che mod (x, 0) = 0.mod (0, x) = 0

mod (y + 1, x) = S( mod (y, x)) · sg(| − (x, S( mod (y, x)))|)

Sommatoria:Sia f una funzione ricorsiva primitiva binaria, allora definiamo la funzione

Σz<yf(x, z) = Σy−1z=0 f(x, z):

Σz<0f(x, z) = 0

Σz<y+1f(x, z) = +(f(x, z), Σz<yf(x, z))

Vediamo allora la formalizzazione dell’algoritmo come funzione ricorsiva defini-ta per casi.

ndiv(0) = 0

ndiv(x) = (Σy<x+1 sg( mod (x, y))) − 1

Si noti che la sottrazione di un’unita e necessaria perche, per come e costruitala funzione, ndiv conterebbe come divisore anche lo zero che, come sappiamo, none divisore di nessun naturale. 2

Esercizio 2.2. Si definisca la funzione ricorsiva primitiva primo : N → N che,dato x ∈ N, restituice 1 se x e primo, 0 altrimenti.

Soluzione. Per risolvere il problema dobbiamo identificare una caratteristicaspecifica dei numeri primi. Essa puo essere la definizione stessa di numero pri-mo, cioe un numero e primo se ha come unici divisori 1 e se stesso, questo significache il numero di divisori e esattamente due. Infatti un numero e primo se e solo seha esattamente due divisori. Possiamo allora utilizzare la funzione definita nell’e-sercizio 2.1 contando il numero di divisori di x dato in input e restituendo 1 se talenumero e proprio 2.

Dunque la definizione formale per casi e

primo(0) = 0 primo(1) = 1

primo(x) = sg(−(ndiv(x), 2))

2. FUNZIONI RICORSIVE 51

Cioe determiniamo il numero di divisori con ndiv, a questo togliamo 2; se ilrisultato e zero il numero e primo e restituiamo 1, altrimenti restituiamo 0. 2

Esercizio 2.3. Si definisca la funzione primitiva ricorsiva p : N → N che datox ∈ N restituisce l’x-esimo numero primo (si assuma p(0) = 0).

Soluzione. Per risolvere tale problema dobbiamo trovare un modo per contare inumeri primi fino ad arrivare all’x-esimo. Per fare questo potremmo partire da 0e per ogni numero naturale controllare se e primo. In caso affermativo togliamoun’unita al numero x altrimenti lo lasciamo invariato. Terminando tale procedimen-to quando x diventa nullo individuiamo il valore cercato. Vediamo la definizioneformale e poi ne descriviamo l’esatto funzionamento. Definiamo

p(x) = q(x, 0)

dove q : N × N → N e tale cheq(x, y) = q(−(x, primo(S(y))), S(y))

q(0, y) = y

L’introduzione della nuova funzione con due parametri serve per gestire con-temporaneamente sia il contatore dei numeri primi x sia il valore che alla fine sara ilnumero cercato y. Si noti comunque che tale tipo di ricorsione e insolito perche l’u-tilizzo della funzione ricorsiva di base successore fa in modo che uno dei parametriaumenti continuamente. La terminazione e comunque garantita dal fatto che, vistal’infinitezza dell’insieme dei numeri primi, per ogni x il procedimento arriva allaconclusione perche sempre riusciremo a trovare almeno x numeri primi.

Si noti come la medesima funzione sia anche definibile per minimizzazione oµ-ricorsione nel seguente modo:

p(0) = 0

p(1) = 2

p(n + 1) = f(Πi≤np(i) + 1, p(n))

dove: f(x, y) = µ z < x. (sg(z − y) = 1 ∧ primo(z)). Questa definizione seguedall’osservazione che, supponendo pnn ∈ N essere la successione dei numeri primi,esiste sempre x primo tale che: pn < x ≤ Πi≤npi + 1. 2

Esercizio 2.4. Si definisca la funzione ricorsiva primitiva expf : N × N →N che, dato x, y ∈ N, restituisce l’esponente del y-esimo numero primo nellafattorizzazione in numeri primi di x.

Soluzione. In questo caso dobbiamo cercare di contare il numero di volte in cui ilnumero p(y), ottenuto mediante la funzione definita nell’esercizio 2.3, e contenutonel numero x.

Definiamo formalmente la funzioneexpf(0, y) = 0

expf(x, y) = +(sg( mod (x, p(y))), expf(div(x, p(y)), y))

Cioe se p(y) e divisore di x aggiungiamo 1 al risultato della funzione richiamatasul quoziente tra x e p(y), e y. In caso contrario sommiamo una sequenza di zeri.2

52 2. MODELLI FORMALI PER IL CALCOLO

Esercizio 2.5. Definire la funzione primitiva ricorsiva ifcubo : N → 0, 1 cherestituisce 1 se il valore x dato in input e un cubo perfetto, 0 altrimenti.

Soluzione. Per dimostrare che x e un cubo perfetto dobbiamo trovare un valore,sicuramente minore o uguale a x stesso, tale che moltiplicato per se stesso trevolte dia esattamente x. Per trovare tale valore possiamo utilizzare la funzione diminimizzazione, controllando per ogni valore minore di x se il suo triplo prodottomeno x e esattamente zero. Forniamo dunque la definizione formale della funzione

ifcubo(0) = ifcubo(1) = 1

ifcubo(x) = sg(−(x, (µy < x.− (x, · (y, · (y, y)) = 0))))

Quindi se esiste un y il cui triplo prodotto e x l’operatore di minimalizzazione lorestituisce e la funzione segno viene applicata a un valore diverso da zero dando 1.In caso contrario alla fine della computazione la funzione vale zero. 2

Esercizio 2.6. Si definisca la funzione primitiva ricorsiva ifscubi : N → 0, 1

che restituisce 1 se il valore x dato in input e somma di cubi, 0 altrimenti.

Soluzione. La risoluzione di tale esercizio risulta semplificata se si utilizza lafunzione definita nell’esercizio 2.5 Infatti per ogni valore y minore del’input x con-trolliamo se sia y che (x − y) sono cubi mediante la funzione ifcubo. Definiamodunque formalmente la funzione

ifscubi(0) = 1

ifscubi(x) = sg(−(x, (µy < x.sg(· (ifcubo(y), ifcubo(−(x, y)))) = 0)))

2

Esercizio 2.7. Si definisca la funzione primitiva ricorsiva f : N → N che contail numero di occorrenze della cifra 5 in un numero naturale dato in base decimale.

Soluzione. La risoluzione di tale esercizio e alquanto piu delicata rispetto agliesercizi fin qui risolti. In questo caso dobbiamo trovare un modo per analizzare unaalla volta le cifre di un numero decimale. A questo scopo ci vengono in aiuto lefunzioni mod e div, infatti eseguendo la divisione intera tra un numero decimale e 10si ottiene lo stesso numero privato della cifra meno significativa, mentre calcolandoil resto della stessa divisione si ottiene la proprio la cifra piu a destra del numero(si noti che tale fatto vale per numeri in qualsiasi base purche vengano divisi perla loro base). Dunque possiamo risolvere l’esercizio costruendo una funzione chericorsivamente scinda il numero nelle sue cifre e controlli quante di queste siano 5.Diamo quindi la definizione formale

f(0) = f(1) = f(2) = f(3) = f(4) = f(6) = f(7) = f(8) = f(9) = 0

f(5) = 1

f(x) = +(f(div(x, 10)), f( mod (x, 10)))

2

Esercizio 2.8. Si definisca una funzione primitiva ricorsiva f : N → N tale chese n ∈ N e l’input, essa restituisca la cifra decimale piu a sinistra del numero n.

3. PROGRAMMI FOR-WHILE 53

Soluzione. Si noti che l’esercizio richiede la cifra piu a sinistra mentre noi sappi-amo gia selezionare quella piu a destra. Volendo sfruttare questa capacita possiamonotare che il risultato della nostra funzione applicato a n e lo stesso di quello dellafunzione applicata al numero ottenuto da n togliendo la cifra piu a destra, poichetale operazione non modifica la cifra piu a sinistra. Cosı la definizione formale dellafunzione e

f(0) = 0

f(1) = 1

f(2) = 2

f(3) = 3

f(4) = 4

f(5) = 5

f(6) = 6

f(7) = 7

f(8) = 8

f(9) = 9

f(x) = f(div(x, 10))

Abbiamo inserito anche il caso f(0) per considerare la situazione in cui l’inputiniziale sia 0. 2

Esercizio 2.9. Si definisca la funzione primitiva ricorsiva f : N → N chedato un numero decimale in input restituisce il reverse dello stesso, ad esempio sex = 247 allora la funzione deve restituire 742.

Soluzione. In questo caso, per risolvere l’esercizio, dobbiamo cercare di sfruttare ilsignificato della posizione delle singole cifre nel numero. Cioe un numero decimale eottenuto come somma di ogni cifra componente moltiplicata per 10 elevato al valoreindicante la posizione della cifra nel numero, meno un’unita, contando da destra;nell’esempio si ha 247 = 2· 102 +4· 101 +7· 100. A questo punto potendo scindere ilnumero nelle sue cifre componenti possiamo costruire il numero reverse dell’inputtrovando i giusti esponenti di 10 per ogni cifra. Ad esempio per ottenere 742 lacifra 7 va moltiplicata per 102 dove 2 e la lunghezza del numero 247 meno un’unita,potremmo poi completare l’operazione sommando il risultato a cio che si ottieneeseguendo ricorsivamente gli stessi passi sul numero 24. Si noti che per fare cio cheabbiamo appena descritto abbiamo bisogno di una funzione che calcoli la lunghezzadel numero e di una che esegue l’effettivo reverse. Definiamo formalmente le duefunzioni

f(0) = 0

f(x) = +(f(div(x, 10)), · ( mod (x, 10), 10(lung(x)−1)))

lung(0) = 0

lung(x) = S(lung(div(x, 10)))2

3. Programmi for-while

Il formalismo dei linguaggi di programmazione (for, while, repeat, etc.), con-siste in un linguaggio (sintassi) per esprimere algoritmi ed in una macchina astratta(semantica) che definisce come i vari costrutti vengono interpretati in termini di

54 2. MODELLI FORMALI PER IL CALCOLO

variazione o trasformazione di stato. Nel caso dei linguaggi di programmazione, gliesercizi non riguardano la codifica di un algoritmo per risolvere un dato problemain un liguaggio di programmazione anch’esso dato. Questo tipo di esercizi e infattimateria di studio in altri corsi, quali i corsi di programmazione, algoritmi e strut-ture dati e linguaggi. In questo contesto concentreremo l’attenzione esclusivamentesullo studio della espressivita di questi linguaggi di programmazione. L’espressivitae qui intesa in termini di capacita, fornita dai costrutti del linguaggio e dalla loro se-mantica, di esprimere funzioni ricorsive, ovvero calcolabili. In questo senso, il tipicoesercizio consiste nel definire formalmente un costrutto linguistico o un linguaggiodi programmazione e studiarne l’espressivita, ovvero studiare la classe di funzioni(ricorsive di base, primitive ricorsive, ricorsive totali o parziali ricorsive) che talicostrutti permettono di calcolare. Per noi, un linguaggio di programmazione saraquindi definito in termini sintattici da una grammatica libera da contesto ed intermini semantici da un sistema di transizione che definisce formalmente la seman-tica dei vari costrutti linguistici. Ricordiamo a tale proposito che un linguaggio diprogrammazione con assegnamento (:=), condizionale (if then else) ed operazioniaritmetiche di base ma che non fornisce costrutti per l’iterazione e in grado di es-primere solo funzioni ricorsive di base. Analogamente, i linguaggi che permettonola composizione di comandi ed un costrutto per l’iterazione determinata, ovvero ilcui numero di iterazioni e stabilito a priori prima dell’esecuzione dei comandi iter-ativi (tipo for), permettono di esprimere tutte e solo le funzioni primitive ricorsive(Teorema di Meyer & Ritchie); mentre i linguaggi che permettono anche iterazioninon determinate (tipo while) permettono di esprimere tutta la classe delle funzioniintuitivamente calcolabili della Tesi di Church.

Esercizio 3.1. Definire il linguaggio Repeat:

(1) Definire la sintassi di Repeat;(2) Definire la semantica;(3) Definire la Repeat-calcolabilita:(4) Dimostrare che una funzione f e Repeat-calcolabile se e solo se e While-

calcolabile;

Soluzione.

(1) Per definire la sintassi del nuovo linguaggio possiamo utilizzare quellagia definita per il linguaggio While semplicemente sostituendo il coman-do while con il nuovo comando repeat. Percio la sintassi del nostrolinguaggio diventa

Espressioni:

E ::= 0|x|E1 + 1|E1 6= E2

Comandi:

C ::= x := E|C1;C2|skip|if E then C1 elseC2 fi|repeat C until E

Programmi:

P ::= read x;C;write y

(2) A questo punto dovremmo fornire la semantica di tutte le strutture sin-tattiche del nostro linguaggio, ma visto che la maggioranza di esse sonogia state descritte nelle dispense forniamo la semantica solo del nuovo co-mando il cui compito consiste nel ripetere il comando C fino al momento

3. PROGRAMMI FOR-WHILE 55

in cui l’espressione E diventa vera. Vediamo ora la semantica formale

E [[E]]σ ′ = ff, 〈C, σ〉 → σ ′, 〈repeat C until E, σ ′〉 → σ ′′

〈repeat C until E, σ〉 → σ ′′

Cioe si esegue il comando, si controlla la guardia e se questa risulta falsasi riesegue l’intero repeat. Invece se la guardia e vera dopo aver eseguitoil comando si esce dal ciclo. Si noti che il comando viene sempre eseguitoalmeno una volta.

E [[E]]σ ′ = tt, 〈C, σ〉 → σ ′

〈repeat C until E, σ〉 → σ ′

(3) Diciamo che una funzione f : N → N ∪ ↑ e Repeat-calcolabile se e solose esiste P ∈Repeat-Programmi tale che [[P]] = f.

(4) Per dimostrare che una funzione e Repeat-calcolabile se e solo se eWhile-calcolabile e sufficiente simulare il comando repeat con il coman-do while e viceversa, questo perche i due linguaggi differiscono solo inquesti due comandi.

repeat C until E ∼= C; while ¬E do C endw

Mentre il viceversa

while E do C endw ∼=if E = tt then repeat C until ¬E else skip fi

2

Esercizio 3.2. Ripetere i primi tre punti dell’Esercizio 3.1 per il linguaggioLoop, con il comando

loop E do C endl

al posto del comando repeat, la cui la semantica intuitiva e di controllare la guardiaE e, se e diversa da 0, eseguire C e decrementare la guardia. Dimostrare poi cheuna funzione e Loop-calcolabile se e solo se e For-calcolabile.

Soluzione. Per semplicita non riportiamo l’intero linguaggio facendo riferimentoa quello riportato nell’Esercizio 3.1 sia qui che negli esercizi successivi. L’unicamodifica che apportiamo a tale linguaggio per renderlo il Loop-linguaggio e quelladi sostituire i due comandi come riportato nel testo dell’esercizio. A questo puntoin base alla semantica intuitiva del nuovo comando fornita definiamo la semanticaformale

E [[E]]σ = 0

〈loop E do C endl, σ〉 → σ

Cioe se la guardia e zero il comando non deve fare nulla.

E [[E]]σ = n > 0, 〈C, σ〉 → σ ′, 〈loop n − 1 do C endl, σ ′〉 → σ ′′

〈loop E do C endl, σ〉 → σ ′′

Se invece la guardia e diversa da zero, viene eseguito C e poi, sulla memoria modifi-cata da questo, si esegue il loop con la guardia decrementata. Si noti che nel loopinvece di passare E − 1 passiamo n − 1, dove n e il valore iniziale di E; il motivodi questa scelta sta nel fatto che passando il valore decrementato siamo sicuri che

56 2. MODELLI FORMALI PER IL CALCOLO

prima o poi la guardia arriva a zero e il ciclo termina; se invece decrementiamo laguardia ed essa, per caso, contiene variabili modificate in C, la terminazione nonsarebbe piu garantita.

Per quel che riguarda la calcolabilita diciamo che una funzione f : N → N ∪ ↑

e Loop-calcolabile se e solo se esiste P ∈Loop-programmi tale che [[P]] = f.Veniamo infine alla dimostrazione di equivalenza. Come in precedenza dobbi-

amo simulare ognuno dei due comandi con l’altro.

loop E do C endl ∼= for I = 1 to E do C endfdove I 6∈ var(C)

L’ultima posizione garantisce che la variabile I non viene modificata dall’esecuzionedel corpo C. Vediamo ora il viceversa

for I = E1 to E2 do C endf ∼=I = E1; loop E2 − E1 + 1 do C; I = I+ 1 endl

2

Esercizio 3.3. Eseguire l’Esercizio 3.2 sotituendo al comando loop il comando

loop E1 step E2 do C endl

la cui semantica intuitiva e quella di eseguire C tante volte quante E2 divide E1. Siottiene cosı il Loop-Step-linguaggio.

Soluzione. Supponendo che il nostro linguaggio abbia la sintassi gia definita,definiamo la semantica in modo formale del nuovo comando

E [[E1]]σ = n1, E [[E2]]σ = n2, n2 ≤ n1,

〈C; loop n1 − n2 step n2 do C endl, σ〉 → σ ′

〈loop E1 step E2 do C endl, σ〉 → σ ′

Quindi se la divisione tra i due valori e possibile, viene eseguito C e poi il loop-stepcon il valore della prima guardia decrementata del valore della seconda. Anche inquesto caso la scelta di usare i valori delle espressioni e non le spressioni stessegarantisce la terminazione del comando.

E [[E1]]σ = n1, E [[E2]]σ = n2, (n2 > n1 ∨ n2 = 0)

〈loop E1 step E2 do C endl, σ〉 → σ

Se invece la divisione non e possibile allora il comando non fa nulla. La Loop-Step-calcolabilita e analoga alla Loop-calcolabilita, e per questo evitiamo di ripeterla.Infine per cio che riguarda l’equivalenza tra il nuovo comando e il for, vediamocome un comando puo simulare l’altro e viceversa.

loop E1 step E2 do C endl ∼= for I = 1 to (E1 div E2) do C endfdove I 6∈ var(C)

Dove la funzione ÷ e la funzione ricorsiva che calcola la divisione intera. Si notiche e lecito utilizzare funzioni primitive ricorsive nei nostri programmi in quantoper un teorema sui linguaggi For le funzioni primitive ricorsive sono tutte e sole lefunzioni For-calcolabili, dunque sappiamo che esiste un programma che le calcola.

for I = E1 to E2 do C endf ∼=I = E1; loop E2 − E1 + 1 step 1 do C endl

2

3. PROGRAMMI FOR-WHILE 57

Esercizio 3.4. Eseguire l’Esercizio 3.2 sostituendo il comando loop con ilseguente comando

loopmax E1, E2 do C endl

la cui semantica intuitiva consiste nell’eseguire il comando C tante volte quantovale il massimo tra E1 ed E2, fissato all’inizio.

Soluzione. Vediamo subito la semantica formale del nuovo comando; dobbiamocontrollare i valori delle due espressioni, valutare quale e il maggiore ed eseguire ilcomando.

E [[E1]]σ = n1, E [[E2]]σ = n2, n1 ≥ n2,

〈C; loopmax n1 − 1, 0 do C endl, σ〉 → σ ′

〈loopmax E1, E2 do C endl, σ〉 → σ ′

Abbiamo poiE [[E1]]σ = n1, E [[E2]]σ = n2, n1 < n2,

〈C; loopmax 0, n2 − 1 do C endl, σ〉 → σ ′

〈loopmax E1, E2 do C endl, σ〉 → σ ′

Vediamo infine il caso base

E [[E1]]σ = n1, E [[E2]]σ = n2, n1 = n2 = 0

〈loopmax E1, E2 do C endl, σ〉 → σ

Per quel che riguarda la Loopmax-calcolabilita la definizione e analoga a quelladell’Esercizio 3.2, e dunque non la riportiamo. Vediamo ora la dimostrazione cheuna funzione e Loopmax-calcolabile se e solo se e For-calcolabile.

loopmax E1, E2 do C endl ∼=E := max(E1, E2); for I := 1 to E do C endf

dove I 6∈ var(C)

In questo caso la funzione max e la funzione primitiva ricorsiva che calcola ilmassimo tra due funzioni definita nelle dispense. Vediamo ora il viceversa:

for I := E1 to E2 do C endf ∼=I := E1; loopmax E2 − E1 + 1, 0 do C endl

2

Esercizio 3.5. Svolgere l’Esercizio 3.2 sostituendo il comando loop con ilseguente

alternate E timesC1, C2 endalt

con le seguenti possibili semantiche intuitive

(1) Viene eseguito il comando C1;C2 tante volte quanto vale inizialmente E;(2) Viene eseguito C1 E div 2 volte e successivamente C2 Emod 2 volte.

Soluzione.

(1) Vediamo subito la semantica formale del primo caso

E [[E]]σ = n, n > 0,

〈C1;C2; alternate n− 1 timesC1, C2 endalt, σ〉 → σ ′

〈alternate E timesC1, C2 endalt, σ〉 → σ ′

58 2. MODELLI FORMALI PER IL CALCOLO

Quindi se il valore della guardia e maggiore di zero, vengono eseguiti i duecomandi e nuovamente il comando alternate con la guardia decrementata.

E [[E]]σ = n, n = 0

〈alternate E timesC1, C2 endalt, σ〉 → σ

Quando la guardia diventa nulla il comando lascia la memoria inalter-ata. La Alternate-calcolabilita e analoga alla Loop-calcolabilita, e perquesto evitiamo di ripeterla. A questo punto si vuole dimostrare cheuna funzione e Alternate-calcolabile se e solo se e For-calcolabile; perquesto vediamo come possiamo simulare ciascun comando con l’altro.

alternate E timesC1, C2 endalt ∼=for I := 1 to E do C1;C2 endf

dove I 6∈ var(C1) ∪ var(C2)

Mentre il viceversa

for I := E1 to E2 do C endf ∼=I := E1; alternate E2 − E1 + 1 timesC, I := I+ 1 endalt

(2) Anche in questo caso definiamo la semantica formale

E [[E]]σ = n, n = 0

〈alternate E timesC1, C2 endalt, σ〉 → σ

Quindi se la divisione non e possibile il comando non fa nulla.

E [[E]]σ = n, n = 1, 〈C2, σ〉 → σ ′

〈alternate E timesC1, C2 endalt, σ〉 → σ ′

Se il valore della guardia e 1 allora il quoziente e zero e quindi si puoeseguire solo C2 una volta sola.

E [[E]]σ = n, n ≥ 2,〈C1; alternate n− 2 times C1, C2 endalt, σ〉 → σ ′

〈alternate E timesC1, C2 endalt, σ〉 → σ ′

Se il valore della guardia e maggiore o uguale a 2 eseguiamo C1 tante voltequanto il 2 e contenuto in n e C2 quanto il resto. Per quel che riguardala Alternate-calcolabilita essa e la stessa del caso precedente. Infinedimostriamo l’equivalenza del nuovo comando con il comando for.

alternate E timesC1, C2 endalt ∼=for I := 1 to E div 2 do C1 endf ;for I := 1 to E mod 2 do C2 endf

dove I 6∈ var(C1) ∪ var(C2)

Mentre il viceversa

for I := E1 to E2 do C endf ∼=I := E1;

alternate 2 ∗ (E2 − E1 + 1) timesC; I := I+ 1, skip endalt

2

3. PROGRAMMI FOR-WHILE 59

Esercizio 3.6. Eseguire l’Esercizio 3.2 sostituendo il comando loop con ilseguente comando

alternate E1 by E2 do C1, C2 endalt

la cui semantica intuitiva consiste nell’eseguire C1 un numero di volte pari a E1divE2

e C2 E1 mod E2 volte.

Soluzione. Definiamo inizialmente la semantica formale del nuovo comando cal-colando la divisione e il modulo ed eseguendo i due comandi il corretto numero divolte

E [[E1]]σ = n1, E [[E2]]σ = n2, (n1 = 0 ∨ n2 = 0)

〈alternate E1 by E2 do C1, C2 endalt, σ〉 → σ

Quindi se la divisione non e possibile il comando non fa nulla.

E [[E1]]σ = n1, E [[E2]]σ = n2, n1 ≤ n2,

〈C2; alternate n1 − 1 by n2 do C1, C2 endalt, σ〉 → σ ′

〈alternate E1 by E2 do C1, C2 endalt, σ〉 → σ ′

Cioe se il divisore e piu piccolo del dividendo, n1 risulta essere proprio il resto delladivisione e quindi eseguiamo C2 esattamente n1 volte e zero volte l’altro comando.

E [[E1]]σ = n1, E [[E2]]σ = n2, n1 > n2,

〈C1; alternate n1 − n2 by n2 do C1, C2 endalt, σ〉 → σ ′

〈alternate E1 by E2 do C1, C2 endalt, σ〉 → σ ′

Infine se la divisione e possibile eseguiamo il comando C1 il numero di volte in cui E2

e contenuto in E1. Per la similitudine con i casi gia definiti, anche in questo caso nondefiniamo esplicitamente la Alternate-By-calcolabilita. Dimostriamo a questopunto l’equivalenza della Alternate-By-calcolabilita con la For-calcolabilita.

alternate E1 by E2 do C1, C2 endalt ∼=for I := 1 to E1 div E2 do C1 endf ;for I := 1 to E1 mod E2 do C2 endf

dove I 6∈ var(C1) ∪ var(C2)

Vediamo il viceversa

for I := E1 to E2 do C endf ∼=I := E1;

alternate E2 − E1 + 1 by 1 do C; I := I+ 1, skip endalt

2

Esercizio 3.7. Svolgere l’Esercizio 3.2 sostituendo il comando loop con ilcomando

rotate C1, C2 time E1 by E2

la cui semantica intuitiva consiste nell’eseguire almeno una volta sia C1 che C2 esuccessivamente eseguire C1 E1 div E2 volte e C2 E1 mod E2 volte.

60 2. MODELLI FORMALI PER IL CALCOLO

Soluzione. Definiamo subito la semantica formale del nuovo comando in cuidobbiamo valutare le guardie dopo aver eseguito una volta i due comandi.

〈C1;C2, σ〉 → σ ′,

E [[E1]]σ ′ = n1, E [[E2]]σ ′ = n2, (n1 = 0 ∨ n2 = 0)

〈rotate C1, C2 time E1 by E2, σ〉 → σ ′

Quindi se la divisione non e possibile dopo aver eseguito i due comandi non si eseguealtro.

〈C1;C2, σ〉 → σ ′,

E [[E1]]σ ′ = n1, E [[E2]]σ ′ = n2, n1 ≥ n2, n2 6= 0,

〈rotate C1, skip time n1 − n2 by n2, σ′〉 → σ ′′,

〈rotate C2, skip time n1 mod n2 by 1, σ ′′〉 → σ ′′′

〈rotate C1, C2 time E1 by E2, σ〉 → σ ′′′

Cioe se la divisione e possibile, nella memoria modificata dall’esecuzione dei duecomandi, eseguo C1 il numero di volte in cui E2 e contenuto in E1 e C2 esattamenteil resto della divisione.

〈C1;C2, σ〉 → σ ′,

E [[E1]]σ ′ = n1, E [[E2]]σ ′ = n2, n1 < n2,

〈rotate C2, skip time n1 mod n2 by 1, σ ′〉 → σ ′′

〈rotate C1, C2 time E1 by E2, σ〉 → σ ′′

La definizione di Rotate-calcolablita e, come in precedenza, simile alle definizionigia fatte e dunque non viene riportata.

Vediamo la dimostrazione di equivalenza con il linguaggio For.

rotate C1, C2 time E1 by E2∼=

C1; C2;

for I := 1 to E1 div E2 do C1 endf ;for I := 1 to E1 mod E2 do C2 endf

dove I 6∈ var(C1) ∪ var(C2)

Mentre la dimostrazione inversa

for I := E1 to E2 do C endf ∼=if (E1 > E2) then skip elseI := E1;

rotate C; I := I+ 1, skip time E2 − E1 + 1 by 1 fi

2

CAPITOLO 3

Teoria della ricorsivita

1. Insiemi e funzioni ricorsive

In questa sezione vedremo una serie di esercizi riguardanti le proprieta di de-cidibilita e la struttura degli insiemi di numeri naturali. Un tipico esercizio diquesta parte riguarda la dimostrazione matematica di semplici proprieta degli in-siemi ricorsivi e ricorsivamente enumerabili. Per ora non faremo ricorso al Teoremadi Rice che, come vedremo nella prossima sezione, ci permettera di dimostrare inmodo semplice la non ricorsivita di una ampia varieta di insiemi.Ricordiamo che un insieme di naturali I ⊆ N e detto ricorsivamente enumerabile(r.e. ) se esiste una funzione parziale ricorsiva ψ tale che I = dom(ψ). I e ricorsivose esiste una funzione ricorsiva (totale) fI tale che:

fI(x) =

1 se x ∈ I0 se x /∈ I

Per dimostrare le seguenti proprieta degli insiemi ricorsivi e ricorsivamente enu-merabili sara necessario ricorrere a teoremi noti, in particolare il Teorema di Poste le sue conseguenze, il Teorema smn, il Teorema di Kleene di punto fisso ed al-cuni risultati di caratterizzazione degli insiemi ricorsivi per i quali si rimanda alledispense.

Esercizio 1.1. Dimostrare che la cardinalita di un insieme A e minore diquella dei numeri naturali, |A| < ω, se e solo se ∀B ⊆ A si ha che B e ricorsivo.

Soluzione. Essendo una dimostrazione con doppia implicazione distinguiamo idue diversi casi.

(⇒) Questa implicazione e dimostrata immediatamente se consideriamo cheogni sottoinsieme di un insieme finito e finito e dunque ricorsivo.

(⇐) In questo caso dobbiamo invece ragionare per assurdo, supponiamo che|A| = ω, ovvero che A sia un insieme infinito la cui cardinalita e ugualea quella dei numeri naturali. Possiamo allora concludere che esiste unabiiezione tra gli insiemi A e N, ma per ipotesi ogni sottoinsieme di A ericorsivo e, vista la biiezione, concludiamo che anche ogni sottoinsieme diN e ricorsivo, fatto che sappiamo essere assurdo.

2

Esercizio 1.2. Siano f e g funzioni totali ricorsive di cui g iniettiva. Inoltresia l’insieme range(g) ricorsivo, allora vale la seguente implicazione

∀x ∈ N . f(x) ≥ g(x) ⇒ range(f) e ricorsivo

Soluzione. Per dimostrare che un insieme e ricorsivo dobbiamo fare in modo che lacondizione di appartenenza all’insieme sia equivalente ad una condizione decidibile.

61

62 3. TEORIA DELLA RICORSIVITA

Per individuare tale condizione consideriamo l’insieme di valoriy∣∣ g(y) ≤ x

dipendente da x. Essendo g una funzione totale e iniettiva con range(g) ricorsivo siha che l’insieme di elementi che portano g in un insieme finito, [0, x], non puo mai es-sere infinito, quindi per ogni x l’insieme

y∣∣ g(y) ≤ x

e finito. Per questo moti-

vo possiamo determinarne il massimo, definiamo allora nx = maxy∣∣ g(y) ≤ x

e consideriamo l’insieme discreto f(0), f(1), . . . , f(nx)def

= Ax. Dimostriamo che

x ∈ range(f) se e solo se x ∈ Ax.

(⇒) Supponiamo che x ∈ range(f), allora dobbiamo dimostrare che x ∈ Ax.Supponiamo per assurdo che x /∈ Ax allora ∃z > nx . x = f(z) ≥ g(z) > x,infatti sappiamo che x ∈ range(f) inoltre per ipotesi per ogni puntodel dominio la funzione f in quel punto e maggiore della funzione g einfine l’ultima disuguaglianza e dovuta al fatto che x non sta in Ax. Equindi evidente che la disuguaglianza e assurda imponendo x > x, dunquel’ipotesi fatta e assurda percio x ∈ Ax.

(⇐) Banale per definizione di Ax.

Dunque l’appartenenza di un elemento all’insieme range(f) risulta essere equiva-lente all’appartenenza dell’elemento ad un insieme finito e quindi e decidibile. Dacui la ricorsivita dell’insieme. 2

Esercizio 1.3. Dimostrare che l’insieme F =i∣∣ ϕi = ϕf(i)

, con f fun-

zione ricorsiva, non puo mai essere finito.

Soluzione. Supponiamo per assurdo che esista f ricorsiva tale che l’insieme siafinito, ovvero tale che |

i∣∣ ϕi = ϕf(i)

| < ω, allora esiste una funzione g

ricorsiva tale che per ogni i nell’insieme F si ha che g 6= ϕi. Una tale funzioneesiste perche le funzioni ricorsive sono infinite. Ora dobbiamo cercare di applicarei teoremi che conosciamo sugli insiemi ricorsivi in modo da dimostrare l’infinitezzadell’insieme F. Data la struttura di tale insieme l’idea e quella di definire, in funzionedella sua finitezza, una funzione ricorsiva che conduca ad un assurdo. Dunque lachiave dell’esercizio sta ora nella scelta di tale funzione, per far sı che si verifichi unassurdo dobbiamo definire la funzione in modo che l’appartenenza di un indice j adF implichi l’uguaglianza a g. Usiamo quindi il teorema smn per spostare il valorej nell’indice della MdT corrispondente, e quindi per ricadere nella struttura delladefinizione di F. Vediamo dunque come definire la funzione parametrica rispettoall’indice j e all’input x.

ψ(j, x) =

g(x) se j ∈ Fϕf(j)(x) se j /∈ F

Essendo l’insieme F ricorsivo, in quanto finito, la definizione e effettiva e dunqueψ e parziale ricorsiva (e parziale e non totale perche e definita in funzione di ϕf(j)

che e parziale). Possiamo ora applicare il teorema smn, quindi possiamo dire cheesiste una funzione s ricorsiva tale che ψ(j, x) = ϕs(j)(x). Infine per il teorema diricorsione di Kleene sappiamo che esiste un indice i0 tale per cui

ϕi0(x) = ϕs(i0)(x) =

g(x) se i0 ∈ Fϕf(i0)(x) se i0 /∈ F

A questo punto siamo riusciti ad ottenere la funzione in cui l’indice di cui testiamol’appartenenza ad F e l’indice della macchina di Turing corrispondente, e tale MdTe definita in modo che se i0 /∈ F allora si ha che ϕi0

= ϕs(i0) = ϕf(i0) e dunque per

2. TEOREMA DI RICE 63

definizione di F si ha che i0 ∈ F percio si verifica un assurdo. Se invece i0 ∈ F alloraϕi0

= ϕs(i0) = g(x), ma anche questo caso e assurdo per definizione di g. Dunquevisto che l’assunzione fatta porta solo a situazioni assurde essa e falsa e percio F esempre infinito. 2

2. Teorema di Rice

In questa sezione vedremo alcuni esercizi riguardanti le proprieta di ricorsivitae non ricorsivita di insiemi di numeri naturali, o equivalentemente di insiemi diprogrammi in un dato linguaggio di programmazione. Il Teorema di Rice ci fornisceuno strumento molto potente per questo studio. Esso infatti permette di dimostrarela non ricorsivita di una ampia gamma di insiemi di numeri (o programmi), ovvero ditutti gli insiemi di numeri o programmi che rappresentino proprieta estensionali diun dato formalismo di calcolo. Ribadiamo il fatto che, in questa sezione cosı comein tutto il corso, una proprieta sui programmi e rappresentata estensionalmentedall’insieme dei programmi che soddisfano la proprieta stessa. Per la Tesi di Churche per la aritmetizzazione dei modelli di calcolo, le proprieta di programmi e gliinsiemi di numeri di naturali che rappresentano indici in una fissata numerazione diun dato modello di calcolo (indici di MdT, indici di funzioni parziali ricorsive, ecc.)sono nozioni perfettamente equivalenti. Pertanto, in entrambi i casi, il Teorema diRice ci fornisce un strumento per valutare la ricorsivita di tali insiemi. ChiamiamoW+ l’insieme dei programmi while che possono ricevere come input altri programmiwhile.

Esercizio 2.1. Siano P e Q due programmi appartenenti a W+, dire se edecidibile la seguente affermazione: [[P]] = [[Q]].

Soluzione. Definiamo il seguente insieme

Π =P∣∣ [[P]] = [[Q]]

Allora notiamo che Π 6= ∅ perche il programma Q appartiene all’insieme. InoltreΠ 6= N perche non tutti i programmi calcolano le stesse cose. Infine Π e estensionale,infatti se [[P1]] = [[P2]] e P2 ∈ Π allora si ha che [[P2]] = [[Q]] e per la proprietatransitiva dell’uguaglianza si verifica che [[P1]] = [[Q]] dunque P1 ∈ Π. Per il teoremadi Rice Π non e ricorsivo.

2

Esercizio 2.2. Dimostrare che l’insiemex∣∣ |dom(ϕx)| = ω

non e ricor-

sivo.

Soluzione. Definiamo l’insieme

Π =x∣∣ |Wx| = ω

dove sappiamo che Wx = dom(ϕx). Notiamo che Π 6= ∅ perche la funzione λx.xappartiene all’insieme avendo per dominio tutto N. Inoltre Π 6= N perche la fun-zione λx. ↑ non appartiene all’insieme avendo per dominio l’insieme ∅. Infine Π eestensionale, infatti se ϕx = ϕy e y ∈ Π si ha che |Wy| = ω e per l’uguaglianzadelle due funzioni si verifica anche che Wx = Wy dunque anche Wx ha cardinalitainfinita e questo implica che x ∈ Π. Per il teorema di Rice Π non e ricorsivo. 2

64 3. TEORIA DELLA RICORSIVITA

Esercizio 2.3. Dimostrare che l’insiemex∣∣ Wx = ∅

non e ricorsivo.

Soluzione. Definiamo l’insieme

Π =x∣∣ Wx = ∅

Allora notiamo che Π 6= ∅ perche la funzione λx. ↑ appartiene all’insieme avendoper dominio l’insieme ∅. Inoltre Π 6= N perche la funzione λx.x non appartieneall’insieme avendo per dominio l’insieme N. Infine Π e estensionale, infatti se ϕx =

ϕy e y ∈ Π si ha che Wy = ∅ e per l’uguaglianza delle due funzioni si verifica ancheche Wx = Wy dunque anche Wx e l’insieme vuoto e questo implica che x ∈ Π. Peril teorema di Rice Π non e ricorsivo. 2

Esercizio 2.4. Dimostrare che l’insieme

(x, y)∣∣ Wx = Wy

non e ricor-

sivo.

Soluzione. Definiamo l’insieme

Π =

(x, y)∣∣ Wx =Wy

Allora notiamo che Π 6= ∅ perche la coppia (x, x) appartiene all’insieme per laproprieta riflessiva dell’uguaglianza di insiemi. Inoltre Π 6= N perche se ϕx = λx.x

e ϕy = λx. ↑, sicuramente la coppia (x, y) non appartiene all’insieme avendo, lefunzioni, domini diversi. Infine Π e estensionale, infatti sia ϕx = ϕy e quindiWx = Wy, allora, fissato un indice i, se (x, i) ∈ Π si ha che Wx = Wi e per laproprieta transitiva dell’uguaglianza si verifica che Wi = Wy, questo implica che(y, i) ∈ Π. Per il teorema di Rice Π non e ricorsivo. 2

Esercizio 2.5. Sia ∼ ⊆ PR × PR una relazione definita sull’insieme dellefunzioni parziali ricorsive (PR) tale che

∀f . (f, f) ∈∼

Definiamo gli insiemiR∼ =

(f, g)

∣∣ f ∼ g

ΩR∼ =

(i, j)∣∣ ϕi ∼ ϕj

Dimostrare che ΩR∼ e ricorsivo se e solo se ΩR∼ = ∅ oppure ΩR∼ = N × N.

Soluzione. Vediamo distintamente le due implicazioni.

(⇐) Ovvio.(⇒) Supponiamo che ΩR∼ 6= ∅ e che ΩR∼ 6= N × N. Notiamo che se ϕx = ϕy

allora sono la stessa funzione e dunque per la definizione della relazioneϕx ∼ ϕy. Fissiamo poi un indice i e supponiamo che (x, i) ∈ ΩR∼, alloraϕx ∼ ϕi, pero essendo ϕx e ϕy la stessa funzione possiamo dire cheϕy ∼ ϕi e quindi (y, i) ∈ ΩR∼. Percio possiamo concludere che il nostroinsieme e estensionale e quindi ΩR∼ non e ricorsivo per il teorema di Rice.Ma questo e assurdo essendo ΩR∼ ricorsivo per ipotesi.

2

Esercizio 2.6. Dimostrare che l’insiemex∣∣ ϕx definitivamente ≥ 3

3. RICORSIVITA DI INSIEMI 65

non e ricorsivo. Si ricorda che definitivamente maggiore di un numero significa cheesiste un valore di input dopo il quale la funzione e sempre maggiore del numerodato.

Soluzione. Definiamo l’insieme

Π =x∣∣ ϕx definitivamente ≥ 3

Notiamo che Π 6= ∅ in quanto la funzione λx.x appartiene all’insieme essendo mag-giore o uguale a 3 per ogni x ≥ 3. Inoltre Π 6= N perche la funzione λx.0 si-curamente non appartiene all’insieme essendo costantemente uguale a 0 e quin-di minore di 3. Infine Π e estensionale, infatti se ϕx = ϕy si ha anche cherange(ϕx) = range(ϕy), quindi se x ∈ Π ϕx e definitivamente maggiore o ugualea 3 e quindi anche ϕy e definitivamente maggiore o uguale a 3, questo implica chey ∈ Π. Per il teorema di Rice Π non e ricorsivo. 2

Esercizio 2.7. Dimostrare che l’insiemei∣∣ ∃x . ϕi(x) = x

non e ricorsi-

vo.

Soluzione. Definiamo l’insieme

Π =i∣∣ ∃x . ϕi(x) = x

Notiamo che Π 6= ∅ perche se ϕy = λx.x allora sicuramente y ∈ Π in quanto in ognipunto la funzione vale quanto l’input a cui e applicata. Inoltre Π 6= N perche seϕy = λx. ↑ allora sicuramente y /∈ Π perche tale funzione diverge sempre e quindiper nessun input essa puo valere quanto l’input stesso. Infine Π e estensionale,infatti se ϕi = ϕj e i ∈ Π allora ∃x .ϕi(x) = x ma essendo ϕi e ϕj uguali si ha cheϕj(x) = ϕi(x) = x quindi j ∈ Π. Per il teorema di Rice Π non e ricorsivo. 2

3. Ricorsivita di insiemi

In questa sezione applichiamo alcuni risultati utilizzati nelle sezioni precedenti,in particolare i teoremi di Post, di Rice, di ricorsivita di Kleene, per studiare laricorsivita di alcuni insiemi non banali di naturali. Il metodo per risolvere questiesercizi e quello solito: ricondurre la definizione dell’insieme da studiare ad uncaso noto, per il quale esiste un risultato che ne caratterizzi la ricorsivita. Questoprocedimento di dimostrazione sara formalizzato e studiato piu in dettaglio, perinsiemi complessi, nella prossima sezione sulla riducibilita funzionale.

Esercizio 3.1. Dato A ⊆ N, studiare la ricorsivita, al variare di A, dell’in-sieme

i∣∣ ∀x . ϕi(x) ↓ ⇔ x ∈ A

.

Soluzione. Ridefiniamo equivalentemente l’insieme dato come

Π =i∣∣ Wi = A

Tale insieme e estensionale perche se i ∈ Π e ϕi = ϕj allora Wi = Wj, dunquese Wi = A anche Wj = A per transitivita dell’uguaglianza, e quindi j ∈ Π. Per ilteorema di Rice risulta quindi che Π e ricorsivo solo se Π = N oppure Π = ∅; maΠ 6= N perche non tutte le funzioni possono avere lo stesso dominio. Allora Π ericorsivo solo quando e vuoto, cioe quando non esiste alcun indice i per cuiWi = A.Poiche per ogni i si ha che Wi e ricorsivamente enumerabile allora gli insiemi A che

66 3. TEORIA DELLA RICORSIVITA

rendono Π = ∅ sono tutti quelli che non sono ricorsivamente enumerabili. 2

Esercizio 3.2. Studiare la ricorsivita dell’insiemei∣∣ ∃y . ϕi(y) = ϕy(i)

.

Soluzione. La risoluzione di tale esercizio e immediata se notiamo che

∀i∃y = i . ϕi(y) = ϕy(i)

dunque tale insieme e esattamente l’insieme dei numeri naturali N e per questo ericorsivo. 2

Esercizio 3.3. Studiare la ricorsivita dell’insiemex∣∣ ∃n∃p primo . x = pn

.

Soluzione. Abbiamo visto nel Capitolo 2 che esistono funzioni totali che generanonumeri primi e che decidono se un numero x e potenza di un numero p. Dunqueper tale insieme riusciamo a costruire una funzione caratteristica totale e ricorsivapercio esso e ricorsivo. 2

Esercizio 3.4. Sia l’insieme D il range della funzione

ψ =

ψ(0) = n0

ψ(n + 1) = ϕn(n) ∗ψ(n)

Dire se l’insieme D e ricorsivo.

Soluzione. Vediamo di studiare la cardinalita dell’insieme D. Consideriamo l’in-sieme K =

x∣∣ ϕx(x) ↓

, poiche esso e diverso da N sicuramente esiste m0 tale

che ϕm0(m0) ↑ (senza perdere di generalita supponiamo che m0 sia il piu pic-

colo punto fuori da K). A questo punto dimostriamo per induzione che vale che∀m > m0 . ψ(m) ↑:

Base: Prendiamo m = m0 + 1. Allora ψ(m0 + 1) = ϕm0(m0) ∗ψ(m0) = ↑

∗ c =↑, dove c = ψ(m0) e un valore definito in quanto abbiamo suppostoche m0 sia il primo valore che incontriamo non appartenente a K e quindiϕm0−1(m0 − 1) e definito.

Passo Induttivo: Supponiamo che, preso m1, si abbia ∀m ≤ m1 .ψ(m) ↑,dimostriamo che questo succede anche in m1 +1. Infatti e facile verificareche ψ(m1 + 1) = ϕm1

(m1) ∗ ψ(m1) = c∗ ↑=↑ dove c = ϕm1(m1) e un

valore qualunque, potenzialmente indefinito, che non conosciamo, mentreψ(m1) diverge per ipotesi induttiva.

Possiamo concludere cheD = ψ(0), ψ(1), . . . , ψ(m0), percioD e finito e per questoricorsivo. 2

Esercizio 3.5. Definiamo la relazione ∼w come

ϕi ∼w ϕj ⇔ ∀x (ϕi(x) ↓ ∧ ϕj(x) ↓ ⇒ ϕi(x) = ϕj(x))

Tale tipo equivalenza e detta eauivalenza debole. Dire se l’insieme

B =ki

∣∣ ki = µy. ϕi ∼w ϕy

e ricorsivo.

3. RICORSIVITA DI INSIEMI 67

Soluzione. Notiamo subito che se in un’implicazione la premessa e falsa e dunquel’intera implicazione e vera, per questo motivo ogni funzione e debolmente equiva-lente alla funzione λx. ↑. Sia ϕz = λx. ↑ allora B ⊆ 0, 1, . . . , z perche se ϕi ∼w ϕj

e j < z allora ki = j in quanto nella ricerca del piu piccolo indice di funzione de-bolmente equivalente a ϕi troviamo prima j. Altrimenti e immediato verificare cheper ogni i maggiore di z si ha ϕi ∼w ϕz e quindi nella ricerca troviamo sempreprima z. Percio B e finito e dunque ricorsivo. 2

Esercizio 3.6. Studiare la ricorsivita di A = range(f), dove f e la funzionedefinita

f =

f(0) = n0

f(n + 1) = 2 f(n)

Soluzione. Consideriamo due casi; se n0 = 0, allora il range della funzione siriduce banalmente al solo singoletto 0 e quindi e ricorsivo. Supponiamo alloran0 6= 0, ovvero n0 > 0. Vista la definizione di f, proviamo a dimostrare che f e unafunzione crescente, infatti

f(n+ 1) = 2 f(n) > f(n)

Questo vale se ∀n . n 6= 0, ed f(0) = n0 > 0 per ipotesi, percio A e il range di unafunzione crescente e dunque e ricorsivo per un teorema sugli insiemi ricorsivi. 2

Esercizio 3.7. Studiare la ricorsivita di B = range(f) al variare della fun-zione h totale ricorsiva, con f definita come

f =

f(0) = n0

f(n + 1) = h(n)f(n)

Soluzione. Distinguiamo i casi in base al valore della funzione h. Se ∀n ∈N .h(n) = 0 la nostra funzione f si riduce a valere n0 in 0 e 0 in tutti gli altri punti;allora B = 0, n0 e quindi e ricorsivo. Se ∃n1 . h(n1) = 0 allora ∀n > n1 . f(n) =

0. Infatti se n = n1 + 1 allora f(n1 + 1) = h(n1)f(n1) = 0 f(n1) = 0, se poisupponiamo che ∀n ≤ m . f(n) = 0 allora f(m + 1) = h(m)f(m) = h(m) 0 = 0.Questo fatto implica che B ⊆ f(0), f(1), . . . , f(n1 + 1), percio B e finito e dunquericorsivo. Se, infine, ∀n ∈ N .h(n) 6= 0 dimostriamo che f e crescente, perche questoimplicherebbe che il suo range e ricorsivo. Supponiamo che n0 6= 0 (se n0 fosseuguale a 0 allora B = 0, e quindi sarebbe banalmente ricorsivo), dimostriamoper induzione che ∀n ∈ N . f(n + 1) > f(n). Infatti f(0) 6= 0 per l’ipotesi appenafatta, supponiamo che ∀n ≤ m . f(n) > f(n − 1) vediamo cosa succede per m + 1:f(m + 1) = h(m)f(m) = c f(m) > f(m) essendo c = h(m) 6= 0 per ipotesi. Quindisi e dimostrato che B e ricorsivo sempre, indipendentemente dalla funzione h. 2

Esercizio 3.8. Studiare la ricorsivita del seguente insieme Π =i∣∣ Wi = ∅

.

Soluzione. Vediamo subito se possiamo dire qualcosa sulla ricorsivita applicandoil teorema di Rice. Notiamo che Π 6= ∅ in quanto sicuramente l’indice della funzioneλx. ↑ sta nell’insieme. Inoltre Π 6= N in quano sicuramente l’indice della funzioneλx.x non sta nell’insieme. Infine tale insieme e estensionale, poiche se due funzionisono uguali lo sono anche i loro domini. Questo implica che l’insieme non e ricorsivo.

68 3. TEORIA DELLA RICORSIVITA

Dobbiamo allora vedere se Π e r.e. o meno; supponiamo che lo sia, supponiamocioe che ∃y0 . Wy0

= Π. Allora notiamo che

y0 ∈Wy0⇔ y0 ∈ Π ⇔ y0 ∈

i∣∣ ∀x . ϕi(x) ↑

⇔ ∀x . ϕy0(x) ↑ ⇒ ϕy0

(y0) ↑ ⇔ y0 /∈Wy0

Da cui si ha un assurdo, percio possiamo concludere che tale insieme non e ricosi-vamente enumerabile. 2

Esercizio 3.9. Sia f una funzione ricorsiva totale e sia x ∈ N, dimostrare chel’insieme f−1(Wx) =

y∣∣ f(y) ∈Wx

e ricorsivamente enumerabile.

Soluzione. Per dimostrare che un insieme e r.e. e sufficiente dimostrare che essoe uguale al range di una funzione ricorsiva parziale. Per far cio dobbiamo costruireuna funzione che termini sui valori per cui la condizione di appartenenza all’insiemevale. Ricordiamo che Wx =

y∣∣ ϕx(y) ↓

e definiamo la funzione

ψ(y) =

y se f(y) ∈Wx

↑ altrimenti

Allora ψ e parziale ricorsiva essendo Wx r.e. per definizione; dunque, essendo do-minio e codominio di ψ uguali si ha che range(ψ) e ricorsivamente enumerabilema notiamo che vale l’uguaglianza f−1(Wx) = range(ψ), dunque f−1(Wx) e ri-corsivamente enumerabile. 2

4. Riducibilita funzionale

In questa sezione tratteremo alcuni esercizi sulla riducibilita funzionale. Il con-cetto di riducibilita funzionale permette di ricondurre, mediante un legame formal-mente definito da una funzione ricorsiva, la ricorsivita di un insieme alla ricorsivitadi un altro insieme. La tecnica standard per studiare la ricorsivita di un insiememediante riducibilita funzionale consiste quindi nel definire una riduzione funzionaletra l’insieme da studiare e un insieme la cui ricorsivita o ricorsiva enumerabilita enota. Ricordiamo che dati A,B ⊆ N, A e (funzionalmente) riducibile a B, denotatocon A B, se esiste una funzione (totale) ricorsiva f tale che

x ∈ A ⇔ f(x) ∈ B

Si osserva che definisce una equivalenza sugli insiemi di naturali: A ≡ B sseA B e B A. Ricordiamo inoltre i risultati principali riguardanti la ricorsivitadi insiemi funzionalmente riducibili. Siano A,B ⊆ N:

• A B ⇒ A B• A B e B ∈ RE ⇒ A ∈ RE• A B e B ricorsivo ⇒ A ricorsivo• Per ogni A ∈ RE: A K = x | ϕx(x) ↓

Esercizio 4.1. Siano A e B due insiemi tali che A ∈ [B]≡ e sia A ricorsivoallora si dimostri che ∀X ∈ [B]≡ . X e ricorsivo.

Soluzione. Notiamo subito che se A ∈ [B]≡ allora A ≡ B per definizione di classedi equivalenza, ma questo implica che A B e B A. Allora per un teorema sullariducibilita funzionale il fatto che A sia ricorsivo implica che anche B sia ricorsivo.Analogamente, quindi, ∀X ∈ [B]≡ si ha che X ≡ B e, in particolare, X B allora la

4. RIDUCIBILITA FUNZIONALE 69

ricorsivita di B implica quella di X. 2

Esercizio 4.2. Sia A un insieme ricorsivamente enumerabile, diverso da ∅ eN allora si dimostri che A e ricorsivo se e solo se A A.

Soluzione. Dimostriamo distintamente le due implicazioni.

(⇒) Supponiamo A ricorsivo e non banale, allora anche A e non banale e per il

teorema di Post A e ricorsivamente enumerabile. Le seguenti affermazionivalgono per i teoremi sugli insiemi r.e. e ricorsivi. Poiche A e ricorsivo siha che esiste una funzione f1 ricorsiva crescente tale che range(f1) = A.Inoltre poiche A e r.e. allora si ha che esiste una funzione f2 ricorsiva taleche range(f2) = A. Dobbiamo ora definire una funzione che all’apparte-nenza ad A di un valore x associ un valore che sicuramente non appartienead A, ovvero un valore di A. Un tale valore ci e fornito proprio dalla fun-zione f2. Analogo per gli elementi di A. Dunque definiamo la seguentefunzione

g(x) =

f1(x) se x /∈ Af2(x) se x ∈ A

PoicheA e ricorsivo questa e una funzione totale percio valgono le seguentiimplicazioni:

x ∈ A ⇒ g(x) = f2(x) ∈ Ax /∈ A ⇒ g(x) = f1(x) ∈ A ⇒ g(x) /∈ A

Percio per definizione di riducibilita funzionale si ha che A A.(⇐) Supponiamo che A sia r.e. e A A, se riusciamo a ridurre A a K, allora

A sarebbe ricorsivamente enumerabile e, dunque, per il teorema di Post Asarebbe ricorsivo. Esplicitando le ipotesi abbiamo che esiste una funzionef tale che x ∈ A ⇔ f(x) ∈ A e inoltre il fatto che A sia r.e. implica cheA K, cioe che esiste una funzione g tale che x ∈ A ⇔ g(x) ∈ K. Alloravalgono le seguenti implicazioni:

x ∈ A ⇔ x /∈ A ⇔ f(x) /∈ A ⇔ f(x) ∈ A ⇔ g(f(x)) ∈ Kx /∈ A ⇔ x ∈ A ⇔ f(x) ∈ A ⇔ f(x) /∈ A ⇔ g(f(x)) /∈ K

Percio A K mediante la funzione h = g f e quindi A e ricorsivo.

2

Esercizio 4.3. Siano A e B due insiemi ricorsivi non banali, dimostrare cheA ≡ B.

Soluzione. Vediamo di esplicitare le ipotesi date. Se A e ricorsivo allora esisteuna funzione fA ricorsiva totale crescente tale che range(fA) = A, inoltre se A ericorsivo, allora per il teorema di Post si ha che A e r.e. quindi esiste una funzionetotale ricorsiva fA tale che range(fA) = A. D’altra parte se B e ricorsivo alloraesiste una funzione fB ricorsiva totale crescente tale che range(fB) = B, inoltreanalogamente ad A, esitste una funzione totale ricorsiva fB tale che range(fB) = B.A partire da questi fatti possiamo costruire una funzione che all’appartenenza di

70 3. TEORIA DELLA RICORSIVITA

una oggetto ad A faccia corrispondere l’appartenenza di una funzione di tale oggettoa B, e viceversa. Definiamo dunque le seguenti funzioni.

gA(x) =

fB(x) se x ∈ AfB(x) se x /∈ A

gB(x) =

fA(x) se x ∈ BfA(x) se x /∈ B

Percio valgono le seguenti implicazioni:

x ∈ A ⇔ gA(x) = fB(x) ∈ B ⇒ A Bx ∈ B ⇔ gB(x) = fA(x) ∈ A ⇒ B A

Quindi abbiamo che A ≡ B. 2

Esercizio 4.4. Dimostrare che vale la seguente equivalenza

Adef=

x∣∣ x numero primo

x∣∣ x numero pari

def= B

Soluzione. Per dimostrare l’equivalenza dobbiamo ridurre A a B e viceversa.Vediamo di fare questi due passi distintamente.

• Per dimostrare che A B dobbiamo trovare una funzione f tale chex ∈ A ⇔ f(x) ∈ B. Questo significa che dobbiamo costruire una funzioneche ad un elemento primo associa un elemento pari e che ad un elementonon primo associa un elemento dispari. Definiamo dunque tale funzionecome

f(x) =

2 se x e primo1 altrimenti

Allora valgono le seguenti implicazioni:

x ∈ A ⇒ x primo ⇒ f(x) = 2 (pari) ⇒ f(x) ∈ Bx /∈ A ⇒ x non primo ⇒ f(x) = 1

⇒ f(x) /∈ B

Dunque A e riducibile a B mediante f.• Per dimostrare che B A dobbiamo trovare f tale che x ∈ B ⇔ f(x) ∈ A.

In tal caso dobbiamo costruire una funzione che dato un x pari restituisceun numero primo, mentre dato un x dispari restituisce un numero nonprimo. Definiamo dunque la funzione

f(x) =

3 se x e pari4 altrimenti

Allora valgono le seguenti implicazioni:

x /∈ B ⇒ x dispari ⇒ f(x) = 4 /∈ Ax ∈ B ⇒ x pari ⇒ f(x) = 3 ∈ A

Dunque B e riducibile ad A mediante f.

Questo esercizio poteva anche essere risolto banalmente notando che entrambi gliinsiemi sono ricorsivi (per entrambi nella Sez. 2 del Cap. 2 esiste una funzioneprimitiva ricorsiva che li calcola) e quindi sono equivalenti per quanto dimostratonell’Esercizio 4.3. 2

4. RIDUCIBILITA FUNZIONALE 71

Esercizio 4.5. Dimostrare che l’insieme A =x∣∣ Wx 6= ∅

e ricorsiva-

mente enumerabile.

Soluzione. Per dimostrare che l’insieme A e r.e. e sufficiente dimostrare cheA K. Sappiamo che il teorema smn permette di spostare un input di una funzionenell’indice della MdT che la calcola. Questo ci permette di definire funzioni in cuile condizioni sul primo input diventano condizioni sull’indice della macchina. Cio eimportante perche l’insieme che dobbiamo studiare e un insieme di indici di MdT.L’idea e quella di definire una funzione ψ(x, y) e di utilizzare il teorema smn inmodo da ottenereψ(x, y) = ϕg(x)(y) per qualche funzione ricorsiva g (che sappiamoesistere per il teorema). A partire da questo cerchiamo di definire tale funzione ψin modo che si abbia x ∈ A ⇔ g(x) ∈ K, usando quindi tale g per eseguire lariduzione. Allora se x ∈ A, ovvero se il dominio di ϕx non e vuoto, vogliamo cheg(x) ∈ K, ovvero che ψ(x, g(x)) = ϕg(x)(g(x)) ↓. Per ottenere cio e sufficientefare in modo che ψ(x, y) = ϕg(x)(y) termini su ogni possibile input y (e quindianche su g(x)) ogni qualvolta esiste almeno un valore su cui ϕx termina. Notiamoche determinare tale esistenza e un problema semidecidibile grazie alla tecnica deldovetail, e dunque puo essere utilizzata per definire una funzione parziale ricorsiva.Quando invece x /∈ A, ovvero quando Wx e vuoto allora e sufficiente far divergeresempre la funzione, in tal modo siamo sicuri che essa non terminera su g(x) e quindig(x) /∈ K. Definiamo dunque la seguente funzione con due parametri uno dei qualiverra trasferito nell’indice della funzione ϕ grazie al teorema smn.

ψ(x, y) =

y se ∃z . ϕx(z) ↓ (Dovetail)↑ altrimenti

Per quanto detto si ha ϕg(x)(y) = ψ(x, y) e quindi valgono le seguenti implicazioni

x ∈ A ⇒ Wx 6= ∅ ⇒ ∃z . ϕx(z) ↓ ⇒ ∀y . ϕg(x)(y) ↓⇒ ϕg(x)(g(x)) ↓ ⇒ g(x) ∈ K

x /∈ A ⇒ Wx = ∅ ⇒ ∀z . ϕx(z) ↑ ⇒ ∀y . ϕg(x)(y) ↑⇒ ϕg(x)(g(x)) ↑ ⇒ g(x) /∈ K

Percio A K mediante g, ovvero A e ricorsivamente enumerabile. 2

Esercizio 4.6. Dimostrare che l’insieme A =x∣∣ |Wx| < ω

non e ricor-

sivamente enumerabile.

Soluzione. Ragioniamo per assurdo. Supponiamo che l’insieme A sia ricorsiva-mente enumerabile, consideriamo l’insieme A =

x∣∣ |Wx| = ω

e vediamo se a

partire dalle ipotesi fatte anche questo insieme e ricorsivamente enumerabile. Perfare questo cerchiamo di ridurre l’insieme A ad A. Quindi, come abbiamo fatto nel-l’esercizio precedente, definiamo una funzione ψ(x, y) che, grazie al teorema smn, euguale a ϕg(x)(y) per qualche funzione totale ricorsiva g. A questo punto vogliamo

definire ψ in modo tale che x ∈ A ⇔ g(x) ∈ A. Per ottenere cio definiamo ψ inmodo che quando x /∈ A (x ∈ A) essa termini sempre, e quindi abbia il dominioinfinito. Invece quando x ∈ A (x /∈ A) facciamo divergere la funzione in modo daavere il dominio vuoto, e quindi finito.

ψ(x, y) =

y se x ∈ A↑ altrimenti

72 3. TEORIA DELLA RICORSIVITA

Allora ψ e parziale ricorsiva in quanto A e per ipotesi ricorsivamente enumerabile.Per il teorema smn valgono le seguenti implicazioni:

x /∈ A ⇒ x ∈ A ⇒ ∀y . ϕg(x)(y) = y ⇒ ∀y . ϕg(x) ↓⇒ |Wg(x)| = ω ⇒ g(x) ∈ A ⇒ g(x) /∈ A

x ∈ A ⇒ x /∈ A ⇒ ∀y . ϕg(x)(y) ↑ ⇒ |Wg(x)| = 0 < ω

⇒ g(x) /∈ A ⇒ g(x) ∈ A

Abbiamo quindi dimostrato che A A, ed essendo A r.e. allora lo e anche A equesto implica, per il teorema di Post, che A e ricorsivo. Possiamo pero notare cheA 6= ∅ poiche l’indice della funzione che diverge sempre appartiene sicuramente adA. Inoltre A 6= N in quanto l’indice della funzione identita non puo apparteneread A. Infine A e estensionale poiche funzioni uguali hanno uguale dominio. Alloraper il teorema di Rice A non e ricorsivo e quindi abbiamo un assurdo che derivadall’ipotesi che A fosse ricorsivamente enumerabile. 2

Esercizio 4.7. Dimostrare che se l’insieme A e ricorsivo e B =x∣∣ |Wx| < ω

oppure B =x∣∣ Wx = ∅

allora A B.

Soluzione. Dobbiamo dimostrare che A B e, come negli esercizi precedenti,usiamo il teorema smn. Percio definiamo una funzione ψ(x, y) che grazie a taleteorema e uguale alla funzione ϕg(x)(y) per qualche funzione totale ricorsiva g.A questo punto utilizziamo tale g per effettuare la riduzione funzionale, ovverodefiniamo ψ in modo che x ∈ A ⇔ g(x) ∈ B. Questo significa che la funzionedeve essere tale che quando x ∈ A allora |Wg(x)| < ω (oppure Wg(x) = ∅) equindi e sufficiente far divergere la funzione ψ. Quando invece x /∈ A vogliamoche |Wg(x)| = ω (oppure Wg(x) 6= ∅) e quindi facciamo terminare la funzione suogni input. Notiamo che questa condizione di non appartenenza ad A puo essereutilizzata per definire una funzione parziale ricorsiva in quanto A e ricorsivo peripotesi. Definiamo dunque la funzione

ψ(x, y) =

y se x /∈ A↑ altrimenti

Per il teorema smn abbiamo che ϕg(x)(y) = ψ(x, y). Percio valgono le seguentiimplicazioni:

x ∈ A ⇒ ∀y . ϕg(x)(y) ↑ ⇒ Wg(x) = ∅ ⇒ |Wg(x)| < ω ⇒ g(x) ∈ Bx /∈ A ⇒ ∀y . ϕg(x)(y) ↓ ⇒ Wg(x) = N ⇒ |Wg(x)| = ω ⇒ g(x) /∈ B

Percio A B mediante g, qualunque sia B. 2

Esercizio 4.8. Dimostrare che se l’insieme A e ricorsivo e B =x∣∣ |Wx| = ω

o B =x∣∣ Wx = N

allora A B.

Soluzione. Dobbiamo dimostrare che A B. Come negli esercizi precedentiusiamo il teorema smn. Percio definiamo una funzione ψ(x, y) che grazie a taleteorema e uguale alla funzione ϕg(x)(y) per qualche funzione totale ricorsiva g.A questo punto utilizziamo tale g per effettuare la riduzione funzionale, ovverodefiniamo ψ in modo che x ∈ A ⇔ g(x) ∈ B. Questo significa che quando x ∈ Avogliamo che la funzione ψ abbia come dominio N (ovvero un dominio infinito), equindi la facciamo terminare su ogni input. Quando invece x /∈ A facciamo divergere

4. RIDUCIBILITA FUNZIONALE 73

la funzione cosı il dominio e vuoto, ovvero finito e diverso da N. Definiamo quindila funzione

ψ(x, y) =

y se x ∈ A↑ altrimenti

Per il teorema smn abbiamo quindi che esiste g totale tale che ϕg(x)(y) = ψ(x, y)

e percio valgono le seguenti implicazioni:

x ∈ A ⇒ ∀y . ϕg(x)(y) = y ⇒ Wg(x) = N ⇒ |Wg(x)| = ω ⇒ g(x) ∈ Bx /∈ A ⇒ ∀y . ϕg(x)(y) ↑ ⇒ Wg(x) = ∅ ⇒ |Wg(x)| < ω ⇒ g(x) /∈ B

Da cui concludiamo che A B mediante g, qualunque sia B. 2

Esercizio 4.9. Dimostrare che se l’insieme A e ricorsivo e B =i∣∣ ϕi(i) 6= 0

allora A B.

Soluzione. Dobbiamo trovare una funzione g tale che x ∈ A ⇔ g(x) ∈ B,proviamo allora a sfruttare il teorema smn come negli esercizi precedenti. Definiamouna funzione ψ(x, y) = ϕg(x)(y) tale che quando x ∈ A essa sia diversa da 0, e perquesto e sufficiente farla divergere. Quando invece x /∈ A allora poniamo la funzioneuguale a 0 per ogni input, in tal modo essa e zero anche in g(x). Notiamo chequesta condizione di non appartenenza puo essere usata per definire una funzioneparzialmente ricorsiva perche l’insieme A e per ipotesi ricorsivo. Quindi avremoche

ψ(x, y) =

0 se x /∈ A↑ altrimenti

Per il teorema smn sappiamo quindi che esiste g totale tale che ϕg(x)(y) = ψ(x, y),per cui valgono le seguenti implicazioni:

x ∈ A ⇒ ∀y . ϕg(x)(y) ↑ ⇒ ϕg(x)(g(x)) ↑ ⇒ g(x) ∈ Bx /∈ A ⇒ ∀y . ϕg(x)(y) = 0 ⇒ ϕg(x)(g(x)) = 0 ⇒ g(x) /∈ B

Percio A B mediante g. 2

Esercizio 4.10. Dimostrare che l’insieme A ricorsivo e riducibile a REC =x∣∣ Wx insieme ricorsivo

.

Soluzione. Dobbiamo trovare una funzione g tale che x ∈ A ⇔ g(x) ∈ REC.Esattamente come negli esercizi precedenti proviamo a sfruttare il teorema smn.Definiamo quindi una funzione ψ(x, y) = ϕg(x)(y) tale che quando x ∈ A il dominiodi ϕx sia ricorsivo, ad esempio vuoto quando la funzione diverge. Invece quandox /∈ A vogliamo che il dominio non sia ricorsivo, ad esempio sia equivalente aduna condizione semidecidibile come la terminazione di ϕy(y). Anche in questocaso possiamo usare x /∈ A per definire la funzione parziale ricorsiva ψ essendo Aricorsivo per ipotesi.

ψ(x, y) =

ϕy(y) se x /∈ A↑ altrimenti

Per il teorema smn sappiamo che esiste g totale tale che ϕg(x)(y) = ψ(x, y) e perciovalgono le seguenti implicazioni:

x ∈ A ⇒ ∀y . ϕg(x)(y) ↑ ⇒ Wg(x) = ∅ ricorsivo ⇒ g(x) ∈ RECx /∈ A ⇒ (ϕg(x)(y) ↓ ⇔ ϕy(y) ↓) ⇒ (y ∈Wg(x) ⇔ y ∈ K)

⇒ Wg(x) = K non ricorsivo ⇒ g(x) /∈ REC

74 3. TEORIA DELLA RICORSIVITA

Percio A REC mediante g. 2

5. Insiemi creativi e produttivi

In questa sezione andremo oltre la mera distinzione tra ricorsivita, ricorsivaenumerabilita e non ricorsiva enumerabilita. Dimostreremo infatti la creativita ola produttivita di insiemi di indici. Queste proprieta caratterizzano l’appartenenzadell’insieme in esame ad una data classe di ricorsivita per insiemi: gli insiemi creativisono tutti non ricorsivi ma ricorsivamente enumerabili e completi nella classe RE(ovvero ogni insieme RE e ad essi riducibile), mentre gli insiemi produttivi sonostrutturalmente non ricorsivamente enumerabili. Gli insiemi creativi e produttivirappresentano quindi gli elementi canonici rispettivamente delle classi degli insiemiricorsivamente enumerabili (RE) e non ricorsivamente enumerabili (RE). Questaparte conclude il corso di calcolabilita elementare.

Ricordiamo qui brevemente alcuni risultati noti sugli insiemi creativi e produt-tivi che verranno utilizzati per risolvere gli esercizi. Siano A,B ⊆ N:

• A produttivo ⇒ A non r.e.• A creativo ⇒ A non ricorsivo• K e creativo e K e produttivo• A creativo sse A completo• A produttivo e A B ⇒ B produttivo• A creativo e A B ⇒ (B ∈ RE ⇒ B creativo)

Esercizio 5.1. Dimostrare che l’insieme REC =i∣∣ Wi ricorsivo

e un

insieme produttivo.

Soluzione. Per dimostrare che REC e produttivo e sufficiente dimostrare lariduzione K REC, dove K =

i∣∣ ϕi(i) ↑

. In questo esercizio, come nei suc-

cessivi, lavoreremo come abbiamo fatto nell’Esercizio 4.5. Sappiamo infatti che ilteorema smn permette di spostare un input di una funzione nell’indice della MdTche la calcola. Questo ci permette di definire funzioni in cui le condizioni sul pri-mo input diventano condizioni sull’indice della macchina. Cio e importante perchel’insieme che dobbiamo studiare e un insieme di indici di MdT. L’idea e quella didefinire una funzione ψ(x, y) e di utilizzare il teorema smn in modo da ottenereψ(x, y) = ϕg(x)(y) per qualche funzione ricorsiva g. A partire da questo cerchiamo

di definire tale funzione ψ in modo che si abbia x ∈ K ⇔ g(x) ∈ REC, usando quin-di tale g per eseguire la riduzione. Quindi se x ∈ K (x /∈ K) vogliamo fare in modoche g(x) /∈ REC ovvero che Wg(x) non sia ricorsivo. Un modo per fare cio consistenel far sı che il dominio di ψ(x, y) = ϕg(x)(y) sia, ad esempio, esattamente K, chesappiamo essere non ricorsivo. Questo si ottiene banalmente facendo corrisponderela terminazione della funzione su un parametro all’appartenenza dello stesso a K,ovvero ponendo ϕg(x)(y) = ψ(x, y) uguale a ϕy(y) quando x ∈ K. D’altra partequando x /∈ K vogliamo che il dominio di ϕg(x) sia ricorsivo, un modo banale perottenere cio e quello di fare in modo che in tal caso il dominio sia vuoto, ovvero lafunzione diverga sempre. Percio se definiamo

ψ(x, y) =

ϕy(y) se x ∈ K↑ altrimenti

vediamo che essendo K r.e. la definizione di tale funzione e effettiva e dunque essae parziale ricorsiva. Inoltre per quanto detto sopra si ha che ψ(x, y) = ϕg(x)(y) e

5. INSIEMI CREATIVI E PRODUTTIVI 75

quindi valgono le seguenti implicazioni:

x ∈ K ⇒ (ϕg(x)(y) ↓ ⇔ ϕy(y) ↓) ⇒ (ϕg(x)(y) ↓ ⇔ y ∈ K)

⇒ (y ∈Wg(x) ⇔ y ∈ K) ⇒ Wg(x) = K non ricorsivo⇒ g(x) /∈ REC

x /∈ K ⇒ ∀y ∈ N . ϕg(x)(y) ↑ ⇒ Wg(x) = ∅ ricorsivo⇒ g(x) ∈ REC

Da cui possiamo concludere che K REC mediante g, percio quest’ultimo e uninsieme produttivo. 2

Esercizio 5.2. Sia A =i∣∣ ϕi(i) = 0

, dimostrare che il suo comple-

mentare e un insieme produttivo.

Soluzione. Per dimostrare che A e produttivo e sufficiente dimostrare la riduzioneK A che equivale a dimostrare che K A. Analogamente a quanto vistonell’esercizio precedente definiamo una funzione ψ(x, y). A questo punto uti-lizziamo il teorema smn e quindi sappiamo che esiste una funzione ricorsiva gtale che ψ(x, y) = ϕg(x)(y). In tal caso vogliamo utilizzare tale g in modo chex ∈ K ⇔ g(x) ∈ A, ovvero vogliamo fare in modo che quando x ∈ K si abbiaϕg(x)(g(x)) = 0, e questo lo si ottiene ponendo la funzione uguale a 0 per ogni in-put quando x ∈ K. D’altra parte quando x /∈ K, per ottenere la funzione desideratae sufficiente che ϕg(x)(g(x)) 6= 0, e il modo piu semplice per ottenere cio e quellodi far divergere la funzione. Percio definiamo

ψ(x, y) =

0 se x ∈ K↑ altrimenti

Essendo K r.e. la definizione di tale funzione e effettiva e dunque essa e parzialericorsiva. Per quanto detto sopra abbiamo che esiste g tale che ψ(x, y) = ϕg(x)(y),valgono dunque le seguenti implicazioni

x ∈ K ⇒ ψ(x, y) = 0 ⇒ ∀y . ϕg(x)(y) = 0

⇒ ϕg(x)(g(x)) = 0 ⇒ g(x) ∈ Ax /∈ K ⇒ ψ(x, y) ↑ ⇒ ∀y ∈ N . ϕg(x)(y) ↑

⇒ ϕg(x)(g(x)) ↑ ⇒ g(x) /∈ A

Da cui si ha che K A mediante g. Questo implica che K A e percio quest’ultimoinsieme e produttivo. 2

Esercizio 5.3. Sia REC =i∣∣ Wi non ricorsivo

, dimostrare che questo e

un insieme produttivo.

Soluzione. Per dimostrare che REC e produttivo e sufficiente dimostrare lariduzione K REC che equivale a dimostrare che K REC. Il procedimento esempre lo stesso. In questo caso vogliamo costruire ψ(x, y) = ϕg(x)(y) in modo chex ∈ K ⇔ g(x) ∈ REC. Questo significa che quando x ∈ K allora ϕg(x) deve avereun dominio ricorsivo. Un modo banale per ottenere cio e quello di far in modo chein tal caso il dominio sia tutto N, ovvero che la funzione termini su ogni input.Dobbiamo, pero, anche fare in modo che quando x /∈ K il dominio sia non ricorsivo,ovvero ad esempio sia K. Quindi in tal caso la funzione deve terminare se e solo se il

76 3. TEORIA DELLA RICORSIVITA

secondo parametro, y, sta in K. Alla luce di tutte queste considerazioni definiamo

ψ(x, y) =

y se x ∈ K ∨ y ∈ K↑ altrimenti

Essendo K r.e. la definizione di tale funzione e effettiva e dunque essa e parzialericorsiva. Allora per quanto detto sopra valgono dunque le seguenti implicazioni

x ∈ K ⇒ ψ(x, y) = y ⇒ ∀y . ϕg(x)(y) = y

⇒ Wg(x) = N ricorsivo ⇒ g(x) ∈ RECx /∈ K ⇒ (ϕg(x)(y) ↓ ⇔ y ∈ K) ⇒ (y ∈Wg(x) ⇔ y ∈ K)

⇒ Wg(x) = K non ricorsivo ⇒ g(x) /∈ REC

Dunque K REC mediante g. Questo implica che K REC e percio quest’ultimoinsieme e produttivo. 2

Esercizio 5.4. Sia A =i∣∣ Wi = ∅

, dimostrare che tale insieme e produt-

tivo.

Soluzione. Per dimostrare che A e produttivo e sufficiente dimostrare la riduzioneK A. Come sempre definiamo una funzione ψ(x, y) e utilizziamo il teorema smnper dire che esiste g totale ricorsiva tale che ψ(x, y) = ϕg(x)(y). Utilizziamo tale

funzione per la riduzione, ovvero facciamo in modo che x ∈ K ⇔ g(x) ∈ A. Perottenere cio dobbiamo far sı che quando x ∈ K (x /∈ K) si ottenga che il dominio diϕg(x) non sia vuoto, ad esempio sia tutto N. D’altra parte quando x /∈ K e sufficientefar divergere la funzione in modo da ottenere il dominio vuoto. Definiamo allora

ψ(x, y) =

y se x ∈ K↑ altrimenti

Essendo K r.e. la definizione di tale funzione e effettiva e dunque essa e parzialericorsiva. Per quanto detto si ha che ψ(x, y) = ϕg(x)(y) e quindi valgono le seguentiimplicazioni

x ∈ K ⇒ ∀y . ϕg(x)(y) ↑ ⇒ Wg(x) = ∅⇒ g(x) ∈ A

x /∈ K ⇒ ∀y ∈ N . ϕg(x)(y) = y ⇒ Wg(x) = N 6= ∅⇒ g(x) /∈ A

Dunque K A mediante g. Questo implica che A e un insieme produttivo. 2

Esercizio 5.5. Sia A =i∣∣ Wi 6= N

, dimostrare tale insieme e produttivo.

Soluzione. Per dimostrare che A e produttivo e sufficiente dimostrare la riduzioneK A. Definiamo sempre una funzione ψ(x, y) e utilizziamo il teorema smn perdire che esiste una funzione g tale che ψ(x, y) = ϕg(x)(y). Come sopra utilizziamo

tale funzione per ottenere la riduzione, ovvero definiamo ψ in modo che x ∈ K ⇔g(x) ∈ A. Per ottenere questo operiamo esattamente come nell’esercizio precedenteinfatti Wi = ∅ implica Wi 6= N, e Wi = N implica banalmente Wi 6= ∅. Da cuidefiniamo

ψ(x, y) =

y se x ∈ K↑ altrimenti

5. INSIEMI CREATIVI E PRODUTTIVI 77

Essendo K r.e. la definizione di tale funzione e effettiva e dunque essa e parzialericorsiva. Allora valgono le seguenti implicazioni

x /∈ K ⇒ ψ(x, y) = y ⇒ ∀y . ϕg(x)(y) = y

⇒ Wg(x) = N ⇒ g(x) /∈ Ax ∈ K ⇒ ψ(x, y) ↑ ⇒ ∀y ∈ N . ϕg(x)(y) ↑

⇒ Wg(x) = ∅ ⇒ g(x) ∈ A

Dunque K A mediante g, percio quest’ultimo insieme e produttivo. 2

Esercizio 5.6. Dimostrare che l’insieme A =x∣∣ |Wx| < ω

e un insieme

produttivo.

Soluzione. Per dimostrare che A e produttivo e sufficiente dimostrare la riduzioneK A. Analogamente a sopra dobbiamo definire ψ(x, y) in modo da applicare ilteorema smn e spostare il parametro x nell’indice della MdT come g(x), con lacertezza dell’esistenza di una tale funzione ricorsiva g. Percio dobbiamo fare inmodo che x ∈ K ⇔ g(x) ∈ A. Cio si ottiene con la stessa funzione dell’esercizioprecedente in quanto Wi 6= N implica |Wi| < ω e |Wi| = ω implica Wi = N. Perciodefiniamo

ψ(x, y) =

y se x ∈ K↑ altrimenti

Essendo K r.e. la definizione di tale funzione e effettiva e dunque essa e parzialericorsiva. Valgono percio le seguenti implicazioni

x /∈ K ⇒ ψ(x, y) = y ⇒ ∀y . ϕg(x)(y) = y

⇒ Wg(x) = N ⇒ |Wg(x)| = ω ⇒ g(x) /∈ Ax ∈ K ⇒ ψ(x, y) ↑ ⇒ ∀y ∈ N . ϕg(x)(y) ↑

⇒ Wg(x) = ∅ ⇒ |Wg(x)| = 0 ⇒ g(x) ∈ A

Dunque K A mediante g e percio quest’ultimo insieme e produttivo. 2

Esercizio 5.7. Sia B =i∣∣ ∃y . ϕi(y) ↓ ∧ ϕy(i) ↓ ∧ ϕi(y) = ϕy(i)

, di-

mostrare che il suo complementare e un insieme produttivo.

Soluzione. Per dimostrare che B e produttivo e sufficiente dimostrare la riduzioneK B che equivale a dimostrare che K B. Allora definiamo ψ(x, y) seguendo unragionamento analogo a quanto fatto precedentemente. Sappiamo, per il teoremasmn, che esiste g tale che ψ(x, y) = ϕg(x)(y), usiamo tale funzione per effettuarela riduzione, ovvero in modo che x ∈ K ⇔ g(x) ∈ B. Questo significa chequando x ∈ K vogliamo che esista un y tale che ϕg(x)(y) ↓, ϕy(g(x)) ↓ e infineϕg(x)(y) = ϕy(g(x)). Se noi facciamo in modo che in questo caso la funzionitermini su ogni input allora terminera anche su g(x) e in tal caso l’uguaglianza ebanalmente verificata, ϕg(x)(g(x)) = ϕg(x)(g(x)). D’altra parte quando x /∈ K, esufficiente fare in modo che la funzione non termini mai. Definiamo allora

ψ(x, y) =

y se x ∈ K↑ altrimenti

Essendo K r.e. la definizione di tale funzione e effettiva e dunque essa e parzialericorsiva. Per quanto detto sappiamo che ψ(x, y) = ϕg(x)(y) e quindi valgono le

78 3. TEORIA DELLA RICORSIVITA

seguenti implicazioni, dove come abbiamo detto ψ(x, y) = ϕg(x)(y).

x ∈ K ⇒ ∀y . ϕg(x)(y) ↓ ⇒ ϕg(x)(g(x)) ↓⇒ ϕg(x)(g(x)) = ϕg(x)(g(x)) ⇒ g(x) ∈ B

x /∈ K ⇒ ∀y ∈ N . ϕg(x)(y) ↑⇒ @y . ϕg(x)(y) ↓ ⇒ g(x) /∈ B

Da cui K B mediante g. Questo implica che K B e percio quest’ultimo insiemee produttivo. 2

Esercizio 5.8. Sia B =〈i, j〉

∣∣ ∃x . ϕi(ϕj(x)) = x, dimostrare che il suo

complementare e un insieme produttivo.

Soluzione. Per dimostrare che B e produttivo e sufficiente dimostrare la riduzioneK B che equivale a dimostrare che K B. Come in precedenza dobbiamodefinire una funzione ψ(x, y) in modo che per il teorema smn, essa sia uguale aϕg(x)(y), per qualche funzione ricorsiva g. A questo punto usiamo tale funzioneper la riduzione, in tal caso pero l’insieme e un insieme di coppie quindi in realtauseremo g per definire una diversa funzione di riduzione f, ovvero definiamo ψ inmodo che x ∈ K ⇔ f(x) ∈ B. Infatti se definiamo f(x) = 〈g(x), g(x)〉, alloraotteniamo la riduzione. Per ottenere cio vogliamo che quando x ∈ K si abbia cheϕg(x) sia una funzione costante in modo che termini su ogni input e dia sempre lostesso valore, in tal modo se y e il valore costante dato come output, siamo sicuri cheϕg(x)(ϕg(x)(y)) = y, ovvero che f(x) ∈ B. D’altra parte per negare l’appartenenzaa B e sufficiente che la funzione diverga sempre quando x /∈ K. Definiamo allora

ψ(x, y) =

y se x ∈ K↑ altrimenti

Essendo K r.e. la definizione di tale funzione e effettiva e dunque essa e parzialericorsiva. Valgono dunque le seguenti implicazioni, dove come abbiamo dettoψ(x, y) = ϕg(x)(y).

x ∈ K ⇒ ∀y . ϕg(x)(y) = y ⇒ ϕg(x)(ϕg(x)(y)) = y

⇒ 〈g(x), g(x)〉 ∈ Bx /∈ K ⇒ ∀y ∈ N . ϕg(x)(y) ↑

⇒ @y . ϕg(x)(ϕg(x)(y)) = y ⇒ 〈g(x), g(x)〉 /∈ B

Dunque K B mediante g. Questo implica che K B e percio quest’ultimo insiemee produttivo. 2

Esercizio 5.9. Sia B =〈i, j〉

∣∣ ∀x . ϕi(ϕj(x)) = x, dimostrare che e un

insieme produttivo.

Soluzione. Per dimostrare che B e produttivo e sufficiente dimostrare la riduzioneK B, che equivale a ridurre K B dove B = 〈i, j〉| ∃x . ϕi(ϕj(x)) 6= x. Analoga-mente a sopra definiamo una funzione ψ e utilizziamo la funzione g ricorsiva dovutaal teorema smn in modo da definire la funzione di riduzione f(x) = 〈g(x), g(x)〉. Intal caso quindi dobbiamo fare in modo che x ∈ K ⇔ f(x) ∈ B. Percio quandox ∈ K vogliamo che esista un y tale che ϕg(x)(ϕg(x)(y)) 6= y. Per ottenere questodobbiamo trovare un y in cui la funzione diverge, ma questa non e una condizioneutilizzabile per definire una funzione parziale ricorsiva, quindi dobbiamo cercare di

5. INSIEMI CREATIVI E PRODUTTIVI 79

formularla in modo semidecidibile. Un modo puo essere quello di fare sı che quandox ∈ K si abbia un dominio finito della funzione ϕg(x), perche solo in tal modo siamosicuri che esiste almeno un elemento in cui la funzione diverge. Notiamo che se de-cidiamo che x ∈ K significa che ϕx(x) termina e questo avviene sicuramente in unnumero finito di passi, possiamo allora pensare di far terminare la funzione ψ(x, y)

solo se tali passi non sono meno di y (questo controllo richiede un’esecuzione finitae quindi e decidibile). In tal modo se n e il numero di passi necessari per direche x ∈ K, allora il dominio di ϕg(x) sara costituito da ogni valore piu piccolo din. Questo significa che su n + 1 la funzione ϕg(x) diverge, e quindi riusciamo anegare l’appartenenza a B. D’altra parte se x /∈ K, il dominio sara tutto N percheper nessun n si ha che x ∈ K e deciso in meno di n passi (essendo un fatto falso),quindi se in tal caso poniamo la funzione ψ(x, y) = y, siamo sicuri che per ogni yla condizione di appartenenza a B per la coppia 〈g(x), g(x)〉 vale. Percio definiamo

ψ(x, y) =

y se x ∈ K non deciso in meno di y passi↑ altrimenti

Essendo K r.e. la definizione di tale funzione e effettiva e dunque essa e parzialericorsiva. Per quanto detto sopra valgono dunque le seguenti implicazioni, doveϕg(x)(y) = ψ(x, y).

x ∈ K ⇒ ∃n0 . ϕx(x) ↓ in n0 passi ⇒ x ∈ K deciso in n0 passi⇒ Wg(x) = [0, n0] ⇒ se y = n0 + 1 ϕg(x)(y) ↑⇒ ϕg(x)(ϕg(x)(y)) 6= y ⇒ 〈g(x), g(x)〉 ∈ B

x /∈ K ⇒ ∀y ∈ N . x ∈ K non deciso in meno di y passi⇒ ∀y . ϕg(x)(y) = y ⇒ ϕg(x)(ϕg(x)(y)) = y

⇒ 〈g(x), g(x)〉 /∈ B

Dunque K B mediante g. Questo implica che K B e percio quest’ultimo insiemee produttivo. 2

Esercizio 5.10. Sia A =x∣∣ Wx =

y∣∣ y primo

, dimostrare che e un

insieme produttivo.

Soluzione. Per dimostrare che A e produttivo e sufficiente dimostrare la riduzioneK A, che equivale a ridurre K A dove l’insieme A puo essere riscritto comeA =

x∣∣ ϕx(y) ↓ ⇔ y primo

e dunque il suo insieme complemento e A =

x∣∣ ∃y primo . ϕx(y) ↑ ∨ ∃y non primo . ϕx(y) ↓

. Come in precedenza defini-

amo una funzione ψ tale che, per il teorema smn, ψ(x, y) = ϕg(x)(y). Usiamo poitale funzione ricorsiva g per effettuare la riduzione, ovvero definiamo ψ in modo chex ∈ K ⇔ g(x) ∈ A. Quindi se x ∈ K vogliamo che esista un valore primo in cui lafunzione diverga oppure esista un valore non primo in cui la funzione termini. Perottenere cio e quindi sufficiente che in tal caso la funzione termini per ogni input,includendo quindi anche valori non primi. D’altra parte quando x /∈ K vogliamoche il dominio della funzione sia l’insieme dei numeri primi, ovvero vogliamo chela funzione termini su y se e solo se y e primo. Per ottenere cio poniamo anchela condizione su y di essere primo quando vogliamo che ϕg(x) termini. Definiamodunque

ψ(x, y) =

y se x ∈ K ∨ y primo↑ altrimenti

80 3. TEORIA DELLA RICORSIVITA

Essendo K r.e. la definizione di tale funzione e effettiva e dunque essa e parzialericorsiva. Allora per quanto detto valgono le seguenti implicazioni, dove ϕg(x)(y) =

ψ(x, y).

x ∈ K ⇒ ∀y . ϕg(x)(y) = y ⇒ ∃y non primo . ϕg(x) ↓⇒ g(x) ∈ A

x /∈ K ⇒ (ϕg(x)(y) ↓ ⇔ y primo) ⇒ g(x) ∈ A⇒ g(x) /∈ A

Dunque K Amediante g. Questo implica che K A e percio quest’ultimo insiemee produttivo. 2

Esercizio 5.11. Sia A =x∣∣ ϕx definitivamente ≥ 3

, dimostrare che e

un insieme produttivo.

Soluzione. Per dimostrare che A e produttivo e sufficiente dimostrare la riduzioneK A, che equivale a ridurre K A dove l’insieme A puo essere riscritto come A =x∣∣ ∃n0.∀n > n0 . ϕx(n) ≥ 3

e dunque il suo complemento eA =

x∣∣ ∀n.∃n0 > n . (ϕx(n0) < 3 ∨ ϕx(n0) ↑)

.

Come sempre dobbiamo definire una funzione ψ tale che, per il teorema smn,ψ(x, y) = ϕg(x)(y). Usiamo poi tale funzione ricorsiva g per effettuare la riduzione,

ovvero definiamo ψ in modo che x ∈ K ⇔ g(x) ∈ A. Percio quando x ∈ K vogliamoche la funzione non sia mai maggiore di 3. Come nell’Esercizio 5.9 questa non e unacondizione che permette di definire una funzione parziale ricorsiva quindi dobbiamoriformularla in una semidecidibile. Per questo usiamo lo stesso trucco, infatti serendiamo il dominio finito (esattamente come abbiamo fatto nell’Esercizio 5.9) tro-viamo sempre un input dopo il quale la funzione diverge sempre, implicando cheessa non puo mai essere definitivamente maggiore o uguale a 3. D’altra parte sex /∈ K si avra il dominio infinito e se poniamo l’output ad esempio uguale a 3, allorasiamo sicuri che per ogni input, e quindi definitivamente, la funzione e maggiore ouguale a 3. Definiamo dunque la funzione

ψ(x, y) =

3 se x ∈ K non deciso in meno di y passi↑ altrimenti

Essendo K r.e. la definizione di tale funzione e effettiva e dunque essa e parzialericorsiva. Valgono dunque le seguenti implicazioni, dove ϕg(x)(y) = ψ(x, y).

x ∈ K ⇒ ∃n0 . x ∈ K deciso in n0 passi ⇒ ∀n > n0 . ϕg(x)(n) ↑⇒ @n0∀n > n0 . ϕg(x)(n) ≥ 3 ⇒ g(x) /∈ A⇒ g(x) ∈ A

x /∈ K ⇒ ∀y ∈ N . ϕg(x) ↓ ⇒ ∀y . ϕg(x)(y) = 3

⇒ ∀n ≥ 0 . ϕg(x)(y) ≥ 3 ⇒ g(x) ∈ A⇒ g(x) /∈ A

Dunque K Amediante g. Questo implica che K A e percio quest’ultimo insiemee produttivo. 2

Esercizio 5.12. Sia A =x∣∣ ∀z . ϕx(z) = c

con c ∈ N, dimostrare che e

un insieme produttivo.

Soluzione. Per dimostrare che A e produttivo e sufficiente dimostrare la riduzioneK A, che equivale a ridurre K A dove A =

x∣∣ ∃z . ϕx(z) 6= c

. Come

5. INSIEMI CREATIVI E PRODUTTIVI 81

in precedenza definiamo una funzione ψ tale che, per il teorema smn, ψ(x, y) =

ϕg(x)(y). Usiamo poi la funzione ricorsiva g per effettuare la riduzione, ovvero

definiamo ψ in modo che x ∈ K ⇔ g(x) ∈ A. In tal caso quindi vogliamo che per

x ∈ K si abbia la funzione diversa da c per ogni input. E evidente che questo e unproblema del tutto analogo a quello dell’Esercizio 5.11, quindi la definizione di ψe il procedimento usato sara lo stesso visto nell’esercizio citato. Definiamo dunquela funzione

ψ(x, y) =

c se x ∈ K non deciso in meno di y passi↑ altrimenti

Essendo K r.e. la definizione di tale funzione e effettiva e dunque essa e parzialericorsiva. Allora per il teorema smn esiste g totale ricorsiva tale che ψ(x, y) =

ϕg(x)(y); valgono dunque le seguenti implicazioni

x ∈ K ⇒ (∃n0 . ϕg(x) ↓ ⇔ y ∈ [0, n0]) ⇒ ∃y > n0 . ϕg(x)(y) ↑⇒ g(x) ∈ A

x /∈ K ⇒ ∀y ∈ N . ϕg(x)(y) = c

⇒ g(x) /∈ A

Da cui K A mediante g. Questo implica che K A e percio quest’ultimo insiemee produttivo. 2

Esercizio 5.13. Sia A =x∣∣ |range(ϕx)| < ω

, dimostrare che e un in-

sieme produttivo.

Soluzione. Per dimostrare che A e produttivo e sufficiente dimostrare la riduzioneK A, che equivale a ridurre K A dove A =

x∣∣ |range(ϕx)| = ω

. In tal

caso quindi vogliamo definire la funzione ψ(x, y) = ϕg(x)(y) (per il teorema smn) in

modo che x ∈ K ⇔ g(x) ∈ A. Questo significa che se x ∈ K alloraψ deve essere taleche il suo range sia infinito, ovvero sia tutto N. Per ottenere cio e sufficiente farlaterminare su ogni y restituendo y stesso. D’altra parte quando x /∈ K, vogliamoche il dominio sia finito, ma questo significa che puo essere anche vuoto, quindi intal caso possiamo far divergere la funzione. Percio definiamo

ψ(x, y) =

y se x ∈ K↑ altrimenti

Essendo K r.e. la definizione di tale funzione e effettiva e dunque essa e parzialericorsiva. Allora per quanto detto valgono le seguenti implicazioni, dove ψ(x, y) =

ϕg(x)(y).

x ∈ K ⇒ ∀y . ϕg(x)(y) = y ⇒ range(ϕg(x)) = N⇒ |range(ϕg(x))| = ω ⇒ g(x) ∈ A

x /∈ K ⇒ ∀y ∈ N . ϕg(x) ↑ ⇒ range(ϕg(x)) = ∅⇒ |range(ϕg(x))| = 0 < ω ⇒ g(x) /∈ A

Dunque K Amediante g. Questo implica che K A e percio quest’ultimo insiemee produttivo. 2

Esercizio 5.14. Sia A =x∣∣ ϕx totale

, dimostrare che e un insieme

produttivo.

82 3. TEORIA DELLA RICORSIVITA

Soluzione. Per dimostrare che A e produttivo e sufficiente dimostrare la riduzioneK A, che equivale a ridurre K A dove l’insieme A puo essere riscritto come A =x∣∣ Wx = N

e dunque A =

x∣∣ Wx 6= N

. Definiamo quindi una funzione

ψ tale che per il teorema smn, si abbia ψ(x, y) = ϕg(x)(y) per qualche funzionericorsiva g. Usiamo poi tale funzione per la riduzione, ovvero definiamo ψ in modoche x ∈ K ⇔ g(x) ∈ A. Quindi se x ∈ K si deve avere che ψ non sia totale,ovvero diverga su qualche input. Analogamente a quanto visto nell’Esercizio 5.9,questa condizione non va bene per definire una funzione parziale ricorsiva, per cuiusiamo nuovamente l’artificio usato nell’esercizio citato. Quindi se x ∈ K rendiamoil dominio della funzione finito, percio da un certo punto in poi siamo sicuri che lafunzione diverge, ovvero non e totale. Se invece x /∈ K, allora il dominio e tutto N,come accadeva nell’Esercizio 5.9, e quindi la funzione e totale. Definiamo percio

ψ(x, y) =

y se x ∈ K non deciso in meno di y passi↑ altrimenti

Essendo K r.e. la definizione di tale funzione e effettiva e dunque essa e parzialericorsiva. Allora per quanto detto valgono le seguenti implicazioni, dove ψ(x, y) =

ϕg(x)(y).

x ∈ K ⇒ ∃n0 . x ∈ K deciso in n0 passi ⇒ (ϕg(x) ↓ ⇔ y ≤ n0)

⇒ Wg(x) = [0, n0] 6= N ⇒ g(x) /∈ A⇒ g(x) ∈ A

x /∈ K ⇒ ∀y ∈ N . ϕg(x) ↓⇒ Wg(x) = N ⇒ g(x) ∈ A⇒ g(x) /∈ A

Dunque K Amediante g. Questo implica che K A e percio quest’ultimo insiemee produttivo. 2

Esercizio 5.15. Sia B =〈x, y〉

∣∣ Wx = Wy

, dimostrare che e un insieme

produttivo.

Soluzione. Cerchiamo di risolvere questo esercizio in modo analogo a quantovisto nell’Esercizio 5.9. Sappiamo gia che per dimostrare che B e produttivo esufficiente dimostrare la riduzione K B, che equivale a ridurre K B doveB =

〈x, y〉

∣∣ Wx 6= Wy

. Analogamente a quanto visto nell’esercizio citato,

dobbiamo definire una funzione di riduzione f(x) = 〈g1(x), g2(x)〉 che permetta diportare una x che sta in K in una f(x) che non sta nell’insieme B. Un’idea che puovenire e quella di definire due funzioni ψ le cui funzioni totali derivate mediante ilteorema smn siano le funzioni g1 e g2 che usiamo per definire f. In tal caso quindidobbiamo fare in modo che x ∈ K ⇔ f(x) ∈ B. Percio quando x ∈ K vogliamo cheWg1(x) 6= Wg2(x), ad esempio uno sia tutto N e l’altro un suo sottoinsieme propriocome K. Per ottenere questo dobbiamo definire una ψ1 totale quando x ∈ K e unaψ2 parziale nelle stesse condizioni su x. D’altra parte se x /∈ K, i domini devono es-sere uguali tra loro e quindi, ad esempio, entrambi uguali all’insieme vuoto. Perciodefiniamo

ψ1(x, y) =

y se x ∈ K↑ altrimenti

e ψ2(x, y) =

y se x ∈ K ∧ y ∈ K↑ altrimenti

Essendo K r.e. la definizione di tali funzioni e effettiva e dunque esse sono parzialiricorsive. Per quanto detto sopra valgono allora le seguenti implicazioni, dove

5. INSIEMI CREATIVI E PRODUTTIVI 83

ϕg1(x)(y) = ψ1(x, y) e ϕg2(x)(y) = ψ2(x, y) per il teorema smn.

x ∈ K ⇒ ∀y ∈ N . ϕg1(x)(y) ↓ e ϕg1(x)(y) ↓ ⇔ y ∈ K⇒ Wg1(x) = N e Wg2(x) = K

⇒ Wg1(x) 6= Wg2(x) ⇒ f(x) = 〈g1(x), g2(x)〉 ∈ Bx /∈ K ⇒ ∀y ∈ N . ϕg1(x)(y) ↑ e ∀y ∈ N . ϕg2(x)(y) ↑

⇒ Wg1(x) = ∅ = Wg2(x) ⇒ f(x) = 〈g1(x), g2(x)〉 /∈ B

Dunque K B mediante f. Questo implica che K B e percio quest’ultimo insiemee produttivo. 2

Esercizio 5.16. Siano A =x∣∣ Wx = ∅

e B =

x∣∣ Wx = N

due

insiemi produttivi (vedi Esercizi 5.4 e 5.14), dire quale relazione esiste tra i due.

Soluzione. Sappiamo per la produttivita che K A e K B; si nota inoltre cheA K essendo A =

x∣∣ Wx 6= ∅

un insieme ricorsivamente enumerabile (vedi

Esercizio 4.5). Percio A K B, ovvero A B.D’altra parte A 6≡ B perche B 6 A; infatti se cio accadesse, essendo A K, siavrebbe B K per transitivita. Ma allora B K e quindi B sarebbe r.e. mentre sie gia dimostrato che B =

x∣∣ Wx 6= N

e produttivo. 2

Esercizio 5.17. Dimostrare che l’insieme A =x∣∣ ∃y . x ∈Wy ∧ y ∈Wx

e un insieme creativo.

Soluzione. Per dimostrare che un insieme e creativo dobbiamo dimostrare cheesso e ricorsivamente enumerabile e completo. Per dimostrare che e ricorsivamenteenumerabile dobbiamo definire una funzione di cui esso e il range, per cui definiamouna funzione che restituisce x quando, presi x e y si ha che x ∈ Wy ∧ y ∈ Wx,ovvero la funzione restituisce esattamente gli elementi di A. Percui definiamo lafunzione

ψ(x, y) =

x se x ∈Wy ∧ y ∈Wx

↑ altrimenti

Essendo gli insiemi Wx e Wy r.e., allora la funzione appena definita e parziale ri-corsiva dunque il range(ψ) e r.e. ed e esattamente A.Per dimostrare che e completo e sufficiente dimostrare che K A. Come negli es-ercizi precedenti questo si ottiene mediante il teorema smn, definendo una funzioneψ(x, y) che e uguale a ϕg(x)(y) per qualche funzione ricorsiva g. Usiamo poi taleg per effettuare la riduzione, ovvero facciamo in modo che x ∈ K ⇔ g(x) ∈ A.Quindi vorremmo che, se x ∈ K, allora esista y tale che y ∈ Wg(x) e g(x) ∈ Wy.Questo si ottiene banalmente facendo terminare la funzione su ogni input e quindi,in particolare, anche su g(x), in tal modo le due relazioni di appartenenza sonobanalmente soddisfatte. D’altra parte, quando x /∈ K, per negare l’appartenenza adA e sufficiente rendere vuoto il dominio e quindi far divergere sempre la funzione.Definiamo dunque la funzione

ψ(x, y) =

y se x ∈ K↑ altrimenti

84 3. TEORIA DELLA RICORSIVITA

Essendo K un insieme r.e., tale funzione e parziale ricorsiva. Allora valgono leseguenti implicazioni, dove ϕg(x)(y) = ψ(x, y).

x ∈ K ⇒ ∀y . ϕg(x)(y) = y ⇒ ϕg(x)(g(x)) = g(x)

⇒ g(x) ∈Wg(x) ⇒ g(x) ∈ Ax /∈ K ⇒ ∀y . ϕg(x)(y) ↑ ⇒ Wg(x) = ∅

⇒ @y ∈Wg(x) ⇒ g(x) /∈ A

Percio A e completo ed r.e., quindi e creativo. 2

Esercizio 5.18. Dimostrare che l’insieme A =i∣∣ ϕi(i) = 0

e un insieme

creativo.

Soluzione. Per dimostrare che un insieme e creativo dobbiamo dimostrare cheesso e ricorsivamente enumerabile e completo. Definiamo la funzione il cui rangee esattamente A, ovvero la funzione che restituisce esattamente i valori x tali cheϕx(x) = 0.

ψ(x) =

x se ϕx(x) = 0

↑ altrimenti

Essendo la condizione decidibile, allora la funzione appena definita e parziale ricor-siva dunque il range(ψ) e r.e. ed e esattamente A.Per dimostrare che e completo e sufficiente dimostrare che K A, ma questo eesattamente cio che abbiamo fatto nell’Esercizio 5.2. Percio A e anche completo equindi creativo. 2

Esercizio 5.19. Dimostrare che l’insieme A =i∣∣ ϕi(i) 6= 0

e un insieme

produttivo usando la definizione di produttivita.

Soluzione. Per dimostrare cheA e produttivo usando la definizione di produttivitadobbiamo costruire una funzione g tale che

Wx ⊆ A ⇒ g(x) ∈ ArWx

questo significa che dobbiamo fare in modo che quando Wx ⊆ A allora g(x) ∈ Ama g(x) /∈ Wx. Per farlo possiamo pensare di sfruttare ancora il teorema smn.Definiamo cioe una funzione ψ(x, y) che sappiamo essere uguale a ϕg(x)(y) perqualche funzione ricorsiva totale g. Infatti se definiamo la funzione ψ(x, y) =

ϕg(x)(y) in modo che g(x) stia in A se e solo se g(x) ∈ Wx, allora e evidente

che se Wx ⊆ A si ha sicuramente g(x) ∈ A e g(x) /∈ Wx, altrimenti otterrei degliassurdi. Vediamo formalmente come avviene tutto cio. Perche si abbia che g(x)stia in A se e solo se g(x) ∈ Wx, bisogna fare in modo che ϕg(x)(g(x)) sia 0 se esolo se ϕx(g(x)) ↓. Per ottenere cio e sufficiente fare sı che ϕg(x) termini su tuttigli elementi del dominio di ϕx (in particolare quindi la doppia implicazione varraper g(x)). Definiamo percio la funzione

ψ(x, y) =

0 se ϕx(y) ↓↑ altrimenti

Essendo la condizione semidecidibile, si ha che la funzione appena definita e parzialericorsiva dunque per il teorema smn si ha che ψ(x, y) = ϕg(x)(y). Valgono cosı le

5. INSIEMI CREATIVI E PRODUTTIVI 85

seguenti implicazioni

g(x) ∈ A ⇔ ϕg(x)(g(x)) = 0 ⇔ ψ(x, g(x)) = 0

⇔ ϕx(g(x)) ↓ ⇔ g(x) ∈Wx

Questo significa che Wx ⊆ A implica g(x) ∈ A. Infatti se g(x) /∈ A allora g(x) ∈ Ae quindi per quanto appena visto abbiamo che g(x) ∈Wx, ma questo e assurdo seconsideriamo Wx ⊆ A, perche si avrebbe g(x) ∈ A. Inoltre g(x) /∈ Wx perche se

g(x) ∈ Wx ⊆ A allora, sempre per le implicazioni viste sopra, g(x) ∈ A e quindie evidente che abbiamo nuovamente un assurdo. Dunque A e produtivo percheabbiamo trovato una funzione g ricorsiva che soddisfa la definizione di insiemeproduttivo. 2

Esercizio 5.20. Classificare il seguente insieme:

A =x∣∣ ∃y . x = 2y ⇒ ϕlog2x(x) ↓

e il suo complementare.

Soluzione. Dobbiamo classificare tale insieme. Notiamo prima di tutto che Anon puo essere ricorsivo perche e definito in termini di una funzione parziale ricor-siva. D’altra parte notiamo che esso e ricorsivamente enumerabile, infatti preso xpossiamo decidere se esiste y tale che x = 2y in quanto siamo sicuri che x ≤ 2x

dunque dobbiamo fare un numero finito di controlli. Una volta deciso se esiste taley sappiamo che, in caso negativo, l’implicazione e automaticamente vera, altrimen-ti abbiamo log2x ∈ N e quindi siamo in grado di trovare la macchina ϕlog2x(x) elanciarla sull’input x. Questo significa che A e ricorsivamente enumerabile perciopossiamo dimostrare che esso e creativo, ovvero che K A. Come in preceden-za useremo il teorema smn in modo da definire la funzione ψ(x, y) = ϕg(x)(y).Nell’insieme dato abbiamo, pero, come indice della MdT il valore log2x quindi lafunzione g non puo bastare per eseguire la riduzione. Avremo dunque bisogno diuna funzione f tale che log2f(x) = g(x), ovvero f(x) = 2g(x). Percio dobbiamodefinire ψ(x, y) in modo che x ∈ K ⇔ f(x) ∈ A ovvero x ∈ K ⇔ ϕg(x)(f(x)) ↓.Definiamo percio la funzione

ψ(x, y) =

y se x ∈ K↑ altrimenti

Essendo la condizione semidecidibile, si ha che la funzione appena definita e parzialericorsiva dunque per il teorema smn esiste g totale tale che ψ(x, y) = ϕg(x)(y).Valgono cosı le seguenti implicazioni

x ∈ K ⇒ ∀y . ϕg(x)(y) ↓ ⇒ ϕg(x)(2g(x)) ↓

⇒ f(x) = 2g(x) ∈ Ax /∈ K ⇒ ∀y . ϕg(x)(y) ↑ ⇒ ϕg(x)(2

g(x)) ↑⇒ f(x) = 2g(x) /∈ A

Percio A e completo, ricorsivamente enumerabile e quindi creativo. Questo implicaanche che A e produttivo. 2

Esercizio 5.21. Classificare il seguente insieme:

A =

23·

··x ∣∣∣∣ ϕx

(23·

··x )

86 3. TEORIA DELLA RICORSIVITA

e il suo complementare.

Soluzione. Per prima cosa dimostriamo che l’insieme dato e ricorsivamente enu-

merabile. Infatti la funzione 23···x

e totale ed inoltre e crescente ed iniettiva, ovveroinvertibile. Infatti dato un generico naturale y possiamo sempre decidere se y e

della forma 23···x

trovando anche tale x semplicemente verificando, per ogni z ≤ y,

se y = 23···z

. Essendo la funzione crescente se nessun z ≤ y ha le proprieta richi-este siamo sicuri che y non e della forma cercata. Essendo la funzione iniettivase un tale z esiste esso e unico. Queste osservazioni permettono di concludere che

per ogni naturale y possiamo estrarre la x, quando esiste, tale che y = 23···x

epossiamo lanciare la MdT di indice x sul dato input, quindi l’insieme dato e r.e.Dimostriamo allora che A e creativo. Come l’esercizio precedente, anche questo edifferente rispetto agli esercizi standard. Infatti mediante il teorema smn possiamodefinire una funzione ψ(x, y) = ϕg(x)(y). In tal caso pero l’oggetto che deve ap-partenere all’insieme A deve essere una funzione di g, e in particolare deve essere

f(x) = 23···g(x)

. Allora dobbiamo definire ψ(x, y) in modo che x ∈ K ⇔ f(x) ∈ Aovvero x ∈ K ⇔ ϕg(x)(f(x)) ↓. Definiamo percio la funzione

ψ(x, y) =

y se x ∈ K↑ altrimenti

Essendo la condizione semidecidibile, si ha che la funzione appena definita e parzialericorsiva dunque per il teorema smn esiste una funzione totale g tale che ψ(x, y) =

ϕg(x)(y). Valgono cosı le seguenti implicazioni

x ∈ K ⇒ ∀y . ϕg(x)(y) ↓ ⇒ ϕg(x)

(23·

··x )

⇒ f(x) = 23···x

∈ A

x /∈ K ⇒ ∀y . ϕg(x)(y) ↑ ⇒ ϕg(x)

(23·

··x )

⇒ f(x) = 23···x

/∈ A

PercioA e completo e ricorsivamente enumerabile, quindi e creativo. Questo implicaanche che A e produttivo. 2