Sei sulla pagina 1di 84

Dispense del corso di Elementi di Logica II

M. Baioletti1

A.A. 2005/06

1
Queste dispense sono dedicate alla memoria del prof. Sauro Tulipani (1946–2005),
già insigne docente di questo corso, maestro e collega inestimabile
Capitolo 1

Linguaggi e logica
proposizionale

1.1 La logica simbolica


La logica matematica moderna ha un approccio puramente simbolico, nel senso
che gli oggetti di studio sono sequenze di simboli (chiamate parole) presi da un
dato alfabeto.
La visione sintattico–simbolica della logica è in netta contrapposizione ri-
spetto alla visione semantico–funzionale di molte branche della matematica,
come ad esempio l’analisi matematica, in cui gli oggetti di studio sono funzioni
viste in modo indipendentemente dalla√loro definizione in termini: per l’analisi
le due funzioni f1 (x) = |x| e f2 (x) = x2 sono lo stesso oggetto. Nella logica
proposizionale, invece, le due proposizioni (p ∧ q) e (q ∧ p) sono due oggetti
distinti, pur essendo proposizioni logicamente equivalenti.
La logica deve indicare la sintassi, cioè l’insieme delle regole con cui sono
formate le parole che hanno senso, e la semantica, cioè il meccanismo per attri-
buire un significato alle parole. Deve inoltre specificare un meccanismo dedut-
tivo, chiamato usualmente calcolo, mediante è possibile produrre alcune parole
speciali, i cosiddetti teoremi, attraverso un procedimento meccanico finito.
Per sottolineare l’idea di lavorare a livello simbolico si introdurrà la sintassi
dei due tipi di logica (la logica proposizionale e la logica dei predicati del primo
ordine) utilizzando i linguaggi formali.

1.2 I linguaggi formali: brevi cenni


Definiamo in questa sezione il semigruppo delle parole su un alfabeto e le
grammatiche generative dei linguaggi formali.

Definizione 1 Dato un insieme A, chiamato alfabeto, i cui elementi sono


detti simboli, definiamo parola w (o stringa) su A una sequenza ordinata finita

1
di simboli di A. Il numero di elementi presenti in w si chiama lunghezza della
parola.

In altri termini, una parola di lunghezza n può essere vista come una funzione
w : {1, 2, . . . , n} → A, cioè come una funzione che ad ogni intero compreso tra
1 e n associa un elemento dell’alfabeto.
E’ ammesso anche il caso n = 0, la cui unica parola si chiama parola nulla
(o vuota) e si indica con .
Ad esempio con l’alfabeto A = {a, b} si possono formare infinite parole, di
cui alcune sono: , a, b, aa, ab, ba, bb, aaa, aab, aba, abb, baa, bab, bba, bbb,
aaaa, . . . .
L’insieme di tutte le parole formate con un alfabeto A si indica con A ∗

Definizione 2 Due parole w e w 0 di uno stesso alfabeto A possono essere com-


poste con un’operazione · chiamata concatenazione: w · w 0 è una nuova parola
che inizia come w e che, al termine di questa, continua come w 0 .

Ad esempio la concatenazione della parola aba con la parola bb ha come


risultato la parola ababb.
E’ naturale considerare un singolo simbolo come parola di lunghezza 1 e
quindi ha senso effettuare la concatenazione tra una parola e un simbolo.
L’operazione di concatenazione è un’operazione associativa, di cui la paro-
la nulla è l’elemento neutro. Quindi A∗ insieme con l’operazione · forma un
semigruppo unitario non commutativo.
Una proprietà particolare della concatenazione è una versione molto forte
della legge di annullamento del prodotto: x · y =  se e solo se x =  e y =
. Tranne casi particolari, la concatenazione non è commutativa, nell’esempio
precedente la concatenazione di bb con aba dà come risultato la parola bbaba,
diverso da quello ottenuto nell’altro ordine.
Vale inoltre una legge molto ovvia di scomposizione delle parole: se w è la
parola a1 a2 . . . an allora w = a1 · a2 · · · · · an . In generale una parola di lunghezza
n si può decomporre in n + 1 modi come composizione di due parole, ecc.
D’ora in avanti il simbolo di concatenazione · verrà omesso e in tutti i contesti
in cui si troveranno due parole giustapposte xy, si intenderà la concatenazione
tra x e y.

Definizione 3 Un qualunque sottoinsieme L di A∗ si chiama linguaggio (for-


male) su A.

Questo strumento è utilizzato sia per definire matematicamente i linguaggi


di programmazione, come il Pascal o il C, sia i linguaggi naturali, come l’italiano
o l’inglese.
Per definire in modo preciso un linguaggio si può utilzzare definire un mec-
canismo di produzione delle parole, ad esempio una grammatica, in grado di
generare tutte le parole del linguaggio.

Definizione 4 Una produzione su un alfabeto A è una coppia (w, w 0 ) di


parole su A, indicata con w → w 0 .

2
Una produzione w → w 0 si può applicare ad una parola s se w è una sotto-
parola di s, cioè se esistono due parole u, v tali che s = uwv. In tal caso si dice
che w occorre in s e la posizione di w all’interno di s si chiama occorrenza. Il
risultato dell’applicazione della produzione alla parola s è la parola s 0 = uw0 v.
Ad esempio la produzione aa → b è applicabile alla parola s = baaba e il
risultato della sua applicazione è la parola s 0 = bbba.
Una produzione w → w 0 potrebbe produrre parole diverse a partire dalla
stessa parola s se w occorre in più punti di s, ad esempio da s = aababaaa si
possono formare le parole s0 = bbabaaa, s00 = aababba e s000 = aababab.

Definizione 5 Diremo che dalla parola s discende la parola s0 usando la pro-


duzione Π, in simboli s →Π s0 , se s0 è uno dei risultati dell’applicazione di Π a
s.

Si noti che →Π è una relazione binaria tra parole.

Definizione 6 Una grammatica G è una quadrupla (S, A, V, P ), in cui A è


un alfabeto di simboli terminali, V è un alfabeto di simboli non terminali,
S è un particolare elemento di V , detto simbolo iniziale e P è un insieme finito
di produzioni sull’alfabeto A ∪ V .

I simboli terminali sono i simboli di cui saranno composte le parole del


linguaggio, mentre i simboli non terminali sono simboli aggiuntivi utilizzati solo
per generare il linguaggio.
Un’ulteriore restrizione è che nella prima parola di ogni produzione deve
comparire almeno un simbolo non terminale. Questo comporta che nessuna
produzione si può applicare a parole formate solo da simboli terminali.

Definizione 7 Date due parole s, s0 su A ∪ V , diremo che da s discende di-


rettamente s0 tramite le produzioni P , s →P s0 , se s →Π s0 per qualche
Π ∈ P.

Definizione 8 Diremo invece che da s discende s0 tramite le produzioni P ,


s →∗P s0 , se esiste una sequenza finita di parole s0 , s1 , . . . , sm , tale che s0 = s,
sm = s0 e si−1 →P si per ogni i = 1, . . . , m.

Indicheremo infine con L(G) il linguaggio generato dalla grammatica G il


linguaggio su A definito da

L(G) = {w ∈ A∗ : S →∗P w}

Ad esempio, data la grammatica G1 = (S, {a, b}, {S, T }, P1 ), in cui P1 con-


tiene le produzioni S → aT, T → aT, T → bT, T → , si hanno le seguenti di-
scendenze dirette aSb →P1 aab, aSb →P1 aaT b, aT b →P1 aaT b, aT b →P1 abT b,
aT b →P1 ab.
Per quanto riguarda la relazione di discendenza si ha che T → ∗P1 a, T →∗P1 b,
T →∗P1 aa, T →∗P1 ab, ecc., cioè per tutte le parole w ∈ {a, b}∗ , si ha che

3
T →∗P1 w. Da ciò segue che L(G1 ) è l’insieme di tutte le parole di {a, b}∗ che
iniziano per a.
Un altro esempio è fornito dalla grammatica G2 = (S, {(, )}, {S}, P2 ), in cui
P2 contiene le produzioni S → SS, S → (S), S → . E’ facile vedere che L(G 2 )
è il linguaggio formato da tutte le parole di parentesi aperte e chiuse in cui ogni
parentesi aperta ha la corrispondente parentesi chiusa.
Un ulteriore esempio è la grammatica G3 = (S, {a, b}, {S}, P3 ) in cui P3
contiene le produzioni S → a, S → b, S → aSa, S → bSb. E’ un po’ più
complicato far vedere che L(G3 ) è il linguaggio formato da tutte le parole di
{a, b}∗ palindrome.
Un ultimo esempio, più complicato, è dato dalla grammatica G 4 = (S, {x, y,
+, −, ∗}, {S}, P4 ), in cui P4 contiene le produzioni S → x, S → y, S → (S +
S), S → (S − S), S → (S ∗ S). In questo caso L(G4 ) è l’insieme di tutte le
espressioni contenenti somme, sottrazioni e moltiplicazioni e le variabili x e y,
come (x + y), (x ∗ (y + x)), ((x ∗ x) − (y ∗ y)), ((x + y) ∗ (x − y)), ecc.
Si noti che in una produzione come S → (S + S), il fatto che nella parola
destra appaiano due simboli S non vuol dire che ai due simboli uguali cor-
rispondono la stessa parola: essi indicano solo che saranno sostituiti da due
parole (espressioni), anche diverse.

4
Capitolo 2

La logica proposizionale

2.1 La sintassi
Il linguaggio P della logica proposizionale è basato su un alfabeto formato da
due tipi di simboli: i connettivi logici C e le variabili proposizionali o
lettere L.
I connettivi logici sono
¬ negazione, da leggersi “non”
∨ disgiunzione, da leggersi “o” oppure “vel” oppure “or”
∧ congiunzione, da leggersi “e” oppure “et” oppure “and”
⇒ implicazione, da leggersi “implica”
⇔ doppia implicazione, da leggersi “se e solo se”
Le variabili proposizionali sono simboli esogeni del linguaggio presi da un
alfabeto L. Normalmente sono simboli, ma in teoria potrebbe essere anche
parole di un linguaggio.

Definizione 9 Le parole del linguaggio P si chiamano proposizioni.

La grammatica che genera il linguaggio P è la quadrupla (S, C∪L∪{(, )}, {S}, P ),


in cui P è composto dalle seguenti produzioni
• S → (S ∨ S)
• S → (S ∧ S)
• S → (S ⇒ S)
• S → (S ⇔ S)
• S → (¬S)

5
• S → l per ogni l ∈ L.

Prendendo come insieme delle variabili L = {x, y, z}, le seguenti parole su


C ∪L sono proposizioni x, ¬x, (x∨x), (¬x∧y), ((x ⇒ y)∨(y ⇒ x)), ((¬x∨¬y) ⇔
¬(x ∧ y)).
Mentre le seguenti parole su C ∪ L ∪ {(, )} non sono proposizioni:

1. xy: non è ammesso concatenare due variabili

2. x ∧ y: sono necessarie le parentesi

3. ¬(∧x): mancherebbe una proposizione tra la parentesi e il connettivo ∧

