MATEMATICA
NUMERI IPERREALI SUPERREALI SURREALI

1. PREMESSA

Il lavoro di questa pagina è un viaggio che parte dai numeri iperreali, passa per i superreali per atterrare sui numeri surreali che sono il target principale.

Per i matematici specialisti che visitano questa pagina rammento che io sono un ingegnere per cui il mio approccio è piuttosto pratico sebbene questi argomenti siano molto astratti. Se ne guadagna in comprensione ma ovviamente introduco della approssimazioni rispetto alla letteratura di settore.

Per i numeri surreali ho sviluppato del software python (disponibile a tutti su github.com/mmattiucci2024/surreal_numbers) per la loro trattazione con esempi interessanti di applicazioni pratiche.

2. IPER REALI e SUPER REALI
(breve introduzione)

Abbiamo già parlato, in questo sito web, dei numeri reali e di molteplici implicazioni che si portano dietro essendo per la maggioranza valori al limite. Ora possiamo estendere la trattazione andando a considerarne alcune estensioni particolarmente interessanti.

Partiamo dai numeri iperreali R* ossia dall'insieme dei reali R "aumentato" dei cosiddetti numeri infinitesimali ed infiniti. Dall'analisi matematica tipicamente studiata nei primi anni nelle università scientifiche si sa che valori infinitesimali e infiniti sono spesso trattati nell'ambito dei limiti, ad esempio, di funzioni e successioni numeriche, qui invece andiamo a considerarli come numeri a tutti gli effetti.

Un infinitesimale EPSILON è un numero diverso da zero più piccolo di qualsiasi numero reale. Dal punto di vista formale non è difficile realizzarlo, basta considerare EPSILON un valore non nullo sempre minore di 1/n per n grande a piacere appartenente ai numeri naturali, escluso lo zero ovviamente. Un numero nella forma x+EPSILON dove x è un valore reale, realizza un numero iperreale, appartenente all'insieme R*.

Un infinito INFINITO è un numero più grande di qualsiasi numero reale. Anche in questo caso lo si può definire formalmente come un valore sempre maggiore di n per n grande a piacere appartenente ai numeri naturali. Analogamente, un numero nella forma x+INFINITO dove x è un valore reale, realizza un numero iperreale, appartenente all'insieme R*.

Sebbene quanto appena svolto da un punto di vista formale matematico non sia eccessivamente complesso, le implicazioni sono notevoli. R* eredita molto da R ma introduce anche delle questioni difficili da concettualizzare. Ad esempio se si prendono due infinitesimali diversi EPSILON1 e EPSILON2 ed uno stesso valore reale x: è lecito dire che i due numeri iperreali x+EPSILON1 e x+EPSILON2 sono uguali? Questo è stato superato considerando che i numeri reali negli iperreali sono delle classi di equivalenza. Ancora, ricordiamo dagli studi di analisi I che 0/0 e INFINITO/INFINITO sono forme di indeterminazione ossia possono dare qualsiasi valore, qui danno come risultato 1, inoltre 5+INFINITO dovrebbe dare INFINITO e 5+EPSILON dovrebbe essere 5 mentre qui si ha che sono tutti numeri diversi tra loro.

Infine, come può essere rappresentato un numero iperreale? Per farlo abbiamo invocato dei concetti al limite su n e 1/n, simile a quello delle successioni numeriche ma sicuramente non possiamo usare la notazione decimale o binaria o in qualsiasi base. Nel prosieguo di questa pagina capiremo perchè sto facendo queste considerazioni, in definitiva abbiamo introdotto delle entità numeriche difficile da trattare e rappresentare. Questa operazione fu condotta prima da Edwin Hewitt (un matematico di Harvard) nel 1948 e più recentemente riconfermata dalle ricerche di Abraham Robinson dell'università Yale nel 1966 sul suo libro Non-Standard Analysis.

Ma andiamo avanti e passiamo brevemente ai superreali, un'astrazione numerica che, sempre partendo dai numeri reali permette non solo la trattazione di infiniti e infinitesimali (come avviene con i numeri iperreali) quali valori numerici, ma anche la gestione di gerarchie di infinito e infinitesimimali. In pratica, se è difficile rappresentare gli iperreali, trattare e rappresentare i superreali è ancora più difficile. Anche considerando che sulla definizione dei superreali ancora sussistono delle differenze a seconda degli ambiti della matematica in cui si considerano.

