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 è xn1 xn r xn Se r fosse costante di anno in anno ⇒ legge dinamica lineare: xn1 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 ⇒ xn1 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 xn1 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