Le tabelle Laver forniscono esempi di programmi che non hanno dimostrato di terminare nel sistema assiomatico standard della matematica ZFC ma che terminano quando si assumono assiomi cardinali molto grandi.
introduzione
I classici tavoli Laver sono le algebre finite uniche con set sottostante e un'operazione che soddisfa l'identità e dove per e dove .An
{1,...,2n}
*
x * (y * z)=(x * y) * (x * z)
x*1=x+1
x<2n
2n*1=1
Maggiori informazioni sulle classiche tabelle Laver sono disponibili nel libro Trecce e autodistribuzione di Patrick Dehornoy.
Sfida
Qual è il codice più breve (in byte) che calcola 1*32
nelle classiche tabelle Laver e termina esattamente quando trova un n
con ? In altre parole, il programma termina se e solo se trova un con ma per il resto funziona per sempre.1*32<2n
n
1*32<2n
Motivazione
Un cardinale rango-in-rango (chiamato anche un cardinale I3) è un livello estremamente grande di infinito e se uno assume l'esistenza di un cardinale rango-in-rango, allora è in grado di dimostrare più teoremi che se non lo fa presumere l'esistenza di un cardinale di rango in rango. Se esiste un cardinale di rango in rango, allora c'è un tavolo Laver classico dove . Tuttavia, non esiste alcuna prova nota che in ZFC. Inoltre, è noto che l'almeno dove è maggiore di (che è un numero estremamente elevato poiché la funzione Ackermann è una funzione rapida crescita). Pertanto, tale programma durerà per un periodo di tempo estremamente lungo.An
1*32<2n
1*32<2n
n
1*32<2n
Ack(9,Ack(8,Ack(8,254)))
Ack
Voglio vedere quanto breve può essere scritto un programma in modo che non sappiamo se il programma termina usando il sistema assiomatico standard ZFC ma dove sappiamo che il programma alla fine termina in un sistema assiomatico molto più forte, vale a dire ZFC + I3. Questa domanda è stata ispirata dal recente post di Scott Aaronson in cui Aaronson e Adam Yedidia hanno costruito una macchina di Turing con meno di 8000 stati in modo tale che ZFC non può dimostrare che la macchina di Turing non si interrompe ma è noto che non termina quando si assumono grandi ipotesi cardinali.
Come vengono calcolate le classiche tabelle Laver
Quando si calcolano le tabelle Laver, di solito è conveniente utilizzare il fatto che in algebra , abbiamo tutto compreso .An
2n * x=x
x
An
Il codice seguente calcola la classica tabella Laver An
# table (n, x, y) restituisce x * y in A n Tabella: = function (n, x, y) se x = 2 ^ n restituisce y; elif y = 1 quindi restituisce x + 1; else restituisce table (n, table (n, x, y-1), x + 1); fi; fine;
Ad esempio, l'input table(4,1,2)
tornerà 12
.
Il codice per table(n,x,y)
è piuttosto inefficiente e può essere calcolato nella tabella Laver solo in un ragionevole lasso di tempo. Fortunatamente, ci sono algoritmi molto più veloci per il calcolo delle classiche tabelle Laver rispetto a quelli sopra indicati.A4
Ack(9,Ack(8,Ack(8,254)))
è un limite inferiore per la prima tabella in cui la prima riga ha il periodo 32, ovvero dove 1*16 < 2^n
?
table(n,x,y)
e penso che ci vorranno tra 25 e 30 stati per impostare le costanti e il ciclo esterno. L'unica rappresentazione di TM diretta che posso trovare su esolangs.org è esolangs.org/wiki/ScripTur e non è poi così da golf.