3. NUMERI SURREALI

Il mio interesse per i numeri surreali si è sviluppato partendo dalla teoria dei giochi che da anni studio per le analisi delle possibili decisioni in ambienti complessi.

Sono arrivato subito al testo che li ha resi famosi e che ho letto con velocità e attenzione (datane anche la brevità): Surreal Numbers, how two ex-students turned on to pure mathematics and found total happiness scritto da un autore che non ha bisogno di presentazioni in ambito informatico e matematico - D.E.Knuth (per chi è interessato si trova facilmente online Ed. Addison Wesley). Riporto per ovvio rispetto l'immagine della copertina.

Per una visione più approfondita ed onesta va detto che i numeri surreali furono ideati da John Horton Conway allo scopo di analisi dei giochi, purtuttavia, il termine "surreal number" venne introdotto inequivocabilmente da Donald Knuth nel 1974 e ripreso anche dallo stesso Conway nel 1976 nel libro dal titolo On Numbers and Games (copertina ad inizio di questa pagina web).

Ho poi trovato congrua documentazione su Internet e segnalo in particolare la bella tesi di laurea magistrale in matematica sui numeri surreali di Zocco Giovanni (Università di Padova) e il divertente testo Elementare introduzione in prosa o quasi ai numeri surreali.

La definizione dei numeri surreali è davvero semplice e la sua potenza rappresentativa dei numeri molto elevata. I surreali possono comprendere e rappresentare sia iperreali che superreali. Nella considerazione che questa pagina è collegata al relativo sviluppo in python che ho compiuto di numeri e operazioni con i surreali, da adesso in avanti daremo per buono il concetto di insieme vuoto e lo indicheremo come la lista vuota del citato linguaggio ossia []. Allo stesso modo un qualsiasi insieme sarà [X1,X2,...]. Una volta stabilito questo formalismo di comodo e senza entrare nei dettagli astratti dell'esistenza o meno degli insiemi e soprattutto dell'insieme vuoto, un numero surreale X è una coppia di insiemi Xs e Xd normalmente definiti insieme sinistro (Xs) e insieme destro (Xd) di X:

X = (Xs,Xd)

Gli insiemi sinistro e destro contengono, ricorsivamente, n ed m numeri surreali: Xs = [Xs1,Xs2,...Xsn] e Xd = [Xd1,Xd2,...Xdm] con il vincolo che nessun elemento Xsi sia maggiore o uguale di nessun Xdj.

Un semplicissimo e particolare numero surreale che risponde alla definzione alla lettera è il seguente: ([],[]). Come si può vedere impiega solo l'insieme vuoto ed è altamente simmetrico. Assiomaticamente questo viene definito da Conway (e naturalmente da Knuth) quale zero dei surreali (da adesso in avanti i numeri scritti letteralmente con lettere maiuscole indicheranno numeri surreali):

ZERO = ([],[])

Anche i seguenti sono numeri surreali ben formati secondo definizione: ([ZERO],[]) e ([],[ZERO]). Essi sono asimmetrici al loro interno e rispetto allo ZERO si vede chiaramente che stanno uno a destra e uno a sinistra. Assiomaticamente essi vengono definito come uno e meno uno surreali:

UNO = ([ZERO],[]) = ([([],[])],[])

MENO_UNO = ([],[ZERO]) = ([],[([],[])])

A questo punto bisogna definire la relazione d'ordine sui numeri surreali che, assiomaticamente, si può formalizzare in questo modo:

se X = (Xs,Xd) e Y = (Ys,Yd) sono due numeri surreali, si ha che X ≤ Y se e solo se nessun elemento di Xs è maggiore o uguale a Y e nessun elemento di Yd è minore o uguale a X.

Si tratta ovviamente ancora una volta di una definizione ricorsiva e per quanto astratta funziona in maniera semplice ed efficace. Se si considera ad esempio ZERO e UNO surreali (rispettivamente ([],[]) e ([ZERO],[])) si ha Xs è vuoto [] e Yd anche, per cui la definizione risponde alla perfezione e quindi ZERO ≤ UNO. Analogamente se prendiamo MENO_UNO e ZERO il ragionamento è identico e quindi MENO_UNO ≤ ZERO. Lo stesso banalmente accade per MENO_UNO ≤ UNO.

Possiamo ora introdurre gli assiomi per definire la somma di numeri surreali:

se X = (Xs,Xd) e Y = (Ys,Yd) sono due numeri surreali, la somma Z = X + Y è definita come il numero surreale
Z = (Zs,Zd) dove:
Zs = [Xs1+Y,Xs2+Y,...,Xsn+Y,Ys1+X,Ys2+X,...,Ysm+X]
Zd = [Xd1+Y,Xd2+Y,...,Xdh+Y,Yd1+X,Yd2+X,...,Ydk+X]

Eseguiamo quindi la semplice operazione ZERO + UNO, ossia ([],[]) + ([ZERO],[]) per vedere che, essendo Xs,Xd e Yd vuoti, ottiene ([ZERO],[]) ossia UNO confermando le nostre aspettative classiche che ZERO è elemento neutro per la somma.
Più interessante è calcolare UNO + UNO = ([ZERO],[]) + ([ZERO],[]) che viene Z:
Zs = [ZERO+UNO,ZERO+UNO] = [UNO,UNO]
Zd = []
quindi Z = UNO + UNO = ([UNO,UNO],[]) = ([UNO],[])
naturalmente UNO + UNO lo chiameremo DUE per similarità con i numeri naturali e vedendo che:
UNO = ([ZERO],[]), DUE = ([UNO],[]), come sarà definito il numero TRE? Ovviamente ([DUE],[])...
più in generale se X è un numero surreale (non necessariamente intero) si può dimostrare che ([X],[]) è il suo successore, ossia X + UNO, mentre ([],[X]) è il suo predecessore, ossia X - UNO.

Andiamo a vedere uno degli output del software da me costruito (github.com/mmattiucci2024/surreal_numbers) per esplicitare la rappresentazione completa di alcuni numeri surreali interi positivi e negativi:
...
([], [([], [([], [([], [([], [([], [([], [])])])])])])]) = MENO_SEI
([], [([], [([], [([], [([], [([], [])])])])])]) = MENO_CINQUE
([], [([], [([], [([], [([], [])])])])]) = MENO_QUATTRO
([], [([], [([], [([], [])])])]) = MENO_TRE
([], [([], [([], [])])]) = MENO_DUE
([], [([], [])]) = MENO_UNO
([], []) = ZERO
([([], [])], []) = UNO
([([([], [])], [])], []) = DUE
([([([([], [])], [])], [])], []) = TRE
([([([([([], [])], [])], [])], [])], []) = QUATTRO
([([([([([([], [])], [])], [])], [])], [])], []) = CINQUE
([([([([([([([], [])], [])], [])], [])], [])], [])], []) = SEI
...

I semplici strumenti appena introdotti possono costruire rappresentazioni numeriche molto ricche, se ad esempio consideriamo l'insieme di tutti gli interi surreali:
INTERI_SURREALI = [UNO,DUE,TRE,QUATTRO,...]
cosa rappresenta il numero surreale (INTERI_SURREALI,[])? Innanzitutto è ben formato (basta verificare la definizione di surreale). Poi, considerando la relazione d'ordine di cui sopra si scopre che per qualsiasi numero surreale X:
X ≤ (INTERI_SURREALI,[]) quindi:
(INTERI_SURREALI,[]) è un numero surreale infinito. Il fatto interessante da osservare subito è che la rappresentazione di INFINITO = (INTERI_SURREALI,[]) non ha niente di sostanzialmente diverso da quella dei numeri surreali finiti per cui è possibile applicare sia le relazioni d'ordine che le operazioni, senza invocare il concetto di passaggio al limite.

Ad esempio INFINITO + UNO = ([INFINITO],[])

Andiamo ora a considerare un'esempio semplice ma molto importante di due semplici numeri surreali: X = ([UNO],[DUE]) e Y = ([ZERO],[TRE]), applicando la relazione d'ordine si ha che X ≤ Y e Y ≤ X, in definitiva X e Y sembrano coincidere ma la loro rappresentazione è diversa.

X ed Y sono lo stesso numero surreale, sono equivalenti, ma anche ([MENO_UNO],[QUATTRO]) è equivalente a X ed Y come si può facilmente verificare. In pratica i numeri surreali sono classi di equivalenza e lo stesso numero surreale si può rappresentare in una infinità di modi diversi.

Proprio in tale senso andiamo a considerare che possono essere dimostrati due punti fondamentali:

a. un numero surreale X = ([Xs1,Xs2,...,Xsn],[Xd1,Xd2,...,Xdm]) è sempre equivalente a Y = ([Xsmax],[Xdmin]) ossia la parte sinistra e la parte destra si possono rispettivamente ridurre al max (SX) e al min (DX).

b. un numero surreale nella forma X = ([Xs1],[Xd1]) con Xs1 e Xd1 non transifiniti, può essere visto come la classe di equivalenza della media aritmetica (Xs1+Xd1)/2.

Abbiamo quindi un modo univoco e pratico per convertire un numero surreale finito in un numero reale che ne rappresenti la rispettiva classe di equivalenza:

reale(ZERO) = reale(([],[])) = 0 per definizione.
reale(UNO) = reale(([([],[])],[])) = 1 per definizione.
reale(MENO_UNO) = reale(([],[([],[])])) = -1 per definizione.
reale(([Xs1,Xs2,...,Xsn],[Xd1,Xd2,...,Xdm])) =
= reale(([Xsmax],[Xdmin])) per (a.)
reale(([Xs1],[Xd1])) = (reale(Xs1)+reale(Xd1))/2 per (b.)
reale(([],[Xd1])) = reale(Xd1) - 1 predeccesore
reale(([Xs1],[])) = reale(Xs1) + 1 successore.

Ad esempio:
reale(([UNO],[DUE])) =
= reale(([ZERO],[TRE])) =
= reale(([MENO_UNO],[QUATTRO])) = 3/2

Dato che si parla di numeri surreali e di equivalenze, la classe di equivalenza in studio è proprio il surreale TRE_MEZZI, cioè abbiamo la nostra prima frazione surreale. Impiegando i valori base ZERO e UNO otteniamo la frazione diadica surreale più semplice, basta impiegare (b.):
reale(([ZERO],[UNO])) = reale(([([],[])],[([([],[])],[])])) = 1/2
abbiamo individuato ovviamente la classe che è il numero surreale UN_MEZZO.