4. ((¬x ∨ ¬y) ⇔ ¬(x ∧ y): manca l’ultima parentesi

5. ¬) ⇒ xy ∧ ((: parola senza senso

2.2 La semantica della logica proposizionale


2.2.1 Introduzione
Una proposizione è semplicemente una parola del linguaggio P, senza alcun
ovvio significato, se non per i connettivi logici.
Si prenda ad esempio la proposizione (p ∧ q). Essa non ha alcun significato
“naturale”. Fermo restando che ∧ è interpretato come la congiunzione italiana
“e”, il massimo significato attribuibile è ”sia p che q sono veri”.
A seconda del significato che io posso attribuire a p e a q, la proposizione
può assumere significati molto diversi e può essere, nel contesto prescelto, vera
o falsa. Ma esistono situazioni in cui non si può stabilire la sua verità o falsità.
Ad esempio se p è l’affermazione “Perugia è in Italia” e q è l’affermazione
“5 è un numero primo”, (p ∧ q) è un’affermazione vera, in quanto sono vere
entrambe le proposizioni p e q.
Se invece q fosse l’affermazione ”Marte è più grande del Sole”, (p∧q) sarebbe
un’affermazione falsa.
Infine se q fosse l’affermazione ”Esistono altre forme di vita oltre a quella
terrestre”, (p ∧ q) sarebbe un’affermazione il cui valore di verità non può essere
stabilito con certezza.
Di ben altra natura è la proposizione (p∨(¬p)). Essa può essere riletta come
”p è vera oppure p non è vera”.
Questa affermazione è vera indipendentemente dal significato che si può
attribuire a p. Questo tipo di affermazione viene chiamato in latino “tertium
non datur” e nel linguaggio della logica filosofica “il principio del terzo escluso”
(non esiste una terza possibilità: o p è vera oppure è falsa).
L’affermazione può assumere le forme più disparate, a seconda dell’interpre-
tazione che si dà del simbolo p, ma tutte queste affermazioni saranno comunque
vere.

6
2.2.2 Assegnamenti e soddisfacibilità
Per definire un significato logico di una proposizione faremo uso dei valori di
verità vero, indicato con >, e falso, indicato con ⊥; indicheremo con B l’insieme
{⊥, >}.

Definizione 10 Dato un insieme V di variabili proposizionali, una qualunque


funzione α : V → B è chiamata assegnamento di verità su V .

È facile vedere che esistono 2n assegnamenti di verità possibili su un insieme


di n variabili.

Definizione 11 Dato un assegnamento di verità α su V , diremo che una pro-


posizione p è vera in α, ovvero che α soddisfa p, in simboli α |= p secondo le
regole ricorsive

• se p ∈ V allora α |= p se e solo α(p) = >


• se p = (¬q), allora α |= p se e solo non è vero che α |= q, in simboli α 6|= q
• se p = (q ∧ r) se e solo α |= q e α |= r
• se p = (q ∨ r) se e solo α |= q e/o α |= r
• se p = (q ⇒ r) se e solo α 6|= q e/o α |= r
• se p = (q ⇔ r) se e solo α |= q e α |= r oppure se α 6|= q e α 6|= r

Ad esempio se U = {x, y, z} e α : U → B è l’assegnamento α(x) = α(z) = >


e α(y) = ⊥ si ha che α |= x, α |= (x ∨ y), α 6|= (x ∧ (¬z)), α 6|= (x ⇒ y),
α |= (x ⇒ (y ⇒ x)).

2.2.3 Tabelle di verità


In modo alternativo, possiamo estendere un assegnamento di verità in modo da
attribuire valori di verità ad ogni proposizione.
In maniera ricorsiva, dato un assegnamento di verità α, se p è una variabile,
allora il valore di verità di p è dato direttamente da α(p).
Se invece p = (q ∧ r), p = (q ∨ r), p = (q ⇒ r), p = (q ⇔ r) o p = (¬q)
allora il valore di verità di p è dato dalla seguente tabella in funzione dei valori
di verità di q e di r:

q r (q ∧ r) (q ∨ r) (q ⇒ r) (q ⇔ r) (¬q)
⊥ ⊥ ⊥ ⊥ > > >
⊥ > ⊥ > > ⊥ >
> ⊥ ⊥ > ⊥ ⊥ ⊥
> > > > > > ⊥
Si noti che la logica proposizionale è vero–funzionale, cioè il valore di verità
di una proposizione p dipende in modo funzionale dai valori di verità assunti

7
delle sue proposizioni componenti, ad esempio q e r. Inoltre la dipendenza è solo
sui valori e non sulle proposizioni in sè: sostituendo una qualunque proposizione,
ad esempio r, con un’altra avente lo stesso valore di verità, il valore di verità di
p non cambia.

2.2.4 Tautologie
Daremo ora alcune semplici definizioni.

Definizione 12 Una proposizione p si dirà soddisfacibile se esiste almeno


un assegnamento di verità α sulle variabili di p che soddisfa p. Si dirà che p è
insoddisfacibile se non esiste nessun assegnamento di verità che soddisfa p.
Infine si dirà che p è una tautologia se ogni assegnamento di verità lo soddisfa.

Ad esempio sono tautologie le seguenti proposizioni

• (x ∨ (¬x)) (detta “tertium non datur”),

• (¬(x ∧ (¬x))),
• (x ⇒ ((¬x) ⇒ y)) (detta “ex falso quodlibet”),

• (x ⇒ ((x ⇒ y) ⇒ y)) (detta “modus ponens”),

• ((¬y) ⇒ ((x ⇒ y) ⇒ (¬x))) (detta “modus tollens”),

• (x ⇒ x)

• (x ⇒ (y ⇒ x)),

• ((x ⇒ y) ∨ (y ⇒ x)),

• (x ⇔ (¬(¬x)))

Sono soddisfacibili, oltre a tutte le tautologie, anche le seguenti proposizioni


x, (x ∧ y), (x ∨ ¬y), ((x ⇒ y) ∧ (y ⇒ x)).
Infine sono insoddisfacibili le proposizioni (x ∧ (¬x)), (¬(x ⇒ x)), (x ⇔
(¬x)), ecc.
Vale il seguente risultato, di facile dimostrazione:

Proposizione 1 Una proposizione p è una tautologia se e solo se (¬p) è insod-


disfacibile.

Da una tautologia si possono formare molte altre tautologie, in base al


seguente risultato

Proposizione 2 Se p è una tautologia e q è una qualsiasi proposizione, allo-


ra sostituendo una qualsiasi variabile proposizionale occorrente in p con q, si
ottiene ancora una tautologia.

8
Ad esempio, dalla tautologia p = (x ⇒ x), sostituendo x con (a∧b) si ottiene
la tautologia ((a ∧ b) ⇒ (a ∧ b)), sostituendo invece x con ((¬c) ⇒ d) si ottiene
la tautologia (((¬c) ⇒ d) ⇒ ((¬c) ⇒ d)), ecc. La dimostrazione è semplice e si
basa sul fatto che una tautologia è vera indipendentemente dal valore di verità
assunto dalle proposizioni che la compongono, siano esse variabili proposizionali
(come nella versione originaria di p), siano esse proposizioni (come nelle altre
versioni di p).
Definizione 13 Due proposizioni p e q definite sulle stesse variabili sono (lo-
gicamente) equivalenti, in simboli p ≡ q, se per ogni assegnamento di verità
α, α |= p se e solo se α |= q.
Diamo ora un elenco delle equivalenze logiche più importanti
• (x ∧ x) ≡ x, (x ∨ x) ≡ x (idempotenza)
• (x ∧ y) ≡ (y ∧ x), (x ∨ y) ≡ (y ∨ x) (commutatività)
• (x ∧ (y ∧ z)) ≡ ((x ∧ y) ∧ z), (x ∨ (y ∨ z)) ≡ ((x ∨ y) ∨ z) (associatività)
• (x ∨ (y ∧ z)) ≡ ((x ∨ y) ∧ (x ∨ z)), (x ∧ (y ∨ z)) ≡ ((x ∧ y) ∨ (x ∧ z))
(distributività)
• (x ⇒ y) ≡ ((¬x) ∨ y), (x ⇔ y) ≡ ((x ⇒ y) ∧ (y ⇒ x)) (implicazione)
• (¬(¬x)) ≡ x (doppia negazione)
• (¬(x ∨ y)) ≡ ((¬x) ∧ (¬y)), (¬(x ∧ y)) ≡ ((¬x) ∨ (¬y)) (De Morgan)
In base a queste equivalenze potremo scrivere, con un abuso di notazione,
(x∧y ∧z) al posto delle due forme corrette equivalenti (x∧(y ∧z)) e ((x∧y)∧z).
Allo stesso modo si potrà scrivere (x ∨ y ∨ z) e estendere queste notazioni anche
al caso della congiunzione o disgiunzione di un numero arbitrario di proposizioni
con le simbologie
n
^ _n
pi pi
i=1 i=1
Vale il seguente risultato
Proposizione 3 Due proposizioni p e q sono equivalenti se e solo se (p ⇔ q) è
una tautologia, ovvero se e solo se (¬(p ⇔ q)) è insoddisfacibile.
Anche per le equivalenze vale quanto detto per le tautologie:
Proposizione 4 Date due proposizioni equivalenti p, q e data una qualsiasi pro-
posizione r, sostituendo r ad una qualsiasi variabile proposizionale di p e di q,
si ottengono ancora due proposizioni equivalenti.
Ad esempio sono equivalenti le proposizioni ((p ⇒ q) ∧ r) e (r ∧ (p ⇒ q)),
(s ∨ (t ∧ u)) e ((t ∧ u) ∨ s), ecc.
Il concetto di soddisfacibilità si può estendere ad insiemi arbitrari di propo-
sizioni. Si dirà che dato un insieme di proposizioni ∆ ed un assegnamento α, ∆
è vero in α o che α soddisfa ∆ se α |= q per ogni q ∈ ∆.

9
Definizione 14 Una proposizione q è conseguenza logica di un insieme di
proposizioni ∆, in simboli ∆ |= q, se per ogni assegnamento di verità α che
soddisfa ∆, accade che α soddisfa anche q.
Ad esempio come conseguenze logiche delle proposizioni ∆ = {a, (b ⇒
c), (a ⇒ b)} si ottengono le proposizioni b, c, oltre a quelle di ∆.
Valgono i seguenti semplici risultati
Proposizione 5 (Monotonia) Se ∆ |= q e ∆ ⊂ Γ, allora Γ |= q
Proposizione 6 Una proposizione q è conseguenza logica di un insieme finito
di proposizioni p1 , . . . , pn se e solo se ((p1 ∧ p2 ∧ . . . pn ) ⇒ q) è una tautologia,
ovvero se e solo se (p1 ∧ p2 ∧ . . . pn ∧ (¬q)) è insoddisfacibile.

2.3 Il Sudoku come soddisfacibilità di una pro-


posizione
In questa sezione vogliamo scrivere una proposizione p associata ad una matrice
Sudoku M tale che
1. p è soddisfacibile se e solo M è risolvibile.
2. da ogni assegnamento di verità α che soddisfa p è possibile estrarre una
soluzione per M
Una matrice Sudoku M è una matrice 9 × 9 tale che ogni entrata M rc è
vuota (indicata con il simbolo B) oppure è un numero da 1 a 9. Una matrice
si dice risolvibile se esiste un modo per completare le entrate vuote di M con
numeri da 1 a 9 in modo tale che
1. in ogni riga non ci sono più celle con lo stesso numero
2. in ogni colonna non ci sono più celle con lo stesso numero
3. in ogni quadrante, cioè una regione di 9 celle della prima, seconda o la
terza terne di righe e della prima, seconda o la terza terne di colonne, non
ci sono più celle con lo stesso numero
Prendiamo 93 variabili proposizionali indicate con il simbolo X ijk , i, j, k =
1, . . . , 9 e aventi il significato che nella cella di coordinate (i, j) cè’il numero k.
Allora i vincoli 1–3 si traducono nelle seguenti proposizioni
^ _
p1 = (¬ (Xijk ∧ Xij 0 k ))
i j,j 0 ,k
^ _
p2 = (¬ (Xijk ∧ Xi0 jk ))
j i,i0 ,k

_
p3 = (¬ Xijk ∧ Xi0 j 0 k ))
i,i0 ,j,j 0 ,k

10
In p3 la disgiunzione si intende estesa a tutte le quintuple i, i 0 , j, j 0 , k in cui la
cella (i, j) è nello stesso quadrante della cella (i 0 , j 0 ), cioè per

i−1 i0 − 1 j−1 j0 − 1
b c=b ceb c=b c
3 3 3 3
Bisogna inoltre aggiungere che i vincoli che in ogni cella cè uno e un sol
numero da 1 a 9 ^_ ^
p4 = (Xijk ∧ (¬Xijk0 ))
ij k k0 6=k

e che le celle non vuote in M hanno esattamente quei numeri


^
p5 = Xi,j,Mij
Mij 6=B

Per cui la proposizione cercata è proprio

p = (p1 ∧ p2 ∧ p3 ∧ p4 ∧ p5 )

E’ infatti facile dimostrare che α |= p se e solo se M̄ è una soluzione di M ,


in cui
M̄ij = l’unico valore k tale che α(Xijk ) = >
per ogni i, j = 1, . . . , 9.
Questo esempio dimostra che la logica proposizionale è in grado, seppur in
modo poco agevole, di modellare un mondo, come il Sudoku 9 × 9, fatto di un
numero finito e fissato a priori di oggetti. Non è in grado invece di modellare
mondi con un numero infinito di oggetti, ma anche semplicemente quelli aventi
un numero finito ma non precisato di oggetti, come il Sudoku generico n × n.

2.4 Metodi semantici per la verifica della soddi-


sfacibilità
Dalle proposizioni 1, 3 e 6 segue che i problemi di verificare che una proposizione
p è una tautologia, è equivalente ad un’altra proposizione o è conseguenza logica
di altre proposizioni sono tutti riconducibili al problema di verificare se una data
proposizione è soddisfacibile.
Vediamo in questa sezione un metodo per verificare se una proposizione p è
soddisfacibile.
Un metodo molto banale sarebbe quello della verifica diretta. Si prova ogni
possibile assegnamento di verità, fermandosi quando si trova un assegnamento
che soddisfa p, o quando sono stati provati tutti, in tal caso p è chiaramente
insoddisfacibile. Questo metodo non è utilizzabile se non per proposizioni con
un numero estremamente limitato di variabili.
Descriveremo ora un metodo alternativo, chiamato procedura di Davis–Putnam.
Il meccanismo è abbastanza semplice da capire e soprattutto da implementare

11
in un computer, infatti questa procedura è di gran lunga la più utilizzata nelle
applicazioni.
Innanzitutto la proposizione p si riduce in forma normale congiuntiva
(CNF). Esiste infatti una proposizione pCN F , equivalente a p, in cui
• non compaiono i connettivi logici ⇒ e ⇔
• il connettivo logico ¬ compare solo davanti a variabili proposizionali
• pCN F è della forma (c1 ∧ c2 ∧ . . . cm−1 ∧ cm )
• ogni sotto–proposizione ci , detta clausola, è della forma (li1 ∨li2 ∨. . . li,ni −1 ∨
li,ni )
• ogni lij è detto letterale ed è una variabile proposizionale o la sua nega-
zione
E’ possibile indicare un procedimento che data una proposizione p, trova una
proposizione pCN F in forma normale congiuntiva:
• Sostituire i connettivi ⇔ usando la legge (x ⇔ y) ≡ ((x ⇒ y) ∧ (y ⇒ x))
• Sostituire i connettivi ⇒ usando la legge (x ⇒ y) ≡ (¬x ∨ y)
• Utilizzando le leggi di De Morgan (¬(x∧y)) ≡ ((¬x)∨(¬y)) e (¬(x∨y)) ≡
((¬x) ∧ (¬y)) spostare tutti i connettivi ¬ davanti alle variabili
• Utilizzando le leggi distributive portare p nella forma a clausole
La proposizione pCN F viene poi rappresentata solo con i connettivi ¬: ogni
clausola viene scritta come insieme di letterali e la proposizioni come insieme di
clausole.
Ad esempio alla formula (((p ⇒ q) ∨ (t ∧ (¬r))) ∧ s) corrisponde la forma
normale congiuntiva {{¬p, q, t}, {¬p, q, ¬r}, {s}}.
Si noti che una proposizione p n forma normale congiuntiva è soddisfacibile se
e solo se ogni sua clausola è soddisfacibile, e ciò accade se esiste un assegnamento
di verità α che rende vero almeno un letterale per ogni clausola.
La procedura di Davis–Putnam quindi procede alla ricerca di un assegna-
mento che soddisfa p. Anzichè usare gli assegnamenti, la procedura gestisce un
insieme di letterali A che devono essere veri, all’inizio A è vuoto e ciò corrispon-
de al fatto che all’inizio nessuna variabile ha un valore di verità fissato. Quindi
A è in realtà corrisponde ad un assegnamento di verità parziale, che potrebbe
non assegnare un valore di verità ad alcune variabili.
Dato un letterale λ indicheremo con ¬λ il suo letterale opposto: se λ = x,
per una certa variabile proposizionale x, allora ¬λ = ¬x, se invece se λ = ¬x,
allora ¬λ = x.
L’algoritmo è descritto in un linguaggio pseudo–Pascal come funzione che
ha come argomenti p, la proposizione da verificare, e A, l’attuale assegnamento
parziale, e restituisce come risultato un assegnamento parziale che soddisfa p o
il simbolo UNSAT che sta ad indicare che p è insoddisfacibile.

12
procedure DP(p,A)
begin
if p = ∅ then DP:= A
else if ∅ ∈ p then DP:=UNSAT
else if {λ} ∈ p then DP:=DP(p[λ], A ∪ {λ})
else if λ e’ puro per p then DP:=DP(p[λ], A ∪ {λ})
else begin
scegli un letterale λ
r:=DP(p[λ], A ∪ {λ})
if r6= UNSAT then DP:= r
else DP:=DP(p[¬λ], A ∪ {¬λ})
end
end

Ecco la spiegazione dei vari passi dell’algoritmo.

• Se p è la proposizione vuota, cioè senza più alcuna clausola, allora è ov-


viamente soddisfacibile e la procedura termina riportando come assegna-
mento quello corrispondente all’insieme A.

• Se in p c’è una clausola vuota, allora è insoddisfacibile e la procedura


termina con insuccesso. Questa alternativa, come del resto quella prece-
dente, non si possono verificare all’inizio, ma solo solo dopo l’applicazione
di altre regole.

• Se in p c’è una clausola con un solo letterale λ (detta clausola unitaria,


allora p è soddisfacibile se solo se lo è la proposizione p[λ], ottenuta elimi-
nando da p tutte le clausole che contengono λ e cancellando da tutte le al-
tre clausole il letterale ¬λ, ove esso appare, aggiungendo all’assegnamento
parziale A il letterale λ.

• Se in p esiste un letterale puro λ, cioè non compare mai il letterale


opposto ¬λ, allora p è soddisfacibile se solo se lo è la proposizione p[λ]
aggiungendo all’assegnamento parziale A il letterale λ.

• Se nessuna delle precedenti regole di semplificazione può essere applicata,


allora si sceglie un letterale λ, con un criterio da stabilire e si prova ad
assegnare a λ uno dei valori di verità, ad esempio >. Si verifica se p[λ] è
soddisfacibile mettendo λ in A.
Se p[λ] è soddisfacibile, allora anche p è soddisfacibile e nell’assegnamento
cercato λ è vero.
Se invece p[λ] non fosse soddisfacibile, allora la procedura tenterà con
p[¬λ], mettendo ¬λ in A. Se quest’ultima proposizione risultasse soddi-
sfacibile, allora p sarebbe soddisfacibile e nell’assegnamento cercato λ è
falso. Se invece nemmeno p[¬λ] fosse soddisfacibile, allora la procedura
dedurrà che p è insoddisfacibile.

13
Il corretto funzionamento della procedura è basato sul seguente fatto, di
facile dimostrazione: p è soddisfacibile se e solo se almeno una delle proposizioni
p[λ] e p[¬λ] è soddisfacibile, in cui λ è un qualsiasi letterale.
Facciamo a titolo di esempio vedere in funzione la procedura di Davis–
Putnam su alcuni esempi.
Come primo esempio facciamo vedere che

q = ((a ⇒ b) ⇒ ((¬b) ⇒ (¬a)))

è una tautologia, mostrando che r = (¬q) è insoddisfacibile. La proposizione


rCN F è
{{¬a, b}, {¬b}, {a}}
Applicando due volte la regola della clausola unitaria si ottiene la clausola
vuota e quindi r è insoddisfacibile.
Come secondo esempio facciamo vedere che

s = ((a ∨ b) ∧ ((a ⇒ c) ∧ ((b ⇒ c) ∧ (c ⇒ (¬b)))))

è soddisfacibile.
La sua forma normale congiuntiva è

sCN F = {{a, b}, {¬a, c}, {¬b, c}, {¬b, ¬c}}

Non ci sono clausole unitarie, né letterali puri, dobbiamo quindi scegliere una
variabile. Supponendo di provare a porre vero il letterale b otteniamo

sCN F [b] = {{¬a, c}, {c}, {¬c}}

che con due applicazione della regola della clausola unitaria conduce ad una
clausola vuota.
Perciò dobbiamo vedere se

sCN F [¬b] = {{a}, {¬a, c}}

è soddisfacibile. La risposta è positiva ponendo a e c veri. Per cui l’assegnamento


che soddisfa s è A = {a, ¬b, c}.

2.5 Un sistema formale per la logica proposizio-


nale
Un approccio per determinare le tautologie (cioè i teoremi) della logica proposi-
zionale completamente diverso da quello semantico è quello dei sistemi formali.
Nei sistemi formali i teoremi saranno ottenuti attraverso una dimostrazione.
Un sistema formale S su un linguaggio L è definito attraverso un insieme
di assiomi A ed un insieme di regole di inferenza R.
L’insieme A contiene alcuni elementi di L che si suppone siano veri, senza
bisogno di dimostrazione.

14
Una regola di inferenza è una “procedura” che dati n elementi di L, che
si suppone si già dimostrati essere veri, è in grado di garantire la verità di un
nuovo elemento di L.
I teoremi del sistema formale S sono ottenuti attraverso una dimostrazio-
ne, cioè una sequenza finita di elementi di L, in cui ogni elemento della sequen-
za è un assioma o è ottenuto da elementi precedenti della sequenza mediante
l’applicazione di una delle regole di inferenza di R.
In questa sezione illustreremo perciò un calcolo proposizionale, cioè un
sistema formale costituito da un insieme di assiomi e da regole di inferenza in
grado di ottenere tutte e sole le conseguenze logiche di un insieme di proposizioni
∆. Nel caso particolare di ∆ = ∅, il calcolo proposizionale è in grado di ottenere
tutte e sole tautologie.

2.5.1 Il sistema di assiomi


Il simbolo ⇔ non verrà utilizzato e una proposizione del tipo (p ⇔ q) sarà
considerata semplicemente come abbreviazione della proposizione

((p ⇒ q) ∧ (q ⇒ p))

Presentiamo ora un sistema di assiomi per il calcolo proposizionale, che


indicheremo con A.

1. (b ⇒ (c ⇒ b))

2. ((b ⇒ (c ⇒ d)) ⇒ ((b ⇒ c) ⇒ (b ⇒ d)))

3. ((b ∧ c) ⇒ b)

4. ((b ∧ c) ⇒ c)

5. (b ⇒ (c ⇒ (b ∧ c)))

6. (b ⇒ (b ∨ c))

7. (c ⇒ (b ∨ c))

8. ((b ⇒ d) ⇒ ((c ⇒ d) ⇒ ((b ∨ c) ⇒ d)))

9. ((b ⇒ c) ⇒ ((b ⇒ (¬c)) ⇒ (¬b)))


10. ((¬(¬b)) ⇒ b)

Ognuno di questi assiomi va inteso come schema di assiomi, cioè i reali as-
siomi sono quelli che si ottengono a partire da uno schema di assiomi sostituendo
una o più variabili proposizionali con proposizioni arbitrarie. Ad esempio dal-
lo schema di assiomi 1 si ottengono le proposizioni ((b ∨ c) ⇒ (c ⇒ (b ∨ c))),
((¬b) ⇒ ((¬c) ⇒ (¬b))), ((b ⇒ b) ⇒ ((b ⇒ b) ⇒ (b ⇒ b))), ecc.
Comunque continueremo a parlare di assiomi, anzichè di schemi di assiomi.

15
Questi assiomi sono alcune delle possibili tautologie del calcolo proposizio-
nale. Non tutti gli insiemi finiti di tautologie sono adatti ad essere degli assiomi
di un sistema formale per il calcolo proposizionale. Il motivo sarà chiaro alla
fine della sezione.
Nel caso specifico della logica proposizionale l’unica regola di inferenza che
utilizzeremo è il modus ponens: date due proposizioni dimostrate p e q, in cui
q = (p ⇒ r), per una certa proposizione r, allora si può dedurre la verità della
proposizione r. Si indicherà che r = M P (p, q).

2.5.2 Derivazioni e tecniche di dimostrazione


Dato un insieme ∆ di proposizioni, diremo che la proposizione q è derivabile da
∆, in simboli ∆ ` q, se esiste una sequenza finita di proposizioni q 1 , q2 , . . . , qm ,
detta derivazione, tale che qm = q e per ogni i = 1, . . . , m, accade che qi ∈ ∆∪A
oppure esistono j, k < i per cui qi = M P (qj , qk ).
Come caso particolare è possibile avere ∆ = ∅, in tal caso si dice che q è de-
rivabile (tout court), oppure che q è un teorema del calcolo proposizionale,
in simboli ` q.
Innanzitutto è facile dimostrare che il teorema di correttezza

Teorema 1 (di correttezza) Dati un insieme di proposizioni ∆ e una propo-


sizione q, se ∆ ` q allora ∆ |= q

Infatti gli assiomi e le proposizioni di ∆ sono ovviamente conseguenze logiche


di ∆, mentre il Modus Ponens, se applicato conseguenze logiche di ∆, produce
ancora una conseguenza logica di ∆.
In particolare per ∆ = ∅ si ottiene che ogni teorema del calcolo proposizionale
è una tautologia.
Inoltre vale banalmente il seguente risultato

Proposizione 7 (di monotonia) Se ∆ ` q e ∆ ⊂ Γ, allora anche Γ ` q.


Per dimostrare il prossimo teorema abbiamo bisogno di dimostrare un lemma
preliminare.

Lemma 1 La tautologia (p ⇒ p) è derivabile.

Dim. Denotiamo con q = (p ⇒ p). Allora la derivazione di q è

• ((p ⇒ (q ⇒ p)) ⇒ ((p ⇒ q) ⇒ (p ⇒ p))) (assioma 2) riscritto come


((p ⇒ (q ⇒ p)) ⇒ ((p ⇒ q) ⇒ q))

• (p ⇒ (q ⇒ p)) (assioma 1)

• ((p ⇒ q) ⇒ q) (per modus ponens)

• (p ⇒ (p ⇒ p)) (assioma 1) riscritto come (p ⇒ q)

• q (per modus ponens).

16


Indicheremo nel resto delle dispense ∆, p ` . . . al posto di ∆ ∪ {p} ` . . . e


p, q ` . . . al posto di {p, q} ` . . . .
Un risultato estremamente importante perchè consente di dimostrare la va-
lidità delle implicazioni del tipo (p ⇒ q) a partire dalla dimostrazione di q sotto
l’ipotesi p è il seguente.

Teorema 2 (di deduzione) Dati un insieme di proposizioni ∆ e due propo-


sizioni p e q, allora ∆, p ` q se e solo se ∆ ` (p ⇒ q)

Dim. Come spesso accade una delle due implicazioni è facile da dimostrare.
Se ∆ ` (p ⇒ q), allora la stessa derivazione si può utilizzare per far vedere
che ∆, p ` (p ⇒ q). A quella derivazione si possono aggiungere, nell’ordine, le
proposizioni p (perchè adesso è tra le ipotesi) e q (per modus ponens delle due
proposizioni p ⇒ q e p). Quella ottenuta è quindi una derivazione di q da ∆, p.
Per dimostrare il viceversa, supponiamo di avere una derivazione q 0 , q1 , . . . , qm =
q di q da ∆, p. Costruiamo una derivazione r1 , . . . , rn , in modo che per ogni qi
esiste un rj per cui rj = (p ⇒ qi ). Dato che qm = q, si avrà che nella deriva-
zione ri un elemento sarà proprio (p ⇒ q) e questo chiuderà la derivazione, cioè
rn = (p ⇒ q).
Per ottenere la derivazione r1 , . . . , rn di (p ⇒ q), si parta con una sequenza
inizialmente vuota e poi, per ogni proposizione q i si aggiungano alla sequenza
alcune proposizioni secondo lo schema seguente.
Se qi ∈ A, allora si aggiungano le proposizioni (qi ⇒ (p ⇒ qi )), qi e (p ⇒ qi ).
Se qi = p, allora si aggiunga (almeno la prima volta che q i = p) la dimostrazione
di (p ⇒ p). Se qi ∈ ∆, allora si aggiunga qi , (qi ⇒ (p ⇒ qi )) e (p ⇒ qi ). Se
qi = M P (qj , qk ) allora, posto ad esempio qj = (qk ⇒ qi ), si aggiungano le pro-
posizioni ((p ⇒ (qk ⇒ qi )) ⇒ ((p ⇒ qk ) ⇒ (p ⇒ qi ))), ((p ⇒ qk ) ⇒ (p ⇒ qi )),
(p ⇒ qi ). 

Un altro risultato molto importante è quello della dimostrazione “per as-


surdo”: se assumendo come ipotesi p si giunge ad una contraddizione, allora
bisogna necessariamente che p è falso, ossia che è vero (¬p). In generale si dirà
che un insieme di proposizioni ∆ è inconsistente se ∆ ` r e ∆ ` (¬r), per una
qualsiasi proposizione r.

Teorema 3 (di dimostrazione per assurdo) Dati un insieme di proposizio-


ni ∆ e una proposizione p, ∆, p è inconsistente se e solo se ∆ ` (¬p)

Dim. Se ∆ ` (¬p), allora si ha contemporaneamente che se ∆, p ` p e se


∆, p ` (¬p) e quindi ∆, p è inconsistente. Se invece ∆, p è inconsistente, al-
lora per il teorema di deduzione si possono ottenere le derivazioni di (p ⇒ (¬r))
e di (p ⇒ r) da ∆. Poi usando l’assioma 9 ((p ⇒ r) ⇒ ((p ⇒ (¬r)) ⇒ (¬p))) e
due volte il modus ponens, si ottiene (¬p). 

17
Normalmente la contraddizione a cui si arriva è che partendo dall’ipotesi p,
si ottiene come risultato (¬p). Il teorema sopra dimostrato usa una definizione
(apparentemente) più generale di contraddizione, in cui si ottengono sia una
proposizione che il suo contrario.
Da un insieme inconsistente di ipotesi si può derivare qualunque proposizio-
ne:
Proposizione 8 ∆ è inconsistente se e solo se per ogni proposizione q, si ha
∆`q
Dim. Ovviamente se per ogni proposizione q, si ha ∆ ` q, allora ∆ è inconsisten-
te. Se ∆ è inconsistente, allora lo è anche ∆, q, con q una qualsiasi proposizione.
Per il teorema della dimostrazione per assurdo si ottiene ∆ ` (¬(¬q)). Tramite
l’assioma 10, si ottiene una dimostrazione anche di q. 

Un altro corollario della dimostrazione per assurdo è la tautologia del “modus


tollens”
((¬q) ⇒ ((p ⇒ q) ⇒ (¬p)))
Infatti (¬q), (p ⇒ q), p è inconsistente e quindi (¬q), (p ⇒ q) ` (¬p), da cui per
deduzione l’asserto.

2.5.3 Teorema di completezza


Per dimostrare l’ultimo risultato (il teorema di completezza) abbiamo bisogno
di alcuni risultati intermedi.
Il primo è un semplice corollario della proposizione 8
Lemma 2 La tautologia Ex Falso Quodlibet (p ⇒ ((¬p) ⇒ q)) è derivabile.
Il secondo risultato è
Lemma 3 La tautologia ((¬p) ⇒ ((¬q) ⇒ (¬(p ∨ q)))) è derivabile.
Dim. Facciamo innanzitutto vedere che se ∆, s e ∆, t sono inconsistenti, allora
lo è anche ∆, (s ∨ t). Infatti abbiamo che ∆, s ` r e ∆, t ` r, per ogni propo-
sizione r. Per deduzione, ∆ ` (s ⇒ r) e ∆ ` (t ⇒ r). Usando l’assioma 8 e il
modus ponens, otteniamo che ∆ ` ((s ∨ t) ⇒ r), ovvero che ∆, (s ∨ t) ` r. Da
ciò segue che ∆, (s ∨ t) è inconsistente.
Posto ∆ = {(¬p), (¬q)}, dal fatto che ∆, p e ∆, q sono inconsistenti, segue che
anche ∆, (p ∨ q) è inconsistente. Applicando i teoremi di dimostrazione per as-
surdo e deduzione si ottiene facilmente l’asserto. 

Lemma 4 La tautologia (p ⇒ (¬(¬p))) è derivabile

Dim. L’insieme {p, (¬p)} è chiaramente inconsistente, perciò, usando il teorema


della dimostrazione per assurdo, si ottiene l’asserto. 

18
Lemma 5 La tautologia ((p ⇒ q) ⇒ (((¬p) ⇒ q) ⇒ q)) è derivabile
Dim. Facciamo innanzitutto vedere che se ∆, s e ∆, (¬s) sono inconsistenti, al-
lora lo è anche ∆: infatti abbiamo che ∆ ` (¬s) e ∆ ` (¬(¬s)).
Perciò usando ∆ = {(p ⇒ q), ((¬p) ⇒ q), (¬q)} e s = p, si ottiene facilmente
l’asserto. 

Il risultato fondamentale per la dimostrazione del teorema di completezza è


il seguente lemma
Lemma 6 Sia V un insieme finito di variabili proposizionali, α un assegna-
mento di verità su V e Xα l’insieme di tutti i letterali veri in α
Xα = {v : v ∈ V e α(v) = >} ∪ {(¬v) : v ∈ V e α(v) = ⊥}
allora per ogni proposizione p tale che α |= p, si ha Xα ` p, mentre per ogni
proposizione p tale che α 6|= p, si ha Xα ` (¬p).
La dimostrazione di questo lemma si fa per induzione strutturale o, in modo
alternativo ma equivalente, sul numero di parentesi aperte di p.

Se p non ha parentesi, allora p è per forza una variabile proposizionale. Inoltre


se α |= p allora p ∈ Xα e banalmente Xα ` p. Mentre se α 6|= p, allora allora
(¬p) ∈ Xα e quindi Xα ` (¬p)

Supponiamo ora che il lemma valga per proposizioni con un numero di pa-
rentesi aperte minore o uguale a n e facciamo vedere che vale anche per una
proposizione p con n + 1 parentesi aperte.
Se p = (¬q), q ha al massimo n parentesi aperte. Se supponiamo che α |= q,
per ipotesi induttiva Xα ` q. Usando il lemma 4, otteniamo Xα ` (¬(¬q)), cioè
Xα ` (¬p), che corrisponde al fatto che α |= (¬p).
Se invece supponiamo che α 6|= q, per ipotesi induttiva X α ` (¬q). Ma
(¬q) = p e quindi Xα ` p, che corrisponde al fatto che α |= p.

Se p = (q ∧ r), allora sia q che r hanno al massimo n parentesi aperte. Se α 6|= q,


per ipotesi induttiva si ha che Xα ` (¬q), da ciò discende che Xα , (q ∧ r) ` (¬q)
e contemporaneamente Xα , (q ∧ r) ` q e quindi otteniamo usando la dimostra-
zione per assurdo che Xα ` (¬(q ∧ r)), che corrisponde al fatto che α |= (¬p).
Lo stesso vale nel caso in cui Xα ` (¬r).
Nel caso rimanente, α |= q e α |= r e per ipotesi induttiva vale che X α ` q e
Xα ` r, quindi si ha facilmente che Xα ` (q ∧ r) in virtù dell’assioma 5.

Se p = (q ⇒ r), allora sia q che r hanno al massimo n parentesi aperte. Se


α |= r, per ipotesi induttiva Xα ` r, quindi usando l’assioma 1, si ha facilmente
che Xα ` (q ⇒ r), che corrisponde al fatto che α |= p.
Nel caso in cui α 6|= q, si ha Xα ` (¬q), quindi usando la derivazione del
lemma 2 e il modus ponens si ottiene Xα ` (q ⇒ r), anche questo corrispondente
al fatto che α |= p.

19
Nel caso rimanente, α |= q e α 6|= r, perciò per ipotesi induttiva X α ` q e
Xα ` (¬r); da ciò si ottiene contemporaneamente X α , (q ⇒ r) ` r e Xα , (q ⇒
r) ` (¬r). Usando la dimostrazione per assurdo si ottiene che X α ` (¬(q ⇒ r)),
corrispondente al fatto che α 6|= p.

Se p = (q ∨ r), allora sia q che r hanno al massimo n parentesi aperte. Nel


caso in cui α |= q, per ipotesi induttiva vale Xα ` q e perciò per l’assioma 6 si
ottiene Xα ` (q ∨ r), corrispondente al fatto che α |= p. Analogamente si tratta
il caso in cui α |= r.
Nel caso in cui α 6|= q e α 6|= r, per ipotesi induttiva abbiamo X α ` (¬q)
e Xα ` (¬r), quindi si usa la dimostrazione della tautologia ((¬q) ⇒ ((¬r) ⇒
(¬(q ∨ r)))) per ottenere che Xα ` (¬(q ∨ r)), perfettamente corrispondente al
fatto che α 6|= p. 

Il risultato finale è il seguente


Teorema 4 (completezza) A è un insieme completo di assiomi, cioè per ogni
tautologia q, si ha che ` q.
Dim. Sia q una tautologia, le cui variabili proposizionali siano V = {x 1 , x2 , . . . , xn }.
Per ogni α : V → B, si ha che α |= q e per il lemma 6, Xα ` q. Si parta
con la variabile x1 e si trovino tutte le coppie di assegnamenti che differiscono
solo per il valore di verità assegnato a x1 . Il numero di tali coppie è 2n−1 .
Per ognuna di queste coppie, diciamo α, α0 , è chiaro che Xα = {x1 } ∪ Xβ e
Xα0 = {(¬x1 )} ∪ Xβ , ove β : {x2 , . . . , xn } → B. Si ottiene facilmente che
Xβ ` (x1 ⇒ q) e Xβ ` ((¬x1 ) ⇒ q) e da ciò, utilizzando la tautologia del
lemma 5 si ottiene che Xβ ` q. Facendo questo procedimento per tutte le cop-
pie, si otterrà che Xβ ` q per tutti gli assegnamenti β sull’insieme di variabili
{x2 , . . . , xn }.
A questo punto, lo stesso processo viene svolto per x 2 , x3 , . . . , xn . Alla fine
dell’ultimo passaggio si avrà la dimostrazione che ` q. 

2.5.4 Considerazioni finali


Attraverso i teoremi di correttezza e di completezza abbiamo dimostrato che i
due concetti di verità semantica (essere una tautologia) e di verità formale–
sintattica (essere derivabile) coincidono. Questo risultato è estremamente im-
portante perchè permette di giustificare l’utilizzo di procedimenti puramente
meccanici di dimostrazione tratti dalla teoria assiomatica.
Inoltre come corollario del teorema di correttezza abbiamo anche il fatto che
l’insieme degli assiomi è consistente (cioè non inconsistente).
Resta da chiedersi se può essere esistere un’altra assiomatizzazione (corret-
ta e completa) della logica proposizionale ed eventualmente come scegliere gli
assiomi. Innanzitutto quella proposta non è l’unica assiomatizzazione possibile.
Ne esistono molte altre, ad esempio sul Mendelson [3] si usano solo gli assiomi
1, 2 e 9, perchè gli altri connettivi sono scritti tutti in termini di ⇒ e ¬.

20
L’assiomatizzazione che abbiamo scelto, proposta da Kleene, ha il vantaggio
di utilizzare gli assiomi corrispondenti alle regole della deduzione naturale, che
è uno dei modelli alternativi per la teoria della dimostrazione. Infatti ogni
assioma di A può essere riletto come regola di deduzione: ad esempio l’assioma
5 (b ⇒ (c ⇒ (b ∧ c))) può essere convertito nella regola “Se ∆ ` b e ∆ ` c, allora
∆ ` (b ∧ c)”. La notazione che si usa in questo caso è la seguente

∆ ` b, ∆ ` c
∆ ` (b ∧ c)

21
Capitolo 3

La logica dei predicati

3.1 Sintassi della logica dei predicati


Un linguaggio della logica dei predicati della logica dei predicati è composto di
parole di un alfabeto avente simboli logici CQ e simboli extra–logici Σ. L’alfa-
beto CQ, oltre ai connettivi ∧, ∨, ⇒, ⇔, ¬ della logica proposizionale, contiene
i quantificatori ∀ e ∃.
L’alfabeto Σ è l’unioni di quattro alfabeti finiti diversi

V , i cui elementi sono detti simboli di variabili

C, i cui elementi sono detti simboli di costanti


F , i cui elementi sono detti simboli di funzioni

R, i cui elementi sono detti simboli di relazioni

Inoltre all’alfabeto Σ è associata una funzione δ : R ∪ F → N, detta arità,


che indica per ogni simbolo di funzione e di relazione, quanti argomenti sono
previsti per quella funzione o relazione. Ad esempio se per f ∈ F , δ(f ) = 2,
vuol dire che f è un simbolo di funzione binaria che può essere applicato solo a
due argomenti.
Innanzitutto introduciamo il linguaggio dei termini.

Definizione 15 Dato Σ, il linguaggio dei termini T (Σ) è il linguaggio ge-


nerato dalla grammatica (T, {T }, AT , PT ) in cui AT = F ∪ V ∪ C ∪ {(, ), ,} e le
cui produzioni PT sono

• T → k per ogni k ∈ C

• T → x per ogni x ∈ V

• T → f (T, T, . . . , T ) per ogni f ∈ F , in cui il numero di simboli T all’in-


terno delle parentesi è δ(r)

22
Ad esempio se F = {f, g}, C = {c} e V = {x, y}, con δ(f ) = 1 e δ(g) = 2.
Allora alcuni termini sono x, c, f (c), f (x), g(x, c), g(c, c), g(f (x), c), g(c, f (c)),
ecc.
Si noti che se F 6= ∅ allora il linguaggio è infinito, infatti si possono avere
x, f (x), f (f (x)), f (f (f (x))), . . . .
Dato che il linguaggio dei termini dipende da Σ, nella logica dei predicati
si parlerà del linguaggio LP(Σ) della logica dei predicati (e non del linguaggio
tout court), proprio ad indicare la dipendenza da Σ.
Il linguaggio LP(Σ) è generato dalla grammatica (S, {S, T }, A P , PT ∪ P 0 ) in
cui AP = R ∪ AT ∪ CQ ∪ {.} e le produzioni sono quelle di PT più le seguenti
• S → r(T, T, . . . , T ) per ogni r ∈ R, in cui il numero di simboli T all’interno
delle parentesi è δ(r)
• S → (S ∨ S)
• S → (S ∧ S)
• S → (S ⇒ S)
• S → (S ⇔ S)
• S → (¬S)
• S → (∀x.S) per ogni x ∈ V
• S → (∃x.S) per ogni x ∈ V

Definizione 16 Le parole del linguaggio LP(Σ) sono dette formule, in par-


ticolare quelle prodotte applicando solo la prima produzione, cioè quelle in cui
non sono presenti connettivi o quantificatori, sono dette formule atomiche.

Se F, C, V sono come nell’esempio precedente e R = {r, s}, con δ(r) = 2


e δ(s) = 1, allora sono formule atomiche di LP(Σ)(Σ) le parole: r(f (x), x),
r(c, g(c, c)), s(y), s(f (c)), ecc. Mentre sono formule di LP(Σ)(Σ) le parole
(¬s(y)), (∀x.s(x)), (∀x.(∀y.r(x, f (y)))), ecc.

Definizione 17 Si dirà che una variabile x occorre legata in una formula


φ, se x ha un occorrenza in una parola del tipo (∃x.ψ) o del tipo (∀x.ψ), che a
sua volta occorre in φ. Ciò vuol dire che x è sotto l’azione di un quantificatore.
Si dirà invece che x occorre libera in φ se x pur occorrendo nella parola φ,
non occorre in parole del tipo sopra descritto. Ciò significa che x non è sotto
l’azione di un quantificatore.

Ad esempio nella formula (s(x) ⇒ ((∃x.(∀y.r(x, g(y, z)))))), x occorre due


volte, una prima volta libera (a partire da sinistra) e una seconda volta legata,
y occorre solo una volta legata e z solo una volta libera.
Se una formula ha solo occorrenze di variabili legate, la formula si chiama
enunciato. Per indicare che una formula φ ha come variabili libere x 1 , x2 , . . . , xn
si può usare la notazione φ(x1 , x2 , . . . , xn ).

23
Data una formula φ, una variabile x che occorre libera in φ e un termine t,
indicheremo con φ[x/t] la formula che si ottiene da φ sostituendo ogni occorrenza
libera di x con il termine t. Ad esempio se φ = ((∀x.P (x, y)) ⇒ P (y, x)) allora
φ[y/z] = ((∀x.P (x, z)) ⇒ P (z, x)) mentre φ[x/z] = ((∀x.P (x, y)) ⇒ P (y, z)).

3.2 Semantica della logica dei predicati


La semantica della logica dei predicati è molto più complessa di quella della
logica proposizionale, in quanto il linguaggio della logica dei predicati permette
di rappresentare oggetti e relazioni tra di loro, mentre nella logica proposizionale
si può parlare solo di fatti.
Il concetto chiave è quello di interpretazione.

Definizione 18 Dato un linguaggio LP(Σ), un’interpretazione I è una qua-


drupla (D, IC , IF , IR ), in cui D è un insieme chiamato dominio, IC : C → D
è una funzione che ad ogni costante c ∈ C assegna un valore IC (c) ∈ D, IF è
una funzione che ad ogni simbolo di funzione f di arità n assegna una funzione
IF (f ) : D n → D e infine IR è una funzione che ad ogni simbolo di relazione R
di arità n assegna una relazione n-aria su D, ossia IR (R) ⊂ D n .

Affiancata all’intepretazione vi è il concetto di valutazione.

Definizione 19 Dato un linguaggio LP(Σ), una valutazione è una funzione


µ : V → D, che ad ogni simbolo di variabile v assegna un elemento del dominio.

Dati un’intepretazione I e una valutazione µ, è facile vedere che ad ogni


termine τ può essere associato un elemento del dominio [τ ] I,µ secondo le seguenti
leggi ricorsive:
• se τ è una costante c ∈ C, allora [τ ]I,µ = IC (c)
• se τ è una variabile v ∈ V , allora [τ ]I,µ = µ(v)
• se τ = f (τ1 , . . . , τn ) e [τi ]I,µ = di , per i = 1, . . . , n, allora [τ ]I,µ =
IF (f )(d1 , . . . , dn ).

Definizione 20 Date due valutazioni µ, µ0 : V → D e data x ∈ V , diremo che


µ e µ0 differiscono al più su x, in simboli µ0 ∼x µ, se per ogni v ∈ V , con
v 6= x, accade che µ(v) = µ0 (v).

E’ ovvio che µ ∼x µ e quindi ∼x è una relazione di equivalenza. Inoltre


dato una valutazione µ, ogni altra valutazione µ 0 , per cui µ0 ∼x µ, si ottiene
prendendo un valore arbitrario d ∈ D, con d 6= µ(d) e definendo

0 µ(v) se v 6= x
µ (v) =
d se v = x

Definizione 21 Una formula φ di un linguaggio LP(Σ) è vera dati I e µ, in


simboli I, µ |= φ in base alle seguenti regole ricorsive

24
• se φ è una formula atomica del tipo φ = r(t1 , . . . , tn ), allora I, µ |= φ se e
solo se (d1 , . . . , dn ) ∈ IR (r) ove [τi ]I,µ = di , per i = 1, . . . , n

• se φ = (¬ψ), allora I, µ |= φ se e solo se non è vero che I, µ |= ψ, in


simboli I, µ 6|= ψ

• se φ = (ψ ∧ χ), allora I, µ |= φ se e solo se I, µ |= ψ e I, µ |= χ


• se φ = (ψ ∨ χ), allora I, µ |= φ se e solo se I, µ |= ψ e/o I, µ |= χ

• se φ = (ψ ⇒ χ), allora I, µ |= φ se e solo se I, µ 6|= ψ e/o I, µ |= χ

• se φ = (ψ ⇔ χ), allora I, µ |= φ se e solo se I, µ |= ψ e I, µ |= χ oppure


I, µ 6|= ψ e I, µ 6|= χ

• se φ = (∀x.ψ), allora I, µ |= φ se e solo se I, µ0 |= ψ per ogni µ0 ∼x µ

• se φ = (∃x.ψ), allora I, µ |= φ se e solo se I, µ0 |= ψ per almeno un


µ0 ∼ x µ

Definizione 22 La forumula φ è soddisfacibile (il qual fatto si indica con


I |= φ) se I, µ |= φ per ogni valutazione µ : V → D. In tal caso I è detta
modello di φ.

Indicheremo con M od(φ) l’insieme dei modelli di φ.


E’ semplice dimostrare che se φ è un enunciato, allora accade che I, µ |= φ per
ogni valutazione µ : V → D, oppure I, µ 6|= φ per ogni valutazione µ : V → D.
Invece in generale se φ ha delle variabili libere allora potrebbe accadere che per
alcune valutazioni µ : V → D I, µ |= φ, mentre per altre I, µ 6|= φ.

Definizione 23 Una formula φ è valida, in simboli |= φ, se I |= φ, per ogni


possibile interpretazione I, mentre φ è insoddisfacibile se I 6|= φ per ogni I.

Essere una formula φ valida nella logica dei predicati è un concetto corri-
spondente ad essere una tautologia nella logica proposizionale: in entrambi i
casi si tratta di una formula che è vera indipendentemente dall’interpretazione
(che nella logica proposizionale è semplicemente un assegnamento di verità).
Una tautologia della logica proposizionale può essere espressa nella logica dei
predicati come formula valida: ad esempio usando un simbolo di relazione r, un
simbolo di costante ci associato ad ogni variabile proposizionale xi e sostituendo
al posto di xi la formula atomica r(ci ). Ad esempio la tautologia (p ⇒ (q ⇒ p))
diventerebbe (r(c) ⇒ (r(d) ⇒ r(c))).
Se si prende una tautologia e al posto di ogni variabile proposizionale si
sostituisce una formula qualsiasi, si ottiene una formula valida. Ad esempio
dalla tautologia (p ∨ (¬p)) si possono ottenere le formule valide ((∀x.Q(x)) ∨
(¬(∀x.Q(x)))), ((∀x.(∃y.P (x, y))) ∨ (¬(∀x.(∃y.P (x, y))))), ecc.
Esistono però molte formule valide che non derivano da tautologie. Eccone
un paio di esempi.

25
L’enunciato α = ((∀x.P (x)) ⇒ (∃x.P (x))) è una formula valida, in quanto
presa un’interpretazione I, se I 6|= (∀x.P (x)), allora I |= α, mentre se I |=
(∀x.P (x)), allora accade che IR (P ) = D, in quanto deve verificarsi che I, µ |=
P (x) per ogni possibile valutazione µ. Da ciò segue che esiste una valutazione
µ per cui I, µ |= P (x), cioè I |= (∃x.P (x)), e quindi I |= α.
L’enunciato β = ((∀x.u(x) ⇒ m(x)) ∧ u(s)) ⇒ m(s) è una formula valida,
in quanto presa un’interpretazione I e presa I |= (∀x.u(x) ⇒ m(x)) ∧ u(s), cioè
I |= (∀x.u(x) ⇒ m(x)) e I |= u(s), si ha che IR (u) ⊂ IR (m) e che IC (s) ∈ IR (u),
da ciò segue banalmente che IC (s) ∈ IR (m), quindi I |= m(s) e perciò I |= β.

Definizione 24 Due formule α e β sono equivalenti se per ogni interpreta-


zione I e per ogni valutazione µ accade che I, µ |= α se e solo se I, µ |= β.
In particolare, due enunciati α e β sono equivalenti se hanno gli stessi modelli,
cioè per ogni interpretazione I, accade che I |= α se e solo se I |= β.

Ad esempio sono enunciati equivalenti (¬(∀x.α)) e (∃x.(¬α)). Infatti se


I è un modello del primo enunciato, allora I 6|= (∀x.α) e quindi esiste una
valutazione µ, per cui I, µ 6|= α, ovvero I, µ |= (¬α) e quindi I |= (∃x.(¬α)). Il
caso inverso (¬(∃x.α)) ≡ (∀x.(¬α)) è analogo.
Parimenti sono equivalenti gli enunciati (¬(∃x.α)) e (∀x.(¬α)).
Un’altra legge di equivalenza importante è

(∀x.(∀y.α)) ≡ (∀y.(∀x.α))

insieme alla sua duale

(∃x.(∃y.α)) ≡ (∃y.(∃x.α)),

di facile dimostrazione. Ciò ci autorizza a scrivere le formule precedenti in modo


abbreviato (∀x.∀y.α) e (∃x.∃y.α).

Definizione 25 Dati ∆ un insieme di formula e γ una formula, si dirà che γ


è una conseguenza logica di ∆, in simboli ∆ |= γ, se per ogni interpretazione
I e per ogni valutazione µ tali che

I, µ |= δ per ogni formula δ ∈ ∆,

accade che I, µ |= γ. Se ∆ e γ sono enunciati, allora indicato con M od(∆)


l’insieme dei modelli comuni a tutti gli elementi di ∆, accade che

M od(∆) ⊂ M od(γ)

Se ∆ è un insieme finito di formule {δ1 , . . . , δn }, allora ∆ |= γ se e solo se


la formula (δ1 ∧ . . . δn ) ∧ (¬γ) è insoddisfacibile.

26
3.3 Metodi semantici per il controllo della sod-
disfacibilità
In questa sezione descriveremo per sommi capi una procedura che è in grado di
trovare se un enunciato è insoddisfacibile o se una formula è una conseguenza
logica di un insieme finito di formule. La procedura che troveremo non è del
tutto soddisfacente, ma come sarà chiaro in seguito non ci sono speranze di
trovarne di migliori.
Supponiamo di avere un enunciato α. E’ possibile trovare una formula α 0 ,
tale che α0 è soddisfacibile se e solo se α lo è, e che è forma prenessa, cioè
espressa solo con quantificatori universali disposti solo all’inizio della formula.
Il procedimento che porta α in forma prenessa si effettua in cinque passi:

1. Sostituire i connettivi ⇔ e ⇒, usando le leggi (α ⇔ β) ≡ ((α ⇒ β) ∧ (β ⇒


α) e (α ⇒ β) ≡ ((¬α) ∨ β)

2. Muovere i connettivi ¬ verso l’interno usando le leggi di de Morgan per ∨


e ∧ e le leggi (¬(∀x.α)) ≡ (∃x.(¬α)) e (¬(∃x.α)) ≡ (∀x.(¬α)) fino a che
ogni negazione sia applicata solo a formule atomiche

3. Rinominare le variabili in modo che ogni quantificatore agisca su una


variabile diversa

4. Portare completamente all’esterno i quantificatori usando le leggi ((∃x.α)∨


β) ≡ (∃x.(α ∨ β)), ((∀x.α) ∨ β) ≡ (∀x.(α ∨ β)) e simili

5. Eliminare ogni quantificatore esistenziale procedendo dall’esterno verso


l’interno mediante il procedimento di Skolemizzazione. Se il quantificatore
(∃x.φ) è quello più esterno (comprendendo anche i ∀), sostitiure al posto di
x una costante c non presente in α. Se il quantificatore (∃x.φ) è preceduto
da n quantificatori universali ∀x1 .∀x2 . . . . .∀xn , sostituire al posto di x il
termine f (x1 , . . . , xn ), in cui f è un simbolo di funzione non presente in
α. In ogni caso il linguaggio con cui è espressa α 0

La validità dell’ultimo passo è giustificata dalla seguente

Proposizione 9 Sia γ = (∀x1 .∀x2 . . . . .∀xn .∃x.φ) e γs la sua Skolemizzazione,


ovvero γs = (∀x1 .∀x2 . . . . .∀xn .φ[x/f (x1 , . . . , xn )]), allora γ è soddisfacibile se e
solo se γs è soddisfacibile.

Dim. Innanzitutto si noti che γ e γs non posso essere equivalenti in quanto for-
mule di linguaggi diversi. Infatti in γs sono presenti simboli di costanti o simboli
di funzioni che potrebbero non essere presenti nel linguaggio originario di α.

Per iniziare è facile far vedere che ogni modello di γ s è un modello di γ. Infatti se,
data un intepretazione I, I |= (∀x1 .∀x2 . . . . .∀xn .φ[x/f (x1 , . . . , xn )]) allora per
ogni valutazione µ, posto d1 = µ(x1 ), . . . , dn = µ(xn ) e d = IF (f )(d1 , . . . , dn ),
la valutazione µ0 (x) = d e µ0 (y) = µ(x), per ogni y 6= x, è tale che I, µ0 |= φ e

27
quindi I |= γ.

Supponiamo invece che esiste un’intepretazione I di dominio D per cui I |=


(∀x1 .∀x2 . . . . .∀xn .∃x.φ). Definiamo ora un’intepretazione J di dominio D tale
che J |= (∀x1 .∀x2 . . . . .∀xn .φ[x/f (x1 , . . . , xn )]). J eredita da I l’interpretazione
di tutti i simboli, in più J interpreterà f con la funzione J F (f ) : D n → D defini-
ta nel seguente modo. Per ogni ennupla (d1 , . . . , dn ) ∈ D n , sia µ una valutazione
per cui µ(xi ) = di , per i = 1, . . . , n. Dato che I |= γ, esiste una valutazione
µ0 ∼x per cui I, µ0 |= φ. Definendo JF (f )(d1 , . . . , dn ) = µ0 (x) si vede facilmente
che J, µ |= φ[x/f (x1 , . . . , xn )] e quindi l’asserto. 

Un paio di esempi di utilizzo del procedimento di riduzione a forma prenessa


saranno presentati in seguito.

3.3.1 Il teorema di Herbrand


Definizione 26 L’universo di Herbrand di un enunciato α è il linguaggio
H(α) di tutti i termini chiusi (cioè senza variabili), costruiti usando le funzioni
e le costanti usate in α. Nel caso in cui in α non si presentassero delle costanti
si aggiunga una costante arbitraria c

Ad esempio se α = (p(x, c) ⇒ p(f (x), d)) allora

H(α) = {c, d, f (c), f (d), f (f (c)), f (f (d)), . . . }.

Definizione 27 Dato un enunciato α, l’insieme degli atomi A(α) è l’insieme


di tutte le formule atomiche composte con i simboli di relazione presenti in α
applicati a termini di H(α)

A(α) = {r(t1 , . . . , tn ) : ti ∈ H(α), δ(r) = n}

Ad esempio A(α) = {p(c, c), p(c, d), p(d, c), p(d, d), p(f (c), c), . . . , } per α co-
me nell’esempio precedente.

Teorema 5 Dato α = (∀x1 .∀x2 . . . . .∀xn .β) un enunciato in forma prenessa,


allora α è soddisfacibile se e solo è soddisfacibile (nella logica proposizionale)
l’insieme di proposizioni

Ω(α) = {β[x1 /t1 , . . . , xn /tn ] : ti ∈ H(α)}

considerando come variabili proposizionali le formule atomiche di A(α).

Dim. Innanzitutto supponiamo che α abbia come modello l’interpretazione I.


E’ possibile allora costruire un assegnamento δ : A(α) → B definito da

δ(r(t1 , . . . , tn )) = > ⇔ I |= r(t1 , . . . , tn )

per ogni r(t1 , . . . , tn ) termine di A(α). E’ facile mostrare che questo assegna-
mento soddisfa ogni proposizione ω ∈ Ω(α).

28
Sia adesso invece Ω(α) soddisfacibile tramite un assegnamento δ : A(α) →
B, allora è possibile costruire un’interpretazione I a partire da δ avente come
dominio D proprio H(α).
Definiremo, usando una tecnica che sfrutteremo di nuovo per dimostrare il
teorema di completezza, IC come la funzione identità (cioè per ogni simbolo
di costante c ∈ C IC (c) = c) e IF (f ) : D n → D, per ogni simbolo di funzione
f ∈ F con arità n, come quella funzione che ad ogni ennupla t 1 , . . . , tn di termini
di H(α) associa il termine f (t1 , . . . , tn ) (intendendo con maggiore precisione la
parola ottenuta concatenando le parole “f (”, t 1 , “,” . . . tn e infine la parola “)”).
Infine definiremo IR (r) ⊂ D n , per ogni simbolo di relazione r ∈ R con arità n,
come quel sottoinsieme di D n contenente tutte e sole quelle ennuple (t1 , . . . , tn )
di parole di H(α) tali che δ(r(t1 , . . . , tn )) = >, intendendo la parola r(t1 , . . . , tn )
costruita in modo analogo a quanto detto sopra.
E’ facile dimostrare che questa interpretazione è un modello di α. 

A questo punto siamo in grado di enunciare e dimostrare il teorema di


Herbrand
Teorema 6 Un enunciato α in forma prenessa è insoddisfacibile se e solo esiste
un sottoinsieme finito ∆ di Ω(α) che è insoddisfacibile
Dim. Per la dimostrazione è indispensabile il teorema di compattezza, che
citiamo senza dimostrarlo:
Un insieme di proposizioni è soddisfacibile se e solo se ogni suo
sottoinsieme finito è soddisfacibile.
Infatti, per il teorema 5, α è insoddisfacibile se e solo se Ω(α) è insoddi-
sfacibile, il che accade, per il teorema di compattezza, se e solo se esiste un
sottoinsieme finito ∆ ⊂ Ω(α) che è insoddisfacibile. 

Questo risultato ci permette di definire un procedimento che è in grado di


stabilire se un enunciato α è insoddisfacibile:
1. Si porti α in forma prenessa
2. Si costruisca un’enumerazione effettiva di tutti i sottoinsiemi finiti di Ω(α)
1
∆1 , ∆ 2 , . . . , ∆ n , . . .
3. Per ogni sottoinsieme ∆i , si determini la sua soddisfacibilità con un qual-
siasi metodo della logica proposizionale, ad esempio la procedura di Davis–
Putnam
4. Nel caso che ∆i risultasse insoddisfacibile, allora il procedimento termina
con la risposta che α è insoddisfacibile
5. Nel caso contrario il procedimento continua
1 Ovvero un procedimento che è in grado di produrre uno dopo l’altro tutti i sottoinsiemi
finiti. Questo concetto sarà formalizzato meglio in seguito

29
Si noti che tale procedimento non termina se α è soddisfacibile. Questo pro-
cedimento è utilizzabile solo se si vuol dimostrare, già essendone a conoscenza,
che α è insoddisfacibile, ma non può essere utilizzato per scoprire se α è soddi-
sfacibile oppure no, perché in caso positivo il procedimento non darebbe alcuna
risposta.
Ma non si può fare di meglio: in base al teorema di Church, che faremo
successivamente, non è possibile trovare un procedimento che sia in grado di
stabilire se una formula è soddisfacibile oppure no.

3.3.2 Esempi
Il primo esempio è quello di verificare che (∀x.u(x) ⇒ m(x)), u(s) |= m(s).
Sia α = ((∀x.u(x) ⇒ m(x)) ∧ u(s) ∧ (¬m(s))).
La sua forma prenessa è

α0 = (∀x.(((¬u(x)) ∨ m(x)) ∧ u(s) ∧ (¬m(s))))

Chiaramente H(α0 ) = {s} e Ω(α0 ) = ((¬u(s)) ∨ m(s)) ∧ u(s) ∧ (¬m(s)).


Dato che Ω(α0 ) è insoddisfacibile, ne segue che α è insoddisfacibile e quindi
(∀x.u(x) ⇒ m(x)), u(s) |= m(s).
Il secondo esempio, tratto da [1], parla di girini e di squali.
Si vuole modellare la seguente situazione

• Ogni squalo mangia un girino

• Tutti i pesci grandi sono squali

• Alcuni pesci grandi vivono sui fondali

• Ogni girino mangiato da pesci di fondale è sfortunato

e dimostrare, sotto queste ipotesi, che “alcuni girini sono sfortunati”.


Useremo le relazioni m(x, y) per “x mangia y”, s(x) per “x è uno squalo”,
P (x) per “x è un pesce grande”, g(x) per “x è un girino”, f (x) per “x vive sui
fondali” e infine d(x) per “x è sfortunato”.
Il nostro insieme ∆ è quindi

(∀x.(s(x) ⇒ (∃y.g(y) ∧ m(x, y)))),


(∀x.P (x) ⇒ s(x)),
(∃x.P (x) ∧ f (x)),
(∀x.(g(x) ∧ (∃y.f (y) ∧ m(y, x))) ⇒ d(x))

e vogliamo dimostrare che ∆ |= γ ove

γ = (∃x.g(x) ∧ d(x))

30
Dobbiamo quindi dimostrare l’insoddisfacibilità di

α = (∀x.(s(x) ⇒ (∃y.g(y) ∧ m(x, y)))) ∧


(∀x.P (x) ⇒ s(x)) ∧
(∃x.P (x) ∧ f (x)) ∧
(∀x.(g(x) ∧ (∃y.f (y) ∧ m(y, x))) ⇒ d(x)) ∧
(¬(∃x.g(x) ∧ d(x)))

Dopo il passo 1 otterremo

(∀x.((¬s(x)) ∨ (∃y.g(y) ∧ m(x, y)))) ∧


(∀x.(¬P (x)) ∨ s(x)) ∧
(∃x.P (x) ∧ f (x)) ∧
(∀x.(¬(g(x) ∧ (∃y.f (y) ∧ m(y, x)))) ∨ d(x)) ∧
(¬(∃x.g(x) ∧ d(x)))

Dopo il passo 2 otterremo

(∀x.((¬s(x)) ∨ (∃y.g(y) ∧ m(x, y)))) ∧


(∀x.(¬P (x)) ∨ s(x)) ∧
(∃x.P (x) ∧ f (x)) ∧
(∀x.((¬g(x)) ∨ (∀y.(¬f (y)) ∨ (¬m(y, x))) ∨ d(x)) ∧
(∀x.(¬g(x)) ∨ (¬d(x)))

Dopo il passo 3 otterremo

(∀x1 .((¬s(x1 )) ∨ (∃y1 .g(y1 ) ∧ m(x1 , y1 )))) ∧


(∀x2 .(¬P (x2 )) ∨ s(x2 )) ∧
(∃x3 .P (x3 ) ∧ f (x3 )) ∧
(∀x4 .((¬g(x4 )) ∨ (∀y4 .(¬f (y4 )) ∨ (¬m(y4 , x4 ))) ∨ d(x4 )) ∧
(∀x5 .(¬g(x5 )) ∨ (¬d(x5 )))

Dopo il passo 4 si avrà

(∃x3 .∀x1 .∃y1 .∀x2 .∀x4 .∀y4 .∀x5 .


((¬s(x1 )) ∨ (g(y1 ) ∧ m(x1 , y1 ))) ∧
((¬P (x2 )) ∨ s(x2 )) ∧
(P (x3 ) ∧ f (x3 )) ∧
((¬g(x4 )) ∨ ((¬f (y4 )) ∨ (¬m(y4 , x4 ))) ∨ d(x4 )) ∧
((¬g(x5 )) ∨ (¬d(x5 ))))

31
Effettuando la Skolemizzazione di x3 (sostuituendolo con la costante c) e di
y1 (sostituendolo con il termine h(x1 )) si ottiene la forma prenessa finale

α0 = (∀x1 .∀x2 .∀x4 .∀y4 .∀x5 .


((¬s(x1 )) ∨ (g(h(x1 )) ∧ m(x1 , h(x1 )))) ∧
((¬P (x2 )) ∨ s(x2 )) ∧
(P (c) ∧ f (c)) ∧
((¬g(x4 )) ∨ ((¬f (y4 )) ∨ (¬m(y4 , x4 ))) ∨ d(x4 )) ∧
((¬g(x5 )) ∨ (¬d(x5 ))))

Si noti che l’ordine con cui i quantificatori sono stati portati all’esterno
è stato scelto per rendere minimo l’impatto della Skolemizzazione (solo una
costante e una funzione di arità uno).
A questo punto bisogna dimostrare che l’insieme Ω(α 0 ) è insoddisfacibile ove

β = ((¬s(x1 )) ∨ (g(h(x1 )) ∧ m(x1 , h(x1 )))) ∧


((¬P (x2 )) ∨ s(x2 )) ∧
(P (c) ∧ f (c)) ∧
((¬g(x4 )) ∨ (¬f (y4 )) ∨ (¬m(y4 , x4 )) ∨ d(x4 )) ∧
((¬g(x5 )) ∨ (¬d(x5 )))

e H(α0 ) = {c, h(c), h(h(c)), h(h(h(c))), . . . , }.


Un sottoinsieme finito insoddisfacibile di Ω(α 0 ) è il singoletto

{β[x1 /c, x2 /c, x4 /h(c), y4 /c, x5 /c]}

come si può vedere dalla forma assunta di β, in quanto dopo queste sostituzioni
si può applicare la procedura di Davis–Putnam (dopo aver portato β in CNF)
e ottenere la clausola vuota, dopo alcuni passaggi.
Per concludere si noti che non sempre la situazione è cosı̀ fortunata e sovente
il sottoinsieme insoddisfacibile di H(α) sarà formato da più elementi.

3.4 Un sistema formale per la logica dei predi-


cati
In questa sezione illustreremo un calcolo dei predicati, cioè un sistema for-
male costituito da un insieme di assiomi e da regole di inferenza in grado di
ottenere tutte e sole le conseguenze logiche di un insieme di formule ∆. Nel
caso particolare di ∆ = ∅, il calcolo dei predicati è in grado di ottenere tutte e
sole le formule valide.
Il simbolo ∃ non sarà più utilizzato se non come abbreviazione, infatti
scriveremo (∃x.φ) al posto di (¬(∀x.(¬φ))).

32
3.4.1 Gli assiomi e le regole di inferenza
Gli assiomi del sistema formale per il calcolo dei predicati sono suddivisi in
questi quattro schemi di assiomi
AX0 tutte le tautologie della logica proposizionale in cui le variabili proposizio-
nali sono sostituite da formule arbitrarie di LP(Σ)
AX1 ((∀x.φ) ⇒ φ[x/t]), in cui φ è una formula di LP(Σ) e t è un termine
sostituibile al posto di x in φ
AX2 (φ ⇒ (∀x.φ)), in cui φ è una formula di LP(Σ) e x è una variabile che non
occorre libera in φ
AX3 ((∀x.(φ ⇒ ψ)) ⇒ ((∀x.φ) ⇒ (∀x.ψ))), in cui φ e ψ sono formule di LP(Σ)
Inoltre sono considerati assiomi validi anche tutte le generalizzazioni di altri
assiomi: se φ è un assioma anche (∀x.φ) è un assioma.
Gli assiomi del tipo AX0 formano già da soli un insieme infinito (ma ricor-
sivo). In realtà, in virtù del teorema di completezza della logica proposizionale,
sarebbe necessario solo inserire i dieci assiomi.

Negli assiomi del tipo AX1, il termine t deve essere sostituibile al posto di x in
φ, cioè non deve contenere variabili che in φ[x/t] diventano variabili legate. Ad
esempio prendendo φ = (∃y.P (x, y)), il termine y non è sostituibile al posto di x,
infatti ((∀x.φ) ⇒ φ[x/y]) corrisponderebbe a ((∀x.(∃y.P (x, y))) ⇒ (∃y.P (y, y)))
che non è valida in quanto falsa nell’interpretazione di dominio N e in cui P (x, y)
è interpretato come la relazione x < y.

Negli assiomi del tipo AX2, x non deve comparire libera in φ. Infatti la formu-
la (P (x) ⇒ (∀x.P (x))) è falsa nell’interpretazione di dominio {1, 2}, in cui la
relazione P (x) è vera solo per x = 1, e nella valutazione µ(x) = 1.
Indicheremo con AX l’insieme di tutti gli assiomi.
Come unica regola di inferenza utilizzeremo ancora il modus ponens, cioè
da φ e da (φ ⇒ ψ) si può dedurre ψ.
Definizione 28 Dati ∆ e γ, rispettivamente un insieme di formule e una for-
mula, diremo che γ è derivabile da ∆, in simboli ∆ ` γ, se esiste una se-
quenza finita detta derivazione γ1 , . . . , γn di formule tali che γn = γ e per ogni
i = 1, . . . , n accade che γi ∈ AX ∪ ∆ o γi = M P (γj , γk ), con j, k < i
Il caso ∆ = ∅ assume un ruolo particolare: ` γ vuol dire che γ è un teorema
della logica dei predicati.
Facciamo ad esempio vedere che (∀x.u(x) ⇒ m(x)), u(s) ` m(s): basta
prendere la sequenza
((∀x.u(x) ⇒ m(x)) ⇒ (u(s) ⇒ m(s))) assioma
(∀x.u(x) ⇒ m(x)) elemento di ∆
(u(s) ⇒ m(s)) modus ponens
u(s) elemento di ∆
m(s) modus ponens

33
3.4.2 Tecniche di dimostrazione
Iniziamo con il teorema di correttezza che, come il suo equivalente della logica
proposizionale, ci dice che il processo di derivazione da un insieme ∆ è in grado
di produrre solo formule che sono conseguenze logiche di ∆

Teorema 7 (di correttezza) Se ∆ ` γ, allora ∆ |= γ

La dimostrazione di questo risultato si basa sul fatto che gli assiomi e le


ipotesi di ∆ sono ovviamente conseguenze logiche di ∆ e che il Modus Ponens,
applicato a conseguenze logiche di ∆, produce ancora una conseguenza logica
di ∆.
Il secondo risultato è il teorema di deduzione, la cui dimostrazione è simile
a quella vista per il calcolo proposizionale:

Teorema 8 (di deduzione) Dati ∆ φ e ψ, rispettivamente un insieme di


formule e due formule, si ha che ∆, φ ` ψ se e solo se ∆ ` (φ ⇒ ψ)

Riprendendo i concetti di consistenza e inconsistenza (∆ è inconsistente se


∆ ` φ e ∆ ` (¬φ), per ogni formula φ), possiamo enunciare il seguente risultato,
la cui dimostrazione è analoga a quanto visto nel capitolo precedente

Teorema 9 (di dimostrazione per assurdo) Dati ∆ e φ, rispettivamente


un insieme di formule e una formula, ∆ ∪ {φ} è inconsistente se e solo se
∆`φ

Un teorema che non ha ovviamente il corrispettivo nel calcolo proposizio-


nale è quello della generalizzazione giustificata. L’idea è quella che si riesce a
dimostrare che una proprietà p vale per un elemento arbitrario, indicato da una
variabile libera x, allora la proprietà (proprio per l’arbitrarietà di x) vale per
ogni x.

Teorema 10 ( della generalizzazione giustificata) Dati ∆ e φ, rispettiva-


mente un insieme di formule e una formula, se ∆ ` φ e se x è una variabile
che non occorre libera in nessuna formula di ∆, allora ∆ ` (∀x.φ)

Dim. Sia φ1 , . . . , φn una derivazione di φ da ∆. Costruiremo una derivazione


ψ1 , . . . , ψm di (∀x.φ) da ∆, con la proprietà che per ogni i = 1, . . . , n, esiste un
elemento ψj = (∀x.φi ).
La derivazione ψ1 , . . . , ψm verrà costruita per induzione in modo analogo a
quello usato per dimostrare il teorema di deduzione del calcolo proposizionale.
Si parte perciò con una sequenza inizialmente vuota e poi, per ogni formula φ i
si aggiungono alla sequenza alcune formule secondo lo schema seguente.
Se φi ∈ AX , allora direttamente anche (∀x.φi ) è un elemento di AX e si
aggiunge questa formula alla sequenza. Se φi ∈ ∆, allora si aggiungono alla
sequenza le formule φi (elemento di ∆), (φi ⇒ (∀x.φi )) (che è un assioma del-
lo schema AX1, dato che x non compare nelle formule di ∆) e infine (∀x.φ i )
(per Modus Ponens). Se φi è infine ottenuto per Modus Ponens da φj e φk ,

34
ove φj = (φk ⇒ φi ), allora per ipotesi induttive nella sequenza esistono già le
formule (∀x.(φk ⇒ φi )) e (∀x.φk ), quindi si possono aggiungere alla sequenza le
formule ((∀x.(φk ⇒ φi )) ⇒ ((∀x.φk ) ⇒ (∀x.φi ))) (assioma dello schema AX3),
((∀x.φk ) ⇒ (∀x.φi )) (per Modus Ponens), (∀x.φi ) (per Modus Ponens). 

Infine citiamo il seguente risultato che è il contrario dell’assioma AX1, cioè


data una formula φ di LP(Σ) e t un termine sostituibile al posto di x in φ, la
formula
(φ[x/t] ⇒ (∃x.φ)),
inteso come abbreviazione di

((¬φ[x/t]) ⇒ (¬(∀x.(¬φ)))),

è un teorema.
Infatti si può usare il teorema ((φ ⇒ ψ) ⇒ ((¬ψ) ⇒ (¬φ))) che, applicato
all’assioma AX1, produce l’asserto.

3.4.3 Teorema di completezza


Il teorema di completezza, analogo a quello dimostrato per il calcolo proposi-
zionale, è stato dimostrato per primo da Gödel nel 1930. Noi forniremo una
dimostrazione basata su quella di Henkin [4].

Teorema 11 (di completezza) Se per ∆ insieme di enunciati e γ enunciato


di LP(Σ), accade che ∆ |= γ, allora ∆ ` γ

In realtà dimostreremo un risultato equivalente:


Teorema 12 Se un insieme di enunciati ∆ è consistente, allora ammette un
modello, cioè esiste un’interpretazione I per cui I, µ |= δ per ogni δ ∈ ∆
Facciamo innanzitutto vedere che quest’ultimo risultato implica il teorema
di completezza. Se ∆ |= γ, allora ∆ ∪ {¬γ} è insoddisfacibile, perciò in base
all’ultimo teorema enunciato ∆ ∪ {¬γ} è un insieme inconsistente, ma allora in
virtù del teorema della dimostrazione per assurdo, ∆ ` γ.
Dim. Vogliamo trovare un interpretazione che soddisfa un insieme di formule
sapendo solo che si tratta di un insieme consistente e senza nessun’altra infor-
mazione che possa indicare che dominio (o che tipo di dominio) sia necessario.
Tale problema è risolto usando un dominio artificiale, puramente “sintattico”,
cioè l’insieme di tutti i termini chiusi (cioè in cui non compaiono variabili) di
T (Σ) che verrà indicato T (Σ).
In realtà per evitare problemi, arricchiamo il linguaggio Σ di un infinità
numerabile di nuove costanti, che saranno utili in seguito. Chiamiamo quindi Σ 0
il nuovo linguaggio e indichiamo con D = T (Σ0 ) il dominio dell’interpretazione
I¯ che costruiremo.
E’ facile vedere che ∆ rimane consistente anche passando al nuovo linguaggio
Σ0 .

35
Sia φ1 , φ2 , . . . , φn , . . . un’enumerazione di tutti e soli gli enunciati di LP(Σ 0 ).
Questa enumerazione è possibile, ad esempio, disponendo tutti gli enunciati in
ordine lessicografico (dopo aver definito un ordine sugli elementi di Σ 0 ).
Definiamo per induzione una successione crescente di insiemi di enunciati
{∆i }∞
i=0 , iniziando con ∆0 = ∆ e ponendo

• ∆i = ∆i−1 ∪{φi } se ∆i−1 ∪{φi } è consistente e φi non è del tipo (¬(∀x.ψ))


per qualche variabile x e enunciato ψ.
• ∆i = ∆i−1 ∪ {φi , (¬ψ[x/c])} se ∆i−1 ∪ {φi } è consistente, φi è del tipo
(¬(∀x.ψ)) per qualche variabile x e enunciato ψ, e c è una costante che
non compare in nessuna enunciato di ∆i−1 .
• ∆i = ∆i−1 ∪ {(¬φi )} se ∆i−1 ∪ {φi } è inconsistente e φi non è del tipo
(∀x.ψ) per qualche variabile x e enunciato ψ.
• ∆i = ∆i−1 ∪ {(¬φi ), (¬ψ[x/c])} se ∆i−1 ∪ {φi } è incconsistente, φi è del
tipo (∀x.ψ) per qualche variabile x e enunciato ψ, e c è una costante che
non compare in nessuna enunciato di ∆i−1 .
E’ semplice, anche se un pò laborioso, vedere che ogni insieme ∆ i è consi-
stente.
¯ = S∞ ∆i . ∆
Sia adesso ∆ ¯ verifica le seguenti proprietà
i=0

• ∆¯ è consistente, infatti una qualsiasi derivazione di una formula e la sua


negazione userebbe solo un numero finito di elementi di ∆ ¯ che, per costru-
zione, sarebbero elementi di un insieme ∆j , per un certo indice j; ciò è
impossibile in quanto ogni ∆i è consistente.
¯ è completo, cioè per ogni enunciato φ di LP(Σ 0 ) accade che φ ∈
• ∆
¯ oppure (¬φ) ∈ ∆
∆ ¯ (ovviamente non si possono verificare entrambe le
condizioni).
¯ è chiuso, cioè per ogni enunciato φ ∈ ∆,
• ∆ ¯ in cui φi è del tipo (¬(∀x.ψ))
per qualche variabile x e enunciato ψ, è presente in ∆ ¯ un’enunciato del
tipo ψ[x/c], per qualche costante c detta testimone di ψ.
Vale inoltre il fatto che φ ∈ ∆ ¯ se e solo se ∆ ¯ ` φ, per ogni enunciato φ.
Siamo ora in grado di fornire l’intepretazione I¯ cercata. Abbiamo già detto
che il suo dominio sarà D = T (Σ0 ). Inoltre avremo che I¯C (c) = c per ogni
costante c e I¯F (f )(d1 , . . . , dn ) = f (d1 , . . . , dn ) per ogni simbolo di funzione f di
arità n e per ogni ennupla di elementi (d1 , . . . , dn ) di elementi di D, analoga-
mente a quanto visto nella dimostrazione del teorema di Herbrand. Infine se r
è un simbolo di relazione di arità n, definiremo che

I¯R (r) = {(d1 , . . . , dn ) ∈ D n : r(d1 , . . . , dn ) ∈ ∆}


¯

Per completare la dimostrazione faremo vedere che per ogni enunciato φ di


LP(Σ0 ), I¯ |= φ se e solo se φ ∈ ∆.
¯ Dato che ∆ ⊂ ∆,¯ ciò garantisce la verità
dell’asserto di partenza.

36
La dimostrazione è fatta per induzione sul numero n di parentesi aperte pre-
senti in φ non contando quelle occorrenti nei termini.

Se n = 1, allora φ è una formula atomica e, essendo un enunciato, sarà del tipo


r(d1 , . . . , dn ) per qualche simbolo di relazione r di arità n e per una ennupla
d1 , . . . , dn di termini chiusi, ovvero elementi del dominio D. Ma per costruzione
¯ si ha che I¯ |= φ se e solo se φ ∈ ∆.
di I, ¯

Supponiamo che l’asserto sia vero per ogni n < m e dimostriamo che è vero
anche per n = m. Se φ = (¬ψ), allora per ipotesi induttiva I¯ |= ψ se e solo se
¯ Poichè si ha che φ ∈ ∆
ψ ∈ ∆. ¯ se e solo se ψ 6∈ ∆,
¯ l’asserto è vero in questo caso.

Se φ = (ψ ∧ χ), allora per ipotesi induttiva I¯ |= ψ se e solo se ψ ∈ ∆ ¯ e


¯ ¯ ¯ ¯
I |= χ se e solo se χ ∈ ∆. Nel caso in cui I 6|= ψ, si ha che (¬ψ) ∈ ∆ e quindi
¯ ` (¬(ψ ∧ χ)), sfruttando il fatto che ` (¬ψ) ⇒ (¬(ψ ∧ χ)). Perciò (¬φ) ∈ ∆,
∆ ¯
¯ ¯
che corrisponde al fatto che I 6|= φ. Analogamente si tratta il caso in cui I 6|= χ.
Nel caso invece in cui I¯ |= ψ e I¯ |= χ, si ha che ψ ∈ ∆ ¯ e χ ∈ ∆ ¯ e perciò
¯
∆ ` (ψ ∧ χ), sfruttando l’assioma (ψ ⇒ (χ ⇒ (ψ ∧ χ))). Quindi avremo che
¯ corrispondente al fatto che I¯ |= φ.
φ ∈ ∆,

Se φ = (ψ ∨ χ) o φ = (ψ ⇒ χ) l’asserto può essere dimostrato in modo analogo,


utilizzando degli opportuni teoremi o assiomi del calcolo proposizionale.

Infine se φ = (∀x.ψ), allora consideriamo per il primo il caso in cui I¯ |= φ.


Quindi avremo che I, ¯ µ |= ψ per ogni valutazione µ che assegna a x un valore
arbitrario d di D. Poichè il dominio D è composto di termini del linguaggio Σ 0
si ottiene che I¯ |= ψ[x/d] per ogni elemento d del dominio D 2 . Poichè ψ[x/d]
¯ per ogni d ∈ D. Se
è un enunciato, vale l’ipotesi induttiva e quindi ψ[x/d] ∈ ∆
per assurdo fosse (¬φ) ∈ ∆, ¯ si avrebbe per la chiusura di ∆,¯ che ψ[x/c] ∈ ∆,
¯
con la costante c testimone di ψ, in contraddizione con ψ[x/d] ∈ ∆, ¯ per ogni
d ∈ D. Nel caso in cui I¯ |= ¬φ, si ha che I, ¯ µ |= (¬ψ) per una valutazio-
ne µ. Sia d = µ(x), allora vale I¯ |= (¬ψ[x/d]) Quindi per ipotesi induttiva
∆¯ ` (¬ψ[x/d]) Dal teorema del calcolo dei predicati ((¬ψ[x/t]) ⇒ (¬∀x.(¬ψ))),
dimostrato nella sezione precedente, ponendo t = d, si ottiene per Modus Po-
nens ∆ ¯ ` (¬∀x.(¬ψ)), cioè ∆¯ ` (¬φ) e quindi φ 6∈ ∆.
¯ 

3.4.4 Conseguenze e considerazioni finali


Anche per il calcolo dei predicati si è dimostrato che i concetti di verità seman-
tica e verità sintattica coincidono. L’assiomatizzazione fornita anche in questo
caso non è unica.
La logica dei predicati può essere estesa a trattare la relazione di uguaglianza
2 Si noti che in generale questa sostituzione non è possibile, in quanto un elemento del

dominio non è un termine, fatta eccezione proprio per questo tipo di interpretazione sintattica

37
=, che è un simbolo di arità 2 a cui ogni interpretazione deve dare il significato
ovvio (cioè IR (=) = {(d, d) : d ∈ D}).
Si indicherà con (t 6= t0 ) un’abbreviazione per la formula ¬(t = t0 ).
A livello di sistema formale, il trattamento dell’uguaglianza è possibile me-
diante l’aggiunta di tre schemi di assiomi

AX4 t = t per ogni termine t

AX5 ((t1 = t01 ) ∧ (t2 = t02 ) ∧ · · · ∧ (tn = t0n )) ⇒ f (t1 , . . . , tn ) = f (t01 , . . . , t0n ) per
ogni 2n–pla di termini t1 , . . . , tn , t01 , . . . , t0n e per ogni simbolo di funzione
f di arità n
AX6 ((t1 = t01 ) ∧ (t2 = t02 ) ∧ · · · ∧ (tn = t0n )) ⇒ (r(t1 , . . . , tn ) ⇔ r(t01 , . . . , t0n )) per
ogni 2n–pla di termini t1 , . . . , tn , t01 , . . . , t0n e per ogni simbolo di relazione
r di arità n

Tramite l’uguaglianza è possibile modellare molte realtà di interesse mate-


matico, ad esempio la teoria dei gruppi. Sia infatti Σ il linguaggio avente la
costante e, la relazione binaria =, la funzione unaria −1 e la funzione binaria ·.
Sia inoltre ∆ l’insieme degli assiomi propri della teoria dei gruppi

∆ = {(∀x.∀y.∀z.(x · (y · z)) = ((x · y) · z)),


(∀x.(x · e) = x), (∀x.(e · x) = x),
(∀x.(x · x−1 ) = e), (∀x.(x−1 · x) = e)}

E’ facile vedere che G è un gruppo se e solo è un modello di ∆ e che ogni


enunciato è un teorema della teoria dei gruppi se e solo se una conseguenza
logica di ∆.
Attraverso l’uso dell’uguaglianza è possibile vincolare sia inferiormente che
superiormente il numero di elementi del dominio: la formula
^
αn = (∃x1 . . . . .∃xn .( (xi 6= xj )))
i6=j

richiede che nel dominio ci siano almeno n elementi, mentre la formula


_
βn = (∀x1 . . . . .∀xn+1 .( (xi = xj )))
i6=j

richiede che nel dominio ci siano al massimo n elementi. Infine l’insieme di


formule {αn }∞
n=1 richiede che il dominio sia infinito.

38
Capitolo 4

Le funzioni ricorsive

4.1 Introduzione
In questo capitolo e nel capitolo successivo si parlerà di calcolabilità, cioè di
formalismi mediante i quali si può stabilire se e come una funzione è calcolabile.
Il concetto intuitivo di funzione calcolabile è quello di una funzione f per cui
esiste un procedimento finito (algoritmo, programma, ecc.) mediante il quale è
possibile calcolare f (x) a partire da x con un numero finito di passi, per ogni
possibile valore di x.
Esistono molti formalismi per definire in modo rigoroso il concetto di calco-
labilità. In questo capitolo ci concentreremo sulle funzioni ricorsive, che sono
un formalismo puramente matematico che consente di definire delle funzioni in
modo costruttivo. Nel prossimo capitolo vedremo le macchine di Turing che,
pur essendo un formalismo teorico, specifica un modello di calcolo meccanico
ideale che è simili ai moderni calcolatori.

4.2 Le funzioni ricorsive primitive


La classe delle funzioni ricorsive primitive è basata su tre funzioni elementari
(zero, successione e proiezione) e su due metodi di costruzione di nuove funzioni
(composizione e ricorsione).
Useremo la comoda notazione ~x per la m–upla x1 , . . . , xm
Le funzioni elementari sono

funzione zero La funzione z : N → N, definita da z(x) = 0, per ogni x ∈ N

funzione successore La funzione S : N → N, definita da S(x) = x + 1, per


ogni x ∈ N
(m)
funzioni proiezione Dati m ∈ N e 1 ≤ i ≤ m, la funzione πi : Nm → N,
(m)
definita da πi (~x) = xi , per ogni x1 , . . . , xm ∈ N

39
Il primo metodo di costruzione di nuove funzioni è la composizione.
Data una funzione g : Nk → N e k funzioni f1 , . . . , fk : Nm → N, la
composizione di g con f1 , . . . , fk è la funzione h : Nm → N definita come
h(~x) = g(f1 (~x), . . . , fm (~x)) (4.1)
Ad esempio la funzione costante 1 1 : N → N è definita come composizione
della funzione z con la funzione S
1(x) = S(z(x))
perciò in questo caso m = 1 e k = 1. In modo analogo si possono ottenere le
funzioni costanti, anche a più argomenti.
In modo simile si può ottenere la funzione S 2 : N → N, S 2 (x) = x + 2 è
definita come composizione della funzione S con sé stessa
S 2 (x) = S(S(x))
In modo analogo si possono ottenere le funzioni, anche a più argomenti, che
hanno come risultato la somma di un argomento con una costante.
In generale si può vedere che le uniche funzioni che si possono ottenere per
composizione dalle funzioni di base sono
f (~x) = k
f (~x) = xi + k

ove k è una costante arbitraria.


Il secondo metodo di costruzione di nuove funzioni è la ricorsione.
Data una funzione g : Nm → N e una funzione f : Nm+2 → N, la funzione
h : Nm+1 → N è definita per ricorsione a partire da g e f se vale
h(~x, 0) = g(~x)
(4.2)
h(~x, y + 1) = f (~x, y, h(~x, y))
Sia a : N2 → N l’addizione tra numeri interi a(x, y) = x + y. Essa è definibile
per ricorsione a partire da funzioni a loro volta definite come composizione di
funzioni elementari. Infatti vale
a(x, 0) = g(x)
a(x, y + 1) = f (x, y, a(x, y))
(1) (3)
ove g(x) è la funzione π1 (x) e f (x, y, t) = S(π3 (x, y, t)). Infatti vale la
legge ricorsiva
a(x, 0) = x
a(x, y + 1) = a(x, y) + 1
La classe delle funzioni ricorsive primitive, indicata con PR, è la più piccola
classe di funzioni intere che contiene le funzioni elementari ed è chiusa per
composizione e ricorsione. Detto in altri termini, valgono le seguenti condizioni

40
(m)
1. z, S, πi ∈ PR

2. se g : Nm → N e f1 , . . . , fm : Nk → N appartengono a PR, la composizione


di g e f1 , . . . , fm appartiene a PR

3. se g : Nm → N e f : Nm+2 → N appartengono a PR, la funzione definita


per ricorsione a partire da g e f appartiene a PR

4. per ogni classe C di funzioni che rispetti le condizioni 1, 2 e 3, PR ⊂ C

Si è già visto che + (la funzione addizione) appartiene a PR. Ora facciamo
vedere che molte altre funzioni aritmetiche appartengono a PR.
Sia m : N2 → N la funzione prodotto m(x, y) = x · y tra interi. Essa
appartiene a PR in quanto si può definire per ricorsione

m(x, 0) = 0
m(x, y + 1) = x + m(x, y)
(3) (3)
cioè usando come g(x) = z(x) e come f (x, y, t) = a(x, t) = a(π 1 (x, y, t), π3 (x, y, t)).
A sua volta e : N2 → N la funzione di elevamento a potenza e(x, y) = x y tra
interi appartiene a PR in virtù della definizione ricorsiva

e(x, 0) = 1
e(x, y + 1) = x · e(x, y)
(3) (3)
cioè usando come g(x) = S(z(x)) e come f (x, y, t) = m(x, t) = m(π 1 (x, y, t), π3 (x, y, t)).
D’ora in avanti non verranno più indicate le funzioni g e f della definizione
ricorsiva.
La funzione fattoriale F (y) = y! è in PR. Infatti vale la seguente definizione
ricorsiva

F (0) = 1
F (y + 1) = S(y) · F (y)

che però non corrisponde esattamente allo schema 4.2 in quanto F dovrebbe
avere almeno due argomenti, cosı̀ che g ne abbia almeno uno. In realtà tale
schema è perfettamente legittimo e verrà usato in seguito in virtù del fatto che
è possibile definire una funzione fattoriale a due variabili F 2 (x, y) = y! definita
come

F2 (x, 0) = 1
F2 (x, y + 1) = S(y) · F2 (x, y)
(1) (1)
da cui si evince che F2 è in PR e poichè F (y) = F2 (y, y) = F2 (π1 (y), π1 (y)),
anche F è in PR.

41
La funzione predecessore P , vista come inversa della funzione successore S e
definita anche su 0, a cui viene attribuito il valore 0, è nella classe PR in quanto
vale la seguente definizione ricorsiva
P (0) = 0
P (y + 1) = y
Anche in questo caso g ha zero argomenti, ma si può applicare lo stesso
trucco visto per la funzione fattoriale.
La funzione differenza troncata D(x, y) = max(x − y, 0) è nella classe PR
perchè
D(x, 0) = x
D(x, y + 1) = P (D(x, y))
In seguito questa operazione verrà indicata con x −̇y.
Passiamo ora a definire dei predicati, cioè delle funzioni a valori in {0, 1},
che sono tutti nella classe PR. Un predicato è vero per x se p(x) = 1, falso se
p(x).
I seguenti predicati appartengono alla classe PR.
Il predicato segno sg(x), che è 1 se e solo se x > 0, è definito come
sg(0) = 0
sg(y + 1) = 1
Il predicato x 6= y si ottiene come sg((x−̇y) + (y −̇x)).
Gli operatori booleani ∧, ∨, ¬, ⇒ e ⇔ si ottengono rispettivamente come
x ∧ y = x · y, x ∨ y = sg(x + y), ¬x = 1−̇x.
Da ciò si ottengono i predicati x = y come ¬(x 6= y), x > y come sg(x −̇y),
x < y come sg(y −̇x), x ≥ y come ¬(x < y) e x ≤ y come ¬(x > y).
In generale qualunque predicato esprimibile con gli operatori booleani ∧, vee
e ¬ e gli operatori di confronto >, <, ≥, ≤, =, 6= applicati a variabili e costanti
intere è nella classe PR.
Se f, g : Nm → N sono funzioni di PR e p, q : Nm → {0, 1} sono predicati di
PR allora la funzione h : Nm → N definita per casi

f (~x) se p(~x) = 1
h(x1 , . . . , xm ) =
g(~x) se p(~x) = 0
è in PR in quanto vale
h(~x) = f (~x) · p(~x) + g(~x) · ¬p(~x)
Data una funzione f : Nm+1 → N, definiamo le due funzioni
y
X
Σf (~x, y) = f (~x, t)
t=0
Yy
Πf (~x, y) = f (~x, t)
t=0

42
Esse sono nella classe PR in quanto

Σf (~x, 0) = f (~x, 0)
Σf (~x, y + 1) = f (~x, S(y)) + Σf (~x, y)

Πf (~x, 0) = f (~x, 0)
Πf (~x, y + 1) = f (~x, S(y)) · Πf (~x, y)
Py
QDay
adesso si indicheranno con i loro usuali simboli matematici t=0 f (~x, t)
e t=0 f (~x, t).
Definiamo ora i quantificatori esistenziale e universali limitati (∃y) ≤z e (∀y)≤z ,
essi corrispondono ai seguenti predicati

(∃y)≤z p(~x, y) ≡ (∃y.(y ≤ z) ∧ p(~x, y))


(∀y)≤z p(~x, y) ≡ (∀x.(y ≤ z) ⇒ p(~x, y))

Se p è un predicato nella classe PR, allora (∃y) ≤z p(~x, y) e (∀y)≤z p(~x, y) sono
predicati della classe PR in quanto
z
!
X
(∃y)≤z p(~x, y) = sg p(~x, y)
y=0
z
Y
(∀y)≤z p(~x, y) = p(~x, y).
y=0

Con i quantificatori limitati è possibile costruire molte altre funzioni.


Innanzitutto il predicato x|y che è 1 se e solo se x divide y è in PR perchè
x|y = (∃q)≤y (q · x = y).
Il predicato pr(x) che è 1 se e solo se x è primo può essere definito come
negazione del predicato cm(x), che è 1 se e solo se x è un numero composto, che
a sua volta è definito come cm(x) = (∃t)≤x ((t > 1) ∧ (t < x) ∧ (t|x)). Quindi
sia pr che cm sono in PR.
Dato un predicato p : Nm+1 → {0, 1} della classe PR, sia µp (~x; z) la funzione
cosı̀ definita

y se y ≤ z è il più piccolo valore per cui p(~x, y) = 1
µp (~x; z) =
z + 1 se per ogni y ≤ z p(~x, y) = 0.

Questa funzione si chiama minimalizzazione limitata ed è in PR in


quanto
z Y
X t
µp (~x; z) = ¬(p(~x, y))
t=0 y=0

Da questo punto la funzione µ si indicherà con il simbolo matematico più


usuale
min{y ≤ z : p(~x, y)}

43
Le funzioni x ÷ y e x mod y che sono, rispettivamente, il quoziente e il
resto della divisione di x per y, si ottengono facilmente attraverso l’uso della
minimalizzazione limitata in quanto x ÷ y = P (min{q ≤ x : q · y > x}) e
x mod y = x−̇(y · (x ÷ y)). Si noti che x ÷ 0 = x, ma ciò non crea problemi
perchè la divisione per zero non ha senso dal punto di vista matematico e quindi
si userà x ÷ y solo per y > 0.
Infine la successione {pi }∞i=0 di tutti i numeri primi è, vista come funzio-
ne dell’argomento i, una funzione di PR. Infatti vale la seguente definizione
ricorsiva

p0 = 2
pi+1 = min{y ≤ pi ! + 1 : (y > pi ) ∧ pr(y)}

Infatti dal teorema di Euclide dell’infinità dei numeri primi si sa che se p è


un numero primo, allora sicuramente esiste un numero primo compreso tra p e
p! + 1.

4.3 Le funzioni ricorsive parziali


Le funzioni ricorsive primitive sono solo un’infinità numerabile, mentre tutte le
funzioni f : Nk → N formano un insieme non numerabile, quindi devono esistere
delle funzioni che non sono ricorsive primitive.
Tra queste funzioni però ci si può aspettare che esistano delle funzioni che
sono intuitivamente calcolabili. Vale infatti questo risultato

Proposizione 10 Le funzioni ricorsive primitive possono essere calcolate in


linguaggio Pascal (usando un calcolatore irreale che ammette numeri interi di
grandezza arbitraria) con funzioni che utilizzano solo istruzioni dei seguenti
quattro tipi:
• v:=0
• v:=v+1
• v:=u
• for v:=0 to u-1 do begin ... end
in cui u e v sono arbitrarie variabili intere.

Dim. Le prime tre istruzioni sono chiaramente necessarie a calcolare le tre fun-
zioni elementari. La composizione di due funzioni Pascal è calcolabile senza
nessuna istruzione aggiuntiva, a parte la chiamata delle funzioni stesse. Per
quanto riguarda uno schema di ricorsione del tipo

h(~x, 0) = g(~x)
h(~x, y + 1) = f (~x, y, h(~x, y))

è sufficiente usare il codice

44
function h(x1,...,xm,y:integer):integer;
var z,t:integer;
begin
z:=g(x1,...,xm);
for t:=0 to y-1 do
z:=f(x1,...,xm,t,z);
h:=z;
end;


E’ un pò più complicato dimostrare il viceversa (ovvero che ogni funzione


intera calcolabile solo con il costrutto FOR è ricorsiva primitiva), ma questo
risultato non ci interessa.
Da una parte l’assenza del costrutto IF è solo apparente, dato che un ciclo
del tipo for v:=0 to u-1 do begin ... end, in cui u è zero o uno, è esat-
tamente equivalente al costrutto if u then .... Dall’altra l’assenza del ciclo
WHILE è più problematica, nel senso che potrebbero esistere delle funzioni in-
tere calcolabili, ovviamente solo con programmi Pascal che utilizzano anche cicli
WHILE, e che non sono ricorsive primitive.
Si noti che la presenza di un ciclo WHILE all’interno di un programma non
ne garantisce la terminazione per tutti i possibili valori di input e ciò corrisponde
al fatto che il programma calcola una funzione parziale, ovvero il cui dominio è
un sottoinsieme proprio di Nk .
Ackermann per primo trovò una funzione che è intuitivamente calcolabile
ma che non è nella classe PR.
La funzione A : N2 → N in questione è definita dalle seguenti equazioni
ricorsive

A(0, y) = y+1
A(x + 1, 0) = A(x, 1)
A(x + 1, y + 1) = A(x, A(x + 1, y))

E’ chiaro che A è calcolabile, almeno su carta, con un numero finito di passag-


gi, per ogni x e y. Ad esempio A(1, 2) = A(0, A(1, 1)), A(1, 1) = A(0, A(1, 0)),
A(1, 0) = A(0, 1) = 2, A(1, 1) = A(0, 2) = 3, infine A(1, 2) = A(0, 3) = 4.
La funzione di Ackermann è calcolabile in Pascal mediante una funzio-
ne ricorsiva o senza ricorsione, mediante l’uso di uno stack e di un costrutto
WHILE.
Il seguente risultato conferma i dubbi sollevati precedentemente
Teorema 13 La funzione A non è ricorsiva primitiva
La dimostrazione, che non verra qui riportata perchè molto lunga e abba-
stanza tecnica (si veda ad esempio [1]), si basa sul fatto che esiste un limite
superiore alla crescita di una funzione ricorsiva primitiva al crescere di n e che
A cresce oltre questo limite.

45
E’ quindi necessario trovare un’estensione della classe delle funzioni ricor-
sive primitive in modo che la funzione di Ackermann (con tutte le sue infinite
varianti) possa trovarvi posto.
L’idea è quella di definire un terzo modo di creare nuove funzioni. Dato un
predicato p : Nm+1 → {0, 1}, sia µ̄p (~x) la funzione che restituisce il più piccolo
valore di y per cui p(~x, y) = 1. Se invece accade che per ogni y p(~x, y) = 0,
allora µ̄p (~x) non è definito.
Questa operazione si chiama minimalizzazione non limitata e general-
mente non è in PR anche sotto l’ovvia ipotesi che p lo sia.
Usando al posto di µ̄ l’usuale simbolo matematico, si dirà che dato un predi-
cato p : Nm+1 → {0, 1}, la funzione h : Nm → N è definita per minimalizzazione
(non limitata) di p se vale

h(~x) = min{y : p(~x, y) = 1} (4.3)

e indicheremo con
h(~x) = ⊥
se per (~x) il minimo non esiste.
Si noti che l’utilizzo dell’operatore di minimalizzazione può avvenire sotto
tre accezioni.
1. La minimalizzazione è applicata solo a predicati ricorsivi primitivi p tali
che il minimo esiste sempre. In tal caso la funzione h è sempre definita su
tutto Nm .
2. La minimalizzazione è applicata a un qualsiasi predicato ricorsivo primi-
tivo, anche se non ci sono garanzie sull’esistenza del minimo. In tal caso
h è definita su un sottoinsieme di Nm , che potrebbe essere proprio.
3. La minimalizzazione è applicata solo a predicati ottenuti a loro volta da
operazioni di minimalizzazione. In tal caso non si è nemmeno certi il
predicato sia sempre definito. In particolare h(~x) = ⊥ se esiste un valore
di y per cui p(~x, y) = ⊥ e per ogni z < y accade che p(~x, z) = 0.
Il comportamento nel secondo e nel terzo caso si spiega facilmente perchè,
dati ~x, il minimo valore di y viene calcolato per tentativi a partire da 0 e
calcolando uno ad uno tutti i possibili valori di p(~x, y) per y = 0, 1, . . . fino ad
arrivare ad un valore di y per cui p(~x, y) = 1.
E’ chiaro che se il minimo non esiste, il procedimento non termina e quindi
ciò spiega perchè h(~x) non è definita (anzichè poter assumere un valore prefissato
come avviene in quella limitata). E’ altresı̀ chiaro perchè h(~x) non è definita
nemmeno se durante la ricerca del minimo ci si imbatte in un valore di ȳ per cui
p(~x, ȳ) non è definito, anche nei casi di esistenza del minimo (che ovviamente
sarà un valore maggiore di ȳ).
La classe delle funzioni ricorsive (generali), indicata con R, è la più piccola
classe di funzioni intere che contiene le funzioni elementari ed è chiusa per
composizione, ricorsione e minimalizzazione, intesa nella terza accezione. Detto
in altri termini, valgono le seguenti condizioni

46
(m)
1. z, S, πi ∈R
2. se g : D0 → N, con D0 ⊂ Nk , e fi : Di → N, con Di ⊂ Nm per i =
1, . . . , k, appartengono a R, la funzione h : Dk+1 → N, con Dk+1 ⊂ Nm ,
composizione di g e f1 , . . . , fk appartiene a R
3. se g : D0 → N, con D0 ⊂ Nm , e f : D1 → N, con D1 ⊂ Nm+2 , apparten-
gono a R, la funzione h : D2 → N con D2 ⊂ Nm+1 definita per ricorsione
a partire da g e f appartiene a R
4. se p : D0 → N con D0 ⊂ Nm+1 appartiene a R, la funzione h : D1 → N
con D1 ⊂ Nm definita per minimalizzazione a partire da p appartiene a R
5. per ogni classe C di funzioni che rispetti le condizioni 1, 2, 3 e 4, R ⊂ C
Si noti che i domini di h nei punti 2 e 3 dipendono dai domini delle funzioni
con cui è stata definita per composizione o ricorsione. In particolare per la
composizione si ha

Dk+1 = {~x ∈ Nm : ~x ∈ Di per i = 1, . . . , k e, posto


yi = fi (~x) si ha (y1 , . . . , yk ) ∈ D0 }

Mentre per la ricorsione si ha

D2 = {(~x, y) ∈ Nm+1 : ~x ∈ D0 e, posto z0 = g(~x)


e per ogni i = 1, . . . , y zi = f (~x, i, zi−1 ), si ha (~x, i, zi−1 ) ∈ D1 }

Infine per la minimalizzazione, in base a quanto già detto, si

D1 = {~x ∈ Nm : (∃y ∈ N : ∀z ≤ y : (~x, z) ∈ D0 ,


p(~x, z) = 0 ad eccezione del caso z = y in cui p(~x, z) = 1)}

Infine si dirà che una funzione f ∈ R di m argomenti è ricorsiva totale se è


definita su tutto Nm , altrimenti si dirà che è ricorsiva parziale.
Un risultato notevole è
Proposizione 11 Le funzioni ricorsive possono essere calcolate in Pascal ag-
giungendo ai quattro tipi di istruzioni della proposizione 10 il quinto tipo
while u do begin ... end
Dim. L’operazione di minimalizzazione è calcolabile in Pascal mediante il se-
guente codice
function h(x1,...,xm:integer):integer;
var y,z:integer;
begin
y:=0; z:=not p(x1,...,xm,y);
while z do
begin

47
y:=y+1;
z:=not p(x1,...,xm,y);
end;
h:=y
end;

mentre tutto il resto si calcola nel modo già visto nella proposizione 10. 

Anche in questo caso, è vero il viceversa, ossia ogni funzione calcolabile in


Pascal è ricorsiva.
Infine vedremo nel prossimo capitolo che la funzione di Ackermann è ricor-
siva.

48
Capitolo 5

Le macchine di Turing

5.1 Introduzione
Una macchina di Turing1 M è una macchina di calcolo ideale formata dalle
seguenti componenti

• un nastro unidimensionale suddiviso in un numero infinito di celle e il-


limitato verso destra (esiste quindi una cella alla estrema sinistra, oltre
la quale non si può andare); in ogni cella è memorizzato un solo simbolo,
appartenente ad un alfabeto finito A, in cui esiste un simbolo speciale,
detto spazio o blank che indica che la cella è vuota; in ogni momento
solo un numero finito di celle del nastro sono non vuote;

• una testina di lettura–scrittura che è posizionata su una delle celle del


nastro, ne può leggere il simbolo contenuto in essa e può successivamente
modificarlo sostituendo in modo irriversibile il simbolo già presente con il
nuovo simbolo; la testina può anche essere spostata, di una cella per volta,
in una delle due direzioni;

• una memoria interna, contenente un solo simbolo preso da un alfabeto


finito Q e rappresentante lo stato interno della macchina

• un programma, memorizzato in un tipo di memoria a sola lettura; il tipo


di istruzioni sarà descritto in seguito.

Per la descrizione di una MdT si usano quindi due alfabeti diversi: A, detto
alfabeto del nastro, e Q, detto alfabeto dello stato. S e Q sono usalmente
disgiunti.
Il programma di una MdT è un insieme finito di quintuple del tipo (q, s, q 0 , s0 , d),
in cui q, q 0 ∈ Q, s, s0 ∈ A e d ∈ {<, >}, tali che non esistono due quintuple con
gli stessi valori per q e s.
1 in seguito si userà l’abbreviazione MdT

49
I I I I $ I I I I I $ ...

Figura 5.1: Un esempio di macchina di Turing

L’esecuzione del programma inizia con la testina della MdT posizionata su


una cella ben determinata del nastro, che conterrà i dati in input, che sono
di solito gli argomenti della funzione che si vuole calcolare. Inoltre lo stato
interno sarà un determinato simbolo q1 ∈ Q. Ad ogni passo, si cerca quell’unica
quintupla i cui primi due simboli q e s sono uguali, rispettivamente, allo stato
corrente della MdT e al simbolo scritto sulla cella puntata dalla testina. Se non
esiste una quintupla siffatta, l’esecuzione del programma termina e la macchina
si ferma. Altrimenti la macchina svolge le seguenti tre operazioni

• scrive sulla cella puntata dalla testina il simbolo s 0 , ciò può corrispondere al
fatto che la cella viene svuotata, se s0 è lo spazio, o a mantenere inalterata
la cella, se s0 = s;

• il nuovo stato interno diventa q 0 , che può restare inalterato se q 0 = q;

• la testina viene spostata di una cella verso sinistra se d è < o verso destra
se d è >

e poi il ciclo continua con un nuovo passo.


Una MdT M calcola una funzione f : B → A∗ , ove B ⊂ A∗ , se per ogni
x ∈ B M, partendo dal nastro in cui c’è scritta solo la parola x (le restanti celle
del nastro sono vuote), con la testina in una posizione prestabilita (ad esempio
sulla prima cella di x), e con lo stato interno pari a q 1 , si ferma dopo un numero
finito di passi e sul nastro vi è scritta solo la parola f (x). Se invece la MdT
parte quando sul nastro è scritta una parola z ∈ A ∗ \ B, allora potrebbe anche
non fermarsi mai. In tal caso si dice che la macchina diverge.

Definizione 29 Una funzione f : B → A∗ è Turing–calcolabile se esiste una


esiste una MdT in grado di calcolarla.

E’ chiaro che se una funzione è calcolabile, allora esistono infinite MdT che
la calcolano (basta aggiungere delle quintuple inutili).
Una macchina di Turing è equivalente ad un usuale computer con una quan-
tità illimitata di memoria. Quindi è teoricamente più potente di un computer
reale, cioè è in grado di calcolare funzioni che un calcolatore reale non può cal-
colare (almeno per grandi valori di ingresso). E’ possibile simulare una MdT

50
con un semplice programma in un normale computer, anche se la simulazione
potrebbe non essere in grado di funzionare correttamente se la MdT richiede
più memoria di quanta ne abbia il computer.

5.2 Esempi
Per creare delle funzioni numeriche f : Nn → N, come si è già fatto per le fun-
zioni ricorsive, useremo come alfabeto del nastro l’insieme {I, $, }, ove denota
lo spazio. Ogni numero intero n verrà rappresentato con la parola composta
da n simboli I e un simbolo $; quest’ultimo simbolo serve a indicare la fine
della rappresentazione del numero e serve a distinguere il numero 0 dallo spazio
vuoto. Siamo in grado di rappresentare una n–upla di numeri, concatenando
una dopo l’altra le rappresentazione dei vari numeri.
Gli stati della macchina saranno indicati con numeri naturali, in cui 1 è
lo stato iniziale, si userà invece H come stato finale della MdT. Dato che nei
programmi le quintuple non iniziano mai con H, se in un passo lo stato interno
della MdT diventa H, la macchina si ferma.
Iniziamo con un esempio molto semplice: la funzione successore S : N → N,
S(n) = n + 1. Una MdT che calcola S parte con il numero n rappresentato sul
nastro e deve fermarsi con il numero n + 1 scritto sul nastro: per ottenere ciò
serve solo scrivere un ulteriore I al posto del $ finale e infine scrivere il nuovo
$ sulla cella successiva. A tal scopo sono sufficienti tre stati interni {1, 2, H} e
tre quintuple (1, I, 1, I, >), (1, $, 2, I, >), (2, , H, I, >).
La prima quintupla fa avanzare la MdT verso destra fintantoché ci sono dei
I, la seconda quintupla fa sostituire il $ con un altro I e avanzare di una cella
verso destra, la terza fa scrivere il $ e fa terminare la MdT. Si noti che la MdT
restituisce il risultato anche per n = 0, infatti sul nastro ci sarebbe solo il $, che
verrebbe sostituito dalla parola I$.

Nel secondo esempio si vede una MdT che tratta una funzione di due argo-
menti: la funzione somma a : N × N → N, a(m, n) = m + n. Questa MdT
sfrutta in modo abile la rappresentazione dei numeri interi: ad esempio per
sommare 3 e 4, la MdT deve formare partendo dalla parola III$IIII$ la parola
IIIIIII$. La MdT in questione avrà 4 stati interni e 5 quintuple (1, I, 1, I, >),
(1, $, 2, I, >), (2, I, 2, I, >), (2, $, 3, , <) e (3, I, H, $, >).

Un terzo esempio è una macchina per calcolare la funzione d : N → N, d(n) = 2n.


Per calcolare 2n si può utilizzare la MdT per calcolare la somma, a patto di pre-
parare il nastro con due argomenti uguali pari a n. Per fare ciò abbiamo bisogno
di un programma che ricopia n, in modo da formare la parola n$n$. Poi man-
deremo in esecuzione il programma della macchina che somma. In realtà la
macchina è una sola e quindi si utilizzerà la composizione tra la macchina che
copia e la macchina che somma. Per semplificare il programma supponiamo che
nel nastro n sia preceduto da una cella vuota.

51
La MdT che crea due copie di n ha 9 stati interni e 17 quintuple (1, I, 2, C, >),
(1, $, 8, $, >), (2, I, 2, I, >), (2, $, 3, $, >), (3, , 4, I, >), (3, I, 3, I, >), (3, $, 4, I, >
), (4, , 5, $, <), (5, I, 5, I, <) (5, $, 5, $, <), (5, C, 6, I, >), (6, I, 2, C, >), (6, $, 7, $, >
), (7, I, 7, I, <), (7, , H, , >) e (8, , H, $, <).
Si noti che per ricordare quale barretta di n sta copiando, la MdT la sosti-
tuisce momentaneamente con il simbolo C. Inoltre alla fine la MdT ha la testina
posizionata sulla prima cella della prima copia di n.
Per comporre le due macchine, bisogna riunire le quintuple della prima e
della seconda macchina, rinominando tutti gli stati della seconda macchina (in
modo che siano diversi da quelli usati nella prima macchina) e sostituendo nelle
quintuple della prima macchina lo stato H con lo stato iniziale della seconda.
In pratica avremo nella quintuple provenienti dalla prima macchina 9 al po-
sto di H e nella quintuple seconda macchina gli stati 9, 10, 11 al posto di 1, 2, 3.

Come ultimo esempio diamo una descrizione sommaria di una MdT che cal-
cola il prodotto tra due numeri m e n. L’idea è quella che partendo dalla
configurazione m$n$, la MdT crea la configurazione m$n$p$, in cui il numero
p all’inizio è zero. Poi effettua il seguente ciclo

(i) tenta di cancellare un simbolo I da m (cioè m diventa m − 1), fermandosi


se non ci sono più I

(ii) copia, con una versione leggermente modificata della macchina per copiare,
n dopo p, perciò la configurazione del nastro diventa m$n$p$n$

(iii) si posiziona la testina sul primo degli ultimi due numeri e li si somma con
la macchina per sommare

(iv) si riposiziona la testina sul primo simbolo non vuoto di m e si riparte con
il primo passo

Alla fine cancella n$ e sul nastro resterà solo p pari a m · n.


Si lascia al lettore come esercizio quello di scrivere le quintuple della mac-
china moltiplicatrice.

5.3 La macchina di Turing universale


Il programma eseguito da una MdT è parte integrante delle componenti del-
la macchina, il cosiddetto hardware. Quindi una MdT può solo svolgere un
compito fissato, cioè calcolare un’unica funzione. Questo è un ulteriore punto
di differenza con un calcolatore reale, nel quale il programma è normalmente
fornito dall’esterno e quindi è possibile far eseguire allo stesso calcolatore più
programmi.
E’ però concettualmente possibile creare una MdT general–purpose che è in
grado di simulare una qualsiasi MdT M.

52
Teorema 14 Esiste una MdT universale, indicata con MTU che ricevendo la
coppia (m, x̄), in cui m è la descrizione di una MdT M e x̄ è una rappresenta-
zione opportuna di una parola x dell’alfabeto del nastro di M, calcola in tempo
finito la rappresentazione della parola f (x), in cui f è la funzione calcolata da
M. Nel caso in cui M diverge su x, allora anche MTU divergerà su (m, x̄).

Dim. L’idea di definire una MTU è già presente nel lavoro iniziale di Turing.
Noi non scenderemo nei dettagli, perchè seppur concettualmente semplice, tale
MdT ha un numero molto alto di stati interni e di quintuple.
Ogni stato q e ogni simbolo s del nastro di M saranno rappresentati con
numeri interi indicati, rispettivamente, con ]q e ]s. Questi numeri saranno inol-
tre rappresentati in notazione unaria a lunghezza fissa N , cioè con abbastanza
spazi aggiuntivi in modo tale che la rappresentazione di ogni stato e di simbo-
lo abbia esattamente la stessa lunghezza N . Ad esempio se M ha tre stati e
quattro simboli, gli stati saranno rappresentati con le parole $, I $ e II $.
Rappresenteremo lo stato finale e il simbolo vuoto con il numero 0.
Una quintupla Qi = (qi , si , qi0 , s0i , di ) sarà rappresentata con la parola ]Qi =
(]qi ]si ]qi0 ]s0i di ) e il programma di M sarà rappresentato con la parola m ottenuta
come concatenazione delle parole rappresentanti le quintuple.
Infine il contenuto del nastro t viene ovviamente rappresentato come parola
contenente tutte le parole i codici dei simboli delle celle. All’inizio il nastro
conterrà la rappresentazione x̄ della parola x.
La MTU riceverà sul nastro m e x̄ e costituirà la seguente situazione iniziale
sul nastro:

• il programma m

• un simbolo Q seguito dalla rappresentazione dello stato interno q (che


all’inizio è lo stato iniziale q1 )

• un simbolo T seguito dalla parola x̄, che rappresenterà il contenuto del


nastro t

Il simbolo T indica la posizione della testina ed è sempre posto immediatamente


prima della cella puntata dalla testina.
Si farà uso di una macchina comparatrice U che, dati x e y scritti a lunghezza
fissa N , è in grado di dire se x = y, e di una macchina copiatrice C che è in
grado di copiare x in una posizione stabilita del nastro. La definizione di U è
lasciata come esercizio al lettore.
Per simulare un passo di M, MTU svolgerà le seguenti operazioni

(i) Innanzitutto cercherà una quintupla in m il cui primo simbolo è uguale a


q e il cui secondo simbolo è uguale a s (il simbolo di t che inizia con T ),
utilizzando due volte le quintuple di U (opportunamente modificate).

(ii) Se non esiste tale quintupla, MTU si ferma dopo aver cancellato m e q,
in modo da lasciare solo la rappresentazione del nastro (sostituendo il
simbolo T con il $).

53
(iii) Se invece tale quintupla esiste, allora viene modificato lo stato interno con
q 0 e il contenuto della cella corrente con s0 , usando due volte le quintuple
di C, anch’esse opportunamente adattate.

(iv) Infine il simbolo T viene spostato alla cella immediatamente sulla sinistra
(o sulla destra), a seconda di d, ripristinando il simbolo $ nella posizione
corrente di T . Se la testina dovesse essere spostata sulla cella oltre l’ultima
rappresentata in t, allora viene aggiunta in fondo a t una nuova cella
contenente il simbolo vuoto.

E’ facile capire che MTU si ferma sull’input (m, x̄) se e solo se M si ferma
sull’input x e, in tal caso, MTU ha scritto sul nastro proprio la rappresentazione
di f (x), in quanto alla fine di ogni gruppo di operazioni (i)–(iv) MTU ha nel
nastro una configurazione (q, t) esattamente corrispondente a quella di M dopo
l’esecuzione del passo corrispondente. 

In particolare, questo risultato dimostra che MTU è in grado di calcolare


tutte le funzioni Turing–calcolabili.
Si noti infine che la rappresentazione a lunghezza fissa è utile perchè quando
si cambia lo stato interno o il contenuto di una cella c’è abbastanza spazio libero
per potervi inserire, rispettivamente, il codice di qualsiasi stato e di qualsiasi
simbolo. Se invece si fosse utilizzata la rappresentazione unaria standard, si
sarebbe dovuto aumentare o diminuire lo spazio occupato dalla rappresentazione
dello stato interno o dal simbolo della cella, a seconda che il nuovo simbolo avesse
una lunghezza maggiore o minore di quella del simbolo corrente.

5.4 Il teorema della fermata e problemi indeci-


dibili
Anche questo nuovo risultato è già presente nel lavoro originale di Turing.

Teorema 15 (della fermata) Non può esistere una MdT H che, ricevendo
come input la coppia (m, x̄), in cui m è la descrizione di una MdT M e x è
la rappresentazione di una parola x dell’alfabeto del nastro di M, decide, ad
esempio scrivendo sul nastro il simbolo S o il simbolo N , se M si fermerà o no
partendo dall’input x.

Dim. Supponiamo per assurdo che H esista. Costruiamo allora la MdT D cosı̀
definita. D riceve come input una parola m definita sull’alfabeto del nastro di
H, manda in esecuzione H sull’input (m, m). Se H dà risposta positiva, D entra
in un loop infinito (ad esempio spostandosi indefinitivamente verso destra). Se
H dà risposta negativa, D si ferma.
Si noti che la risposta di H sull’input (m, m) corrisponde al fatto se una
MdT la cui descrizione è m si ferma ricevendo come input la descrizione di sè
stessa.

54
Sia d la descrizione del programma di D. Cosa succede se a D si dà come
input proprio la parola d ? Si fermerà ?
Supponiamo che D si ferma sull’input d. Ciò accade se H dà risposta negativa
sull’input (d, d), ma ciò significa che la MdT con rappresentazione d, cioè D,
non si ferma sull’input d, in contraddizione con l’ipotesi.
Allora supponiamo che D non si ferma sull’input d. Ciò accade se H dà rispo-
sta positiva sull’input (d, d), ma ciò significa che la MdT con rappresentazione
d, cioè D, si ferma sull’input d, di nuovo in contraddizione con l’ipotesi.
Quindi possiamo dire che l’ipotesi iniziale è falsa e quindi una MdT siffatta
non può esistere. 

Questo teorema fornisce una risposta negativa all’Entscheidungsproblem (pro-


blema della decisione) enunciato da Hilbert. L’ipotesi di Hilbert è che ogni classe
di problemi, il cui enunciato è ben posto dal punto di vista matematico, potesse
essere risolto risolto da una procedura meccanica che, con un numero finito di
passi, fornisse una soluzione di un qualsiasi dato problema della classe.
Il teorema della fermata costituisce un esempio di classe indecidibile di
problemi, cioè una classe per cui non esiste una MdT in grado di trovare la
soluzione di un problema appartenente alla classe. I problemi si intendono di
tipo decisionale, cioè problemi il cui enunciato è una domanda e la cui soluzione
è un valore di verità. La classe indecidibile in questione è appunto formata
dai problemi il cui enunciato è “stabilire se la MdT M si fermerà o no partendo
dall’input x”.
La definizione di classe di problemi indecidibili sembra essere legata all’esi-
stenza o meno di una MdT che risolva il problema, senza però tenere conto che
in teoria potrebbe esistere un procedimento meccanico diverso da una MdT che
sia invece in grado di risolvere. In realtà, come vedremo nella sezione successiva,
in base alla tesi di Church–Turing ciò è ritenuto estremamente improbabile.
Citiamo adesso alcuni problemi indecidibili. Ulteriori esempi di problemi
indecidibili saranno presentati nei prossimi capitoli.
Il primo esempio che riportiamo è quello basato sul cosiddetto decimo pro-
blema di Hilbert. Nel 1900 Hilbert presentò al Congresso Internazionale dei
Matematici un elenco di problemi aperti della matematica che dovevano essere
risolti.
Il decimo problema di quella lista richiedeva di trovare un procedimento
mediante il quale si poteva stabilire se una data equazione diofantea, cioè un
equazione del tipo
P (x1 , . . . , xn ; a1 , . . . , am ) = 0 (5.1)
in cui P è un polinomio a coefficienti interi nelle variabili x 1 , . . . , xn e avente
come parametri i numeri interi a1 , . . . , am , ammette soluzioni intere, dati i
valori dei parametri a1 , . . . , am .
Ad esempio l’equazione diofantea

2x = a

55
ammette soluzioni se e solo se il parametro a è un numero pari, l’equazione
diofantea
x2 = a
ammette soluzioni se e solo se il parametro a è un quadrato, infine l’equazione
diofantea
(x + 2)(y + 2) = a
ammette soluzioni se e solo se il parametro a non è primo.
Una risposta negativa al decimo problema di Hilbert fu fornita da Matiya-
sevich nel 1970, utilizzando tutta una serie di risultati ottenuti da M. Davis, H.
Putnam e altri, dimostrando che è possibile esprimere le funzioni calcolabili dal-
le macchine di Turing attraverso una famiglia di equazioni diofantee, per cui è
ovviamente indecidibile sapere se quella famiglia di equazioni ammette soluzioni
in quanto si può mostrare che ciò risolverebbe il problema della fermata.
Come effetto collaterale di questo risultato si è trovato un’equazione diofan-
tea ad un parametro a che ammette soluzione solo e quando a è un numero
primo.
Il secondo esempio è il problema di corrispondenza di Post [1].
Sia I = {(u1 , v1 ), . . . , (un , vn )} un insieme finito di coppie di parole di un
alfabeto finito A. Si può immaginare che ogni coppia di parole rappresenti la
tessera di un gioco, simile al domino, in cui ui è la parola che compare nella
parte superiore della tessera e vi quella della parte inferiore della tessera. Il
gioco è quello di affiancare un numero finito di copie di alcune tessere 2 tentando
di comporre la stessa parola sia congiungendo le parole della parti superiori, sia
quelle delle parti inferiori.
Date le tessere I, il gioco ammette soluzione se è possibile formare la stessa
parola.
Ad esempio se I = {(b, ab), (ba, a), (a, ab)} ammette la soluzione (a, ab), (ba, a).
Se invece I = {(b, bb), (a, bab)} ammette la soluzione (b, bb), (a, bab), (b, bb).
Infine se I = {(b, bb), (a, aa)} non ammette soluzione.
Si può dimostrare che è possibile creare un insieme di tessere I che ammette
soluzione se e solo se una data MdT si ferma su un determinato input x e quindi
stabilire se I ammette soluzione è indecidibile.

5.5 La tesi di Church–Turing


In questa sezione vedremo quali sono le relazioni tra la classe di funzioni Turing–
calcolabili e la classe delle funzioni ricorsive.
Innanzitutto vale il seguente teorema

Teorema 16 Se f è una funzione ricorsiva, allora f è Turing–calcolabile.

Dim. Il teorema si dimostra per induzione strutturale.

2 quindi a differenza di un gioco reale ogni tessera può essere utilizzata più volte

56
E’ facile vedere che le tre funzioni iniziali sono Turing–calcolabili: la funzione
zero z(x) è calcolabile da una MdT che cancella x e scrive un $, che rappresenta
lo zero; la MdT che calcola la funzione successore è già stata illustrata come
(m)
esempio; per calcolare la funzione proiezione π i è sufficiente che la MdT can-
celli tutti i propri argomenti, tranne xi .

Se la funzione g : Nk → N è calcolabile dalla MdT M0 e le funzioni f1 , . . . , fk


tutte definite come fi : Nm → N sono calcolabili dalle MdT Mi , i = 1, . . . , k,
allora la composizione di g con f1 , . . . , fk h : Nm → N è Turing–calcolabile.
Infatti è possibile costruire una MdT M che calcola h a partire da ~x
(i) per ogni i = 1, . . . , k M ricopia l’input ~x, fa partire le quintuple di M i e
conserva il risultato prodotto yi = fi (~x)
(ii) M cancella l’input iniziale ~x
(iii) M fa partire le quintuple di M0 sull’input y1 , . . . , yk
Se la funzione g : Nm → N è calcolabile dalla MdT M1 e la funzione f :
Nm+2 → N è calcolabile dalla M2 allora la funzione h : Nm+1 → N definita per
ricorsione da g e f è Turing–calcolabile.
Infatti è possibile costruire una MdT M che calcola h a partire da ~x, y
(i) M scrive sul nastro dopo l’input iniziale ~x, y un ulteriore numero y 0 che
all’inizio vale 0
(ii) M ricopia a destra ~x e fa partire le quintuple di M 1 conservando il
risultato z
(iii) se y = y 0 allora M cancella tutto il nastro tranne z e si ferma, altrimenti
(iv) M ricopia a destra ~x, y 0 , z, fa partire le quintuple di M2 e conserva il
risultato come nuovo valore di z
(v) poi M incrementa y 0 di uno e torna al terzo passo
Infine sia p : Nm+1 → {0, 1} un predicato calcolabile dalla MdT M1 , allora
la funzione h : Nm → N definita per minimalizzazione non limitata di p è
Turing–calcolabile
Infatti h è calcolabile dalla MdT M cosı̀ definita
(i) M scrive sul nastro dopo l’input iniziale ~x un ulteriore numero y che
all’inizio vale 0
(ii) M ricopia a destra ~x, y
(iii) M posiziona la testina sulla copia di ~x, y e fa partire le quintuple di M 1
(iv) se le quintuple di M1 arrivano allo stato finale e producono sul nastro il
corrispondente del valore 1, allora M cancella tutto il contenuto del nastro
tranne y

57
(v) se le quintuple di M1 arrivano allo stato finale e producono sul nastro il
corrispondente del valore 0, M incrementa di uno y e torna al terzo passo


Anche l’inverso è vero: ogni funzione Turing–calcolabile è ricorsiva.


La prima difficoltà da superare è come codificare una MdT in forma nu-
merica, in quanto le funzioni ricorsive sono per loro natura numeriche. A tal
scopo prendiamo l’alfabeto del nastro associamo ad ogni simbolo s un numero
intero univoco ]s, come si è già fatto per la MTU. Lo stesso procedimento viene
applicato agli stati per definire ]q, dato lo stato q.
Il nastro pur essendo infinito, in ogni momento del calcolo, contiene solo
una parte finita non vuota. Quindi è possibile rappresentare il contenuto del
nastro come una parola finita di A. Per codificare una sequenza arbitraria
σ = σ0 σ1 σ2 . . . σl di elementi di A, si determinano i codici ki = ]σi e si usa la
seguente funzione ricorsiva primitiva
l
Y
[k0 , k1 , k2 , . . . kl ] = pki i
i=0

ove pi è la successione ordinata dei numeri primi {2, 3, 5, 7, 11, . . . }. Il numero


[k0 , k1 , k2 , . . . kl ] è detto numero di Gödel della sequenza σ.
Ad esempio per codificare la sequenza (2, 1, 3) si usa il numero [2, 1, 3] =
22 31 53 = 1500. Se kl 6= 0, allora la funzione [. . . ] è iniettiva, in virtù del teorema
dell’unicità di scomposizione in numeri primi, ma se k l = 0, dato che p0l = 1,
allora [k0 , k1 , k2 . . . kl ] = [k0 , k1 , k2 , . . . kl−1 ]; ad esempio anche [2, 1, 3, 0] = 1500.
Data la codifica z = [k0 , k1 , k2 , . . . , kl ], per ottenere l’i–esimo elemento (cioè
ki ) si può usare la seguente funzione ricorsiva primitiva

z[i] = min{k ≤ z : pki |z ∧ pk+1


i 6 |z}

Ad esempio se z = 1500 allora z[2] = 3, in quanto 53 |1500, ma 54 6 |1500.


Il programma della MdT sarà composto da n quintuple Q 1 , Q2 , . . . , Qn . Ogni
quintupla Qi = (qi , si , qi0 , s0i , di ) sarà codificata con cinque numeri: il codice di
q, il codice di s, il codice di s0 , il codice di q 0 e il codice di d (ad esempio 0 per
< e 1 per >). Ogni quintupla sarà quindi codificata con il numero

]Qi = []qi , ]qi0 , ]qi0 , ]s0i , ]di ]

Infine il programma sarà codificato con il numero di Gödel

p = [n, ]Q1 , ]Q2 , . . . , ]Qn ]

La configurazione di una MdT è data dallo stato interno q, dalla posizione


della testina sul nastro i e dal contenuto del nastro: lo stato è codificato ]q,
il contenuto con una codifica t della sequenza dei codici dei simboli contenuti
nelle celle.
Infine la configurazione è codificata con il numero c = []q, i, t].

58
Lemma 7 La funzione N (p, c) che dati p, la codifica del programma di M, e
c la codifica di una configurazione di M, calcola la codifica della configurazione
successiva, ovvero dopo l’esecuzione di un passo, è ricorsiva primitiva

Dim. Indicato con

q = c[0]
i = c[1]
t = c[2]
L(z, a, b) = min{i ≤ z[0] : (i >= 1) ∧ (z[i][0] = a) ∧ (z[i][1] = b)}
j = L(p, q, t[i])
q0 = z[j][2]
s0 = z[j][3]
d = z[j][4]
U (z, a, b) = (z ÷ paz[a] ) · pba
M (a, b) = (a − 1) · (¬b) + (a + 1) · b

Allora 
[q 0 , M (i, d), U (t, i, s0 )] se j ≤ p[0]
N (p, c) =
[0, i, t] altrimenti
che, come composizione di funzioni ricorsive primitive, lo è a sua volta. 

Lemma 8 La funzione N (t) (p, c) che calcola, dati p e c, la configurazione di


M dopo t passi, è ricorsiva primitiva.

Dim. Infatti si ha che

N (0) (p, c) = c
N (t+1) (p, c) = N (p, N (t) (p, c))

Lemma 9 Il predicato T (p, c, t) che è vero se e solo se M con programma


p, partendo dalla configurazione iniziale c si ferma dopo t passi, è ricorsivo
primitivo.

Dim. Innanzitutto definiamo una funzione ricorsiva primitiva che ci dice quan-
do una configurazione rappresenta la situazione in cui M si è fermata; basta
controllare che lo stato interno sia q0

E(c) = (c[0] = 0)

59
Perciò
T (p, c, t) = E(N (t) (p, c))
Si noti che per come è definito N e in virtù del fatto che non ci sono quintuple
che si riferiscono a q0 , allora se M si ferma ad un istante t, ogni successiva appli-
cazione della funzione N non cambia la configurazione e quindi se T (p, c, t) = 1
per un certo t, allora T (p, c, t0 ) = 1 per ogni t0 ≥ t. 

Lemma 10 L’istante di fermata di M a partire dalla configurazione c è una


funzione ricorsiva generale

Dim. Ovviamente vale

H(p, c) = min{t : T (p, c, t) = 1}

Siamo quindi in grado di dimostrare il seguente teorema

Teorema 17 Ogni funzione Turing–calcolabile f : B → A, con B ⊂ A∗ è


ricorsiva generale, nel senso che esiste una funzione ricorsiva generale f¯ : N →
N tale che f (x) = h−1 (f¯(h(x))), ove h : A∗ → N è la funzione che codifica
una parola a1 a2 . . . an di A∗ in un numero naturale attraverso il suo numero di
Gödel []a1 , ]a2 , . . . , ]an ].

Dim. Sia f : B → A, con B ⊂ A∗ calcolabile con una MdT M e sia p la codifica


del programma di M. Allora la funzione f¯ cercata è

f¯(z) = U (p, I(z), H(p, I(z)))

in cui l’argomento z è il numero di di Gödel dell’argomento di x, I(z) è la codifica


della configurazione iniziale della macchina, ottenuta come I(z) = [1, 0, z], e
infine la funzione U è definita

U (p, c, t) = O(N (t) (p, c)),

ove O estrae il contenuto del nastro dalla configurazione finale O(c) = c[2] 

Come semplice corollario abbiamo il seguente

Teorema 18 (della forma normale di Kleene) Ogni funzione ricorsiva f :


D → N, ove D ⊂ Nm , si può scrivere nella forma

f (x1 , . . . , xm ) = G(x1 , . . . , xm , min{y : p(x1 , . . . , xm , y) = 1}) (5.2)

in cui p è un predicato ricorsivo (primitivo) e U è una funzione ricorsiva


(primitiva).

60
Dim. Se f è ricorsiva, allora per il teorema 16 è Turing–calcolabile. Quindi
applicando il teorema 17 si ottiene facilmente l’asserto. 

Quindi, in base ai due teoremi 16 e 17, una funzione è ricorsiva se e solo


è Turing–calcolabile. In realtà, pur senza una aver visto una dimostrazione
formale, già sappiamo che una funzione è ricorsiva se e solo se è calcolabile
in Pascal usando variabili intere che possono contenere numeri arbitrariamente
grandi (ciò in pratica è possibile, ad esempio usando degli array di interi, anche
se in linea teorica non si può superare il limite imposto dalla memoria fisica
del calcolatore).
Come corollario del teorema 17 abbiamo che la funzione di Ackermann è
ricorsiva perchè è calcolabile dalla seguente MdT. La MdT riceve sul nastro x e
y e poi svolge il seguente programma :

(i) fa precedere x dal simbolo [;

(ii) se x è zero scrive y + 1 al posto di (x, y) e sposta la testina sul numero


precedente, se non ve ne sono più (cioè si trova il simbolo [) la MdT
termina;
(iii) se invece y è zero scrive la coppia (x − 1, 1) al posto di (x, y) e sposta la
testina sul primo numero della coppia;

(iv) altrimenti scrive la terna (x − 1, x, y − 1) al posto di (x, y) e posiziona la


testina sul secondo elemento della terna;

(v) torna al secondo punto.

Esistono altri formalismi per la definizione di funzione calcolabile, i quali


sono tutti equivalenti alle MdT (o alle funzioni ricorsive). I più importanti
formalismi presenti nella letteratura sono:

• Le funzioni λ–calcolabili: si tratta di un formalismo ideato da Church


e basato sulla definizione e sul calcolo di funzioni e funzionali puri (ad
esempio gli stessi numeri interi sono rappresentati con appositi funzionali).

• Le macchine a registri: si tratta del formalismo più vicino ai concetti della


programmazione di un calcolatore ed è basato su macchine in grado di
eseguire programmi scritti con un linguaggio di programmazione estrema-
mente semplificato (ad esempio con solo tre istruzioni [1]) e operanti su
registri, cioè variabili intere arbitrariaramente grandi.

• Le funzioni –ricorsive: si tratta di un formalismo basato sulla definizione


di funzioni mediante equazioni ricorsive e su regole di inferenza per poter
dedurre i valori delle funzioni a partire dai rispettivi argomenti.

• Gli algoritmi di Markov: si tratta di un formalismo basato su particolari


grammatiche e metodi deterministici per poter derivare parole [3].

61
L’esistenza di tutti questi formalismi esattamente equivalenti ci porta ad
affermare la celeberrima tesi di Church–Turing “Una funzione è calcolabile se e
solo è Turing–calcolabile”.
Questa tesi non può essere dimostrata perchè non è formalizzabile in modo
matematico il concetto di funzione calcolabile. Il concetto intuitivo è che una
funzione f è calcolabile se esiste un procedimento finito e ragionevole che per-
mette ad uno strumento di calcolo “meccanico” (cioè in grado solo di eseguire
in modo autonomo gli ordini del procedimento, senza perciò richiedere abilità
che vanno al di là della mera esecuzione) di arrivare a determinare il valore di
f (x) in un numero finito di passi partendo da x.
Il problema fondamentale risiede nella ragionevolezza del procedimento e
delle capacità richieste dallo strumento di calcolo. E’ infatti possibile ideare
dei modelli di calcolo irrealistici e puramente teorici, ad esempio le MdT con
oracolo, che sono in grado di calcolare funzioni non ricorsivi. Però tutti i mo-
delli ragionevoli fino ad adesso studiati sono al massimo equivalenti alle MdT.
Pertanto la tesi di Church–Turing è solo confutabile, cioè potrebbe essere in
linea teorica negata dalla scoperta di un formalismo di calcolo ragionevole che
sia superiore alle MdT.
La comunità scientifica, tranne casi eccezionali, è concorde nel ritenere vera
la tesi di Church–Turing. I motivi principali sono i seguenti.

• In quasi settanta anni di studi non sono mai stati trovati controesempi,
ma sempre e solo nuovi risultati in perfetto accordo con la tesi di Church–
Turing.

• Tutte le possibili estensioni ragionevoli di formalismi esistenti (ad esem-


pio MdT bidmensionali, MdT con più nastri e più testine, MdT non
deterministiche, ecc.) sono sempre equivalenti alle MdT.

• Le MdT sono state modellate secondo l’analisi fatta da Turing sui pro-
cedimenti umani di calcolo: la testina equivale all’occhio e alla penna,
la memoria interna equivale al cervello (che contiene anche le quintuple),
il nastro equivale alla carta, ai libri e a tutte le sorgenti di informazioni
esterne. Questa analisi può anche essere estesa ad un calcolatore moderno:
la testina equivale alla tastiera, al monitor e alla testina del disco fisso,
la memoria interna equivale alla RAM, le quintuple sono memorizzate in
una ROM, il nastro equivale al disco fisso, allo schermo e tutte a tutte le
possibili periferiche. Per cui sembra implausibile che si possa concepire un
sistema di calcolo reale non equivalente ad una MdT.

62
Capitolo 6

Classificazione degli insiemi

6.1 Insiemi ricorsivi


Definizione 30 Un insieme A ⊂ N si dice ricorsivo se la sua funzione carat-
teristica 
1 se x ∈ A
fA (x) =
0 se x 6∈ A
è una funzione ricorsiva.

Vista l’equivalenza tra funzioni Turing–calcolabili e funzioni ricorsive, pos-


siamo dire che A è ricorsivo se esiste una MdT che ricevendo come input x
risponde in tempo finito alla domanda se x appartiene all’insieme oppure no.
Tra esempi di insiemi ricorsivi ricordiamo l’insieme vuoto, tutto N, ogni in-
sieme finito, l’insieme dei numeri pari, l’insieme dei numeri dispari, l’insieme dei
numeri quadrati, dei numeri primi, dei numeri perfetti.

Un insieme ricorsivo molto utile è l’insieme M dei codici dei programmi di tutte
le macchine di Turing. Infatti non tutti i numeri interi x corrispondono a codici
validi per il programma di una MdT: il numero x deve soddisfare alle seguenti
condizioni

• essere diverso da zero

• posto m = x[0], deve accadere che x[i] 6= 0, per ogni i = 1, . . . , m, in


quanto x[i] deve essere il codice dell’i–esima quintupla
• infine x[i][0] 6= 0, sempre per ogni i = 1, . . . , m, in quanto in ogni quintupla
il primo simbolo non può essere lo stato finale (che ha codice 0).

E’ chiaro che queste condizioni sono esprimibili con un predicato ricorsivo


(primitivo) e quindi M è un insieme ricorsivo. Si indicherà con M i la MdT
che ha come codice l’i–esimo elemento di M; i è detto indice della MdT M i .

63
Si indicherà inoltre con Φi (x) il risultato, interpretato come numero, prodotto
dalla MdT Mi a partire dall’input numerico x.
In base ai teoremi 17 e 16, si ha che
Proposizione 12 Una funzione f di una sola variabile è ricorsiva se e solo se
f (x) = Φi (x) per ogni x ∈ N, per un certo i ∈ N detto indice di f .
Quindi M può anche essere visto come l’insieme di tutti i codici delle funzioni
ricorsive a una sola variabile.
E’ facile far vedere che
Proposizione 13 L’unione e l’intersezione di due insiemi ricorsivi A e B e il
complementare di un insieme ricorsivo A sono ancora insiemi ricorsivi
Ad esempio se fA è la funzione caratteristica di A e fB è la funzione carat-
teristica di B, allora la funzione caratteristica di A ∩ B è f A · fB , la funzione
caratteristica di A ∪ B è sg(fA + fB ) e la funzione caratteristica di Ā è 1 − fA .
Il concetto di insieme ricorsivo si può estendere in modo immediato anche
a sottoinsiemi di Nk , per k > 1. In tal caso avremo che se A e B sono insiemi
ricorsivi anche A × B è un insieme ricorsivo.
Inoltre vale il seguente risultato
Proposizione 14 A è un insieme ricorsivo se e solo è possibile definire una
funzione ricorsiva gA totale che è in grado di elencare ad uno ad uno tutti gli
elementi senza ripetizione e in ordine crescente.
Dim. Se A è ricorsivo, allora la funzione ricorsiva g A è
k
X
gA (n) = min{k : fA (i) = n + 1}.
i=0

Infatti gA (0) = k se e solo se fA (0) = fA (1) = · · · = fA (k − 1) = 0 e fA (k) = 1.


Perciò gA (0) = min A. Inoltre gA (1) = k se e solo se k è il secondo elemento di
A in ordine di grandezza. E cosı̀ via.
Si noti infine che A = {gA (0), gA (1), gA (2), . . . }.
Se invece esiste una funzione gA con le proprietà sopra indicate, allora A è
ricorsivo in quanto la sua funzione caratteristica si può scrivere come

fA (x) = (min{y : gA (y) ≥ x} = x)

6.2 Insiemi ricorsivamente enumerabili


Togliendo dal teorema 14 l’ipotesi che gA sia monotona non decrescente, il teo-
rema non è in generale più valido. Con tale ipotesi si può solo definire un
procedimento, ad esempio una funzione ricorsiva parziale, che, dato n ∈ N,

64
converge e dà una risposta positiva se n ∈ A, ma non converge se n 6∈ A: ad
esempio
hA (n) = min{k : gA (k) = n}
Questo procedimento si differenzia da una funzione caratteristica proprio perchè
mentre quest’ultima è una funzione totale e quindi è in grado di dare sia risposte
positive che negative, la prima è in grado di dare solo risposte positive.
Per cui definiremo
Definizione 31 Un insieme A ⊂ N è ricorsivamente enumerabile (in se-
guito r.e.) se esiste una funzione ricorsiva gA che lo enumera ricorsivamente,
cioè una funzione ricorsiva gA gA : N → A suriettiva, cioè tale che per ogni
a ∈ A esiste n ∈ N per cui gA (n) = a, ovvero per cui Im(gA ) = A.
Si noti che gA potrebbe non essere iniettiva e quindi produrre più volte lo
stesso elemento di A. Questo fatto comunque non crea problemi in quanto si
può in linea teorica pensare a scartare gli elementi già prodotti.
In base alla proposizione 14 vale ovviamente
Proposizione 15 Se A è ricorsivo allora è r.e.
Vale inoltre il seguente risultato
Proposizione 16 Un sottoinsieme A ⊂ N è r.e. se e solo è il dominio di una
funzione hA ricorsiva parziale.
Dim. Se A è r.e., sia gA la funzione che lo enumera. Definendo
hA (x) = min{y : gA (y) = x}
si vede facilmente hA è definito su x se e solo se x ∈ E.
Se invece A è il dominio di una funzione ricorsiva h A , allora è anche il dominio
di una MdT M (inteso come l’insieme di tutti i numeri interi x per cui M si
ferma partendo con il nastro contenente il numero x).
Per cui possiamo scrivere che
x ∈ A se e solo se per qualche t ∈ N T (p, k(x), t) = 1
ove p è il codice del programma di M e k(x) è il codice della configurazione
iniziale per M in cui il nastro contiene la rappresentazione unaria di x. Per cui,
scelto un elemento arbitrario x̄ ∈ A (ad esempio il minimo elemento), A sarà
enumerato dalla funzione

y[0] se T (p, k(y[0]), y[1]) = 1
g(y) =
x̄ altrimenti
Infatti se x ∈ A, allora T (p, k(x), t) = 1 per un certo valore di t e quindi per
y = [x, t] si ha che g(y) = x. Se invece x 6∈ A, allora per ogni valore di y per
cui y[0] = x, si ha che T (p, k(y[0]), y[1]) = 0 e quindi g(y) = x̄ 6= x, mentre se
y[0] 6= x, allora in ogni caso g(y) 6= x. 

Come conseguenza di questo risultato abbiamo che

65
Proposizione 17 Se due insiemi A e B sono r.e., allora anche la loro inter-
sezione e la loro unione sono insiemi r.e.
Dim. Far vedere che C = A ∩ B è r.e. è banale, in quanto se A è il dominio di
hA e B è il dominio di hB , allora C è il dominio di hA + hB . Invece per quanto
riguarda l’unione D = A ∪ B, siano gA e gB le funzioni ricorsive che enumerano
A e B, rispettivamente. Allora posto

gA (y ÷ 2) se y è pari
gD (y) =
gB (y ÷ 2) se y è dispari

si può far vedere che gD è ricorsiva e enumera D. Infatti chiaramente Im(G D ) ⊂


A ∪ B. Inoltre preso x ∈ A ∪ B, se x ∈ A, allora gA (ȳ) = x per qualche ȳ ∈ N
e quindi gD (2ȳ) = x, mentre se x ∈ B, allora gB (ȳ) = x per qualche ȳ ∈ N e
quindi gD (2ȳ + 1) = x. 

Per quanto riguarda il complementare, a differenza di quanto avviene per gli


insiemi, abbiamo che

Teorema 19 (di Post) A è ricorsivo se e solo se A e il suo complementare Ā


sono r.e.

Dim. Se A è ricorsivo, allora Ā è ricorsivo e entrambi saranno anche r.e.


Se invece A e Ā sono r.e., allora siano g e g 0 le funzioni che enumerano
rispettivamente A e Ā. Posto

y(x) = min{y : (g(y) = x) ∨ (g 0 (y) = x)},

la funzione caratteristica di A si può scrivere come



1 se g(y(x)) = x
f (x) =
0 se g 0 (y(x)) = x

Si noti che la funzione y(x) è ricorsiva totale, in quanto x ∈ A, in tal caso


esiste y tale che g(y) = x, oppure x ∈ Ā, in tal caso esiste y tale che g 0 (y) = x. 

Infine un’ulteriore caratterizzazione degli insiemi r.e. è la seguente


Proposizione 18 Un insieme A è r.e. se e solo se esiste un predicato ricorsivo
Q a due variabili tale che

A = {x ∈ N : ∃y.Q(x, y)}

Dim. Infatti se A è r.e. allora A è enumerato da una funzione ricorsiva g A e


quindi A si può scrivere come

A = {x ∈ N : ∃y.g(y) = x}

Per cui definendo


Q(x, y) ⇔ g(y) = x

66
si ottiene l’asserto.
Se invece A = {x ∈ N : ∃y.Q(x, y)}, allora A è il dominio della funzione
ricorsiva parziale hA (x) = min{y : Q(x, y)} 

Si può interpretare y come la “dimostrazione” che x ∈ A.


Sia ora m una funzione ricorsiva che enumera M e definiamo W i , per ogni
i ∈ N, come l’insieme di tutti i numeri interi x per cui la MdT di indice i si
ferma partendo dall’input x. In maniera del tutto analoga W i è il dominio della
funzione ricorsiva Φi .
E’ quindi ovvio che

Proposizione 19 Un insieme A è r.e. se e solo se A = Wi , per qualche i ∈ N

Ora siamo in grado di enunciare che il concetto di insieme r.e. è più generale
del concetto di insieme ricorsivo in quanto
Proposizione 20 L’insieme

K = {n ∈ N : n ∈ Wn }

è un insieme r.e. ma non ricorsivo

Dim. L’insieme K è chiaramente r.e. in quanto è il dominio della funzione


ricorsiva hK (x) = Φx (x).
Invece il complementare K̄ di K non può essere r.e. Infatti se per assurdo K̄
fosse r.e., sarebbe uguale a Wk , per un certo k.
Poichè
K̄ = {n ∈ N : n 6∈ Wn }
si avrebbe che k ∈ K̄ se e soltanto se k 6∈ K̄. 

Un esempio più utile di insieme non r.e. è il seguente

Proposizione 21 L’insieme T OT degli indici delle funzioni ricorsive totali


non è r.e.

Dim. Supponiamo per assurdo che T OT sia r.e. Allora esiste una funzione
ricorsiva g che enumera T OT .
Definiamo la seguente funzione ricorsiva totale

d(x) = Φg(x) (x) + 1

Essendo ricorsiva totale, l’indice di d è un elemento di T OT e quindi esiste


un numero i ∈ N tale che d = Φg(i) . Ma allora si avrebbe

d(i) = Φg(i) (i) + 1 = d(i) + 1

che è palesamente assurdo. 

67
6.3 Due esempi importanti di insiemi r.e.
Il primo esempio è tratto dalla teoria dei linguaggi formali. Fissato un alfabeto
finito A, sia ] : A → N \ {0} una codifica degli elementi di A (ovvero una
funzione iniettiva), ad esempio preso un ordinamento degli elementi di A, ] :
A → {1, 2, . . . , n}, ove n è il numero di elementi di A.
Ad ogni parola w = a0 a1 . . . aL di A∗ si può associare il numero intero

]w = []a0 , ]a1 , . . . , ]aL ]

detto codice o numero di Gödel di w.


L’insieme dei codici di tutte le parole di A∗ è un insieme ricorsivo.
E’ facile vedere le seguenti funzioni e predicati sono ricorsivi (primitivi)

• La funzione L(x) che, dato x = ]w, calcola la lunghezza di una parola


w ∈ A∗ . Infatti
L(x) = min{i < x : x[i] = 0}.

• la funzione C(x, y) che dati x = ]u e y = ]v, concatena u e v restituendo


il codice della parola uv. Infatti
L(y)−1
Y y[i]
C(x, y) = x · pi+L(x)
i=0

• Il predicato S(x, y) che, dati x = ]u e y = ]v, è vero se e solo se v occorre


in u. Infatti

S(x, y) = (∃z)≤x (∃t)≤x (C(z, C(y, t)) = x).

• Presa una produzione Pi = wi → wi0 , il predicato DDPi (x, y), che dati
x = ]u e y = ]v, è vero se e solo se v discende direttamente da u usando
la produzione Pi . Infatti

DPi (x, y) = (∃z)≤x (∃t)≤x ((C(z, C(k, t)) = x) ∧ (C(z, C(k 0 , t)) = y)),

ove k = ]wi e k 0 = ]wi0 .

• Presa una grammatica G con un insieme finito di produzioni P = {P 1 , . . . , Pm },


il predicato DP (x, y), che dati x = ]u e y = ]v, è vero se e solo se v discende
direttamente da u usando una delle produzioni di P . Infatti

DP (x, y) = DP1 (x, y) ∨ · · · ∨ DPm (x, y)

Si noti che la funzione L può essere in realtà applicata ai numeri di Gödel


di sequenze finite arbitrarie di interi purchè nessun numero della sequenza sia
zero.
Dimostriamo ora che

68
Proposizione 22 Data una grammatica G, avente P come insieme di produ-
zioni e S come simbolo iniziale, l’insieme dei codici delle parole del linguaggio
generato da G
C(G) = {]w : S →∗P w}
è un insieme r.e.
Dim. L’insieme C(G) si può scrivere come
C(G) = {x : ∃y.Der(x, y)}
in cui il predicato Der è definito da
Der(x, y) ⇔ (y[0] = ]S)∧(y[L(y)−1] = x)∧(∀i)<L(y) ((i = 0)∨DP (y[i−1], y[i]))
in cui y è il numero di Gödel di una sequenza finita di m + 1 numeri, ognuno dei
quali è sua volta il codice di una parola wi (i = 0, . . . , m). Queste parole sono
tali che
• w0 = S
• wm = u, ove u è la parola di codice x
• wi discende direttamente da wi−1 tramite le produzioni P
Poichè tale sequenza esiste se e solo se u ∈ L(G) (per definizione di L(G))
e poichè Der è un predicato ricorsivo (primitivo), si ha l’asserto in virtù della
proposizione 18. 

Si noti che molti linguaggi formali sono in realtà ricorsivi: ad esempio tutti i
linguaggi descritti nel capitolo introduttivo, i linguaggi della logica proposizio-
nale e quello della logica dei predicati, tutti i linguaggi di programmazione (ad
esempio il Pascal).
Esistono però linguaggi r.e. ma non ricorsivi. Infatti in [1] è descritto come
creare una grammatica che genera come linguaggio il dominio di una data MdT;
poichè esiste una MdT che ha come dominio un insieme K r.e. ma non ricorsivo,
K è il linguaggio con tale proprietà.
Il secondo esempio è molto importante e ci servirà nel prossimo capitolo.
Innanzitutto se L è un linguaggio della logica dei predicati, cioè L = LP(Σ)
per un certo Σ finito o ricorsivo, ad ogni formula φ di L è possibile associare in
modo univoco un numero ]φ, detto codice o numero di Gödel della formula,
dato che φ è una parola del linguaggio LP(Σ).
Inoltre l’insieme {]φ : φ ∈ L} è un insieme ricorsivo.
Infine l’insieme A dei codici degli assiomi della logica dei predicati è un
insieme ricorsivo.
Proposizione 23 Sia L un linugaggio della logica dei predicati e sia T un insie-
me ricorsivo di formule di L. Allora l’insieme dei codici dei teoremi dimostrabili
da T
T hm(T ) = {]φ : T ` φ}
è un insieme r.e.

69
Dim. L’insieme T hm(T ) si può scrivere come

T hm(T ) = {x : ∃y.P rf (x, y)}

in cui il predicato P rf è definito da

P rf (x, y) ⇔ (y[L(y) − 1] = x) ∧ (∀i)<L(y) (fA (y[i]) ∨ fT (y[i]) ∨


(∃j)<i (∃k)<i (y[i] = mp(y[j], y[k])))

in cui fA e fT sono le funzioni caratteristiche degli insiemi, rispettivamente, dei


codici degli assiomi e delle formule di T e mp è la funzione che, dati i codici
di due formule φ e ψ, restituisce come risultato il codice della formula χ che si
ottiene per modus ponens da φ e ψ o 0 se con φ e ψ non è possibile effettuare
il modus ponens.
Mentre è chiaro che fA e fT sono ricorsive in quanto i due insiemi corri-
spondenti sono ricorsivi, la ricorsività della funzione mp deriva dal fatto che mp
deve controllare se ψ = (φ ⇒ χ) per una certa formula χ; in caso positivo deve
restituire il codice di χ, altrimenti 0.
Poichè φ è un teorema di T se e solo se esiste una dimostrazione φ 0 , φ1 , . . . , φm ,
in cui φm = φ e ogni elemento φi è un assioma, un’ipotesi appartenente a T o si
ottiene per modus ponens da altri due elementi precedenti della dimostrazione,
e poichè P rf è un predicato ricorsivo si ottiene l’asserto. 

70
Capitolo 7

I teoremi di Gödel e Church

7.1 Introduzione
Introduciamo ora il concetto di teoria, che è il concetto chiave di questo capitolo.

Definizione 32 Una teoria K (del primo ordine) in un linguaggio L è un


arbitrario insieme di formule di L, i cui elementi sono detti assiomi propri di
K. Ogni formula φ derivabile da K si dice teorema di K. Si indicherà con
T hm(K) l’insieme dei numeri di Gödel dei teoremi di K.

Diremo inoltre che una teoria K è ricorsiva se K è un insieme ricorsivo e


che K è decidibile se T hm(K) è un insieme ricorsivo.
Ovviamente se una teoria è ricorsiva, allora l’insieme dei teoremi è r.e., in
base alla proposizione 23; cercheremo però di vedere se esistono delle teorie K
indecidibili, cioè tali che T hm(K) sia r.e., ma non ricorsivo.
Una tale teoria si dice indecidibile perchè non può esistere un algoritmo che
è in grado di stabilire se una data formula sia o meno un teorema di K. Si potrà
comunque trovare la dimostrazione di ogni teorema e enumerarli tutti, ma per
ogni procedimento possibile esisteranno dei non teoremi, cioè delle formule che
non derivano da K, per cui il procedimento non sarà in grado di stabilire che
non sono teoremi (ad esempio trovando un controesempio).
Infine si noti che la logica proposizionale è decidibile nel senso che l’insieme
dei codici delle proposizioni soddisfacibili è ricorsivo e quindi lo è anche l’insieme
dei codici delle tautologie.
Infatti una proposizione q può avere solo un numero finito n di variabili e
di conseguenza sono un numero finito (2n ) i possibili assegnamenti di verità che
possono soddisfare q: un procedimento che verifica se q è soddisfacibile non deve
far altro che controllarli tutti e vedere se ce n’è almeno uno che soddisfa q.

71
7.2 L’aritmetica formale
In questa sezione definiamo un linguaggio AF della logica dei predicati atto a
formalizzare i numeri naturali con le operazioni di addizione e moltiplicazione.
Si tratterà di un linguaggio dotato di

• una costante, indicata con 0

• una funzione di arità uno, chiamata successore e indicata con S, e due


funzioni di arità due, chiamate somma e prodotto indicate con gli operatori
+e·

• il predicato di uguaglianza =

• un’infinità numerabile di variabili, indicate con vari simboli, anche indi-


ciati come x1 , x2 , . . .

Useremo poi l’abbreviazione t 6= t0 per la formula ¬(t = t0 ).


Indicheremo con AF la seguente teoria basata sul linguaggio AF

AF1 (∀x.S(x) 6= 0)

AF2 (∀x.∀y.(S(x) = S(y)) ⇒ (x = y))

AF3 (∀x.x + 0 = x)

AF4 (∀x.∀y.x + S(y) = S(x + y))

AF5 (∀x.x · 0 = 0)

AF6 (∀x.∀y.x · S(y) = x + x · y)

AF7 (α[x/0] ∧ (∀x.α ⇒ α[x/S(x)])) ⇒ (∀x.α) per ogni formula α avente come
variabile libera x

Come si può notare, gli assiomi propri AF1 e AF2 richiedono che S sia
una funzione iniettiva e che 0 non è il successore di nessun elemento; AF3
e AF4 formalizzano l’addizione, AF5 e AF6 formalizzano la moltiplicazione e
infine le formule dello schema AF7 rappresentano la cosiddetta dimostrazione
per induzione di una generica formula α. Gli assiomi AF1, AF2 e AF3 sono
derivati dai celeberrimi assiomi di Peano.
La teoria AF è chiamata teoria dell’aritmetica formale perchè com-
prende un insieme di proprietà elementari dell’aritmetica elementare (appunto
i numeri naturali con l’addizione e la moltiplicazione).
Innanzitutto vale il seguente risultato, di ovvia dimostrazione

Proposizione 24 (N, +, ·) è un modello di AF

72
In AF è possibile riferirsi a numeri maggiori di zero usando i cosiddetti
numerali, cioè termini chiusi del tipo

0 = 0
n+1 = S(n)

Ad esempio 1 = S(0), 2 = S(S(0)), e cosı̀ via.


A titolo di esempio facciamo innanzitutto vedere come si dimostra in AF
che 1 + 1 = 2, ovvero che S(0) + S(0) = S(S(0)).
Dall’assioma AF4 sostituendo x con S(0) e y con 0 si ottiene

S(0) + S(0) = S(S(0) + 0),

dall’assioma AF3 sostituendo x con S(0) si ottiene

S(0) + 0 = S(0)

da cui si ottiene l’asserto applicando le proprietà dell’uguaglianza.


Facciamo poi vedere come si dimostra che (∀x.0 + x = x). Poichè vogliamo
usare l’assioma AF7 della dimostrazione per induzione, dobbiamo inizialmente
dimostrare che 0 + 0 = 0, tramite l’assioma AF3, sostituendo 0 al posto di x.
Facciamo ora vedere che

(∀x.(0 + x = x) ⇒ (0 + S(x) = S(x))) (7.1)

Dall’assioma AF4, sostituendo al posto 0 al posto di x e x al posto di y si ottiene

0 + S(x) = S(0 + x)

Se si pone come ipotesi che 0 + x = x, allora si ottiene 0 + S(x) = S(x) e quindi


per deduzione la (7.1). Perciò dall’assioma AF7 con α ≡ 0 + x = x e usando
due volte il modus ponens si ottiene l’asserto.
E’ possibile pensare che + e · siano funzioni sui numerali (numeri interi):
se m e n sono numeri, l’espressione m + n denota quell’unico numero s tale
che AF ` m + n = s, mentre m · n denota quell’unico numero p tale che
AF ` m · n = p. Ovviamente accade proprio che s = m + n e p = m · n. Questo
concetto sarà chiarito meglio nella sezione 7.4.
AF ha molte proprietà di N. Infatti valgono le seguenti
Proposizione 25 La somma + e il prodotto · sono associativi e commutativi.
La somma è distribuitva rispetto al prodotto. 1 è l’elemento neutro del prodotto.
Vale la legge di annullamento del prodotto.

In generale presi un termine chiuso t di AF , che é un’espressione i cui ope-


randi sono proprio numerali, si puó vedere che esiste uno e un solo numero n
tale che AF ` t = n.

73
7.3 Introduzione al primo teorema di Gödel
Queste note danno una breve idea della dimostrazione del famosissimo (primo)
teorema di incompletezza di Gödel. Questo teorema è stato dimostrato da Gödel
in suo famoso articolo pubblicato nel 1931 e da allora sono stati scritti “fiumi
di inchiostro” su questo risultato.
Non si entrerà in merito alle questioni filosofiche e alle varie implicazioni di
carattere non prettamente matematico che sono state discusse in modo anche
esasperato (si può citare ad esempio che qualcuno scrisse che con il teorema di
Gödel la matematica non ha più senso). Per un’introduzione ai vari problemi
connessi con il teorema di Gödel si rimanda all’amplissima letteratura esistente
in merito.
Essenzialmente il primo teorema di incompletezza ci dice che nell’aritmetica
(e in tutti i sistemi formali sufficientemente potenti) esistono degli enunciati
indecidibili G, cioè in cui non si può dimostrare né G né ¬G.
La dimostrazione di Gödel si basa sul paradosso del mentitore. Una frase del
tipo “questa affermazione è falsa” (oppure “io sto mentendo”, ecc.) costituisce
un esempio di proposizione a cui non si può attribuire alcun valore di verità.
Infatti se la frase fosse vera, allora non potrebbe essere vero quello che afferma,
cioè sarebbe falsa. D’altro canto se la frase fosse falsa, allora non sarebbe vero
ciò che afferma e quindi dovrebbe essere vera.
Per ricreare una situazione simile all’interno di AF bisogna definire un enun-
ciato G che afferma la propria indimostrabilità (che è l’equivalente sintattico del-
la falsità). Esistono molti dettagli tecnici per arrivare alla definizione di questo
enunciato.
Innanzitutto deve essere definito un processo di “aritmetizzazione della sin-
tassi”: le formule e le dimostrazioni devono essere rappresentate tramite numeri
in modo da consentire la definizione di formule che “parlano” di altre formule o
di dimostrazioni.
Un secondo passo è quello di rappresentare all’interno di AF le funzioni che
servono a verificare se una sequenza di formule è una dimostrazione e quindi a
effettuare manipolazioni simboliche di formule. In pratica per ottenere questo
risultato si devono rappresentare molte funzioni ricorsive.
Tramite i primi due passi si è in grado di definire formule che parlano della
dimostrabilità di altre formule. E’ quindi necessario un terzo passo in cui una
formula possa citare sè stessa: la cosa non è del tutto ovvia. Infatti per creare
una formula G di AF che cita sé stessa, ad esempio affermando di avere una
certa proprietà, è necessario conoscere il codice di G e inserirlo all’interno di
G. Chiaramente queste due operazioni andrebbero fatte contemporaneamente,
perché prima della sostituzione non si sa quant’è il codice di G, mentre dopo la
sostituzione G non è più la stessa e quindi il suo codice è diverso da quello di
partenza.
Un esempio che può chiarire questo problema è il seguente. Si trovi un
numero intero n per cui l’affermazione “questa frase ha n sillabe” (sostituendo
a n il suo valore scritto in lettere) è corretta. Il numero n in questione è soluzione

74
dell’equazione
n = 8 + s(n)
in cui s(n) è il numero di sillabe del numero n espresso in italiano. La solu-
zione più piccola è 10, perché l’affermazione ”questa frase ha dieci sillabe” ha
realmente 10 sillabe, mentre per ogni n < 10 sarebbe falsa.
Cambiando l’affermazione in “questa affermazione in lingua italiana è com-
posta da n lettere” si capisce che non è del tutto ovvio trovare il valore di n
corretto o dimostrare almeno che tale numero esiste.
Si noti infine che i tre passi sono svolti all’interno di AF senza che sia
necessario aggiungere nuovi assiomi o ampliare il linguaggio. Inoltre il primo
passo è già stato affrontato nel capitolo precedente a proposito della proposizione
23 e in quanto tale sarà ritenuto come acquisito.

7.4 Rappresentabilità
Sia K una qualsiasi teoria del primo ordine ricorsiva, il cui linguaggio sia un’e-
stensione di AF e i cui assiomi comprendano quelli di AF. In particolare negli
esempi si userà solo AF, ma poiché i risultati valgono anche per teorie più ricche
di AF, tutti gli esempi si possono rileggere in una teoria K.
Inoltre se Q è una formula che ha come variabili libere x 1 , . . . , xn e t1 , . . . , tn
sono termini, allora si indicherà con Q(t1 , . . . , tn ) la formula che si ottiene
da Q sostituendo, per ogni i = 1, . . . , n, la variabile x i con il termine ti ,
cioè Q[x1 /t1 , . . . , xn /tn ]. Inoltre la formula originaria Q verrà denotata con
Q(x1 , . . . , xn ), mettendo in evidenza le sue variabili libere.

Definizione 33 Un predicato p : D → {0, 1}, ove D ⊂ Nm , è rappresentabile


in K se esiste una formula Qp di K avente m variabili libere x1 , . . . , xm tale
che per ogni r1 , . . . , rm ∈ N

p(r1 , . . . , rm ) = 1 ⇒ K ` Qp (r1 , . . . , rm )
p(r1 , . . . , rm ) = 0 ⇒ K ` ¬Qp (r1 , . . . , rm )

Ad esempio il predicato r1 ≤ r2 è rappresentabile in AF in quanto basta


prendere Q(x1 , x2 ) ≡ (∃x3 .x1 + x3 = x2 ); il predicato r1 |r2 é rappresentabi-
le con la formula Q(x1 , x2 ) ≡ (∃x3 .x1 · x3 = x2 . Infine il predicato P r(r) é
rappresentabile con la formula Q(x) ≡ (¬(∃x2 , x3 .(x2 + 2) · (x3 + 2) = x)),
in quanto se un numero non é primo si scrive come prodotto di due numeri
maggiori strettamente di 1 e cioé scrivibili come x 2 + 2.
Data una funzione f : Nm → N, ad essa si può associare in modo naturale
un predicato pf a m + 1 argomenti tale che f (~x) = y se e solo se pf (~x, y). pf
ha inoltre la proprietà che per ogni m–upla di numeri interi ~x

(∃y!.pf (~x, y))

Da questa semplice considerazione possiamo definire

75
Definizione 34 Una funzione f : D → N, ove D ⊂ Nm , è rappresentabile
in K se esiste una formula Qf di K avente m + 1 variabili libere x1 , . . . , xm , y
tale che per ogni r1 , . . . , rm , s ∈ N
f (r1 , . . . , rm ) = s ⇒ K ` Qf (r1 , . . . , rm , s)
e
K ` (∃!y.Qf (r1 , . . . , rm , y))

Ad esempio la funzione r(x) = d xe é rappresentabile in AF mediante la for-
mula Q(x, y) ≡ (y · y ≤ x) ∧ (S(y) · S(y) > x) ove il predicato > é ovviamente
anch’esso rappresentabile in AF.
Teorema 20 Tutte le funzioni ricorsive f : Nm → N, sono rappresentabili
in AF
Dim. Daremo alcuni cenni della dimostrazione. Per avere maggiori dettagli il
lettore puó consultare [3].
Innanzitutto é banale dimostrare che le funzioni di base sono rappresenta-
bili in AF. Infatti la funzione z(x) = 0 é rappresentabile con Q(x, y) ≡ (x =
x) ∧ (y = 0), in cui la sottoformula x = x serve solo perché Q deve avere x
come variabile libera. La funzione successore é rappresentabile con la formula
(m)
y = S(x). Infine la funzione proiezione πi é rappresentabile dalla formula
(x1 = x1 ) ∧ (x2 = x2 ) ∧ · · · ∧ (y = xi ) · · · ∧ (xm = xm ).

Se g : Nk → N é rappresentabile con la formula G(x1 , . . . , xk , Y ) e f1 , . . . , fk :


Nm → N sono rappresentabili, rispettivamente, con le formule F i (~x, y) allora la
funzione h ottenuta per composizione di g con f1 , . . . , fk é rappresentabile con
la formula
H(~x, y) ≡ (∃z1 , . . . zk .F1 (~x, z1 ) ∧ Fk (~x, zk ) ∧ G(z1 , . . . , zk , y))

Se p : Nm+1 → {0, 1} é un predicato rappresentabile con la formula P (~x, y), al-


lora la funzione h : Nm → N definita per minimalizzazione di p é rappresentabile
con la formula
M (~x, y) ≡ (P (~x, y) ∧ (∀z.(z < y) ⇒ ¬P (~x, z)))

Per quanto riguarda le funzioni definite per ricorsione si deve usare la cosiddetta
funzione β di Gödel che é in grado di rappresentare sequenze arbitrariamente
lunghe di numeri interi con due numeri interi, in modo simile alla funzione
[x0 , x1 , . . . , xm ] ma senza la necessitá di utilizzare l’elevamento a potenza (che
è definito anch’esso come funzione ricorsiva). 

Siamo cosı̀ riusciti a soddisfare anche il secondo passo per la definizione


dell’enunciato indecidibile.

76
7.5 Il primo teorema di Gödel
Innanzitutto, data una formula B, indicheremo con pBq il numerale ]B.
Il punto cruciale per soddisfare il terzo punto é il seguente risultato.

Teorema 21 (del punto fisso) Sia K una teoria in cui tutte le funzioni ri-
corsive siano rappresentabili. Per ogni formula E(x) esiste un enunciato C tale
che
K ` (C ⇔ E(pCq))

Dim. Sia d la funzione diagonale che, dato il codice di una formula B(x), resti-
tuisce il codice della formula B(pBq). Essendo d una funzione ricorsiva, esiste
per il teorema 20 una formula D(x, y) che rappresenta d in K.
Sia L(x) la formula (∀y.D(x, y) ⇒ E(y)) e sia m = ]L. Infine sia C = L(m).
Con alcuni semplici passaggi, che qui non vengono riportati, é possibile vedere
che in K si puó dimostrare C ⇔ E(pCq) 

