Este é o seguimento de outra pergunta aqui , e espero que não seja muito filosófico. Como Raphael apontou em um comentário na minha pergunta anterior, eu realmente não entendo a definição de "computável", mas de acordo com alguns artigos que li, a definição também não é muito clara quando se trata de modelos de computação mais fracos do que turing máquinas devido à codificação da entrada e saída.
A definição típica de turing computável é a seguinte:
Definição 1: Uma função é chamada de turing computável se houver uma máquina de turing M que calcula f usando uma codificação adequada dos números naturais como seqüências de caracteres.
As definições diferem no que exatamente é uma codificação adequada , mas a maioria se refere à codificação binária , codificação unária ou decimal como a codificação fixa e adequada. Também é possível mostrar que a fixação de uma codificação é necessária para a definição da computabilidade do turing. Mas o que torna, digamos, a codificação binária de números naturais especial, para que possamos axiomatizá-la como a codificação adequada? Provavelmente porque se encaixa na noção intuitiva do que computabilidade significa coincidentemente .
Agora, e se olharmos para modelos de computação mais fracos que as máquinas de turing? Por exemplo, vamos considerar o conjunto de máquinas de turing "aleijadas" com o alfabeto { 0 , 1 } que só pode se mover para a direita e uma definição de turing aleijada computável que seja consistente com a da computabilidade de turing:
Definição 2: Uma função é chamada de turing aleijado computável ou computável em M c se houver uma máquina de turing aleijada M que calcula f usando uma codificação adequada dos números naturais como uma string.
Se definirmos "codificação adequada" como "codificação binária", a função não é computável em M c . Se axiomatizarmos "codificação adequada" como "codificação unária", então f é computável em M c . Isso parece estranho, considerando o fato de que todos podem consertar uma das infinitas codificações intuitivas à vontade. Deve ficar claro se um modelo de computação pode calcular f ou não, sem se referir a uma codificação específica - pelo menos nunca vi alguém mencionar qual codificação é usada quando se afirma que "os programas de loop são mais fracos que as máquinas de turing".
Após esta introdução, posso finalmente formular minha pergunta: como definir "codificações adequadas" e "computabilidade" para modelos arbitrários de computação que não coincidem com a noção intuitiva de computabilidade? Isso é possível dentro da estrutura da computação turing?
Edit: Eu abreviei a introdução, não foi adicionada à pergunta.