Andando per gradi potremo trovare una procedura generalizzata per costruire una funzione surreale(x) che associa al valore reale x una corrispettiva classe di equivalenza X che è un numero surreale (in pratica l'operazione inversa di reale(X)).

Da quanto visto possiamo assumere che:
surreale(1/2) = UN_MEZZO = ([ZERO],[UNO])
non è difficile capire, applicando lo stesso schema ricorsivamente:
surreale(1/4) = UN_QUARTO = ([ZERO],[UN_MEZZO])
surreale(1/8) = UN_OTTAVO = ([ZERO],[UN_QUARTO])
surreale(1/16) = UN_SEDICESIMO = ([ZERO],[UN_OTTAVO])
...
surreale(1/2n) = ([ZERO],[surreale(1/2n-1)])
...

La procedura per ottenere il surreale delle frazioni diadiche 1/2n è quindi la seguente:

surreale(1/2) = ([([],[])],[([([],[])],[])])
surreale(1/2n) = ([ZERO],[surreale(1/2n-1)])

Sapendo che c'è un algoritmo che permette, da qualsiasi numero reale 0 < x < 1 di approssimarlo con una serie finita di frazioni diadiche:
-> esistono i1,i2,...,im tali che:
-> x ≈ 1/2i1 + 1/2i2 + ... 1/2i1 + 1/2im
possiamo subito estendere la funzione surreale() all'intervallo aperto ]0,1[ nel seguente modo:
surreale(x) =
surreale(1/2i1) +
+ surreale(1/2i2) +
+ ... + surreale(1/2im)
dove, in questo caso, la somma + è da considerare come l'operazione di somma tra numeri surreali sopra definita.

L'estensione di surreale() a tutto Q l'insieme dei razionali (num/den) è ora semplice:
se x è intero positivo:
-> surreale(x) = n-esimo successore(ZERO)
se x è intero negativo:
-> surreale(x) = n-esimo predecessore(ZERO)
se x = num/den non ulteriormente semplificabile:
-> x = intero + alfa, dove 0 < alfa < 1, quindi:
-> surreale(x) = surreale(intero) + surreale(alfa).

Dal mio punto di vista ingegneristico, dato che un elaboratore può trattare solo sottoinsiemi di Q, la funzione surreale() risulta a questo punto del tutto definita. Mancano solo i transfiniti, ossia i surreali INFINITO, MENO_INFINITO, EPSILON e MENO_EPSILON.

Per essi "furbescamente" considero max_num il massimo valore numerico razionale che intendo rappresentare nell'algoritmo e quindi:

INFINITO = surreale(max_num)

EPSILON = surreale(1/max_num)

Per invertire il segno di un numero surreale mi riferisco ai risultati di Conway:
se X = ([Xs1,Xs2,...Xsn],[Xd1,Xd2,...Xdm]):
-> -X = ([-Xd1,-Xd2,...,-Xdn],[-Xs1,-Xs2,...,-Xsm])
da cui si possono determinare anche MENO_INFINITO e MENO_EPSILON.

4. IL SOFTWARE SVILUPPATO

Il software che ho sviluppato e messo a disposizione di tutti su github.com/mmattiucci2024/surreal_numbers implementa quanto riportato sopra in maniera efficiente dal punto di vista computazionale. Sebbene la teoria sui numeri surreali sia chiara e in fin dei conti nemmeno troppo difficile da implementare in un software, se questo passaggio lo si opera direttamente si ottengono funzioni e procedure scarsamente efficienti che non raggiungono soluzioni in tempi accettabili. Un classico esempio è quello della somma surreale ma ancora di più del prodotto surreale (la cui teoria non è riportata sopra), anche per numeri relativamente piccoli le ricorsioni richieste sono molto elevate per non parlare del fatto che i numeri surreali nei passaggi intermedi tendono a crescere nella loro descrizione e devono essere continuamente ridotti (con ulteriore sforzo di elaborazione). Il software python realizzato tende invece al risultato efficiente, riducendo automaticamente la dimensione dei numeri surreali e passando per le conversioni in numeri razionali. Sono disponibili le relazioni d'ordine, l'equivalenza, le operazioni +,-,*,/, le funzioni successore e predecessore, la funzione ben-formato, ecc.

Di seguito, quali esempi, viene riportato il calcolo di pi-greco surreale e del numero di Eulero e surreale mediante le procedure e funzioni fornite dal citato software:

PI = ([([([([([([], [([], [])])], [([([], [([], [])])], [([([([], [([], [])])], [([([], [([], [])])], [([([([([], [([], [])])], [([([], [([], [])])], [([([([], [([], [])])], [([([], [([], [])])], [([([([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([([], [([], [])])], [([([([([([([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([([([], [([], [])])], [([([([([([([], [([], [])])], [([([([([], [([], [])])], [([([([], [([], [])])], [([([], [([], [])])], [([([([], [([], [])])], [([([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([([([], [([], [])])], [([([], [([], [])])], [([([([([([], [([], [])])], [([([], [([], [])])], [([([([([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([([([([], [([], [])])], [([([([], [([], [])])], [([([([([([([([], [([], [])])], [([([([([], [([], [])])], [([([([([([([([([], [([], [])])], [([([([], [([], [])])], [([([], [([], [])])], [([([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([([([([([([([([([([], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([([([([([([([([([([([], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([([([([([([([([([([([([], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([([([([([([([([([([([([([([([], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([([([([([([([([([([([([([([([], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])], [([], [])])])])])])])])])], [([([], [])], [])])])])], [([([], [])], [])])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])])], [([([], [])], [])])], [([([], [])], [])])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])])], [([([], [])], [])])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])])])])])])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])])])], [([([], [])], [])])], [([([], [])], [])])])])])], [([([], [])], [])])])])])], [([([], [])], [])])])], [([([], [])], [])])])])], [([([], [])], [])])])], [([([], [])], [])])], [([([], [])], [])])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])])], [([([], [])], [])])], [([([], [])], [])])])])])])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])])], [([([], [])], [])])])])])])], [([([], [])], [])])], [([([], [])], [])])])])], [([([], [])], [])])])])], [([([], [])], [])])], [([([], [])], [])])])])], [([([], [])], [])])])])], [([([], [])], [])])], [])], [])], []) well formed surreal number: True

pi = 3.1496

E = ([([([([([([], [([], [])])], [([([([([], [([], [])])], [([([([([([([([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([([], [([], [])])], [([([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([([], [([], [])])], [([([], [([], [])])], [([([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([], [([], [])])], [([([([], [([], [])])], [([([([([], [([], [])])], [([([([([([([([([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [])])])])])])])])])])])])])])])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [])])])])])])])])])])])])])])])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [])])])])])])])])])])])])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [])])])])])])])])])])])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [([([], [])], [])])])])])])])])])])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])])], [([([], [])], [])])], [([([], [])], [])])])], [([([], [])], [])])])])])])])])], [([([], [])], [])])])])], [([([], [])], [])])])])])])])], [([([], [])], [])])])], [([([], [])], [])])])])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])], [([([], [])], [])])])], [([([], [])], [])])], [([([], [])], [])])])], [([([], [])], [])])], [([([], [])], [])])], [])], []) well formed surreal number: True

e = 2.7183

naturalmente, come si può vedere dalle conversioni in razionali, soffrono di approssimazioni ma su queste possono essere effettuate delle regolazioni e comunque non ci si ferma in fase di elaborazione.
Sempre nel software viene calcolata anche la sequenza di Fibonacci surreale ed è riportato un generatore di numeri random surreali funzionante che calcola una piccola sequenza.

5. GIOCHI E DECISIONI

I numeri surreali sono stati inizialmente realizzati per modellizzare decisioni e giochi di particolare tipologia, precisamente situazioni in cui:
a. le decisioni devono essere a informazione perfetta (nessuna casualità, nessuna informazione nascosta, solo decisioni strategiche);
b. due avversari decidono alternativamente su un terreno comune;
c. la quantità di decisioni possibili da ogni stato di partenza deve essere finita;
d. il gioco deve essere aciclico, cioè non si deve poter essere decisioni che riportino ad una posizione precedente;
e. dei precisi stati finali devono definire una vittoria o una sconfitta di uno dei due decisori (avversari).

A tutto questo naturalmente va aggiunto che ogni stato della situazione deve poter essere precisamente descritto da due insiemi di decisioni possibili uno A per il primo avversario e uno B per il secondo. Si vede semplicemente emergere la classica struttura che abbiamo visto dei numeri surreali.

Il gioco del tris risponde alle caratteristiche decisionali di cui sopra, ecco quindi schematizzata una partita:

Stato tabella:
([UNO,DUE,TRE,QUATTRO,CINQUE,SEI,SETTE,OTTO,NOVE],[])
Stato avversario sinistro: []
Stato avversario destro: []
il sinistro gioca, sceglie la casella CINQUE:
Stato tabella:
([],[UNO,DUE,TRE,QUATTRO,SEI,SETTE,OTTO,NOVE])
Stato avversario sinistro: [CINQUE]
Stato avversario destro: []
il destro gioca, sceglie la casella UNO:
Stato tabella:
([DUE,TRE,QUATTRO,SEI,SETTE,OTTO,NOVE],[])
Stato avversario sinistro: [CINQUE]
Stato avversario destro: [UNO]
il sinistro gioca, sceglie la casella TRE:
Stato tabella:
([],[DUE,QUATTRO,SEI,SETTE,OTTO,NOVE])
Stato avversario sinistro: [CINQUE,TRE]
Stato avversario destro: [UNO]
il destro gioca, sceglie la casella QUATTRO:
Stato tabella:
([DUE,SEI,SETTE,OTTO,NOVE],[])
Stato avversario sinistro: [CINQUE,TRE]
Stato avversario destro: [UNO,QUATTRO]
il sinistro gioca, sceglie la casella SETTE:
Stato tabella:
([DUE,SEI,OTTO,NOVE],[])
Stato avversario sinistro: [CINQUE,TRE,SETTE]
Stato avversario destro: [UNO,QUATTRO]
Il gioco termina perchè [CINQUE,TRE,SETTE] è un tris.

Come si può capire facilmente lo stato del gioco, ossia della tabella del tris, è un numero surreale, mentre lo stato degli avversari è una lista di numeri surreali. Allo stesso modo possono essere facilmente modellizzate delle decisioni binarie o comunque esprimibili mediante uno schema di evoluzione ad albero.

6. CONCLUSIONI

La potenza espressiva dei numeri surreali, come si è potuto vedere, è notevole e questo in campi non necessariamente matematici "puri". Ovviamente gli attuali sistemi di elaborazione non sono costruiti per trattare i numeri come "surreali" per cui l'efficienza di calcolo non è necessariamente garantita. In questo lavoro non sono state approfondite tutte le caratteristiche dei numeri surreali in quanto, da buon informatico, ne ho analizzato la loro potenza espressiva implementandola con degli algoritmi che risultassero almeno un poco efficienti. Molto altre analisi potrebbero essere svolte ma vengono lasciate alla fantasia del lettore.