Definizione 35 Una teoria K è consistente se non è possibile che

K`φ K ` ¬φ

per la stessa formula φ. Una teoria K è ω–consistente se per ogni formula B


avente come variabile libera x, se per ogni n ∈ N accade che K ` ¬B(n), allora
non può accadere che K ` (∃x.B)

Proposizione 26 Se K è ω–consistente, allora K è consistente.

Dim. Sia E(x) una formula con una variabile libera x e sia H = (E ∧ (¬E)).
Per ogni n ∈ N l’enunciato

¬H(n) ≡ (¬E(n)) ∨ E(n)

è l’instanza di una tautologia della logica proposizionale e quindi è sicuramente


dimostrabile in K. Per la ω–consistenza si avrà che in K non è dimostrabile
l’enunciato (∃x.H). Perciò K deve essere consistente, altrimenti tutti gli enun-
ciati sarebbero dimostrabili in K. 

Le ipotesi sulle teorie K per cui il teorema di Gödel è vero sono le seguenti

1. K deve essere ricorsiva

2. in K si deve dimostrare che 0 6= 1

3. in K si devono rappresentare tutte le funzioni ricorsive.

77
Prendiamo adesso il predicato P rf (x, y). Essendo ricorsivo esiste una for-
mula P con due variabili libere x e y tale che per ogni r, s, ∈ N accade che

