Este programa de 579 bits en el cálculo binario de Lambda tiene un estado de detención desconocido:
01001001000100010001000101100111101111001110010101000001110011101000000111001110
10010000011100111010000001110011101000000111001110100000000111000011100111110100
00101011000000000010111011100101011111000000111001011111101101011010000000100000
10000001011100000000001110010101010101010111100000011100101010110000000001110000
00000111100000000011110000000001100001010101100000001110000000110000000100000001
00000000010010111110111100000010101111110000001100000011100111110000101101101110
00110000101100010111001011111011110000001110010111111000011110011110011110101000
0010110101000011010
Es decir, no se sabe si este programa finaliza o no. Para determinarlo, debes resolver la conjetura de Collatz , o, al menos, para todos los números hasta 2 ^ 256. En este repositorio hay una explicación completa de cómo se obtuvo este programa.
¿Hay (mucho) programas BLC más cortos que también tienen un estado de detención desconocido?
algorithms
computability
kolmogorov-complexity
MaiaVictor
fuente
fuente
Respuestas:
Sí. Esta página dice que hay 98 5-estatales máquinas de Turing , cuyos estados de detención son desconocidos. Molesto, no da ningún ejemplo de tales máquinas, pero esta página de 26 años da 2 máquinas Turing de 5 estados cuyos estados de detención aparentemente eran desconocidos en ese momento. (La búsqueda de "contador simple" lo llevará directamente entre esos 2.) Los copié aquí en caso de que el enlace se caiga:
fuente
Conjetura de Collatz:
El siguiente programa siempre se detiene:
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"):
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).
fuente
input > 1
lugar deinput >= 1
? Tal como está ahora, este programa repetirá>
, sin embargo, siempre y cuando no tengamos una prueba para detenernos,>
no podemos estar seguros de que llegaremos al1 -> 4 -> 2 -> 1
bucle (por ejemplo, si no termina por>
eso, no lo hagas ) t reach>=
)