Conjetura de Collatz:
El siguiente programa siempre se detiene:
void function( ArbitraryInteger input){
while( input > 1){
if(input % 2 == 0)
input /= 2;
else
input = (input*3) + 1;
}
// Halt here
}
Ligera variación (sigue siendo una conjetura, porque se basa en un resultado del de Collatz):
Para alguna entrada, el siguiente programa nunca entrará en el mismo estado dos veces (donde el estado está determinado por el valor contenido en "entrada"):
void function( ArbitraryInteger input){
while( input >= 1){ // notice the "="
if(input % 2 == 0)
input /= 2;
else
input = (input*3) + 1;
}
}
Tenga en cuenta que el segundo programa nunca se detiene, independientemente de si el primer programa se detiene o no.
Se cree que el primer programa siempre termina para cualquier entrada, sin embargo, no tenemos la prueba de eso, y aún puede existir algún número entero para el que el programa no se detenga (también hay un premio de $ 100 por probarlo) .
El segundo programa también es interesante: establece que el programa nunca entrará en el mismo estado dos veces para alguna entrada, lo que básicamente requiere que el primer programa tenga una secuencia conocida que diverge sin repetirse. No solo requiere que la conjetura de Collatz sea falsa, sino que también es falsa y sin bucles , aparte del obvio bucle 1,4,2,1.
Si Collatz solo tiene contraejemplos en bucle, la variación de la conjetura es falsa
Si Collatz es falso sin bucles, la variación de la conjetura es verdadera
Si Collatz es verdadero, la variación es falsa
Si Collatz es falso tanto porque tiene bucles como porque tiene un número para el cual diverge, la variación de la conjetura es verdadera (solo requiere un número para el cual diverge sin ingresar un bucle)
Creo que la variación es más interesante (no solo porque la encontré por accidente y la noté gracias a @LieuweVinkhuijzen), sino porque en realidad requiere una prueba real. Por fuerza bruta, podemos encontrar un bucle un día u otro (y ese será un bucle de más de 70 números: el estado actual de la técnica es que no puede haber bucles infinitos más cortos que 68), y bruto forzar no es interesante: es solo un cálculo numérico. Sin embargo, no podemos forzar con fuerza bruta una secuencia divergente infinita, no sabemos si realmente terminará sin una prueba real.
EDITAR: me salteé la parte sobre la conjetura de Collatz, lo siento, realmente respondí de memoria con un algoritmo que leí hace unos años, no esperaba que ya se mencionara.
EDIT2: Un comentario me hizo notar que escribí el algoritmo con un error, sin embargo, ese error realmente hace que mi respuesta sea diferente de la conjetura de Collatz (pero una variación directa del mismo).