P rf (r, s) = 1 ⇒ K ` P (r, s)
P rf (r, s) = 0 ⇒ K ` ¬P (r, s)

Sia E la formula (∀y.(¬P (x, y))). Per il teorema del punto fisso esiste un
enunciato G tale che
K ` G ⇔ (∀y.¬P (pGq, y))
Questo enunciato G afferma in pratica che “G non è dimostrabile”.

Teorema 22 (Primo teorema di incompletezza di Gödel) Se K soddisfa


le ipotesi 1,2 e 3, allora
(i) Se K è consistente, G non è dimostrabile in K
(ii) Se K è ω–consistente, ¬G non è dimostrabile in K

Dim. Innanzitutto sia g = ]G. Dimostriamo la (i). Se per assurdo G fosse


dimostrabile in K, allora
P rf (g, d) = 1
ove d è il codice della dimostrazione di G. Perciò in K sarebbe dimostrabile
P (g, d). Combinando K ` G e K ` G ⇔ (∀y.¬P (g, y)) si ottiene che

K ` (∀y.(¬P (g, y)))

e sostituendo al posto di y proprio il termine d avremo

K ` ¬P (pGq, d)

Perciò K sarebbe inconsistente in quanto sarebbe dimostrabile anche la nega-


zione di P (g, d).

Dimostriamo infine la (ii). Se per assurdo ¬G fosse dimostrabile in K avremo


che
K ` ¬(∀y.¬P (g, y))
cioè
K ` (∃y.P (g, y))
Poichè K è ω–consistente, K è anche consistente e quindi in K non è dimostra-
bile G. Quindi si avrà che P rf (g, n) = 0 per ogni n ∈ N e quindi

K ` ¬P (g, n)

