Questo è il seguito del blog Alan Turing e i suoi alacri castori, del 30 novembre 2004.
Cominciamo con sei semplici esempi, utilizzando uno pseudocodice, che dovrebbe essere di facile comprensione per tutti.
- Esempio 1 -
|
input N; x = N; while x < 1000 print(x); x = x+1; end print(x); |
entra N a x viene assegnato il valore N finché x è minore di 1000 scrivi x aumenta x di 1 fine while scrivi x |
Il programma P1 dell'esempio 1 si ferma, ovviamente, per qualsiasi input N. Se N è maggiore o uguale a 1000, P1 non entra nel ciclo while, scrive N e si ferma. Se x è minore di 1000, P1 scrive N, N+1, N+2, ..., 1000 e si ferma. Per decidere che cosa fa P1 è sufficiente leggere il listato. In questo caso inoltre è anche possibile (e immediato) calcolare a priori il numero dei passi che farà il programma prima di fermarsi.
- Esempio 2 -
|
input N; x = N; while x < 1000 print(x); x = x-1; end print(x); |
entra N a x viene assegnato il valore N finché x è minore di 1000 scrivi x diminuisci x di 1 fine while scrivi x |
Il listato di P2 è identico a quello di P1, a parte un cambiamento di segno. Anche in questo caso chiunque può prevedere che cosa farà P2 ricevendo in input N: se N è maggiore o uguale a 1000, P1 non entra nel ciclo while, scrive N e si ferma; se invece N è minore di 1000, P1 comincia a scrivere N, N-1, N-2, ... e non si ferma più.
- Esempio 3 -
|
input N; x=N; while !isprime(3+15x) x=x+1; end print(x) |
entra N a x viene assegnato il valore N finché 3+15x non è primo aumenta x di 1 fine while scrivi x |
Per il programma P3 occorrono un minimo di conoscenze matematiche. Se x è 0, 3+15x vale 3, che è primo. Per qualsiasi altro valore di x, 3+15x è divisibile per 3 ed è diverso da 3, e quindi non è primo. Allora se P3 riceve un numero N non positivo, si fermerà non appena x avrà raggiunto il valore 0, e scriverà 0. Se N è positivo, P3 non uscirà mai dal ciclo while.
- Esempio 4 -
|
input N; x=N; while !isprime(2+15x) x=x+1; end print(x); |
entra N a x viene assegnato il valore N finché 2+15x non è primo aumenta x di 1 fine while scrivi x |
Nel caso di P4, si osserva subito una differenza sostanziale con P3: nella espressione 2+15x i numeri 2 e 15 sono coprimi, non hanno fattori comuni al di fuori di 1. Per x = 0, 1, 2, 3, 4, 5 ... 21 si ottengono i 22 interi:
2,17,32,47,62,77,92,107,122,137,152,167,182,197,212,227,242,257,272,287,302,317nella quale sono primi i seguenti 10:
2,17,47,107,137,167,197,227,257,317Evidentemente al crescere di x ci saranno percentualmente meno primi, ma è difficile pensare che ad un certo punto il rubinetto si chiuda, e non si incontri mai più un primo nella sequenza!
Chiunque scommetterebbe che, per qualsiasi N in input, P4 si fermerà dopo un certo numero di passi. Credo insomma che punteremmo tutti sulla verità della proposizione:
Per ogni N positivo esiste un x maggiore o uguale a N tale che 2 + 15 x è primoMa siamo certi di vincere?
Nel 1837 Dirichlet dimostrò proprio questo risultato:
Dati a, b coprimi nella sequenza aritmetica a, a + b, a + 2b, a + 3b, ... esistono infiniti primiDunque P4 si fermerà sempre, per qualsiasi N. Ma questa certezza risiede unicamente nella dimostrazione del citato teorema di Dirichlet, e si tratta di una dimostrazione assai difficile, certamente impossibile per la gran parte di coloro che si trovassero ad esaminare il listato dell'esempio 4, per deciderne l'arresto in tempi finiti.
Inoltre non è prevedibile il numero dei passi che P4 eseguirà prima di fermarsi, cioé la differenza tra Il numero N in input e il numero x che P4 scrive quando termina. Per esempio si ha:
N = 10 100 1000 10000 100000 1000000 x = 11 107 1001 10005 100003 1000001- Esempio 5 -
|
input N; if N < 2 return; end p=prime(N); x=1; while mod(x2,p)!=2 x=x+1; end print(x); |
entra N se N è minore di 2 termina fine if p diventa l'N-esimo primo a x viene assegnato il valore 1 finché x2 diviso per p non dà resto 2 aumenta x di 1 fine while scrivi x |
P5 cerca di risolvere (con la forza bruta) l'equazione
[E] x2 = 2 (mod p)dove p è l'N-esimo numero primo (si esclude il caso banale N = 1, cioé p = 2).
P5 chiama il programma prime, passandogli 4 come argomento p = prime(4) prime calcola i primi in sequenza (2, 3, 5, 7, 11, ... ) e restituisce il quarto, dunque p = 7 x viene inizializzato a 1 si calcola il resto r della divisione di x2 per 7 si verifica se r vale 2 se vale 2 si esce dal loop while e si scrive la soluzione x altrimenti si incrementa x di 1 e si ricomincia: 12 = 1, resto 1 22 = 4, resto 4 32 = 9, resto 2 soluzione x = 3Chiaramente, poiché lavoriamo modulo p, tutto si ripete ogni p passi: pertanto se nel ciclo while x arriva a p senza che si sia trovata una soluzione, questa soluzione non esiste e P5 non si fermerà mai.
In questo caso, al contrario dell'esempio 4, l'intuito aiuta poco. Facciamo qualche esperimento. Consideriamo i 22 primi con N che va da 1000 a 1021. Nella tavola sottostante, nella prima colonna si trova N, nella seconda prime(N), nella terza sì o no a seconda che 2 sia un quadrato modulo p o meno, nella quarta - solo in corrispondenza dei sì - la soluzione (minima positiva) della equazione [E]:
[T] 1000, 7919, sì, 89 1001, 7927, sì, 3750 1002, 7933, no, 1003, 7937, sì, 126 1004, 7949, no, 1005, 7951, sì, 1476 1006, 7963, no, 1007, 7993, sì, 3338 1008, 8009, sì, 3820 1009, 8011, no, 1010, 8017, sì, 1556 1011, 8039, sì, 2915 1012, 8053, no, 1013, 8059, no, 1014, 8069, no, 1015, 8081, sì, 799 1016, 8087, sì, 3553 1017, 8089, sì, 2987 1018, 8093, no, 1019, 8101, no, 1020, 8111, sì, 887 1021, 8117, no,E ora? Sareste disposti a scommettere 1000 euro che P5 non si ferma per N = 1022?
Con sufficiente pazienza e acume potremmo arrivare a formulare l'ipotesi che tutto dipende dal resto della divisione di p per 8 (p mod 8) in questo modo:
[Ipotesi G] se p mod 8 = 1 o 7 P5 si ferma se p mod 8 = 3 o 5 P5 non si fermaNaturalmente anche dopo moltissime prove, ci rimarrebbe sempre un piccolo dubbio. Non esisteranno poi da qualche parte un primo p della forma 8k+3 (o 8x+5) e un intero x tali che x2 mod p sia proprio 2?
In realtà la [Ipotesi G] è vera: è uno dei tanti risultati del giovane Gauss. Ancora una volta la certezza dell'arresto si basa su una non facile dimostrazione. Inoltre in questo caso non è nemmeno facile arrivare ad una ipotesi su quello P5 farà.
Anche dopo questa discussione, dato N, non si può direttamente prevedere se P5 si fermerà o meno, in quanto non si conosce alcun legame tra la posizione N di p = prime(N) nella sequenza dei primi, e il resto della divisione di p per 8.
Infine un'occhiata alla tavola [T] fa capire che non è nemmeno semplice prevedere a priori in quanti passi si ferma P5, quando si ferma (ovvero quanto è grande la soluzione minima positiva della [E]).
- Esempio 6 -
|
input N; if N < 1 return; end x=N; while x!=1 print(x); if mod(x,2)!=0 x=3x+1; else x=x/2; end end print(x); |
entra N; se N è minore di 1 termina fine if a x si assegna il valore N; finché x è diverso da 1 scrivi x; se x è dispari a x si assegna il valore 3x+1 altrimenti a x si assegna il valore x/2 fine if fine while scrivi x |
Il programma P6 genera una successione a(k) di interi, a partire da un seme a(0) = N:
dato a(k), si calcola a(k+1) così: se a(k) è pari allora a(k+1) = a(k)/2 se a(k) è dispari allora a(k+1) = 3 a(k) + 1Si noti che P6 si ferma se e solo se esiste un k tale che a(k) = 1.
Le successioni così generate sono dette successioni di Collatz.
Vediamo che accade per N = 230, 231 e 232:
| 230,115,346,173,520,260,130,65,196,98,49,148,74,37,112,56,28,14,7,22,11,34,17,52, 26,13,40,20,10,5,16,8,4,2,1 |
| 231,694,347,1042,521,1564,782,391,1174,587,1762,881,2644,1322,661,1984,992, 496,248,124,62,31,94,47,142,71,214,107,322,161,484,242,121,364,182,91,274, 137,412,206,103,310,155,466,233,700,350,175,526,263,790,395,1186,593,1780, 890,445,1336,668,334,167,502,251,754,377,1132,566,283,850,425,1276,638,319, 958,479,1438,719,2158,1079,3238,1619,4858,2429,7288,3644,1822,911,2734,1367, 4102,2051,6154,3077,9232,4616,2308,1154,577,1732,866,433,1300,650,325,976, 488,244,122,61,184,92,46,23,70,35,106,53,160,80,40,20,10,5,16,8,4,2,1 |
| 232,116,58,29,88,44,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1 |
Immaginiamo che ognuna di queste tre sequenze sia data dalle altezze (misurate a intervalli costanti) raggiunte da un aquilone ideale che procede il linea retta. Possiamo allora pensare al numero dei passi del programma come alla distanza dell'aquilone dalla origine. Supponiamo che il suolo sia ad altezza 1. Con queste convenzioni possiamo dire che;
Il primo aquilone è partito da altezza 230, ha raggiunto una altezza massima di 520 ed è tornato a terra a distanza 34.
Il secondo è partito da quota 231, è arrivato a quota 9232 e ha toccato il suolo a distanza 127.
Il terzo è partito da 232 ed è rimasto sempre sotto questa altezza, terminando la corsa a distanza 21.
La Congettura di Collatz asserisce che ogni aquilone giunge a terra in un numero finito di passi. Tecnicamente:
Il programma P6 termina sempre, per qualsiasi N positivo in input.Si è provato, con l'uso di calcolatori, che la congettura è vera per ogni N fino a 576460752303423488. Malgrado i notevoli progressi, sia sperimentali che teorici, nessuno sa al momento se la congettura sia vera o falsa. Dunque nessuno sa dire se, assegnato un intero positivo N qualsiasi, P6 si fermerà o meno ricevendo N come input.
La discussione fatta dovrebbe convincere, a livello di buon senso, che non potrà mai esistere un programma, chiamiamolo tra di noi SuperIntender, che svolga il seguente compito:
Presupposti: SuperIntender si occupa di programmi P scritti in un dato linguaggio, per esempio il C. Questi programmi, per ipotesi, ricevono come input un intero positivo N. Compito: SuperIntender riceve in input il listato di un programma P e un intero positivo N. SuperIntender esamina il listato, ...., ...., .... In un tempo finito, in tutti i casi, qualsiasi siano P ed N, SuperIntender si ferma e stampa (sempre correttamente): 1 se P si ferma quando riceve N in input, 0 se P non si ferma.Personalmente ritengo che si potranno avere programmi che rispondono correttamente in casi simili agli esempi 1, 2 e 3. Mi sembra molto improbabile che questo possa accadere per programmi dei tipi 4 o 5, perché si richiedono considerazioni e dimostrazioni complesse. Nel caso di programmi che facciano un lavoro simile a P6 (tipicamente la ricerca di cicli nella iterazione di funzioni) penso che un Intender non possa esistere.
Diceva Paul Erdös (non molti anni fa) che "La matematica odierna non è ancora pronta per questi problemi".
Queste però sono solo opinioni, e non dimostrazioni. Vogliamo ora provare formalmente che il problema dell'arresto è indecidibile (in altri termini: un SuperIntender non esisterà mai).
Per far questo dobbiamo ricordare alcune cose dal blog Alan Turing e i suoi alacri castori.
B(n) denota l'insieme delle macchine di Turing con n stati e due simboli. Esse sono in numero finito, precisamente:
(4n + 4)2nFacciamo ora partire le macchine appartenenti a B(n) sul nastro vuoto (pieno di blank), nello stato 1. Alcune di queste si fermeranno e altre no. Diciamo FERM(n) l'insieme delle macchine in B(n) che si fermano, e compiono quindi un numero finito di passi. Diciamo inoltre NFERM(n) il complementare di FERM(n) in B(n), cioé l'insieme delle macchine che, partendo sul nastro vuoto, non si fermano.
Data una macchina M che si ferma, diciamo s(M) il numero degli uno che sono sul nastro dopo che la macchina si è fermata. Poiché FERM(n) è finito, esiste il massimo degli s(M), con M che varia in FERM(n). Introduciamo la funzione di Rado:
Definizione
å(n) = max { s(M), M Î FERM(n) }
Nel blog sopra citato abbiamo dimostrato che la funzione di Rado å(n) non è computabile. Non ci sarà mai un programma che possa, per ogni n, cacolare å(n) in tempo finito. Alcuni valori però si possono calcolare. Attualmente å(n) è noto per n = 1, 2, 3, 4. Si noti che questi calcoli non si possono fare con un procedimento di forza bruta. Non si può prendere una macchina in B(4) e farla girare e basta, tanto per vedere se e come si ferma. Ovviamente se la macchina è un elemento di NFERM(n) non sapremo mai se si ferma o meno, solo dalla osservazione. Occorre scoprire diversamente se la macchina è di un tipo o dell'altro. Per esempio, come si è già osservato, se P5 non si ferma in N passi, non si ferma più. Una analisi di questo tipo, quando possibile, può far scoprire in un tempo finito che una macchina sta in NFERM(n). Oppure per una certa macchina si posssono sperimentalmente individuare dei patterns negli 1 che scrive e in seguito dimostrare che essi si ripeteranno all'infinito, provando così che appartiene a NFERM(n). E si possono escogitare tanti altri metodi. E' un lavoro che richiede molto ingegno. Forse troppo. Infatti stiamo per dimostrare che questo lavoro non può essere fatto per tutti gli interi n.Dimostriamo allora il nostro risultato fondamentale:
[Teorema] Se esiste un SuperIntender allora å(n) è computabile. Dimostrazione Chiamiamo S il SuperIntender che possediamo. Dato un n vogliamo calcolare å(n). Le macchine di Turing in B(n) sono binarie, quindi lo stato iniziale del nastro si può immediatamente codificare con un numero intero. Questo numero si interpreta come input dato alla macchina. Nel nostro caso l'input è 0, uguale per tutte le macchine. Si prende ora una macchina M e si passa ad S il listato di M e l'input 0. Per ipotesi S, in un tempo finito, ci dice se M sta in FERM(n) o in NFERM(n). Poiché B(n) è finito, in un ammontare finito di tempo veniamo a conoscere FERM(n). Ora prendiamo M in FERM(n) e la facciamo girare finché si ferma. Contiamo quanti 1 ci sono sul nastro: questo numero è s(M). Facciamo questo per tutte le macchine di FERM(n). Il massimo degli s(M) trovati è å(n). Quindi å(n) è computabile.Come immediato corollario otteniamo subito che non può esistere alcun SuperIntender e pertanto il problema dell'arresto è indecidibile.
In realtà noi abbiamo provato che è indecidibile il problema dell'arresto nell'insieme delle macchine di Turing binarie (con alfabeto che contiene 2 simboli) con input nullo. A maggior ragione è indecidibile il problema dell'arresto nell'insieme di tutte le macchine di Turing, con input arbitrario.
Ricordate le UTM, le Macchine di Turing Universali? Poiché una UTM può simulare qualsiasi altra macchina, è chiaro che per essa stessa il problema dell'arresto è indecidibile. Questo fatto ha alcune interessanti conseguenze di tipo epistemologico. John Conway dimostrò che nel gioco Life (di cui è lo scopritore) è possibile costruire una UTM. Da questo si può dedurre che nessun algoritmo può prevedere il destino di una generica configurazione iniziale. C'è chi vede in questo addirittura una forma di "libero arbitrio", anche se in Life di libero non c'è proprio nulla: ogni evento è rigorosamente determinato. Lo stesso Conway si spinge a chiedersi: "E' possibile, dato uno spazio di Life sufficientemente grande, inizialmente in uno stato casuale, che dopo un lungo periodo di tempo emergano animali intelligenti, autoreplicanti, e popolino certe parti dello spazio?".
E Paul Davis, nel libro "La mente di Dio" (Mondadori, 1993), a pagina 136 scrive:
Alla fin fine, malgrado tutta la loro potenza, anche le UTM sono Macchne di Turing a tutti gli effetti, hanno un certo numero di stati e lavorano con un alfabeto che contiene un numero finito di simboli. E' interessante chiedersi: esistono UTM piccole?
Pascal Michel, nel 2004, ha scritto un interessante survey sull'argomento. Ecco alcuni risultati:
Denotiamo con T(k,l) l'insieme delle macchine con k stati e l simboli. Sono state costruite UTM nei seguenti insiemi: TM(2,18) TM(3,9) TM(4,6) TM(5,5) TM(7,4) TM(19,3) TM(19,2)Dunque nell'insieme B(19) esiste una UTM! Questo notevole risultato è dovuto a Claudio Baiocchi (2001).
Ci sono anche piccole macchine di Turing (non universali) che simulano l'iterazione della funzione di Collatz. Esse sono l'analogo del programma P6 discusso sopra. Quelle attualmente note si trovano in:
TM(2,8) TM(3,5) TM(4,4) TM(5,3) TM(10,2)Quindi c'è una macchina (non universale) binaria con 10 stati (un elemento di B(10)) che calcola la sequenza di Collatz. Attualmente l'unico metodo noto per dimostrare la indecidibilità del problema dell'arresto di una data macchina M consiste nel provare che M è universale. Chi riuscisse a dimostrare la indecidibilità della Congettura di Collatz avrebbe, per la prima volta, trovato una strada diversa!
|
Srinivasa Aiyangar Ramanujan nacque il 22 dicembre 1887 nello stato di Tamil Nadu (India). Nel gennaio del 1898 entrò nella Town High School in Kumbakonam. In questo periodo capitò tra le sue mani il libro di G. S. Carr intitolato "Synopsis of elementary results in pure mathematics". Questo testo aiutò Ramanujan nella sua attività di matematico autodidatta. Già nel 1902 aveva trovato le formule risolutive delle equazioni di terzo e quarto grado. Dal 1904 si rivolse a ricerche più avanzate, come lo studio delle serie. Nel 1908 lavorava sulle frazioni continue. Malgrado il suo genio non riuscì a superare gli esami per entrare all'Università di Madras. Comunque, anche se non aveva alcun titolo di studio universitario, Ramanujan ottenne un impiego a Madras che gli consentì di proseguire le sue ricerche. Scrisse diverse lettere, contenenti alcuni dei suoi risultati, a tre matematici inglesi, tra i quali G. H. Hardy. Hardy fu l'unico a riconoscere l'importanza del lavoro che teneva tra le mani, e fece venire Ramanujan a Cambridge. Riuscirono a collaborare, anche se Ramanujan aveva un suo stile tutto particolare, del tutto non professionale. Purtroppo Srinivasa si ammalò gravemente nel 1919, morì l'anno seguente. Pubblicò alcuni splendidi lavori su riviste specializzate, ma lasciò al tempo stesso un tesoro matematico in una serie di quaderni di appunti. Si tratta di osservazioni e teoremi spesso non del tutto dimostrati. Grazie all'attività decennale (1985 - 1997) di Berndt e dei suoi collabolatori, i "Ramanujan's notebooks" sono stati in buona parte resi disponibili ai matematici (completi di dimostrazioni). Essi sono pubblicati dalla casa editrice Springer. |
Uno dei più famosi aneddoti della storia della matematica moderna narra che Hardy, recatosi a trovare Ramanujan in ospedale, tanto per dire qualcosa, osservò che il numero del taxi (1729) che aveva preso sembrava "piuttosto insulso". Al ché Ramanujan rispose immediatamente : "No Hardy, è un numero estremamente interessante: è il minimo intero che si può esprimere come somma di due cubi in due modi diversi!".
Come avrà fatto Ramanujan a vedere così immediatamente questo fatto? Personalmente condivido l'opinione di Littlewood: "ogni intero naturale era per Ramanujan un amico personale". Dei rapporti tra Hardy e Ramanujan si può leggere nello scorcio autobiografico di G. H. Hardy "Apologia di un matematico", ristampato nel 2002 da Garzanti. La vita del grande Ramanujan è narrata nel romanzo di Robert Kanigel "L'uomo che vide l'infinito", edito da Rizzoli (2003).
In effetti si ha:
1729 = 13 + 123 = 93 + 103Questo fatto era stato notato per la prima volta da Bernard Frénicle de Bessy (1605-1670).
In quello che è uno dei più bei libri di teoria dei numeri che siano mai stati scritti, "An Introduction to the Theory of Numbers", gli autori (G. H. Hardy e E. M. Wrigth) dimostrano che per ogni n positivo esiste almeno un intero esprimibile come somma di due cubi in n modi diversi. Pertanto:
Per ogni n esiste un minimo intero positivo che è somma di due cubi in n modi diversi. Questo intero viene chiamato Taxicab(n).Qui sotto c'è una tavola con i valori noti di Taxicab(n):
Taxicab(1) = 2 (ovvio) 2 = 13 + 13 Taxicab(2) = 1729 (Frénicle, 1657) 1729 = 13 + 123 1729 = 93 + 103 Taxicab(3) = 87539319 (Leech, 1957) 87539319 = 1673 + 4363 87539319 = 2283 + 4233 87539319 = 2553 + 4143 Taxicab(4) = 6963472309248 (Rosenstiel, Dardis and Rosenstiel, 1991) 6963472309248 = 24213 + 190833 6963472309248 = 54363 + 189483 6963472309248 = 102003 + 180723 6963472309248 = 133223 + 166303 Taxicab(5) = 48988659276962496 (David W. Wilson, 1997) 48988659276962496 = 387873 + 3657573 48988659276962496 = 1078393 + 3627533 48988659276962496 = 2052923 + 3429523 48988659276962496 = 2214243 + 3365883 48988659276962496 = 2315183 + 3319543La sequenza Taxicab(n) è la numero A011541 nella On-Line Encyclopedia of Integer Sequences.
Taxicab(6) non è noto, ma si sa che è compreso tra 1018 e 24153319581254312065344. Il limite inferiore 1018 è stato trovato da D.J. Bernstein nel 1998. Nel 2002 Randall L. Rathbun provò che 24153319581254312065344 è somma di due cubi in 6 modi diversi.
Torniamo al numero 1729. Un intero composto n si dice pseudoprimo sulla base a se n divide an-1 - 1. 1729 è il più piccolo intero che è pseudoprimo sulle basi 2, 3 e 5.
Un intero che sia pseudoprimo su tutte le basi possibili si chiama numero di Carmichael. 1729 è il terzo numero di Carmichael (i primi due sono 561 e 1105). La successione dei numeri di Carmichael è la A002997 nella On-Line Encyclopedia of Integer Sequences.
In www.mathpages.com/ si trova un'altra sorprendente proprietà del 1729. Se consideriamo il numero e, base dei logaritmi naturali, esattamente dalla cifra 1729-esima dopo la virgola si trova la sequenza 0719425863. Questa è la prima occorrenza, nella espressione decimale di e, di un blocco di 10 cifre tutte diverse!
Inoltre la somma delle cifre di 1729 è 19, e 1729 = 7 13 19, è divisibile sia per 19 che per 91.
Ken Ono, nell'articolo "Ramanujan, Taxicabs, Birthdays, Zipcodes, and Twists" (American Mathematical Monthly, 104, No. 10, 1997, pages 912-917), esamina diverse apparizioni del numero 1729, e delle sue permutazioni, nella vita stessa di Ramanujan. Sostiene insomma che le cifre 1, 7, 2, 9 hanno un particolare rilievo nella storia personale di Ramanujan. Seguiamo quanto Ken Ono dice.
Due permutazioni coinvolgono direttamente Bruce Berndt, che come si è detto sopra, ha dedicato molta parte della sua vita allo studio e alla divulgazione dei quaderni di Ramanujan. Sonja, la sorella più giovane di Bruce, è nata nel 1972. L'abitazione di Bruce è in Urbana, Illinois 61802-7219.
Cerchiamo connessioni più matematiche. In un articolo del 1916 Ramanujan scriveva:
"I numeri pari che non sono della forma x2 + y2 + 10 z2 sono i numeri 4s (16 t + 6). I numeri dispari che non sono di questa forma sembrano non obbedire ad alcuna legge. Tra essi si trovano: 3, 7, 21, 31, 33, 43, 67, 79, 87, 133, 217, 219, 223, 253, 307, 391"A seguito di estensivi calcoli all'elenco dei 16 interi di Ramanujan si sono aggiunti 679 e 2719. Un formidabile e recente risultato di W. Duke and R. Schulze-Pillot prova che gli interi dispari in questione sono in numero finito.
Potrebbe 2719 essere il più grande intero dispari che non si può scrivere nella forma x2 + y2 + 10 z2?Se volete affrontare questo problemino, chiedete aiuto a Srinivasa!
Ricordiamo, per concludere, che Ramanujan è vissuto nel periodo 1887-1920.
Comunicate problemi, soluzioni, novità, url interessanti, critiche, suggerimenti, domande, correzioni inviandomi una lettera!. Nel soggetto inserite 'mathblog'.
Come promesso nell'ultimo blog, facciamo ancora una visita alla OEIS (On-Line Encyclopedia of Integer Sequences) che, da un paio di settimane, ha superato le 100000 voci. Se clicchiamo su Welcome, troviamo:
Let's begin at once with an example of a sequence of great importance:
ID Number: A060843
Sequence: 1,6,21,107
Name: Busy Beaver problem: maximal number of steps that an n-state Turing
machine can make on an initially blank tape before eventually halting.
Comments: The function Sigma(n) (A028444) denotes the maximal number of tape
marks which a Turing Machine with n internal states and a two-way
infinite tape can write on an initially empty tape and then halt. The
function S(n) (the present sequence) denotes the maximal number of steps (shifts)
which such a machine can make (it needs not produce many tape marks).
Given that 5-state machines can compute Collatz-like congruential
functions (see references), it may be very hard to find the next term.
The sequence grows faster than any computable function of n, and so is
non-computable.
(.... seguono riferimenti ....)
Probabilmente non capiremo molto, di primo acchito. Forse la cosa più inquietante è che la sequenza è dichiarata non computabile. Eppure i primi quattro termini ci sono. Si può proseguire? E' solo un problema di potenza di calcolo, o c'è sotto qualcosa di più fondamentale?
Come può questa successione S(n) crescere più in fretta di qualsiasi funzione f(n) che io posso calcolare?
Procediamo con calma. Alan Turing, intanto. Chi era costui?
|
Alan Mathison Turing nacque a Paddington (Londra) nel 1912 e morì nei pressi di Manchester nel 1954, in circostanze poco chiare. Fu uno studente indisciplinato, che non piaceva agli insegnati sebbene in matematica vincesse tutti premi possibili. Amava molto la chimica, ma era disapprovato dai professori, perché seguiva per gli esperimenti una scaletta tutta personale. Studiava molte cose (per conto suo), dalla relatività alla meccanica quantistica. Nel 1928 strinse una forte amicizia con Christopher Morcom, un allievo dell'anno seguente. Finalmente poteva parlare di scienza con qualcuno! Purtroppo il ragazzo morì nel 1930, e questo avvenimeneto fu per Alan un colpo durissimo. Nel 1931 entrò al King's College di Cambridge. A Cambridge tutto fu più facile per lui, e Turing poté studiare i lavori di Russell e Von Neumann. Dopo la laurea nel 1934 seguì il corso di Max Newman sui fondamenti della matematica, nel quale si parlava dei lavori di Godel e Hilbert. Tra il 1936 e il 1937 ideò la macchina astratta che ora viene chiamata appunto "macchina di Turing", e descrisse un numero non computabile. Ottenne anche risultati importanti in teoria della probabilità e sulla funzione zeta di Riemann. Durante la guerra fu uno dei principali artefici della rottura del codice crittografico tedesco Enigma (si veda la biografia di Hodge). Lavorò in diverse discipline, comprese la chimica e la biologia. Ancora oggi è citato un suo articolo sulla morfogenesi. Alan Turing fu tra i primi ad occuparsi di intelligenza artificiale e fu uno dei fondatori della moderna teoria della computabilità. |
Vediamo ora in dettaglio che cosa è una macchina di Turing. Una macchina di Turing consta di un nastro illimitato nelle due direzioni, suddiviso in celle identiche adiacenti, e di una testina mobile. La testina può leggere e scrivere simboli nelle celle. Inoltre può spostarsi a destra o a sinistra. Il tempo è discreto: t = 0, 1, 2, ... Al tempo 0 la testina si trova in una data posizione iniziale. Quando parliamo di macchina di Turing con n stati intendiamo effettivamente dire che ci sono sono n+1 stati possibili: n stati ordinari numerati da 1 a n, più uno stato speciale che denotiamo con H (halt). Se la macchina perviene in questo stato, cessa ogni sua attività. Ma che cosa fa questa macchina? La macchina ad ogni istante t legge il simbolo x contenuto nella cella sulla quale è posizionata la testina. In funzione di x e dello stato s(t) in cui si trova fa tre cose:
L'insieme A dei simboli (o caratteri) che la macchina può leggere o scrivere contiene per ipotesi q elementi, che possono essere arbitrari (lettere o cifre della vostra tastiera, per esempio). In ogni caso A deve contenere un carattere speciale, detto blank. Quando la macchina scrive il carattere blank, cancella quello che c'è nella cella, la restituisce allo stato originario. In sostanza per noi il nastro vuoto è il nastro dove in ogni cella c'è il blank.
Denotiamo con Q l'insieme degli n stati ordinari, con QH l'insieme di tutti gli stati e con M l'insieme dei (due) possibili movimenti.
Con queste notazioni una macchina di Turing T è descritta completamente dalla funzione FT:
[1] FT : Q × A ---------> QH × A × MLa corrispondenza appena evidenziata tra le macchine di Turing e le funzioni [1] permette di contare quante sono le macchine di Turing con n stati. Ricordando che
[2] ci sono |B||A| funzioni tra l'insieme A e l'insieme B (dove |X| denota il numero di elementi di X)otteniamo subito che
[3] ci sono (2·q·(n+1))q·n macchine di Turing con n stati, su un alfabeto di q simboli.E' impossibile capire veramente un'idea matematica (e le sue conseguenze) senza fare degli esempi. Sicuramente Alan Turing trascorse molte ore con carta e penna (se non faceva tutto nella mente) per simulare il comportamento delle sue amate macchinette. Ora ci viene in aiuto il computer. Io ho utilizzato una bellissima applet creata da Suzanne Skinner. Potete trovarla qui con le istruzioni per l'uso.
Utilizzerò nel seguito le stesse convenzioni di Suzanne Skinner. Tutti i programmi per la macchina di Turing che seguono, girano effettivamente sulla sua applet.
[4] Un Turing-programma è una lista finita di quintuple r1, r2, r3, r4, r5 dove:
Utilizzando la [1] quanto detto si può riassumere in
FT(r1, r2) = (r3, r4, r5)Per definire completamente la funzione FT, e quindi la relativa macchina di Turing a n stati su un alfabeto di q simboli, occorre scrivere q · n quintuple. In certi casi però possiamo sapere a priori che, nel corso del calcolo, alcune coppie simbolo-stato non si presenteranno. Più in generale vogliamo che un Turing-programma sia accettato come valido indipendentemente dal numero di quintuple che contiene. Facciamo pertanto la seguente convenzione:
[5] Se al tempo t la macchina legge il simbolo u e si trova nello stato v e non esiste nel programma alcuna riga che inizia con u, v allora la macchina si ferma: non scrive nulla e non si sposta più.Cosideriamo per esempio il seguente Turing-programma:
[6] 1,_,1,_,>Questa istruzione suona così: "Se il nastro è vuoto e sono nello stato 1 allora lascio il nastro vuoto, rimango nello stato 1 e mi sposto a destra di una casella".
Esaminiamo ora attentamente questo programma:
[7] 1,_,2,1,< 2,_,3,1,< 3,_,4,1,< 4,_,4,1,> 4,1,H,1,<La macchina T deve avere almeno 4 stati e A deve contenere almeno 1.
Supponiamo che T parta nello stato 1 su nastro vuoto. Seguiamo il ragionamento di T:
Ci sono 5 transizioni. Alla fine sul nastro ci sono 4 uno e la testina è posizionata sull'uno più a sinistra.
Ovviamente nel programma il numero 4 non ha nulla di speciale, duque possiamo asserire che:
[8] Per ogni x intero naturale, esiste una macchina di Turing T(x) tale che T(x) ha x+1 stati e fatta partire su di un nastro vuoto termina la computazione lasciando x+1 uno sul nastro ed è posizionata sull'uno più a sinistra. (La macchina appena descritta è T(3))Le T(x) serviranno nel teorema centrale di questo Blog.
Probabilmente chi non ha mai visto prima queste cose penserà che si tratta di strumenti poco efficaci. Sembra complicato persino scrivere un Turing-programma che sommi due interi. L'idea di Turing invece era che le sue macchine sono in grado di eseguire qualsiasi calcolo. Detta così, è una affermazione alquanto imprecisa... Occorre precisarla, per poterla discutere.
Ci limiteremo intanto a calcolare i valori di funzioni f di N in N dove N è l'insieme dei numeri naturali.
Supporremo inoltre che in A ci siano soltanto due simboli, uno e blank.
Ecco ora la definizione precisa che ci serve:
[9] Diciamo che la funzione f : N -----> N è Turing-computabile se esiste una macchina di Turing T la quale, partendo posizionata sull'uno più a sinistra di x+1 uno consecutivi inseriti nel nastro vuoto termina la sua computazione in un numero finito di passi posizionata sull'uno più a sinistra di f(x) + 1 uno consecutivi.Vediamo due esempi di funzioni Turing-computabili.
[10] Macchina T1 1,_,2,1,> 1,1,2,1,< 2,_,1,1,< 2,1,H,1,<Se provate ad eseguire questo programma, facendo partire la macchina dall'uno più a sinistra di m uno consecutivi vedrete che, esattamente in quattro transizioni, la macchina si fermerà sul primo uno di un blocco di m+2 uno. Risultato: la funzione g che manda un naturale n in n+2 è Turing-computabile. Si noti che per calcolare g(n) bisogna mettere n+1 uno consecutivi sul nastro vuoto e mettere la testina sul primo di essi: n è il numero di uno che compare a destra della testina. Analogamente g(n) è il numero degli uno consecutivi che, al termine del calcolo, compaiono a destra della testina.
Il prossimo esempio è indispensabile per il seguito, si tratta della macchina di Turing, che denotiamo con T2, che manda n nel suo doppio 2n.
[11] Macchina T2 1,_,4,_,> 1,1,2,_,< 2,_,3,1,> 2,1,2,1,< 3,_,1,1,> 3,1,3,1,> 4,_,4,_,< 4,1,5,_,< 5,_,H,_,> 5,1,5,1,<Se mettete un solo uno sul nastro, e posizionate la testina su di esso, la T2 eseguirà 9 transizioni, scriverà alcuni uno e poi li cancellerà. Al termine sarà su un uno, nel nastro vuoto, come all'inizio. Questo corrisponde al fatto che due volte zero fa zero... Chiamiamo h la funzione tale che h(n) è 2n. Per calcolare h(3) con T2, dobbiamo mettere la testina su un uno con tre uno alla sua destra, e farla partire. La macchina compirà 48 transizioni e si fermerà sul primo uno di un blocco di 7 uno, asserendo correttamente che h(3) vale 6. Per calcolare h(10) impiega 279 transizioni. E' lungo, ma funziona. Noi qui non siamo interessati alla efficienza, ma semplicemente al fatto che la computazione termini in un numero finito di passi e dia il risultato voluto. Si ricordi che T2 ha 5 stati.
Così come si possono comporre due funzioni (applicarle cioé una dopo l'altra) è possibile eseguire la composizione di due macchine di Turing. Il metodo è semplice. Si scrivono i listati uno dopo l'altro e si rinominano gli stati. Se le macchine sono M1, con m1 stati, e M2, con m2 stati allora la macchina composta M2 · M1, possiede m1 + m2 stati.
Componiamo, come esempio, le macchine T2 e T1 viste sopra. Il programma di T2 · T1 si ottiene in due fasi. Nella prima fase scriviamo semplicemente i due listati uno dopo l'altro, mettendo T2 sotto T1.
1,_,2,1,> 1,1,2,1,< 2,_,1,1,< 2,1,H,1,< 1,_,4,_,> 1,1,2,_,< 2,_,3,1,> 2,1,2,1,< 3,_,1,1,> 3,1,3,1,> 4,_,4,_,< 4,1,5,_,< 5,_,H,_,> 5,1,5,1,<La macchina composta avrà 2+5=7 stati. Gli stati di T1 rimarranno 1 e 2, quelli di T2, invece di essere 1, 2, 3, 4, 5 diventeranno 3, 4, 5, 6 e 7. Noi vogliamo che quando la macchina T1 ha finito il suo lavoro (ha calcolato x+2 se l'input era x) passi il risultato a T2, che pertanto calcolerà 2(x+2)=2x+4. Per ottenere questo è sufficiente sostituire lo stato di halt di T1 con il primo nuovo stato, 3 e aggiungere quindi 2 a tutti i numeri che rappresentano gli stati di T2. Si otterrà allora (seconda fase)
Macchina T2 · T1 1,_,2,1,> 1,1,2,1,< 2,_,1,1,< 2,1,3,1,< 3,_,6,_,> 3,1,4,_,< 4,_,5,1,> 4,1,4,1,< 5,_,3,1,> 5,1,5,1,> 6,_,6,_,< 6,1,7,_,< 7,_,H,_,> 7,1,7,1,<Si noti che, completata la seconda fase, le righe del programma si possono rimescolare come si vuole. Un Turing-programma non dipende dal'ordine in cui sono scritte le istruzioni, ogni volta la macchina cerca la riga che inizia con la coppia formata dallo stato in cui si trova e dal simbolo che legge.
Con un input di 5 uno questa macchina si fermerà dopo 160 transizioni con 14 uno alla destra della testina (14=2·(5+2)).
Qui sotto si trova la macchina T1 · T2.
Macchina T1 · T2 1,_,4,_,> 1,1,2,_,< 2,_,3,1,> 2,1,2,1,< 3,_,1,1,> 3,1,3,1,> 4,_,4,_,< 4,1,5,_,< 5,_,6,_,> 5,1,5,1,< 6,_,7,1,> 6,1,7,1,< 7,_,6,1,< 7,1,H,1,<Con un input di 5 uno questa macchina si fermerà dopo 98 transizioni con 12 uno alla destra della testina (12=(2·5)+2).
Viene naturale chiedersi: che cosa può calcolare una macchina di Turing?
Una buona notizia è che esiste una Universal Turing Machine (UTM). La UTM è una macchina di Turing proprio come quelle di cui abbiamo parlato, costruita in modo da poter simulare il comportamento di qualsiasi macchina di Turing. Essa riceve in input il codice di una macchina e un input accettabile dalla stessa e restituisce il risultato della computazione. Si può pensare alla UTM come un oggetto del tutto simile al computer (completo di sistema operativo e di apposito software) che avete di fronte.
Per esempio voi scrivete un programmino in Java che moltiplica due numeri interi (grandi quanto volete), prod.java:
import java.math.BigInteger;
class prod {
public static void main(String arg[]){
BigInteger x,y,z;
x=new BigInteger(arg[0]);
y=new BigInteger(arg[1]);
z=x.multiply(y);
System.out.println("risultato = "+z.toString(10));}
}
Lo compilate (suppongo che abbiate installato il supporto java adatto al vostro sistema, completamente gratutito) scrivendo
iavac prod.javae ottenete il file prod.class. Se ora scrivete
java prod 1234567890 2345678901ottenete
risultato = 2895899851425088890Che cosa è accaduto? Il file prod.class (meno di 1k) non è un eseguibile. E' soltanto un codice, come i Turing-programmi. Il vostro computer (lui stesso una UTM) ha attivato (mediante il comando java) la VM (Virtual Machine) java (che è anche lei una UTM) la quale ha fatto girare il programmino che avete scritto, passandole come input la coppia di numeri data. La VM java farà girare qualsiasi programma java, per quanto complesso. La VM java agisce come la UTM: esegue il codice che ha ricevuto come input insieme ai dati. In realtà la UTM teorica è più potente, perché dotata di un nastro (memoria) infinito. Se però si considera che in ogni istante sul nastro c'è solo un numero finito di simboli, la differenza scompare nella ipotesi di potere aggiungere dinamicamente tanta RAM quanto basta alla computazione. La possibilità di allocare dinamicamente la memoria è fondamentale, in quanto non sappiamo a priori di quanta memoria avremo bisogno. Se la macchina è al fondo del nastro (a sinistra o a destra) dobbiamo potere sempre aggiungere una casella.
La famosa Tesi di Church - Turing asserisce che ogni computazione effettiva eseguibile a partire da un algoritmo è calcolabile da una macchina di Turing.
Una versione più modesta della Tesi di Church - Turing asserisce che ogni funzione computabile è Turing-computabile (si veda sopra [9]) .
Naturalmente questa Tesi non è (e non potrà mai essere) un teorema, per il semplice fatto che "funzione computabile" è un concetto non ben definito, al contrario di quello di funzione Turing-computabile. Essa è comunque ampiamente accettata, e possiede conferme formidabili, sia teoriche che pratiche.
Quello che è certo è che qualsiasi funzione f di N in N che sia computabile da un programma che gira sul vostro computer, può essere computata da una macchina di Turing. Vale anche il viceversa, con le cautele dovute alla memoria finita, cui abbiamo accennato.
Adesso siamo in grado di capire meglio l'affermazione contenuta nella frase iniziale (tratta dalla OEIS):
The sequence grows faster than any computable function of n, and so is non-computableC'è dunque qualcosa che le macchine di Turing non possono calcolare. Qualcosa che quindi non potremo mai calcolare nemmeno noi, con nessun computer, con nessun linguaggio, con nessun algoritmo!
Invece di provare direttamente la incomputabiltà della funzione S(n) (detta Shift), dimostreremo che è incomputabile una sua stretta parente: la funzione di Rado å(n) (detta funzione Sigma), che si trova nella OEIS come sequenza A028444
Sequence: 0,1,4,6,13
Name: Busy Beaver sequence, or Rado's sigma function: maximum number of 1's that an n-state, 2-symbol, 5-tuple Turing machine can print on an initially blank tape before halting.
Comments: The function Sigma(n) (A028444) denotes the maximal number of tape marks which a Turing Machine (TM) with n internal states and a two-way infinite tape can produce onto an initially empty tape and then halt.
The function S(n) (A060843) denotes the maximal number of steps (shifts) which such a TM can do (it needs not produce many tape marks).
Given that 5-state machines can compute Collatz-like congruential functions (see references under A060843), it may be very hard to find the next term. The sequence is non-computable.
Definiamo adesso la funzione å(n). Consideriamo l'insieme minimale di simboli, con due soli elementi
A = { _, 1}
Diciamo B(n) l'insieme delle macchine di Turing con n stati e 2 simboli, definite in modo completo, vale a dire che il programma contiene 2n quintuple. (4n + 4)2nFacciamo ora partire le macchine appartenenti a B(n) sul nastro vuoto (pieno di blank), nello stato 1. Alcune di queste si fermeranno e altre no. Diciamo FERM(n) l'insieme delle macchine in B(n) che si fermano, e compiono quindi un numero finito di passi. Data una macchina M che si ferma, diciamo s(M) il numero degli uno che sono sul nastro dopo che la macchina si è fermata. Poiché FERM(n) è finito, esiste il massimo degli s(M), con M che varia in FERM(n). Questo è il numero che ci interessa. Definizione å(n) = max { s(M), M Î FERM(n) } I campioni, che quando si arrestano lasciano sul nastro å(n) uno, vengono chiamati Busy Beavers (castori affaccendati).
E' del tutto ovvio che å(1) = 1, e si può provare senza eccessive difficoltà che å(2) = 4 (Rado 1962). Se si affronta il problema delle macchine con 3 stati le cose si complicano molto. Lin e Rado dimostrarono nel 1965 che å(3) = 6. Per n = 4 bisogna attendere il 1983, anno in cui Brady dimostrò che å(4) = 13. Si sa (Marxen) che å(5) è maggiore o uguale di 4098. Il caso 5 potrebbe essere concluso. E' molto improbabile che si riesca a calcolare å(6). Per ora si sa (Marxen e Buntrock) che è maggiore di 1,29·10865. Tanto per fare un esempio concreto, la seguente macchina a 6 stati:
(Esempio dovuto a Marxen) 1,_,2,1,> 1,1,1,1,> 2,_,3,1,< 2,1,2,1,< 3,_,6,_,> 3,1,4,1,< 4,_,1,1,> 4,1,5,_,< 5,_,H,1,< 5,1,6,1,< 6,_,1,_,< 6,1,3,_,<fatta partire sul nastro vuoto nello stato 1, esegue 8.690.333.381.690.951 transizioni, poi si ferma lasciando 95.524.079 uno sul nastro.
Affrontiamo ora la dimostrazione (del tutto elementare) della incomputabilità della funzione å(n).
Nello spirito della Tesi di Church - Turing, diciamo incomputanbile una funzione che non sia Turing-computabile. Questa è pertanto la nostra tesi:
Non esiste nessuna macchina di Turing che possa calcolare å(n)
Con il termine funzione, intenderemo sempre una funzione di N in N, come del resto nella discussione fatta sulle funzioni Turing-computabili.
Definizione Diciamo che una funzione f è crescente se x £ y implica f(x) £ f(y)
Lemma Se f è una funzione Turing-computabile, allora esiste una funzione F crescente e Turing-computabile tale che per ogni n, f(n) £ F(n) Dimostrazione Se f è Turing-computabile evidentemente anche la funzione somma F F(n) = f(0) + f(1) + f(2) + ... + f(n) è Turing-computabile. Inoltre F è crescente, perché f(n) non è mai negativo.
Teorema (Rado) La funzione å(n) è incomputabile. Dimostrazione Per brevità scriviamo computabile al posto di Turing-computabile. Dimostreremo che se f è una qualsiasi funzione computabile allora per n sufficientemente grande si ha sempre å(n) > f(n). Sia allora f una arbitraria funzione computabile e sia M una macchina con c stati che computa la funzione F introdotta nel Lemma. Per ogni x sia T(x) la macchina definita in [8]. Si consideri inoltre la macchina T2 definita in [11]. Sappiamo che le macchine si possono comporre. Sia C la composizione M·T2·T(x). Poiché M ha c stati, T2 ha 5 stati e T(x) ha x+1 stati, la macchina composta C possiede c + x + 6 stati. Facciamo partire C nello stato 1 sul nastro vuoto. La macchina T(x) agisce per prima, scrive x+1 uno e si ferma su quello più a sinistra. Poi passa il controllo a T2. T2 riceve il numero x in input, quindi al termine si trova sull'uno più a sinistra di un blocco di 2x+1 uno consecutivi, e passa il suo output 2x a M. M calcola F(2x) e quindi, in base alla definizione [9], scrive F(2x) + 1 uno sul nastro vuoto e poi si ferma a sinistra del blocco. Riassumiamo: C si ferma e possiede c + x + 6 stati. Quindi C appartiene a FERM(c+x+6). Con le notazioni precedenti s(C) = F(2x) + 1 e, per definizione di å(n), avremo che s(C) £ å(c+x+6), il ché implica (i) F(2x) < å(c+x+6). Questa diseguaglianza vale per ogni naturale x. Ora se c + 6 £ x abbiamo c + x + 6 £ 2x, e conseguentemente, poiché F è crescente (ii) F(c+x+6) £ F(2x) Poniamo n = c + x + 6. Se n > 12 + 2c allora x > c + 6 e valgono simultaneamente la (ii) e la (i): F(n) £ F(2x) < å(n). Infine, ricordando che per costruzione f(n) £ F(n) si ha che, per n sufficientemente grande, f(n) < å(n). Questo vale per ogni funzione computabile, quindi å(n) non è computabile.Si noti che il teorema di Rado dice qualcosa di molto preciso. Se avete una qualsiasi funzione computabile crescente F, e la macchina di Turing che la calcola ha c stati, allora per ogni n maggiore di 12 + 2c, å(n) è maggiore di F(n).
Inoltre il teorema di Rado dice che non solo å(n) non è computabile, ma che non è computabile nessuna funzione che sia (per n abbastanza grande) maggiore di å(n).
Alla luce di questo risultato possiamo rispondere alla domanda iniziale. La funzione Shift S(n) conta il numero di movimenti compiuto dalla macchina. Questo numero è evidentemente maggiore o uguale al numero degli uno che la macchina puà lasciare sul nastro (in partenza vuoto). Pertanto:
Per ogni n, å(n) £ S(n). Quindi per il teorema di Rado S(n) non è computabile, e cresce più velocemente di qualsiasi funzione computabile.Rimane almeno una domanda. FERM(n) è formato dalla macchine con n stati che si fermano quando vengano fatte partire sul nastro vuoto nello stato1. FERM(n) è ben definito, una macchina si ferma o non si ferma. Data la macchina T in B(n), possiamo decidere, osservando il suo codice, se T si arresta in un tempo finito, cioé se T appartiene a FERM(n)? Questo è il cosiddetto problema dell'arresto. Lo vedremo tra breve (spero :)!
Comunicate problemi, soluzioni, novità, url interessanti, critiche, suggerimenti, domande, correzioni inviandomi una lettera!. Nel soggetto inserite 'mathblog'.
|
Neal J. A. Sloane, membro dello staff dei laboratori di ricerca della AT&T, è certamente uno dei matematici più noti e importanti di questo tempo. Autore di circa 300 lavori e di una ventina di libri è tra i massimi esperti mondiali di teoria dei codici correttori, un settore di enorme importanza per le telecomunicazioni. Nel suo sito si trova moltissimo materiale, articoli, tavole, cataloghi e persino un softaware (Gosset) in grado di minimizzare funzioni di migliaia di variabili vincolate da equazioni o disequazioni lineari! Maestro dell'arte combinatoria, Sloane non si sente costretto dalle possibili applicazioni delle teorie matematiche, ma liberamente insegue ciò che lo affascina, trovando spesso risultati profondi e inaspettati. Nel dicembre del 1963, studente alla Cornell University, iniziò la sua splendida collezione di successioni di interi, raccolte ora nella On-Line Encyclopedia of Integer Sequences ( OEIS ) |
A quell'epoca Sloane studiava i percettroni (evolutisi poi nelle attuali reti neurali). Lo studio teorico di queste strutture conduce subito a molti difficili problemi di teoria dei grafi. Uno di questi era il calcolo della altezza attesa di un generico nodo quando si prenda a caso un n-albero etichettato radicato (ovvero un grafo non orientato, connesso e senza cicli con n nodi numerati da 1 a n, ed un nodo selezionato detto radice). Per ottenere una sequenza di interi Sloane cercava di calcolare, invece delle effettive altezze medie, gli interi
Wn = an/ndove an è la somma delle altezze di tutti i nodi su tutti gli alberi. I primi Wn (per n = 1, 2, 3, 4, 5, 6, 7) sono
0, 1, 8, 78, 944, 13800, 237432Sloane desiderava confrontare la crescita dei Wn con quella di nn. La decina di termini che era riuscito a calcolare non era assolutamente sufficiente. In libri e articoli di combinatoria aveva trovato diverse successioni che somigliavano alla sua, e cominciò a conservarle su schede perforate, pensando che gli sarebbero state utili nella soluzione di altri problemi: le avrebbe riconusciute, avrebbe saputo subito chi erano e che cosa significavano.
Solo nel 1969 Sloane riuscì, con J. Riordan, a esprimere i Wn in "forma chiusa":

In seguito Sloane constatò che la sua raccolta interessava molti matematici, e nel 1973 pubblicò la prima edizione di "A Handbook of Integer Sequences" (che sono orgoglioso di possedere), contenente 2400 sequenze di interi. Seguì nel 1995 (con l'aiuto di Simon Plouffe) "The Encyclopedia of Integer Sequence", ricca di 5500 esemplari. Poi passò alla rete, e Internet portò ad una crescita di circa 10000 successioni all'anno, tanto che nel 1999 la OEIS conteneva circa 50000 successioni.
Oggi ci sono 99277 schede nell'immenso database di Sloane. Neal attende con gioia l'arrivo della 100000-esima sequenza, ed invita tutti gli appassionati ad una festa virtuale!
L'enciclopedia delle sequenze costituisce senza alcun dubbio uno degli ambienti matematici più interessanti del mondo. Voluta fortemente da un singolo ma diventata opera collettiva, è al tempo stesso un prezioso strumento di lavoro e una inesauribile sorgente di avventure numeriche. Vorrei, in questa e in alcune delle prossime puntate del Blog Matematico, percorrere con i lettori alcuni sentieri di questa grande foresta, piena di sorprese.
Cominciamo subito.
Ecco una sequenza, la A000001, che certamente interesserà gli studenti di Matematica o chiunque conosca il concetto di gruppo:
A000001 1, 1, 1, 2, 1, 2, 1, 5, 2, 2, 1, 5, 1, 2, 1, 14, ...Al posto n c'è il numero dei gruppi di ordine n non isomorfi.
Per apprezzare meglio ricordiamo alcune notazioni e alcuni teoremi:
Notazioni: Zn denota il gruppo ciclico additivo degli interi modulo n. Sn è il gruppo delle permutazioni su n simboli (viene chiamato gruppo simmetrico). Dn è il gruppo delle simmetrie del poligono regolare con n lati (viene chiamato gruppo diedrale).
Teoremi: 1) Se p è primo esiste un solo gruppo di ordine p, isomorfo a Zp. 2) Se p è primo esistono due gruppi di ordine p2: Zp× Zp e Zq con q = p2. 3) Se p è un primo dispari esistono due gruppi di ordine 2p : Z2p e Dp. 4) Se p e q sono primi dispari tali che p < q e p non divide q-1, allora esiste un solo gruppo di ordine pq, isomorfo a Zpq.L'inizio della A000001 (1, 1, 1, 2, 1, 2) dice che esistono 1 gruppo di ordine 1, 1 gruppo di ordine 2, 1 gruppo di ordine 3, 2 gruppi di ordine 4, 1 gruppo di ordine 5, 2 gruppi di ordine 6. Fino a 5 tutti i gruppi sono abeliani (cioé commutativi). Quando n = 6 appare il primo gruppo non abeliano: D3 (che è isomorfo a S3).
Nella tavola n varia da 1 a 16, ed i teoremi citati spiegano l'elenco per tutti gli n tranne che per n = 8, 12 e 16. Nel caso di ordine 8 ci sono 5 gruppi, 3 abeliani e 2 non abeliani:
1 - Z2×Z2×Z2 2 - Z2×Z4 3 - Z8 4 - D4 5 - Il gruppo dei quaternioni QRispetto ai gruppi incontrati prima, Q è una novità assoluta!
Denotiamo gli elementi di Q con ±1, ±i, ±j, ±k. La moltiplicazione in Q è definita dalle seguenti regole: 1 è l'elemento neutro. Il quadrato di ogni elemento è 1. ij = k; jk = i; ki = j; ji = -k; kj = -i; ik = -j;Anche per n = 12 ci sono 5 gruppi, 2 abeliani e 3 non abeliani:
1 - Z2×Z6 2 - Z12 3 - D6 4 - A4, il sottogruppo delle permutazioni pari di S4 5 - T, prodotto semidiretto di Z3 e di Z4Il gruppo T si può rappresentare con 12 matrici 2×2 complesse (si veda Math World). Utilizzando il fatto che il gruppo delle radici complesse 12-esime dell'unità è isomorfo al gruppo degli invertibili nell'anello Z13, è possibile descrivere T come gruppo generato dai prodotti modulo 13 di queste due matrici
| 0 8 | | 3 0 |
A = | | , B = | |
| 8 0 | | 0 9 |
La tavola del prodotto è nella figura sottostante, dove la prima riga e la prima colonna sono formate dalle 12 matrici
I, B, B2, A, AB, AB2, A2, A2B, A2B2,A3, A3B, A3B2
Si ricordi che le moltiplicazioni delle matrici contenute nella tavola sono tutte calcolate modulo 13.
Il caso n = 16 è parecchio più complesso, ci sono 14 gruppi, 5 abeliani e 9 non abeliani. Possiamo subito scrivere i 5 abeliani e 3 dei non abeliani:
1 - Z2×Z2×Z2×Z2 2 - Z2×Z2×Z4 3 - Z4×Z4 4 - Z2×Z8 5 - Z16 6 - D8 7 - Z2×D4 8 - Z2×QI rimanenti 6 sono più complicati da descrivere e il lettore interessato li può trovare su Math World.
Sono noti (almeno) i primi 2000 termini della successione A000001 (si veda The Small Group Library). Per n fino a 2000 si sa non solo quanti gruppi ci sono di ordine n, ma anche quali sono (cioè come costruirli), con l'unica eccezione di n = 1028. Per n = 1028 esistono ben 49487365422 gruppi diversi!
Il numero dei gruppi di ordine 2k appare singolarmente grande e sembra crescere in un suo modo particolare. I valori noti si trovano nella OEIS al numero A000679 (parte con k = 0):
A000679 1, 1, 2, 5, 14, 51, 267, 2328, 56092, 10494213, 49487365422Si osservi che anche i (quasi) dieci milioni e mezzo di gruppi di ordine 512 sono noti! Essi sono contenuti, tra milioni di altri, nelle librerie di GAP. GAP (Groups, Algorithms, Programming - a System for Computational Discrete Algebra) è un meraviglioso programma assolutamente gratuito, che gira praticamente su tutte le piattaforme (incluso Windows).
Tra le keywords della A000679 si trova hard: nessuno attualmente conosce quanti gruppi esistano di ordine 211.
Il numero dei gruppi non abeliani di ordine n è difficile da calcolare. Per quanto riguarda i gruppi abeliani finiti, esiste invece una formula. E' molto interessante, perché mostra che i gruppi abeliani finiti si comportano in modo simile ai numeri interi! Per capirla occorre un concetto di grandissima importanza, quello di partizione di un intero (positivo) n.
Diciamo partizione di n una successione non decrescente di interi positivi h1, h2, ..., ht tale che la somma dei suoi elementi sia n. Per esempio, ci sono 7 partizioni di 5: 1, 1, 1, 1, 1 1, 1, 1, 2 1, 1, 3 1, 2, 2 1, 4 2, 3 5Denotiamo con part(n) il numero delle partizioni di n. Sembra che part(1), part(2), ..., part(n), ... sia una successione interessante. Infatti la troviamo subito nella OEIS, è il numero A000041 (inizio con n = 1)
A000041 1, 2, 3, 5, 7, 11, 15, 22, 30 ,42, 56, 77, 101, 135, 176, 231, 297, 385Ricordiamo ora che sussiste un teorema:
Teorema 1 Supponiamo che G sia un gruppo abeliano di ordine n, e che n si fattorizzi così: n = p1e1 · p2e2 · · · pkek, con i pj primi. Allora G si spezza nel prodotto diretto di k gruppi abeliani Gj, dove Gj ha ordine pjej.E' sufficiente allora classificare e contare i gruppi abeliani il cui ordine sia la potenza di un numero primo. A questo serve il Teorema 2:
Teorema 2 Un gruppo abeliano H di ordine pm con p primo è prodotto diretto di gruppi ciclici Ci dove Ci ha ordine phi, con i che varia da 1 a t e h1, h2, ..., ht è una partizione di m Esistono dunque part(m) gruppi abeliani di ordine pm.Mettendo insieme i risultati si ottiene subito il Teorema 3:
Teorema 3 Se l'intero positivo n si fattorizza come nel Teorema 1 allora esistono part(e1) · part(e2) · · · part(ek) gruppi abeliani con n elementi. Questi gruppi si possono costruire tutti con il metodo del Teorema 2.Il bello di questi teoremi è che sono costruttivi, e si possono utilizzare direttamente, anche senza conoscere la loro dimostrazione.
Come esempio, vediamo quanti e quali sono i gruppi abeliani di ordine 324.
Esempio. In primo luogo fattorizziamo n = 324. 324 = 22 · 34. Per il Teorema 1, se G è abeliano con 324 elementi si ha che G è isomorfo a G1 × G2, dove G1 ha 4 elenemti e G2 ha 81 elementi. Applichiamo ora il Teorema 2. Ci sono 2 partizioni di 2: 1, 1 2 e 5 partizioni di 4: 1, 1, 1, 1 1, 1, 2 1,3 2,2 4 Esistono pertanto 2 gruppi abeliani di ordine 4 che possono essere G1 Primo gruppo G1: Z2 × Z2 Z4 Esistono inoltre 5 gruppi abeliani di ordine 81 che possono essere G2 Secondo gruppo G2: Z3 × Z3 × Z3 × Z3 Z3 × Z3 × Z9 Z3 × Z27 Z9 × Z9 Z81 I 10 gruppi di ordine 324 si trovano facendo i prodotti, in tutti i modi, di un gruppo tipo G1 con un gruppo tipo G2.Per n non troppo grande sappiamo quindi calcolare il numero dei gruppi abeliani di ordine n. Questa successione è la A000688 della OEIS.
A000688 1, 1, 1, 2, 1, 1, 1, 3, 2, 1, 1, 2, 1, 1, 1 , 5, 1, 2, 1, 2, 1, 1, 1,3 , 2, 1, 3, 2, 1, 1Al contrario della A000679 questa successione è easy. Possiamo prevedere i suoi valori. Sappiamo, per esempio, che al posto 324 c'è 10.
Nel prossimo blog un'altra gita nella OEIS (che avrà, auguriamo, gioiosamente superato le 100k sequenze)!
Comunicate problemi, soluzioni, novità, url interessanti, critiche, suggerimenti, domande, correzioni inviandomi una lettera!. Nel soggetto inserite 'mathblog'.
Sul numero di settembre di Le Scienze c'è un interessante articolo di Graham P. Collins sulla dimostrazione, da parte del matematico russo Grigory Perelman, della famosa congettura di Poincaré. Si tratta - come viene spiegato sulla stessa rivista - di uno dei sette "problemi del millennio", pubblicati sul sito del Clay Mathematics Institute. Per ognuno di essi viene offerto al solutore un premio di un milione di dollari.
Tra i magnifici sette appare, e non poteva essere altrimenti, la congettura di Riemann, più frequentemente detta ipotesi di Riemann. Il matematico Louis de Branges de Bourcia, che lavora presso la Purdue University, sostiene di avere provato la verità dell'ipotesi di Riemann, ma la comunità degli esperti non è completamente convinta della validità della dimostrazione.
Sembra, dai commenti della stampa internazionale, che la possibilità dell'esistenza della dimostrazione, faccia paura. Qualche esempio:
Vorrei cercare di spiegare, per quanto possibile brevemente e in modo semplice, da dove nascono questi timori e fino a che punto essi siano giustificati.
In sostanza, tralasciando diverse altre componenti troppo tecniche, in una transazione commerciale on-line vengono utilizzati due codici: uno standard (si dice simmetrico) che necessita di una chiave segreta ed è molto veloce, l'altro a chiave pubblica, in genere più lento perché esegue calcoli pesanti. Per esempio, come codice simmetrico si potrebbe usare l'AES (Advanced Encription Standard) e come codice a chiave pubblica l'RSA (acronimo dei nomi dei suoi inventori: Rivest, Shamir e Adleman). Il lettore che desideri chiarimenti in proposito può consultare, in questo stesso sito, le pagine su Crittografia e numeri primi.
E' chiaro che se si rompe il codice a chiave pubblica, il quale custodisce la chiave del codice simmetrico, tutto viene a cadere.
Uno degli algoritmi più usati è proprio lo RSA. La sua forza si basa sul fatto che
1) E' facile trovare numeri primi grandi 2) E' difficile fattorizzare un intero prodotto di due numeri primi grandiOvviamente il termini "facile", "difficile" e "grande" sono relativi alla conoscenza scientica e alla tecnologia disponibili. Attualmente sono grandi primi di alcune centinaia di cifre decimali. Facile rappresenta un tempo di secondi e difficile di secoli.
Concludendo: l'intero sistema di sicurezza mondiale entrerebbe in gravi difficoltà se qualcuno trovasse un algoritmo veloce per la fattorizzazione di interi.
Che cosa c'entra tutto questo con la congettura di Riemann? Sentiamo le parole del professor Marcus du Sautoy, autore di un bestseller pubblicato in Italia da Rizzoli, con il titolo "L'enigma dei numeri primi":
L'intero commercio elettronico dipende dai numeri primi. Io ho descritto i primi come atomi: ciò che manca ai matematici è uno spettrometro di primi. I chimici hanno una macchina che, se ci mettete una molecola, vi dice di quali atomi è composta. I matematici non hanno inventato una versione analoga di essa. Se l'ipotesi di Riemann è vera, essa non produrrà di per sé uno spettrometro. Ma la sua dimostrazione potrebbe farci capire meglio il funzionamento dei numeri primi, e quindi la dimostrazione potrebbe essere trasformata in qualcosa che potrebbe produrre questo spettrometro di primi. Se ciò accadrà, metterà in ginocchio l'intero commercio elettronico nello spazio di una notte.
Si tratta di affermazioni prudenti, piene di "se" e "potrebbe". Ma la stampa, con la sua solita sensibilità, si è lanciata con entusiasmo nell'impresa di spaventare gli utenti, prospettando un futuro prossimo in cui utilizzare bancomat e carte di credito sarà impossibile.
In uno degli articoli citati si legge:
Fino a che i numeri primi erano considerati casuali, poteveno essere utilizzati senza problemi nelle moderne applicazioni di cifratura dei dati, che vanno dalle transazioni bancarie e il commercio elettronico all'uso delle carte di credito e al trasferimento di denaro su Internet. Una volta che la casualità sia provata falsa, però, finirà la cuccagna, nessun codice sarà più sicuro e nessuna transazione sarà protetta da intrusioni fraudolente. Alcuni pensano che per l'economia questo potrebbe essere l'equivalente di un asteroide che colpisca la Terra.
Siamo all'apocalisse! La matematica ha creato il paradiso della sicurezza informatica, dei codici inviolabili, e ora vuole distruggerlo! Ma, alla fine, che cosa dice mai questa congettura di Riemann?
Per esprimere la RH occorre introdurre la funzione z, detta funzione zeta di Riemann (di z si è già parlato in un Blog precedente: Pi greco e i numeri primi). Essa è così definita:
z(s) = å n-s dove nella sommatoria n varia da 1 all'infinito, e s è un numero complesso con parte reale maggiore di 1.Il legame di z con i numeri primi è dato dal prodotto di Eulero:
(D) z(s) = Õ (1 - q-s)-1 dove q varia nell'insieme dei numeri primi e s è un numero complesso con parte reale maggiore di 1.La funzione z(s) è stata poi estesa da Riemann a tutto il piano complesso (tranne che in s=1, dove ha una singolarità).
Possiamo ora enunciare la RH (che riguarda la estensione di z):
Gli zeri complessi di z(s) hanno tutti parte reale = 1/2.
Gli zeri complessi di z formano un insieme numerabile e discreto. Per ragioni di simmetria è sufficiente esaminare quelli con parte immaginaria positiva, sopra l'asse delle ascisse. Si trovano un primo zero, un secondo, un terzo... La RH dice che essi sono tutti della forma
1/2 + b I dove I è l'unità immaginaria, cioè I2 = -1I primi sei zeri che si trovano hanno parte reale uguale a 1/2 e parte immaginaria (approssimata) b rispettivamente uguale a
14.134725, 21.022040, 25.010858, 30.424876, 32.935062, 37.586178Sono stati calcolati più di 100 miliardi di zeri consecutivi e la RH è provata per b < 29538618432. Molti zeri sono vicinissimi, difficili da separare. Il calcolo degli zeri di z è assai delicato e richiede metodi matematici sofisticati.
Nel 1914 Hardy dimostrò che infiniti zeri stanno sulla "retta critica", x = 1/2.
Nel 1989 Conrey provò che almeno il 40% degli zeri sta sulla retta critica.
Malgrado questo la RH potrebbe benissimo essere falsa!
Esistono molte formulazioni della RH, ad essa logicamente equivalenti, ma in apparenza totalmente diverse!
Ne vedremo insieme quattro, che denoteremo con RH1, RH2, RH3, RH4.
Una qualunque di esse è vera (o falsa) se e solo se è vera (o falsa) la RH.
Iniziamo con quella che mi sembra la più comprensibile da parte dei non addetti ai lavori, dovuta a Lagarias (2000). La chiamo RH1.
RH1 Denotiamo con Hn la somma degli inversi dei primi n interi positivi: Hn = 1 + 1/2 + 1/3 + ... + 1/n. Denotiamo con s(n) la somma dei divisori di n. La RH è equivalente al fatto che, per ogni n maggiore di 1 s(n) < Hn + eHn log(Hn) dove log è il logaritmo naturale, in base e.Per capire che cosa dice la RH1 vediamo un caso particolare. Poniamo n = 20.
Troviamo H20 = 3.59774, e3.59774 = 36.5156, log(3.59774) = 1.28031, s(20) = 42. Allora RH1 è confermata per n = 20 in quanto 42 < 3.59774 + 36.5156 ´ 1.28031 = 50.349Nella figura sottostante vediamo segnate le differenze L(n) = (Hn + eHn log(Hn)) - s(n) per n che varia da 2 a 300

