Congettura di Collatz:
Il seguente programma si ferma sempre:
void function( ArbitraryInteger input){
while( input > 1){
if(input % 2 == 0)
input /= 2;
else
input = (input*3) + 1;
}
// Halt here
}
Leggera variazione (ancora una congettura, perché si basa su un risultato di quello di Collatz):
Per alcuni input il seguente programma non entrerà mai nello stesso stato due volte (dove lo stato è determinato dal valore mantenuto da "input"):
void function( ArbitraryInteger input){
while( input >= 1){ // notice the "="
if(input % 2 == 0)
input /= 2;
else
input = (input*3) + 1;
}
}
Si noti che il secondo programma non si arresta mai, indipendentemente dal fatto che il primo programma si arresti o meno.
Si ritiene che il primo programma termini sempre per qualsiasi input, tuttavia non ne abbiamo la prova e potrebbe esistere ancora un numero intero per il quale il programma non si ferma (c'è anche un premio di $ 100 per dimostrarlo) .
Anche il secondo programma è interessante: afferma che il programma non entrerà mai nello stesso stato due volte per alcuni input, il che richiede sostanzialmente che il primo programma abbia una sequenza nota per divergere senza ripetere. Non solo richiede che la congettura di Collatz sia falsa, ma richiede che sia falsa e senza anelli , a parte l'ovvio ciclo 1,4,2,1.
Se Collatz ha solo contro-esempi in loop, la variazione sulla congettura è falsa
Se Collatz è falso senza loop, la variazione sulla congettura è vera
Se Collatz è vero, la variazione è falsa
Se Collatz è falso sia perché ha anelli sia perché ha un numero per cui diverge, la variazione sulla congettura è vera (richiede solo un numero per cui diverge senza entrare in un ciclo)
Penso che la variazione sia più interessante (non solo perché l'ho trovata per caso e l'ho notata grazie a @LieuweVinkhuijzen), ma perché in realtà richiede una vera prova. Con la forza bruta, potremmo essere in grado di trovare un loop un giorno o l'altro (e che sarà un loop più lungo di 70 numeri: lo stato dell'arte attuale è che non ci possono essere infiniti loop più corti di 68 o giù di lì) e brute forzare non è interessante: è solo uno scricchiolio dei numeri. Tuttavia non possiamo forzare una sequenza divergente infinita, non sappiamo se finirà davvero senza una vera prova.
EDIT: Ho scusato la parte sulla congettura di Collatz Mi dispiace, ho sinceramente risposto a memoria con un algoritmo che ho letto alcuni anni fa, non mi aspettavo che fosse già stato menzionato.
EDIT2: Un commento mi ha fatto notare che ho scritto l'algoritmo con un errore, tuttavia, quell'errore rende la mia risposta diversa dalla congettura di Collatz (ma una sua variazione diretta).