e per la ω–consistenza in K non si dovrebbe poter dimostrare (∃y.P (g, y)), con-
trariamente a quanto mostrato prima. 

78
Per quanto riguarda AF, che ovviamente soddisfa le ipotesi del teorema di
Gödel, si noti che la formula G é vera in N e quindi AF non é in grado di
modellare adeguatamente il mondo dei numeri naturali.
Inoltre se ad AF si aggiungesse G come ulteriore assioma proprio si otter-
rebbe una nuova teoria AF 1 a cui si potrebbe riapplicare ancora il teorema di
incompletezza di Gödel, trovando un nuovo enunciato G 0 indecidibile, ma vero
in N. Ovviamente questo processo si puó svolgere un numero illimitato di volte,
creando una successione infinita di teorie AF i ognuna delle quali ammette N
come modello, ma per cui esiste un enunciato vero in N ed indecidibile.
Il teorema di Gödel si puó dimostrare, utilizzando una modifica dovuta a
Rosser, senza l’ipotesi di ω–consistenza, ma solo con l’ipotesi di consistenza.

7.6 Il secondo teorema di Gödel


La consistenza di AF é stata dimostrata tra gli altri, da Gentzen e da Schütte
utilizzando concetti esterni ad AF stesso, come ad esempio i numeri ordinali
denumerabili. E’ peró possibile dimostrare la consistenza di AF all’interno di
AF, cioé utilizzando solo concetti elementari, come gli usuali numeri naturali ?
Il secondo teorema di Gödel darà una risposta negativa a questa domanda.
Per le implicazioni di questo risultato si vedano le conclusioni alla fine di questo
capitolo.
Sia K una teoria con un insieme ricorsivo di assiomi e sia Con K l’enunciato
di K che afferma che K è consistente