Come si vede, alcuni individui si staccano dalla massa e giungono pericolosamente vicino a 0. Tra 50 e 300 si raggiungono i valori più bassi di L(n) per n=60 e n=120
L(60) = 2.97668 L(120) = 6.06265RH1 è equivalente a RH, una di esse è vera se e solo se è vera l'altra. Chiunque riuscisse a provare che L(n) è maggiore di 0 per ogni n, cioè che i puntini in figura non vanno mai sotto l'asse delle ascisse, per quanto si estenda il grafico, guadagnerebbe fama imperitura e un milione di dollari!
Si rimane stupiti dall'assenza in RH1 di qualsiasi riferimento esplicito ai numeri complessi o ai numeri primi. Ovviamente il legame esiste, ma è molto nascosto.
Al contrario la RH2, la sconda formulazione della RH che presenteremo, è immediatamente connessa ai primi.
Diciamo che l'intero n è privo di quadrati se n si decompone nel prodotto di primi distinti. m è definita sugli interi positivi m(1) = 1 m(n) = 0 se n non è privo di quadrati m(n) = 1 se n è prodotto di un numero pari di primi distinti m(n) = -1 se n è prodotto di un numero dispari di primi distintiFacciamo un poco di pratica.
I primi 18 elementi di F
F = { 2, 3, 5, 6, 7, 10, 11, 13, 14, 15, 17, 19, 21, 22, 23, 26, 29, 30 ... }
Ad ogni intero k in F associamo ora la sua immagine mediante m, cioé m(k). Otteniamo così un nuovo insieme V, in corrispondenza biunivoca con F
I primi 18 elementi di V
V = { -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1 ... }
Se si calcolano alcune migliaia di elementi di V, si constata che gli 1 e -1 sembrano messi a caso, come se si trattasse dei risultati del lancio di una moneta.
Per visualizzare il fenomeno ci costruiamo una passeggiata su una retta verticale (l'asse delle ordinate). Chiamiamo questa passeggiata Passeggiata di Moebius. All'inizio (tempo t=0) siamo in 0. Ogni volta, al tempo t, ci muoviamo di m(t) lungo l'asse y: ovvero saliamo di 1 se m(t)=1, scendiamo di 1 se m(t)=-1, stiamo fermi se m(t)=0.
Nella figura sottostante si vede il risultato dei primi 50000 passi.

Sulle ascisse c'è il tempo t da 0 a 50000. In nero la passeggiata di Moebius, in rosso il grafico di ±½Öt, in blu il grafico di ±Öt.
Ricordando che per muoverci ad ogni passo aggiungiamo m(t) al valore della ordinata, deduciamo immediatamente che la linea nera della Figura 2 è il grafico della funzione di Mertens M(t) così definita
M(t) = åm(k) dove k varia da 1 a tDalla Figura 2 sembra che la linea nera stia sempre dentro alla curva rossa. Nel 1897 Mertens congetturò
Mertens Hypothesis (MH) Per ogni t maggiore di 1 il valore assoluto di M(t) è minore di ÖtVon Sterneck calcolò, tra il 1897 e il 1912 i valori di M(t) fino a t = 5000000, e giunse alla seguente congettura
Per ogni t maggiore di 200 il valore assoluto di M(t) è minore di ½ÖtQuando si tratta della distribuzione dei numeri primi, bisogna sempre essere cauti nelle affermazioni! Il fatto che una proposizione sia vera in milioni di casi non la rende per questo più credibile!
Il primo controesempio (Cohen e Dress, 1979) si ha per t più grande di sette miliardi, precisamente t=7725038629. Infatti
M(7725038629) = 43947 ½Ö7725038629 = 43946.09Anche la congettura di Mertens MH è risultata falsa. Nel 1985 Odlyzko e Riele hanno dimostrato che la linea nera della Figura 2 attraversa la curva blu infinite volte, sia in alto che in basso. Precisamente
il limite inferiore di |M(t)|/Öt è minore di -1.009 il limite superiore di |M(t)|/Öt è maggiore di 1.06 dove | | denota il valore assolutoNon si conosce però nessun valore di t che fornisca un controesempio alla MH.
Qual è il vero rapporto tra la funzione di Mertens M(t) e la radice quadrata di t Öt ? E' uno dei grandi enigmi legati alla distribuzione dei numeri primi!
Esiste una versione "più moderata" della MH, una congettura che indichiamo con MH'
MH' Esistono una costante C ed un intero n tali che per t > n si ha |M(t)| < C ÖtMH implica MH', ma non viceversa. MH è falsa, ma MH' potrebbe essere vera. Al momento nessuno lo sa dimostarare, ma si pensa che anche MH' sia falsa.
Si ritiene vera una versione di MH ancora più debole, che è proprio la seconda formulazione della RH di cui si parlava, la RH2.
L'ipotesi di Riemann RH è vera se e solo se è vera la:
RH2 Dato un qualsiasi e > 0, esiste un intero n tale che per ogni t > n si ha |M(t)| < te Öt
La RH2 evidenzia un rapporto profondo tra la passeggiata di Moebius e una passeggiata casuale!
Nella Figura 3 si vede una passeggiata casuale, costruita in modo analogo a quella di Moebius vista sopra. All'istante t, se t non è privo di quadrati si sta fermi, come nella passeggiata di Moebius, mentre, quando t è privo di quadrati, si lancia una moneta, invece di considerare il valore della m: si sale di un passo se viene testa, e si scende di un passo se viene croce.

Anche facendo moltissime prove è assai difficile trovare il pacato movimento ondulatorio della Figura 2. Però questo non prova proprio nulla. E' dai fondamenti della probabilità che possiamo avere informazioni sul futuro lontano di una passeggiata casuale. Se ci muoviamo su e giù lanciando una moneta, e denotiamo con D(t) la differenza tra il numero dei casi in cui è venuto testa e quello in cui è venuto croce, vale il teorema
Teorema della distanza Dati comunque un e > 0 e una probabilità p < 1, esiste un intero n tale che per ogni t > n si ha |D(t)| < te Öt con probabilità pSi noti che |D(t)| è la distanza dall'origine, all'istante t, del punto che effettua la passeggiata casuale. Se è vera la RH, è vera anche la RH2. Il teorema della distanza confrontato con la RH2 ci dice che, se prendiamo e piccolissimo e p molto vicina a 1, per grandi n il comportamento della passeggiata casuale è molto simile a quello della passeggiata di Moebius! Se si va abbastanza avanti, anche il grafico della Figura 3 si troverà confinato all'interno di una zona quasi parabolica, tranne rarissime uscite.
Questa connessione è stata evidenziata da Denjoy nel 1964.
p(x) = numero dei primi minori o uguali a xQuindi, per esempio,
p(5) = 3 p(50) = 15 p(500) = 95 p(5000) = 669 p(50000) = 5133 p(500000) = 41538 p(5000000) = 348513 p(50000000) = 3001134Nel 1896 Hadamard e, indipendentemente, de la Valleé Poussin, basandosi sul lavoro di Riemann provarono il
Teorema dei numeri primi Il rapporto tra p(x) e x/log(x) tende a 1 quando x tende all'infinito.Questo significa che, quando x è grande, x/log(x) è una buona approssimazione di p(x). Per esempio, per x=50000000 il valore esatto è 3001134, mentre x/log(x) vale circa 2820470, con una precisione del 93.9%.
Una approssimazione migliore, già suggerita da Gauss, è data dal logaritmo integrale Li(x), dove
Nel 1901 von Koch dimostrò che RH è equivalente alla
RH3 Dato un qualsiasi e > 0, esiste un intero n tale che per ogni t > n si ha |Li(t) - p(t)| < te ÖtSe proviamo a sommare i logaritmi dei numeri primi, osserviamo che
la somma dei logaritmi dei numeri primi minori o uguali a x è molto vicina a x stesso. Poniamo q(x) = å log(p) dove la sommatoria è estesa a tutti i primi minori o uguali a x. Troviamo: q(100) = 83.72 q(1000) = 956.24 q(10000) = 9895.99 q(100000) = 99685.4 q(1000000) = 998484Anche in questo caso, per stimare l'errore commesso, cioé la differenza tra q(x) e x, ci viene in aiuto la RH, in un'altra equivalente formulazione:
RH4 Dato un qualsiasi e > 0, esiste un intero n tale che per ogni t > n si ha |q(t) - t| < te ÖtA questo punto si può osservare che una dimostrazione della congettura di Riemann avvicinerebbe semplicemente la nostra conoscenza teorica, esatta, alla nostra conoscenza empirica, sperimantale. Empiricamente Li(x) è una approssimazione molto buona di p(x) (e altre funzionano ancora meglio), e nessuno ci impedisce di usarla. Una prova di RH (o equivalenti) fornirebbe semplicemente un dimensionamento certo (ma non necessariamente ottimale) del margine di errore.
Un tema ricorrente a favore di questo è che "i numeri primi non sarebbero più a caso".
Su questo facciamo tre considerazioni.
La prima è di carattere, direi quasi, ontologico. La sequenza dei primi non può essere in nessun modo casuale, qualsiasi sia il significato che si voglia dare a questa frase, per il semplice fatto che è completamente determinata dalla struttura aritmetica dell'insieme dei numeri interi. Prendete i numeri naturali 1, 2, 3, 4, 5, ..., cominciate a giocare con l'addizione (il prodotto non serve in modo diretto) ed eccoli lì: preziosi, luminosi e belli come le stelle del cielo!
La seconda è che, paradossalmente, la RH sembra puntare in direzione completamente opposta. Abbiamo visto che, se RH è vera, la distribuzione degli interi che sono prodotto di un numero pari di primi o di un numero dispari di primi segue da vicino la distribuzione delle apparizioni di testa o croce in una sequenza abbastanza lunga di lanci di una moneta non truccata. Che cosa c'è di più casuale di questo?
La terza, come la prima, elimina la possibiltà che la successione dei primi sia casuale, perché presenta notevoli regolarità. Ne citiamo due:
(1) Per ogni n, tra n e 2n c'è almeno un numero primo. (2) Tra n! + 2 e n! + n non ci sono numeri primi.La affermazione (1) è detta Postulato di Bertrand, matematico che la verificò nel 1845 per n fino a 3000000. Venne dimostrata da Tchebychef nel 1850. Il grande Erdös ne diede una dimostrazione assai elegante e semplice nel 1932. La tecnica di Erdös può essere estesa per dimostrare che dato qualsiasi k esiste un N tale che, se n è maggiore di N, ci sono tra n e 2n almeno k primi.
La (2), sebbene interessante, è ovvia. Ricordiamo che n! è il prodotto degli interi tra 1 e n. Allora n! + 2 è divisibile per 2, n! + 3 è divisibile per 3, e così via fino a n! + n, che è divisibile per n.
Pur essendo poco più di una banalità la (2) dà un'argomentazione fortissima in sostegno della non-casualità della successione dei primi. In una successione casuale esisteranno spazi lunghi quanto si vuole privi di un certo simbolo, ma non sapremo mai dove si trovano.
Dunque, certamente la successione dei primi non è casuale. Però, a partire da essa si generano sequenze con un comportamento apparentemente casuale, e la RH fornisce informazioni asintotiche sulla oscillazione di queste quantità.
Per concludere dirò che ritengo assai improbabile che la dimostrazione della RH possa portare a grandi rivoluzioni nel mondo delle comunicazioni riservate. Questo avverrebbe se - per esempio - facilitasse la fattorizzazione degli interi. Occorre però ricordare che da anni e anni vengono studiate tutte le possibili implicazioni logiche della RH.
Per esempio, è noto che se la RH fosse vera allora un certo test probabilistico di primalità darebbe risultati certi e veloci, mentre ora sono sì veloci ma sicuri solo entro un certo limite, che possiamo fissare. Per esempio un numero di 500 cifre che abbiamo trovato è dichiarato primo con una probabilità di 1 su 10100 di non esserlo. Tutti i programmi di calcolo simbolico, come Maple o Mathematica, utilizzano combinazioni di test di questo genere. La differenza tra la certezza assoluta e la garanzia con probabilità 0.99999999... con cento 9 dopo il punto è, ad ogni effetto pratico, irrilevante.
Il problema della fattorizzazione è diverso. Essa avviene o non avviene, semplicemente. Che io sappia nessuno ha ricavato metodi di fattorizzazione dalla ipotesi che RH sia vera. Non esiste un teorema del tipo
Se vale RH allora, dato un intero N, faccio questo e questo e lo fattorizzo velocemente.Se esistesse lo si potrebbe usare: se N non si fattorizza nel tempo previsto la RH è falsa; se N si fattorizza siamo felici e rompiamo il codice RSA, anche senza avere dimostrato la RH.
Un teorema può avere un enunciato elegante ed essere esteticamente bello; può avere una dimostrazione difficile e profonda, ed essere per questo di grande interesse matematico. Però la sua forza, la sua efficacia, non sta nella dimostrazione ma nelle sue possibilità di applicazione, nelle conseguenze che da lui si possono trarre, e queste dipendono solo dalla sua verità.
Comunicate problemi, soluzioni, novità, url interessanti, critiche, suggerimenti, domande, correzioni inviandomi una lettera!. Nel soggetto inserite 'mathblog'.
Ricordiamo la definizione della funzione somma dei divisori di n, che si denota con s(n), già utilizzata nel blog sui numeri amicali del 31 maggio 2003:
s(n) = å d dove la sommatoria è estesa a tutti i divisori d di n. Esempi: s(9) = 1 + 3 + 9 = 13 s(10) = 1 + 2 + 5 + 10 = 18Dato un intero positivo n si definisce abbondanza di n ( abb(n) ) il rapporto tra s(n) ed n.
abb(n) = s(n)/n Esempi: abb(6) = s(6)/6 = 12/6 = 2 abb(10) = s(10)/10 = 18/10 = 9/5 = 1,8Se p è primo, i suoi divisori sono 1 e p, dunque s(p) = 1 + p.
Se n è la potenza d un primo, cioè n = pe, allora
s(n) = 1 + p + p2 + ... + pn = (pe+1 - 1)/(p-1)Inoltre s è una funzione aritmetica moltiplicativa, ovvero
se due interi m ed n non hanno fattori maggiori di 1 in comune, allora s(m n) = s(m) s(n).Pertanto se si conosce la fattorizzazione di n, s(n) e - conseguentemente - abb(n) sono facili da calcolare.
Supponiamo che la fattorizzazione di n sia: n = pm qk ·· rh con p, q, .. ,r primi, allora s(n) = ((pm+1 - 1) (qk+1 - 1) ·· (rh+1 - 1)) /((p-1) (q-1) ·· (r-1)) Esempio: n = 1234567890 = 2 32 5 3607 3803 s(n) = 3 13 6 3608 3804 = 3211610688 abb(n) = 3211610688/1234567890 = 178422816/68587105 = 2,6014L'unico numero che ha abbondanza 1 è 1 stesso. L'abbondanza di un numero primo p è 1 + 1/p. Quindi abb(p), con p primo, è di pochissimo superiore a 1, se p è grande.
n è perfetto se e solo se abb(n) = 2I primi quattro numeri perfetti sono 6, 28, 496 e 8128.
Esiste un legame tra i numeri perfetti pari ed i numeri primi di Mersenne:
n è un numero perfetto pari se e solo se n = (2p - 1) 2p-1 con 2p - 1 primo. Si noti che la primalità di 2p - 1 implica la primalità di p. Mp = 2p - 1, viene detto primo di MersenneAl momento sono noti 41 primi di Mesenne (si veda il blog precedente), e quindi sono noti 41 numeri perfetti pari.
Non si sa se esistano numeri perfetti dispari.
Si congettura (con molti indizi a favore) che ci siano infiniti numeri perfetti.
Ma, si sa, non tutti sono perfetti... e anche gli interi si dividono in perfetti, abbondanti e deficienti
n si dice abbondante se abb(n) > 2 n si dice deficiente se abb(n) < 2Non è difficile provare che
Teorema 1 Se k > 1, allora abb(kn) > abb(n)Il teorema 1 dimostra in particolare una asserzione che risale al XIII secolo: i multipli dei perfetti sono abbondanti, mentre i divisori dei perfetti sono deficienti.
Per il teorema 1 la successione abb(ph), con p primo e n = 1, 2, 3, ... è strettamente crescente. Questa sucessione però non tende all'infinito ma è limitata. Precisamente:
Teorema 2 abb(ph) = (ph+1 - 1)/(ph+1 - ph) lim abb(ph) = p/(p-1) h®¥Poiché l'abbondanza è moltiplicativa si ottiene subito che, se n è un intero positivo qualsiasi:
Teorema 3 lim abb(nh) = (p/(p-1)) (q/(q-1)) ··· (r/(r-1)) h®¥ dove p, q, r, ... sono i divisori primi di n. Esempio: lim abb(10h) = (2/(2-1)) (5/(5-1)) = 2 5/4 = 5/2 = 2,5 h®¥ abb(10) = 1,8 abb(100) = 2,17 abb(10000) = 2,4211 abb(1000000) = 2,48044 abb(100000000) = 2,49512 abb(10^17) = 2,49999In base al teorema 3, nessun numero da solo può produrre abbondanza illimitata, anche se utilizza tutte le sue infinite potenze. Però non c'è un limite all'abbondanza degli interi, presi nel loro insieme.
Teorema 4 L'abbondanza dei numeri interi non ha un limite superiore. In particolare dimostriamo che la successione abb(k!) tende all'infinito, al crescere di k. Dimostrazione Se n è divisibile per 1, 2, 3, ..., k ovviamente s(n) ³ n + n/2 + n/3 + ··· + n/k Dalla definizione di abbondanza si ha allora che abb(n) = s(n)/n ³ 1 +1/2 + 1/3 + ··· + 1/k Al crescere di k la somma 1 +1/2 + 1/3 + ··· + 1/k tende all'infinito (risultato noto come divergenza della serie armonica), e ne consegue la tesi.In base al risultato del Teorema 4, dato un numero positivo M grande a piacere, percorrendo la successione degli interi incontreremo, ad un certo punto, un individuo il quale ha un'abbondanza maggiore di M, ed è il più piccolo che la possiede. Questo signore ha tutta l'aria di essere un campione: la sua abbondanza è più grande di quella di tutti gli interi che lo precedono.
Diciamo che n è superabbondante se per ogni k minore di n abb(n) > abb(k)Ecco i primi 24 superabbondanti:
1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040, 10080, 15120, 25200, 27720, 55440con le loro rispettive abbondanze:
1, 1.5, 1.75, 2, 2.33333, 2.5, 2.52778, 2.58333, 2.8, 3, 3.03333, 3.1, 3.25, 3.35833, 3.42857, 3.46667, 3.54286, 3.71429, 3.8381, 3.9, 3.93651, 3.96603, 4.05195, 4.18701Vi sono numeri - tra i quali i perfetti - la cui abbondanza è un numero intero, essi sono detti multipefetti.
Diciamo che n è multiperfetto se s(n) = kn, con k intero k viene detto indice di n I numeri perfetti sono quelli con indice 2.Non è facile trovare numeri multiperfetti, e fino a qualche anno fa se ne conoscevano ben pochi.
Il più piccolo multiperfetto non perfetto è 120, che ha indice 3. Si ritiene che per ogni indice k maggiore di 2 esista solo un numero finito di interi multiperfetti con indice k. Si ritiene anche che tutti i multiperfetti di indice minore di 7 siano stati trovati; ce ne sono
6 di indice 3 36 di indice 4 65 di indice 5 245 di indice 6Sono noti 4676 multiperfetti con indici compresi tra 7 e 10, mentre la teoria ne prevede più di 9000. E' noto un solo intero di indice 11 (ha circa 1900 cifre), e dovrebbero esisterne una decina di migliaia.
Nessun intero multiperfetto con indice maggiore di 11 è noto, se ne trovate uno fatemelo sapere!
Comunicate problemi, soluzioni, novità, url interessanti, critiche, suggerimenti, domande, correzioni inviandomi una lettera!. Nel soggetto inserite 'mathblog'.