Essa é apenas uma idéia que me veio à mente ao ler Marvin L. Minsky, "Insolubilidade recursiva do problema de etiqueta de Post e outros tópicos da teoria das máquinas de Turing"; em particular o famoso teorema Ia:
Teorema Ia: Podemos representar qualquer função recursiva parcial
por um programa operando em dois inteiros S 1 e S 2
usando as instruções I j dos formulários:
(i) ADD 1 a S j e vá para I j 1
( ii) SUBTRATO 1 de S j , se S j ≠ 0 e for para I j 1 , caso contrário, vá para I j 2
Ou seja, podemos construir um programa que comece com S 1f( N )S1 1S2Euj
SjEuj1 1
SjSj≠ 0Euj1 1Euj2
e S 2 = 0 e, eventualmente, para com S 1 = 2 f ( n ) e S 2 = 0S1 1= 2nS2= 0S1 1= 2f( N )S2= 0
Se você tiver um DFA bidirecional com um contador em uma fita (semi) infinita, em que a entrada é dada em unário: o DFA pode:$ 12n000 ...
- leia a entrada unária (e guarde-a no balcão);
- trabalho no parte da fita e usar a distância do 1 s como o segundo balcão.0∞1
para simular uma máquina completa de dois contadores da Turing.
Agora, se você tiver uma função recursiva que é executada no tempo T ( n ) em uma máquina de Turing padrão, um DFA bidirecional com um contador que inicia na fita finita $ 1 m $f(n)T(n) $1m$(onde e T ′ ( n ) ≫ T ( n ) ) pode:m=2n3T′(n)T′(n)≫T(n)
- leia a entrada unária (e guarde-a no balcão);
- retornar ao símbolo mais à esquerda;
- divida o contador por 3 até que o contador contenha desta maneira: vá para a direita a partir dos estados q z 0 , q z 1 , q z 2 e subtraia 1; se o contador atingir 0 no estado q z 0, vá para o símbolo mais à esquerda adicionando +1 e continue o loop de divisão; caso contrário, adicione 1 (se estiver no estado q z 1 ) ou 2 (se estiver no estado q z 2 ) e vá para o símbolo mais à esquerda adicionando + 3 (ou seja, recuperar o valor anterior do contador não divisível por 3) e prossiga com a etapa 4 .;2nqz0,qz1,qz2qz0qz1qz2
- neste ponto, o contador contém ;2n
- calcule usando o espaço T ′ ( n ) disponível à direita como segundo contador (o valor do segundo contador é a distância do símbolo mais à esquerda $ ).2f(n)T′(n)$
Portanto, com a codificação de entrada especial descrita acima, que oferece espaço suficiente na fita finita, um DFA bidirecional com um contador e alfabeto unário pode calcular todas as funções recursivas.
Se a abordagem é correcta, seria interessante para raciocinar sobre como escolher ou quando é suficiente para escolher um grande ângulo diferente k » 2 e codificar a entrada como uma m , m = 2 n k nT′(n)≫T(n)k≫21mm=2nkn