La Matematica e il Computer
• Il computer sa la matematica?
Sa soltanto valutare le espressioni
ed eseguire le istruzioni previste dal
progettista e specificate dal programmatore.
• Fino a dove può arrivare il computer?
Non può calcolare qualsiasi funzione:
le sue possibilità sono limitate,
come pure quelle della mente umana!
1
• In che cosa effettivamente ci aiuta il computer?
Vince in capacità di memoria e in velocità:
può svolgere compiti praticamente impossibili
con carta e matita. Pertanto è indispensabile
in quelle elaborazioni che comportano molti
calcoli con numeri di tante cifre, ad esempio:
nella risoluzione numerica (approssimata) di
complessi sistemi di equazioni, come i
modelli matematici per le previsioni del tempo;
ma anche per giocare a scacchi
(senza pretendere un’analisi esauriente)
o per memorizzare grandi quantità di dati e
gestirli in modo efficiente (si pensi, ad esempio,
alla rapidità di reperimento di dati in rete …)
2
Tempo per comprimere un file di 178 MB:
dal Pentium 100 MHz (di una decina d’anni fa)
al Pentium 4 3.06 GHz (dell’anno scorso)
1100 s
53 s
3
• Qual è stato il contributo della matematica alla
nascita e all’evoluzione del computer?
Il computer è nato come macchina per calcolare
o per fare dimostrazioni;
diversi settori della matematica (oltre che della
fisica e dell’ingegneria) sono stati determinanti:
- algebra booleana (a due valori, 0 e 1)
- logica matematica (e linguaggi di
programmazione basati sulla logica)
- teoria della calcolabilità (funzioni calcolabili e
linguaggi funzionali ispirati al λ-calcolo)
- teoria della complessità computazionale …
… ma pure l’analisi dei processi cognitivi
ha contribuito!
4
In che cosa consiste l’informatica?
L’informatica è modellizzazione concettuale dei sistemi
in cui va organizzata l’informazione per renderne
possibile un trattamento automatico, in modo efficiente,
sicuro ed economico.
Oggetto dell’informatica è una parziale sostituzione di
un’attività umana con un’attività automatizzata, ossia
fatta da un automa.
Si può dire che ogni strumento informatico sia un
modello di parte del comportamento umano; compito
principale dell’informatico è dunque la costruzione di
questi modelli.
5
La macchina analitica di Babbage
con un “programma” di Ada Byron
La macchina analitica non ha alcuna pretesa di originare
qualche cosa, bensì può fare qualsiasi cosa che noi sappiamo
come ordinarle di eseguire.
(Ada Byron, 1843)
La teoria della calcolabilità (anni ’30)
Diverse formalizzazioni del concetto di computazione …
⇒ stessa nozione di funzione effettivamente calcolabile
6
Effettivamente = mediante un algoritmo, ossia un
procedimento di calcolo ben specificato, che può
essere eseguito da una macchina in modo
assolutamente deterministico
Funzione = relazione che fa corrispondere a ciascun
numero naturale (0, 1, 2, 3, … ad infinitum) o ancora
un numero naturale o “nulla” ()
Esempi:
“quadrato”
0 ↦ 0
1 ↦ 1
2 ↦ 4
3 ↦ 9
4 ↦ 16
...
“predecessore”
0 ↦ 
1 ↦ 0
2 ↦ 1
3 ↦ 2
4 ↦ 3
...
7
Sistema formale = assiomi + regole di inferenza
“Si può dare, descrivendolo in modo finito, un
sistema formale coerente da cui sia possibile
dimostrare ogni proprietà (o proposizione) che è
vera per i numeri naturali?”
Leibniz (’600):
Hilbert (1900):
Gödel (1931):
Turing (1936):
“Signori, calcoliamo!”
credo proprio che sia possibile,
cerchiamolo!
no, non si può!!!
(teorema di incompletezza)
esempio significativo di problema
indecidibile (halting problem)
8
Dimostrare che nessun metodo puramente meccanico può
risolvere un certo problema presuppone una definizione che
comprenda tutti i tipi di computazione.
Macchina di Turing ≡ moderno computer, ma con
memoria potenzialmente infinita
Esegue algoritmi, espressi mediante un opportuno linguaggio
di programmazione (completo); può essere programmata per
eseguire qualsiasi computazione, se accettiamo la
Tesi di Church (1936): ogni funzione che è calcolabile secondo
una nozione intuitiva di “procedura di calcolo” è anche
calcolabile mediante una macchina di Turing – quindi, secondo
una nozione formalizzata di procedura di calcolo (ossia, un
algoritmo).
9
Un linguaggio (imperativo) completo deve avere:
• istruzioni di lettura da input e di scrittura su output
• istruzioni di assegnamento (valutazione di espressioni e
memorizzazione dei risultati)
• “composizione” di istruzioni
• in sequenza
• in istruzioni di selezione
• in istruzioni di iterazione
Senza perdita di generalità, consideriamo soltanto gli algoritmi
che accettano, come dato in ingresso, la codifica di un qualsiasi
numero naturale (0, 1, 2, 3, …, arbitrariamente grande) e, se e
quando terminano, producono in uscita, come risultato del
calcolo, ancora la codifica di un numero naturale.
Nota: “errore” ⇒ ciclo infinito
10
Perché la memoria dev’essere – non realisticamente
– illimitata?
Per poter immagazzinare ed elaborare rappresentazioni
arbitrariamente lunghe.
Ogni calcolo che termina userà una quantità di memoria
certamente finita, ma in generale non sappiamo quanta ne
servirà…
Un calcolo che invece non termina potrebbe richiedere una
quantità di memoria infinita: in teoria, il computer potrebbe,
ad esempio, incrementare per sempre il valore di una variabile
(in realtà, invece, sorgerebbero problemi di overflow, dato che
la “lunghezza” della rappresentazione di un valore è prefissata
o comunque limitata dalla quantità di memoria fisicamente
disponibile).
11
Numerabilità effettiva degli algoritmi
(effettiva = fattibile mediante un algoritmo!)
• Alfabeto (finito): a b c … z 0 1 2 … 9 ; ( ) … + * =
Lo ordiniamo, e ordiniamo di conseguenza tutte le sequenze di lunghezza
finita costruibili con i simboli dell’alfabeto (queste sono in numero infinito)
• Esempio (minimale):
lunghezza
quantità
1
2
0
1
00
01
10
11
2
4
alfabeto di due soli simboli: 0 1
3
...
n
…
000
001
010
011
100
101
110
111
…
8
…
00…00
00…01
…
…
…
11…10
11…11
2n
…
12
Numerabilità effettiva degli algoritmi
Numeriamo (a partire da 0) soltanto le sequenze che sono
algoritmi, cioè che rispettano la sintassi del linguaggio scelto.
Questo procedimento è algoritmico, e ancora automaticamente
invertibile (per le particolari caratteristiche delle grammatiche
usate per definire la sintassi dei linguaggi di programmazione,
si può decidere in modo automatico se una sequenza la rispetta)
⇒ si può effettivamente calcolare una corrispondenza biunivoca
tra i numeri naturali e gli algoritmi definibili nel linguaggio scelto
⇒ quindi otteniamo gli algoritmi p0, p1, p2, …
Dati, risultati e algoritmi stessi: ciascuno di questi insiemi può
essere associato in modo esplicito e non ambiguo ai numeri
naturali!
13
Numerazione di tutti gli algoritmi
definibili nel linguaggio (completo) scelto
n:
pn:
p0
p1
p2
p3
p4
p5
p6
p7
…
0
1
2
3
4
5
6
7
…