ConK = ¬(∃x, y, z, t.P (x, y) ∧ P (z, t) ∧ N (x, z)

in cui N é la formula che rappresenta la funzione n che, dato il codice x di una


formula φ, assume come valore n(x) il codice della formula ¬φ.
In pratica ConK afferma che non esiste non è possibile dimostrare in K una
formula e il suo contrario.

Teorema 23 (Secondo teorema di incompletezza di Gödel) Se K è con-


sistente, allora non è possibile dimostrare ConK in K

Dim. Forniamo qui una dimostrazione non del tutto rigorosa di questo teorema.
Si prenda l’enunciato
W ≡ ConK ⇒ G
in cui G é l’enunciato di Gödel: W afferma che se K é consistente, allora G
non é dimostrabile. Essendo W proprio la implicazione (i) del primo teorema
di Gödel, si ha che K ` W in quanto è possibile riscrivere la dimostrazione di
questa implicazione all’interno di K stesso.
Se per assurdo fosse K ` ConK , si avrebbe per modus ponens K ` G, con-
trariamente alla stessa implicazione del primo teorema di Gödel. 

E’ possibile dimostrare in modo completamente formalizzato il secondo teo-


rema di Gödel facendo vedere che K ` W oppure utilizzando le condizioni

79
sulla dimostrabilità di Hilbert–Bernays, per maggiori chiarimenti si veda a tal
proposito [3].

7.7 I teoremi di Tarski e Church


Riportiamo in questo capitolo altri due risultati importanti strettamente legati
a questo argomento.
L’assioma AF 7 di AF é uno schema (ricorsivo) che comprende infiniti assio-
mi. E’ possibile però creare una teoria più debole dei numeri naturali, chiamata
sistema Q di Robinson, in cui AF 7 è sostituito dall’assioma
AF 70 (∀x.(x 6= 0) ⇒ (∃y.x = S(y)))
In questa teoria non si possono fare dimostrazioni per induzione e quindi
alcune proprietà fondamentali dell’aritmetica non possono essere dimostrate,
come ad esempio la commutatività della somma. Però è possibile rappresentare
in Q tutte le funzioni ricorsive. Dato che Q é formato da un numero finito di
assiomi propri vale l’ovvio risultato
Proposizione 27 Dato un enunciato φ, Q ` φ se e solo se
6
^
`( AFi ∧ AF70 ) ⇒ φ
i=1

Questa proposizione ci dice che il solo calcolo dei predicati è sufficiente a


trovare i teoremi di Q, a differenza di quanto avviene con AF, in cui essendo
infinito l’insieme degli assiomi non è possibile ottenere un risultato equivalente.
Proposizione 28 Se K è una teoria sul linguaggio AF consistente e in cui
è rappresentabile la funzione diagonale d (introdotta nel teorema 21) allora la
proprietà n ∈ T hm(K) non è rappresentabile in K
Dim. Supponiamo per assurdo che n ∈ T hm(K) sia rappresentabile dalla for-
mula T (x), cioé
n ∈ T hm(K) ⇒ K ` T (n)
n 6∈ T hm(K) ⇒ K ` ¬T (n)

Per il teorema 21 esiste un enunciato C tale che


K ` C ⇔ ¬T (pCq) (7.2)
Sia q = ]C. Se si suppone che K ` C, allora q ∈ T hm(K) e quindi K ` T (q).
Ma da 7.2 segue che K ` C ⇒ ¬T (pCq) e quindi K ` ¬T (q) e K non sarebbe
consistente.

Se invece K¬ ` C, q 6∈ T hm(K) e quindi K ` ¬T (q). Ma da 7.2 segue che


K ` ¬T (pCq) ⇒ C e quindi K ` C contrariamente all’assunto. 

80
Proposizione 29 Se K é una teoria di AF consistente in cui ogni funzione
ricorsiva é rappresentabile e in cui K ` 0 6= 1, allora T hm(K) non é ricorsivo

Dim. Se T hm(K) fosse ricorsivo, la relazione n ∈ T hm(K) sarebbe rappresen-


tabile in K, contrariamente alla proposizione precedente. 

Teorema 24 (di Church) L’insieme (dei codici) dei teoremi T del calcolo dei
predicati non è ricorsivo

Dim. Dalla proposizione precedente sappiamo che l’insieme dei teoremi di Q


non è ricorsivo. Se T fosse ricorsivo esisterebbe una funzione ricorsiva f T che
assume il valore 1 se il suo argomento n è il codice di un teorema e il valore 0
altrimenti. Perció T hm(Q) sarebbe a sua volta ricorsivo, in quanto per vedere
se n è il codice di un teorema φ di Q basterebbe vedere se f T (m) = 1, in cui m
V6
è il codice di ( i=1 AFi ∧ AF70 ) ⇒ φ. 

Chiudiamo questa sezione citando l’altro risultato importante

Teorema 25 (di Tarski) L’insieme delle formule vere in N non è rappresen-


tabile in AF e quindi non è ricorsivo.

7.8 Conclusioni
Innanzitutto i teoremi di Gödel si applicano non solo alla teoria dell’aritmetica
formalizzata, ma a qualunque teoria “sufficientemente potente”. Ad esempio
per il primo teorema di incompletezza bastano le condizioni 1,2 e 3. Molte
teorie soddisfano queste condizioni, tra queste la più importante è la teoria
degli insiemi di Zermelo–Fraenkel, su cui originariamente era stato formulato il
teorema di Gödel.
La teoria degli insiemi era stata proposta come linguaggio di base di tutta
la matematica ed è tuttora utilizzata come strumento per la definizione dei
concetti elementari (insiemi e loro operazioni, relazioni, funzioni, ecc.).
La scuola formalista, il cui rappresentante massimo fu Hilbert, proponeva
di formalizzare tutta la matematica allora conosciuta all’interno della teoria S
degli insiemi in modo che ogni teoria matematica fosse descritta in modo as-
siomatico attraverso il semplice linguaggio degli insiemi. La teoria S doveva
essere dotata di un procedimento meccanico che, dato un enunciato φ, poteva
decidere con un numero finito di passi se φ è vero o falso. La ricerca di questa
procedura, il cosiddetto Entscheidungsproblem, era di estrema importanza per-
ché questa procedura sarebbe stata in grado, almeno dal punto di vista teorico,
di risolvere qualsiasi problema matematico. Ovviamente il lavoro del matema-
tico non sarebbe finito (ad esempio avrebbe comunque dovuto definire nuovi
concetti e teorie, proporre delle congetture e magari tentare di dimostrarle), ma
ogni disputa, ogni dubbio poteva essere fugato teoricamente attraverso questo
meccanismo.

81
Infine il programma della scuola formalista richiedeva che si doveva dimostra-
re la consistenza della teoria S in modo da evitare che fosse possibile ottenere
risultati contraddittori; per essere sicuri della fondatezza di questo risultato,
questa dimostrazione doveva essere svolta direttamente all’interno di S stessa.
I teoremi di Gödel e i risultati di Turing e di Church mostrano che il program-
ma di Hilbert era troppo ambizioso. Infatti il primo teorema di incompletezza e
il teorema della fermata di Turing danno una risposta negativa all’Entscheidung-
sproblem: esistono proposizioni indecidibili all’interno della teoria degli insiemi
(e all’interno dell’aritmetica) ed esistono problemi che non possono essere ri-
solti mediante procedimenti meccanici, come le macchine di Turing. Il secondo
teorema di incompletezza di Gödel invece mostra come non sia possibile dimo-
strare la consistenza di una teoria all’interno della teoria stessa, se tale teoria è
sufficientemente potente, come ad esempio la teoria degli insiemi.

82
Bibliografia

[1] M. Davis, Weyuker. Computability, Complexity, and Languages. Academic


Press, Inc.1983

[2] H.B. Enderton. A Mathematical Introduction to Logic. Harcourt Academic


Press, 2001

[3] E. Mendelson. An Introduction to Mathematical Logic. Chapman and Hall,


1997
[4] C. Papadimitriou. Computational Complexity. Addison–Wesley, 1994

83

Potrebbero piacerti anche