Esta es solo una idea que se me ocurrió mientras leía a Marvin L. Minsky, "La indisolución recursiva del problema de la etiqueta de Post y otros temas en la teoría de las máquinas de Turing"; en particular el famoso teorema Ia:
Teorema Ia: podemos representar cualquier función recursiva parcial
mediante un programa que opera en dos enterosS 1F( n )S1 y
utilizando las instrucciones I j de las formas:
(i) AGREGAR 1 a S j , y pasar a I j 1
(ii ) SUSTRATO 1 de S j , si S j ≠ 0 y va a I j 1 , de lo contrario vaya a I j 2
Es decir, podemos construir un programa que comience con S 1 = 2 nS2yoj
Sjyoj1
SjSj≠ 0yoj1yoj2
S1= 2nortey y finalmente se detiene con S 1 = 2 f ( n ) y S 2 = 0S2= 0S1= 2F( n )S2= 0
Si tiene un DFA bidireccional con un contador sobre una cinta (semi) infinita donde la entrada se da en unario: entonces el DFA puede:$ 12norte000 ...
- lea la entrada unaria (y guárdela en el contador);
- trabaje en la parte de la cinta y use la distancia desde 1 s como el segundo contador.0 0∞1
para que pueda simular una máquina Turing completa de dos contadores.
Ahora, si tiene una función recursiva que se ejecuta en el tiempo T ( n ) en una máquina Turing estándar, un DFA bidireccional con un contador que comienza en la cinta finita $ 1 m $F( n )T( n ) $ 1metroPS(donde y T ′ ( n ) ≫ T ( n ) ) pueden:m = 2norte3T′( n )T′(n)≫T(n)
- lea la entrada unaria (y guárdela en el contador);
- volver al símbolo más a la izquierda;
- divida el contador entre 3 hasta que el contador contenga de esta manera: vaya a la derecha en bucle desde los estados q z 0 , q z 1 , q z 2 y reste 1; si el contador alcanza 0 en el estado q z 0, vaya al símbolo más a la izquierda agregando +1 y continúe el ciclo de división; de lo contrario, agregue 1 (si está en el estado q z 1 ) o 2 (si está en el estado q z 2 ) y vaya al símbolo a la izquierda agregando + 3 (es decir, recuperar el valor anterior del contador no divisible por 3) y continuar con el paso 4 .;2nqz0,qz1,qz2qz0qz1qz2
- en este punto el contador contiene ;2n
- calcule usando el espacio T ' ( n ) disponible a la derecha como el segundo contador (el valor del segundo contador es la distancia desde el símbolo más a la izquierda $ ).2f(n)T′(n)$
Entonces, con la codificación de entrada especial descrita anteriormente que le da suficiente espacio en la cinta finita, un DFA bidireccional con un contador y un alfabeto unario puede calcular cada función recursiva.
Si el enfoque es correcto, sería interesante razonar sobre cómo elegir o cuándo es suficiente elegir un gran impar k ≫ 2 y codificar la entrada como 1 m , m = 2 n k nT′(n)≫T(n)k≫21mm=2nkn