3
1
0
0

7
0
…

3
0
1
0

1
1
…

3
1
4
1
1

4
…

3
0
9
1
1
2
9
…

3
1
16
0

13
16
…

3
0
25
1
1
47
25
…

3
1
36
0


36
…

3
0
49
1
1
29
49
…
…
…
…
…
…
…
…
…
…
Esistenza di un’infinità non numerabile di funzioni non calcolabili
p?
1
4
7
8
2
21
3
…
17
Questa riga non sta nella tabella: quindi la funzione che le
corrisponde non è calcolata da alcun algoritmo!
14
Un esempio concreto di funzione non calcolabile:
l’indecidibilità del problema dell’arresto
Non può esistere un algoritmo (cioè un programma software)
che, presa la codifica di un algoritmo p arbitrario e di un input
w pure arbitrario, decide se p termina su w.
(Turing, 1936)
Una conseguenza di questo teorema, tra le tante:
non c’è speranza di risolvere in via automatica il problema
della verifica della correttezza (a livello semantico) di un
programma software arbitrario.
Non si può certo provarlo su ogni input: oltre che impossibile,
bisognerebbe conoscere già tutti i risultati!
Esistono metodi (laboriosi) per dimostrare la correttezza di un
programma, che coinvolgono l’opera della mente umana …
15
Casualità come incomprimibilità
Qual è la probabilità che la macchina si arresti, facendole
eseguire un programma scelto a caso su un input pure scelto
a caso?
Chaitin (anni ’70) chiamò Ω questa probabilità, e dimostrò che
Ω è un numero (maggiore di 0 e minore di 1) irrazionale e non
calcolabile: quindi è casuale nel senso che l’informazione in
esso contenuta non può essere “compressa” in un algoritmo
(di lunghezza finita) in grado di ricostruirla!
Non si può conoscere nessuna sottosequenza delle cifre di Ω
in tempo finito; se si conoscessero anche poche migliaia delle
sue prime cifre, si avrebbe modo di verificare finalmente tante
affermazioni che, se fossero false, potrebbero essere refutate
in un numero finito di passi – come, ad esempio, la famosa
congettura di Goldbach …
16
La congettura di Goldbach (1742)
Ogni numero pari > 2 può essere espresso come somma di
due numeri primi.
I numeri primi sono quei naturali maggiori di 1 che sono
divisibili (con resto nullo) soltanto per 1 e per sé stessi:
2, 3, 5, 7, 11, 13, 17, 19, 23, …
4=2+2
6=3+3
8=3+5
10 = 3 + 7 = 5 + 5
…
17
Problemi (risolubili) trattabili o intrattabili
• Problemi risolubili in tempo polinomiale:
esiste almeno un algoritmo risolutivo che richiede
tempo polinomiale nella dimensione del problema,
quindi possono essere risolti in modo efficiente.
Esempio: ordinare una sequenza arbitraria di n numeri naturali;
esistono diversi algoritmi che richiedono un tempo d’esecuzione
della forma an2 + bn + c, ma anche algoritmi più efficienti …
• Problemi intrinsecamente esponenziali (di fatto intrattabili):
qualsiasi algoritmo risolutivo richiede un tempo che
dipende almeno esponenzialmente dalla dimensione
del problema.
Esempio: (banale) stampare tutti gli anagrammi di una parola;
(meno banale) analizzare il gioco della dama n × n.
18
Il problema del commesso viaggiatore
4 tour possibili:
(1, 2, 5, 6, 3, 4, 1)
(1, 4, 3, 2, 5, 6, 1)
(1, 2, 5, 6, 4, 3, 1)
(1, 3, 2, 5, 6, 4, 1)
con costo 34;
con costo 34;
con costo 35;
con costo 42.
Uno dei primi due indifferentemente
(o il suo “rovescio”) costituisce la
soluzione di questo particolare
problema.
Non si sa se sia intrinsecamente esponenziale, ma finora non
si è trovato alcun algoritmo efficiente per risolverlo in generale!
19
Esempi di problemi equivalenti al commesso viaggiatore
• Problema decisionale del commesso viaggiatore:
dato un grafo come sopra e dato un intero positivo k,
stabilire se il grafo contiene un tour di costo ≤ k
(è immediato provare che si “riduce” al precedente,
assai più complicato dimostrare il viceversa!)
• Problema decisionale delle equazioni diofantine quadratiche:
dati tre interi positivi a, b e c, stabilire se esistono due
interi positivi x e y tali che ax2 + by = c
• Problema decisionale dell’imballaggio (bin packing):
dati i pesi a1, …, an e dati k contenitori, ciascuno di
capacità massima c, stabilire se i pesi possono essere
ripartiti nei k contenitori in modo che la somma dei pesi
in ognuno di essi sia ≤ c
20
Problema di ottimizzazione dell’imballaggio
Dati a1, …, an e c come sopra, ripartire i pesi nel minimo
numero di contenitori (senza superarne la capacità massima).
Può essere ridotto (in tempo polinomiale) al problema
decisionale, per cui i due problemi sono ugualmente difficili.
Si presenta spesso nella realtà, in una varietà di forme:
• tagliare una serie di tubi di varie lunghezze da un numero
minimo di tubi di lunghezza standard
• registrare una serie di brani musicali di durata variabile sul
minimo numero di dischi di stessa capacità
Strategia sub-ottima: ordinare i pesi dal più grande al più
piccolo e poi assegnarli, in quest’ordine, ciascuno al primo
contenitore adatto a contenerlo.
21
Ritorniamo ai numeri primi …
Il più grande numero primo conosciuto si può scrivere come
224˙036˙583 – 1
(espresso in notazione decimale richiede 7˙235˙733 cifre)
Test APRCL (Adleman, Pomerance, Rumely, Cohen, Lenstra):
è un test di primalità deterministico, generale, non basato sulla
fattorizzazione, che ha complessità tempo “quasi” polinomiale.
“Piccolo” teorema di Fermat (1640): se p è un numero primo,
allora, per ogni naturale b non multiplo di p, il numero b p – 1 – 1
è multiplo di p, ossia è divisibile (con resto nullo) per p.
Esistono infiniti pseudoprimi assoluti (che inficiano il “test di
Fermat” per ogni base b); il più piccolo è 561 (Carmichael, 1910).
22
Marin Mersenne (1588-1648)
Pierre de Fermat (1601-1665)
23
Numeri di Mersenne
Mn = 2n – 1
Mn è primo per n = 2, 3, 5, 7, 13, 17, 19, 31, 67, 127 e 257,
ed è composto per ogni altro n < 257
(Mersenne, 1644)
5 errori: M67 e M257 non sono primi; M61, M89 e M107 lo sono
(il successivo primo di Mersenne, M521, un numero di 157
cifre decimali, è stato scoperto soltanto nel 1952!)
Test di Lucas-Lehmer: test di primalità specifico per i numeri
di Mersenne, più veloce di quelli generali.
M67 non è primo (Lucas, 1876); ma quali sono i suoi fattori?
24
Il problema della fattorizzazione
267 – 1 = 147˙573˙952˙589˙676˙412˙927
= 193˙707˙721 × 761˙838˙257˙287
(Cole, 1903)
Il problema è vecchio di millenni… Sono stati messi a punto
raffinati procedimenti di fattorizzazione (Kraitchik, Pomerance,
Pollard), a partire da un semplice metodo dovuto a Fermat.
Ma la loro complessità computazionale è incomparabile con
quella dei test di primalità: allo stato attuale, il problema della
fattorizzazione sembra essere intrinsecamente più difficile!
Il mese scorso è stato calcolato un fattore (di 53 cifre decimali)
di M971 (di 293 cifre decimali), che era il più piccolo numero di
Mersenne del quale non si conoscevano fattori (pur essendo
noto da oltre mezzo secolo che non è primo)!
25
Crittografia
Fino agli anni ’70, tutte le tecniche di scrittura segreta erano
simmetriche ⇒ stessa “chiave” per cifrare e decifrare ⇒
problema di distribuzione (della chiave): ciascun destinatario
deve poter trasmettere la chiave per cifrare, in condizioni di
sicurezza, a tutti i potenziali mittenti.
1975-77: sistemi a chiave asimmetrica ⇒ due chiavi distinte:
una usata per cifrare (chiave pubblica) e un’altra usata per
decifrare (chiave privata).
Sistema RSA (Rivest, Shamir, Adleman): funzione invertibile
basata sul concetto di modulo; ciascun destinatario sceglie
una coppia di numeri primi abbastanza grandi e divulga il loro
prodotto: la segretezza dei messaggi a lui inviati dipenderà
dall’eventualità che nessuno riesca a scomporre il numero
pubblicato nei suoi due fattori primi.
26
Il sistema a chiave asimmetrica RSA
• Destinatario:
sceglie p e q primi (grandi) e calcola N = p∙q;
sceglie k, che sia primo col prodotto (p – 1)∙(q – 1);
ricava d dalla formula k∙d ≡ 1 (mod (p – 1)∙(q – 1))
⇒ chiave pubblica = (N, k); chiave privata = d
• Mittente:
trasforma il messaggio da inviare in un numero M (0≤M<N);
calcola il crittogramma da inviare: C = Mk mod N
(sfruttando l’aritmetica modulare, non occorre calcolare Mk)
• Destinatario:
decifra il crittogramma ricevuto mediante la formula inversa
M = Cd mod N
⇒ il sistema RSA fonda la propria sicurezza sulla presunta
intrattabilità del problema della fattorizzazione per N grande
27
Esempio di funzione che calcola il crittogramma
p = 11; q = 17 ⇒ N = 187; k = 7 ⇒ C = M7 mod 187
28
Il teorema dei quattro colori
Quanti colori sono sufficienti per colorare una qualsiasi carta
geografica in modo tale che due regioni adiacenti abbiano
sempre colori diversi?
(Guthrie, 1852)
⇒ 3 colori
non bastano!
5 colori bastano sempre
(Heawood, 1890)
Anche 4 colori bastano sempre (Appel e Haken, 1976,
con l’impiego determinante del calcolatore!)
29
L’analisi dei sistemi dinamici complessi
L’insieme di Mandelbrot, approssimato dalla regione in nero.
30
Modello di Verhulst (metà ’800)
Modello di sviluppo di una popolazione con tasso di crescita variabile
Il tasso di crescita durante l’anno (n +1)-esimo è
xn1  xn
r 
xn
Se r fosse costante di anno in anno ⇒ legge dinamica lineare:
xn1 
1  r  xn
Si avrebbe una crescita esponenziale, infatti:
x1 
1  r  x0
x3 
1  r  x2
x2 

1  r 
3
x0
1  r  x 1
…

1  r 
xn 
2
x0
1  r  x0
n
31
Modello di Verhulst (continuazione)
Modello di sviluppo di una popolazione con tasso di crescita variabile
Verhulst propose una legge che tiene conto di una quantità massima
possibile di popolazione X ; il tasso di crescita dipende dalla quantità
di popolazione ed è
xn 

con r costante > 0
r 1  

⇒
xn1

 xn 
 1  r 1   xn
X 


X 
⇒ xn1
r 2
 1  r  xn  xn
X
1 r
X
r
allora la popolazione si evolverà fino a stabilizzarsi sulla quantità X.
Supponendo di non partire con x0 = X (che è un punto fisso della
trasformazione, l’altro è 0), proviamo ad aumentare il parametro r …
Si tratta di una legge dinamica non lineare. Se r < 2 e x0 
32
Comportamento “a regime” al variare di r
Il diagramma grande riporta i valori tra i quali x oscilla a regime, al variare del
parametro r (in ascissa) da 1.9 a 3.0; quello piccolo rappresenta un dettaglio
(ingrandito) del primo, per illustrare l’“autoriproduzione”. (Qui X = 1.)
33
Che cos’è un oggetto (con dimensione) frattale ?
Peano (1890):
von Koch (1906):
“curva” continua (di lunghezza infinita)
che passa per tutti i punti di un quadrato
“fiocco di neve” o “isola di Koch”
…
Area finita (1.6 volte l’area del triangolo iniziale), perimetro infinito!
Hausdorff (1919): un oggetto ha dimensione d se è costituito da
N d parti simili originate da una suddivisione lineare in N parti
⇒ N = 3, N d = 4 ⇒ 3d = 4 ⇒ d = 1.261859507…
34
Frattali invarianti per trasformazioni non lineari
Mandelbrot (1967): “Quanto è lunga la linea costiera della
Gran Bretagna?”
Ripresa degli studi di Julia e Fatou (1920) sulla legge dinamica
xn1 
2
xn
 c
(qui le x e la costante c denotano punti del piano …)
Un punto c appartiene all’insieme di Mandelbrot se e solo se,
partendo con x0 = 0 (origine del piano), xn non diverge
(ciò significa che xn non esce mai dal cerchio di raggio 2
centrato nell’origine: se uscisse, “fuggirebbe” verso l’infinito …)
35
Uno sguardo all’insieme di Mandelbrot …
• è strettamente collegato con il comportamento di tutti i
processi dinamici della forma suddetta
• è connesso, cioè “costituito da un solo pezzo”
• ha come “contorno” un frattale di dimensione 2, molto bello
e complicato …
Un oggetto frattale di questo tipo rispecchia nello spazio la
complessità del comportamento dei sistemi caotici nel tempo,
e la sua osservazione ravvicinata può dare esiti sorprendenti!
Notevole è già il fatto che le immagini che ora vedremo siano
state generate da una formula piuttosto semplice …
L’analisi dei sistemi complessi è possibile grazie alla
simulazione della loro dinamica mediante calcolatore.
36
Conclusione …
La matematica è al tempo stesso madre e
figlia dell’informatica:
se da un lato l’informatica ha fornito alla
matematica potenti mezzi sia di calcolo sia –
più in generale – di espressione,
dall’altro essa trova nella matematica e nella
logica la ragione, la causa teorica del suo
stesso potenziamento.
(C. Böhm)
37