You are on page 1of 14

O Computador Matemático de Post

Delfim Fernando Marado Torres


Departamento de Matemática
Universidade de Aveiro
delfim@mat.ua.pt
20 de Dezembro de 2000

Resumo
Descreve-se um certo computador abstracto – a chamada máquina de
Post em linguagem cientı́fica – e ilustra-se, com exemplos elementares, o seu
modo de operação. A terminologia usada é nova e permite-nos, de um modo
simples, a construção de um simulador do trabalho do computador de Post
na linguagem Prolog (vide [3]).

1 Introdução
O conceito de computador abstracto de Post é simples. As suas potenci-
alidades, vastas: o computador de Post permite formular tudo aquilo que é
passı́vel de ser computado (vide [5, 6]). Podemos estabelecer uma analogia
com o moderno computador electrónico, no qual, e não obstante a sua com-
plexidade, as operações internas são poucas e simples. O próprio Homem
parece ser um exemplo de tal situação, em que a complexidade é fruto da
simplicidade. O cérebro humano é composto por um número muito grande
de neurónios, dez milhares de milhões, ou mais, de acordo com algumas es-
timativas. É o estado “activo” ou “inactivo” de cada neurónio (0 ou 1, na
linguagem do computador de Post empregue neste trabalho) que forma a
base dos processos do pensamento humano e que é responsável pelo nosso
comportamento.
Os conceitos matemáticos de programação, algoritmo e computador uni-
versal, são introduzidos nas nossas licenciaturas, em cadeiras terminais, por

This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.
recurso à máquina de Turing. É convicção do autor, que o computador
abstracto de Post pode resultar num veı́culo efectivo à apreensão de tais
conceitos, mesmo por alunos do Secundário.

2 Notas históricas
Em 1936, antes do aparecimento dos computadores, os eminentes ma-
temáticos Alan Turing e Emil Post publicaram, respectivamente, os artigos
“Sobre os números computáveis com a aplicação ao problema da solubili-
dade” (vide [4]) e “Processos combinatórios finitos, formulação I” (vide [1]).
Estes dois trabalhos propõem, de modo independente, um conceito rigoroso
(matemático) de algoritmo, conceito este tão importante e mediático na socie-
dade em que vivemos, e fornecem, de forma abstracta, os traços fundamentais
dos actuais computadores electrónicos.
O computador abstracto (ou matemático) proposto por Post, é mais sim-
ples que o de Turing no que respeita às instruções elementares e meios de
armazenamento. Esta simplicidade tem um custo: os algoritmos do compu-
tador matemático de Post exigem, em geral, mais memória e maior quanti-
dade de passos do que os correspondentes algoritmos de Turing. Este facto
explica, em certa medida, porque as ideias de Turing são constantemente usa-
das como instrumento de trabalho em Ciências da Computação e em Lógica
Matemática, e porque elas são tão comuns na literatura de investigação e de
divulgação cientı́fica, em detrimento das de Post, votadas ao ostracismo.
Este trabalho é dedicado ao conceito de “computador matemático de
Post”. A exposição emprega, no entanto, uma terminologia distinta da de
Post. A notação usada permite, de um modo completamente natural e in-
tuitivo, usar o nosso computador electrónico como meta-computador.

3 O “Hardware” do computador de Post


O computador de Post não é uma máquina existente no nosso mundo
fı́sico, que possamos colocar sobre a nossa secretária. Trata-se de um com-
putador do mundo mental, que só existe nas nossas cabeças, na nossa ima-
ginação. É por essa razão que tal máquina é apelidada de abstracta. O facto
do computador de Post habitar o mundo mental, não traz, no entanto, qual-
quer desvantagem. Muito pelo contrário! Podemos sempre imaginar, se isso
nos ajuda, que o computador de Post existe de facto; podemos imaginar o
“aspecto exterior” do computador (o “hardware”) ao nosso gosto; que ele

This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.
funciona a uma velocidade de milhares de GHz; etc, etc.
Visualizaremos o computador de Post como uma fita dividida em células
de igual dimensão e com uma cabeça de leitura-escrita a “observar” uma das
células. Em cada célula ou está escrito 0 ou 1. Como a nossa imaginação não
está restringida aos limites de espaço e matéria, consideramos a fita como infi-
nita (sem limites de memória de armazenamento de informação). Para maior
clareza, consideramos uma imagem como a da Figura 1. Convencionamos que

0 0 0 0 0 0 0 0 0 0 1 1 1 0 0

Figura 1: O computador de Post é constituı́do por células que se estendem


infinitamente à esquerda e à direita; e por uma cabeça de leitura-escrita,
representada por uma seta. Cada célula contém ou 0 ou 1.

todas as células que não são mostradas numa figura contêm o sı́mbolo 0. A
informação sobre quais as células que contêm 0 e quais as que contêm 1, cons-
titui o estado da fita. O estado da fita conjuntamente com a indicação da
célula que está a ser observada pela cabeça de leitura-escrita, forma o estado
do computador de Post. Numa unidade de tempo imaginária, a que cha-
maremos passo, a cabeça de leitura-escrita pode mover-se uma célula para
a esquerda ou uma célula para a direita. Além disso, ela pode identificar
qual o sı́mbolo, 0 ou 1, presente na célula observada, ou alterar esse mesmo
sı́mbolo. Na secção seguinte explicamos as leis de funcionamento da cabeça
de leitura-escrita.

4 O “Software” do computador de Post


O funcionamento do computador de Post consiste na deslocação da cabeça
de leitura-escrita ao longo da fita e na modificação de zeros ou uns. Este
funcionamento ocorre de acordo com um conjunto de instruções, que formam
um programa: o “software” do computador de Post. São seis os tipos de
instruções no computador de Post.1

1. Instruções de movimento para a direita: instrucao(I,dir,J).

2. Instruções de movimento para a esquerda: instrucao(I,esq,J).

3. Instruções de mudança para 1: instrucao(I,mud1,J).


1
Usamos os sı́mbolos I, J, J0 e J1, para denotar um número natural.

This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.
4. Instruções de mudança para 0: instrucao(I,mud0,J).

5. Instruções de selecção: instrucao(I,J0,J1).

6. Instruções de paragem: instrucao(I,stop).

O número I, que se encontra no começo da instrução, denomina-se por


número da instrução. Ao número J, que termina a instrução, chamamos salto.
Nas instruções de selecção existem dois saltos; enquanto nas instruções de
paragem não existe qualquer salto. Por exemplo, instrucao(29,dir,1)., é
uma instrução de movimento para a direita com número de instrução 29 (dize-
mos que é a instrução 29) e salto 1. Outro exemplo: instrucao(25,32,25).
é uma instrução de selecção com número de instrução 25 e saltos 32 e 25.
Definimos programa do computador de Post como um conjunto de ins-
truções do computador de Post, que verifica as seguintes propriedades:

1. O conjunto de instruções é finito e não vazio (um programa contém,


por conseguinte, pelo menos uma instrução).

2. Se o conjunto tiver cardinalidade N , então existe uma instrução com


número de instrução 1, uma com número de instrução 2, . . . , uma com
número de instrução N .

3. Se J for salto de uma qualquer instrução do conjunto, então J ∈


{1, . . . , N }, com N a cardinalidade do conjunto.

Por exemplo,

instrucao(1,stop). instrucao(3,mud0,3).
instrucao(2,4,1). instrucao(4,stop).

é um programa para o computador de Post, enquanto que os dois conjuntos


de instruções do computador de Post

instrucao(1,stop). instrucao(3,mud0,5).
instrucao(2,4,1). instrucao(4,stop).

instrucao(1,stop). instrucao(4,mud0,4).
instrucao(2,4,1).

This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.
não são programas para o computador de Post (perceba porquê).
O número de instruções num programa do computador de Post é de-
signado por comprimento do programa. O programa que demos acima é
um programa de comprimento 4. Não avance para a secção seguinte antes
de determinar a resposta às seguintes questões: Quantos programas para o
computador de Post existem, de comprimento 1? E de comprimento 2? . . .

5 Ligando o computador de Post


Para que o computador de Post comece a trabalhar é preciso um programa
e um estado inicial para o computador de Post. Conhecido o programa e o
estado inicial do computador de Post, o computador entra em funcionamento
com o chamado primeiro passo: pondo em execução a instrução número 1
(o que significa “executar uma instrução” será explicado já de seguida). A
execução de cada instrução constitui um passo e a passagem da execução
de uma instrução para a seguinte ocorre segundo as seguintes regras. Se no
k-ésimo passo se executa uma instrução:

1. com um único salto J, no (k + 1)-ésimo passo executa-se a instrução


número J;

2. de selecção com saltos J0 e J1, no (k + 1)-ésimo passo executa-se ou a


instrução J0 ou a instrução J1;2

3. de paragem, o computador de Post pára.

A execução de uma instrução:

• de movimento para a direita, consiste em deslocar a cabeça de leitura-


-escrita uma célula para a direita;

• de movimento para a esquerda, consiste em deslocar a cabeça de leitura-


-escrita uma célula para a esquerda;

• de mudança para 1, consiste na colocação do sı́mbolo 1 na célula obser-


vada pela cabeça de leitura-escrita. A execução desta instrução apenas
é possı́vel no caso da célula observada conter o sı́mbolo 0. Se ela já
contiver o sı́mbolo 1, considera-se que a instrução não é passı́vel de ser
executada;
2
Qual delas exactamente, ver-se-á já de seguida quando se explicar o que significa
executar uma instrução de selecção.

This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.
• de mudança para 0, consiste na colocação do sı́mbolo 0 na célula obser-
vada pela cabeça de leitura-escrita. A execução desta instrução apenas
é possı́vel no caso da célula observada conter o sı́mbolo 1. Se ela já
contiver o sı́mbolo 0, considera-se que a instrução não é passı́vel de ser
executada;

• de selecção, instrucao(I,J0,J1)., não altera o estado do computador


de Post: nenhum sı́mbolo na fita é alterado e a cabeça de leitura-
-escrita permanece imóvel. Esta instrução apenas determina, mediante
o conteúdo da célula observada pela cabeça de leitura-escrita, qual a
próxima instrução a ser executada. Se a célula observada contiver o
sı́mbolo 0, então a próxima instrução a ser executada será a instrução
J0; se a célula contiver 1, executa-se a instrução J1 no próximo passo;

• de paragem, consiste em terminar a execução do programa no compu-


tador de Post.
Ao ligarmos o computador de Post, fornecendo-lhe um programa e um
estado inicial, três situações poderão então ocorrer:
1. Chega-se até uma instrução que não é passı́vel de ser executada. Dize-
mos que o computador de Post parou sem resultado.

2. Chega-se até uma instrução de paragem. Dizemos que o computador


de Post parou com resultado.

3. Não se chega a nenhuma das situações de paragem indicadas e o com-


putador de Post continuará em funcionamento eternamente.

6 Exemplos de execução de programas


Sejam dados, por exemplo, o estado inicial indicado na Figura 2 e o

0 0 0 0 1 0

Figura 2: Estado inicial para o computador de Post.

seguinte programa:
instrucao(1,mud1,4). instrucao(4,dir,5).
instrucao(2,mud0,3). instrucao(5,4,3).
instrucao(3,esq,2).

This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.
Vejamos como irá funcionar o computador de Post neste caso. No primeiro
passo será executada a instrução número 1. Depois do primeiro passo o
estado do computador de Post será aquele que está representado na Figura 3.
Depois da execução da instrução número 1, passa-se à execução da instrução

0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0

Figura 3: Estado do Figura 4: Estado do Figura 5: Estado do


computador de Post no computador de Post no computador de Post no
final do passo 1. final dos passos 2, 3, 6. final dos passos 4 e 5.

cujo número coincide com o salto da instrução número 1, isto é, a instrução
número 4. Esta instrução será executada durante o segundo passo e o estado
do computador de Post passará a ser o da Figura 4. Como o salto da instrução
número 4 é igual a 5, passa-se à execução da instrução número 5. Esta
instrução será cumprida no terceiro passo, em resultado do qual o estado
do computador não se alterará e continuará a ser o da Figura 4. Uma vez
que a célula observada contém 0, a próxima instrução a ser executada é a
instrução número 4. Depois da sua execução, no quarto passo, o computador
de Post passa ao estado que se indica na Figura 5. Agora, no quinto passo,
será executada a instrução número 5. Desta vez a célula observada contém
1, pelo que a próxima instrução a ser executada é a número 3. Depois da
sua execução, no sexto passo, o computador de Post atinge de novo o estado
ilustrado na Figura 4 e dará inı́cio, no sétimo passo, à execução da instrução
número 2. Como a instrução 2 tenta mudar para 0 uma célula que já contém
0, ela não é passı́vel de ser executada. Consequentemente, no sétimo passo
ocorre uma paragem sem resultado.
Todo este trabalho realizado pelo computador de Post, pode ser simulado
com o programa disponı́vel em

http://www.mat.ua.pt/delfim/simula-post.htm

Para esse fim basta colocar a questão

?- post([0,0,0,0,1,0],3).
a um qualquer interpretador de Prolog (vide [2]). O resultado obtido será:
Passo 1 -> Instrucao executada: 1; Fita: [0,0,1,0,1,0]; Cabeca: pos. 3
Passo 2 -> Instrucao executada: 4; Fita: [0,0,1,0,1,0]; Cabeca: pos. 4
Passo 3 -> Instrucao executada: 5; Fita: [0,0,1,0,1,0]; Cabeca: pos. 4
Passo 4 -> Instrucao executada: 4; Fita: [0,0,1,0,1,0]; Cabeca: pos. 5

7
This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.
Passo 5 -> Instrucao executada: 5; Fita: [0,0,1,0,1,0]; Cabeca: pos. 5
Passo 6 -> Instrucao executada: 3; Fita: [0,0,1,0,1,0]; Cabeca: pos. 4
Passo 7 -> Instrucao nao passivel de ser executada: 2
Paragem sem resultado

Claro que programas distintos aplicados ao mesmo estado inicial, podem


conduzir a resultados finais diferentes: a uma paragem sem resultado, a uma
paragem com resultado, ou então ao funcionamento ininterrupto (infinito,
eterno) do computador de Post. Vejamos alguns exemplos. Dado o estado
inicial indicado na Figura 6, consideremos os seguintes três programas:

0 0 0 1 0 0

Figura 6: Um estado inicial para o computador de Post.

Programa 1 Programa 2 Programa 3


instrucao(1,dir,2). instrucao(1,dir,2).
instrucao(2,dir,3). instrucao(2,dir,3). instrucao(1,dir,1).
instrucao(3,mud1,1). instrucao(3,stop).
Com o Programa 1, o computador de Post realiza dois passos e, no terceiro,
ocorre uma paragem sem resultado. O simulador dá-nos:
?- post([0,0,0,1,0,0],2).
Passo 1 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 3
Passo 2 -> Instrucao executada: 2; Fita: [0,0,0,1,0,0]; Cabeca: pos. 4
Passo 3 -> Instrucao nao passivel de ser executada: 3
Paragem sem resultado
Com o Programa 2, o computador de Post fará dois passos e, depois, no
terceiro passo, ocorre uma paragem com resultado:
?- post([0,0,0,1,0,0],2).
Passo 1 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 3
Passo 2 -> Instrucao executada: 2; Fita: [0,0,0,1,0,0]; Cabeca: pos. 4
Passo 3 -> Instrucao executada: 3; Fita: [0,0,0,1,0,0]; Cabeca: pos. 4
Paragem com resultado
Com o Programa 3, o computador de Post irá trabalhar infinitamente. O
nosso simulador não. Ele dá-nos:
?- post([0,0,0,1,0,0],2).
Passo 1 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 3
Passo 2 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 4
Passo 3 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 5
Passo 4 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 6
Erro! Use uma fita maior...

This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.
No entanto, por mais que aumentemos o tamanho da fita, a mensagem de erro
acaba sempre por aparecer: o simulador apenas é capaz de lidar com uma
fita finita... O comportamento do simulador, quando o computador de Post
fica a trabalhar eternamente, pode ser diferente. Considere-se o programa
instrucao(1,1,1).
Neste caso o computador de Post irá de novo trabalhar infinitamente. A
diferença é que desta vez o estado do computador de Post não se altera. O
nosso simulador fica a trabalhar até que a luz falhe, o utilizador aborte a
execução do programa com Ctrl+Break, ou outro “imprevisto” ocorra:
?- post([0,0,0,1,0,0],2).
Passo 1 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 2
Passo 2 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 2
Passo 3 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 2
Passo 4 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 2
Passo 5 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 2
Passo 6 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 2
......................................................................
Passo 914 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 2
Passo 915 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 2
Passo 916 -> Instrucao executada:
......................................................................

Resulta também claro que o mesmo programa aplicado a estados iniciais


distintos produz, em geral, resultados distintos. Vejamos, por exemplo, o
seguinte programa:
instrucao(1,4,1). instrucao(3,stop).
instrucao(2,mud0,3). instrucao(4,dir,2).
Apliquemo-lo aos estados iniciais A, B e C representados, respectivamente,
nas Figuras 7, 8 e 9. Para o estado inicial A obtemos uma paragem com

0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0

Figura 7: Estado ini- Figura 8: Estado ini- Figura 9: Estado ini-


cial A. cial B. cial C.
resultado no quarto passo:
?- post([0,0,0,1,0,0],3).
Passo 1 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 3
Passo 2 -> Instrucao executada: 4; Fita: [0,0,0,1,0,0]; Cabeca: pos. 4
Passo 3 -> Instrucao executada: 2; Fita: [0,0,0,0,0,0]; Cabeca: pos. 4
Passo 4 -> Instrucao executada: 3; Fita: [0,0,0,0,0,0]; Cabeca: pos. 4
Paragem com resultado

9
This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.
Para B o computador de Post fica a trabalhar eternamente
?- post([0,0,0,1,0,0],4).
Passo 1 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 4
Passo 2 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 4
Passo 3 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 4
Passo 4 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 4
......................................................................
enquanto para o estado inicial C ocorre uma paragem sem resultado no ter-
ceiro passo:
?- post([0,0,0,1,0,0],5).
Passo 1 -> Instrucao executada: 1; Fita: [0,0,0,1,0,0]; Cabeca: pos. 5
Passo 2 -> Instrucao executada: 4; Fita: [0,0,0,1,0,0]; Cabeca: pos. 6
Passo 3 -> Instrucao nao passivel de ser executada: 2
Paragem sem resultado

Não avance para a secção seguinte antes de determinar o resultado final


do computador de Post quando o programa
instrucao(1,4,3). instrucao(3,stop).
instrucao(2,mud1,4). instrucao(4,dir,2).
é aplicado aos estados iniciais A, B e C.

7 Adição da unidade no computador de Post


Nesta secção vamos abordar a questão da programação. Este problema
consiste em elaborar um programa que conduza ao objectivo previamente
estabelecido. Associada à programação, encontra-se sempre a análise. É ela
que nos permite dar um sentido exacto ao objectivo fixado.
O computador matemático de Post pode ser usado para obter resultados
de operações aritméticas. O exemplo mais simples, e que irá constituir o
nosso objectivo, é a adição de uma unidade a um número. Existem várias
maneiras de realizar este cálculo, dependendo essencialmente da análise que
fizermos, do modo como formulamos o problema. De facto serão necessárias
uma série de precisões, a começar com a decisão de como codificar os números
na fita do computador de Post.
Vamos decidir tratar apenas números inteiros não negativos. Conside-
raremos como estados iniciais para o computador de Post, apenas aqueles
que contêm todas as células a 0 com excepção de um bloco finito de células,
consecutivas, marcadas com o sı́mbolo 1. O número n será codificado na fita
através de um bloco de comprimento n + 1. A figura seguinte mostra como
o número 0 é representado na fita do computador de Post.

10

This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.
0 0 0 1 0 0

Entendamos o objectivo de realizar a adição da unidade no computador de


Post, da seguinte maneira:
Pretende-se elaborar um programa que, ao ser aplicado a uma
fita onde um número n arbitrário esteja codificado, conduza o
computador de Post a uma paragem com resultado, de tal modo
que depois da paragem fique codificado na fita o número n + 1.
Na frase precedente, o problema ainda não foi colocado com a exactidão
necessária.
Para facilitar a nossa tarefa, vamos considerar que nos satisfaz qualquer
programa que deixe na fita o número n+1, independentemente do lugar onde
ele se encontre codificado com relação à cabeça de leitura-escrita. Quanto
ao estado inicial, faremos suposições cada vez mais amplas a respeito da
disposição recı́proca da cabeça de leitura-escrita e do registo do número no
estado inicial do computador de Post.
Comecemos pelo caso mais simples, isto é, pela limitação mais forte: no
estado inicial, a cabeça de leitura-escrita está a observar a célula extrema
esquerda do número codificado. Uma solução poderá ser:
instrucao(1,esq,2). instrucao(3,stop).
instrucao(2,mud1,3).
Escrevemos “uma solução” porque ela não é única: são possı́veis outros pro-
gramas que satisfazem as condições do problema. Por exemplo, o objectivo
é igualmente alcançado com o seguinte programa:
instrucao(1,dir,2). instrucao(4,esq,5).
instrucao(2,3,3). instrucao(5,mud1,6).
instrucao(3,esq,4). instrucao(6,stop).
O desejável é construir programas que sejam, na medida do possı́vel, curtos.
O primeiro programa apresentado é o programa de comprimento mı́nimo (ou
melhor, um dos de comprimento mı́nimo) que satisfaz as condições a que nos
propusemos. De facto é fácil de demonstrar (recomendamos o leitor a fazê-lo)
que nenhum programa de comprimento 1 ou 2 pode servir de solução. Há
exactamente mais um programa de comprimento 3 que também é solução do
problema:
instrucao(1,esq,3). instrucao(3,mud1,2).
instrucao(2,stop).

11

This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.
Se considerarmos que no inı́cio a cabeça de leitura-escrita observa a célula
extrema direita do número codificado na fita, o problema pode ser resolvido
de maneira completamente análoga. Segue-se um dos dois programas de
comprimento mı́nimo:

instrucao(1,dir,2). instrucao(3,stop).
instrucao(2,mud1,3).

Vamos agora tentar cobrir um conjunto maior de situações iniciais, limi-


tando-nos a exigir que, no estado inicial, a cabeça de leitura-escrita observe
uma qualquer célula 1 do número codificado. É obvio que um programa que
resolva este problema cobre as duas situações prévias já tratadas. Tal como
antes, continuamos interessados em programas curtos. É possı́vel verificar
que nenhum programa de comprimento 1, 2 ou 3 resolve agora o nosso pro-
blema. São possı́veis várias soluções de comprimento 4 (ao todo, 24). Eis
uma delas:

instrucao(1,esq,2). instrucao(3,mud1,4).
instrucao(2,3,1). instrucao(4,stop).

Vamos agora tentar lidar com os estados iniciais em que a cabeça de


leitura-escrita observa uma célula com o sı́mbolo 0. Suponhamos, para
começar, que se sabe antecipadamente que a cabeça se encontra à esquerda
do bloco de uns (à esquerda do número codificado na fita). Eis uma das
possı́veis soluções de comprimento mı́nimo:

instrucao(1,dir,2). instrucao(4,mud1,5).
instrucao(2,1,3). instrucao(5,stop).
instrucao(3,esq,4).

Resulta claro que se no programa anterior substituirmos o dir por esq e


o esq por dir, obteremos um programa que resolve o problema para estados
iniciais onde a cabeça de leitura-escrita se encontra à direita do bloco de uns.
Neste parágrafo vamos tentar abarcar todos os estados iniciais em que a
cabeça de leitura-escrita fica a observar uma das células do número codificado
ou à esquerda do bloco de uns. Neste caso não existe nenhum programa de
comprimento menor do que 6. Uma solução poderá ser:

instrucao(1,6,2). instrucao(4,mud1,5).
instrucao(2,esq,3). instrucao(5,stop).
instrucao(3,4,2). instrucao(6,dir,1).

12

This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.
Mais uma vez, o problema da adição da unidade para os estados iniciais onde
a célula observada contém 1 ou está à direita do bloco de uns, é resolvido de
modo completamente análogo: basta pegar no programa anterior e substituir
o dir por esq e o esq por dir.
A adição da unidade no caso mais geral, onde não impomos nenhuma
limitação à disposição mútua da cabeça de leitura-escrita e da codificação do
número na fita, será discutido na próxima secção.

8 Questões em aberto
Os programas da secção anterior são simples. Mas será que a construção
de um programa para a adição da unidade, sem nenhuma limitação à dis-
posição inicial da cabeça de leitura-escrita, é tarefa fácil? Se o leitor tentar
encontrar semelhante programa, verificará que não. Talvez até desanime e
comece mesmo a pensar se tal programa existe... Mas as notı́cias são boas:
existem infinitos programas que resolvem o problema.
A dificuldade principal, surgida durante a resolução deste problema, está
em encontrar o bloco de uns. Ao resolver os problemas mais simples sobre a
adição da unidade na secção anterior, nós sabı́amos sempre em que direcção
devı́amos procurar o bloco de uns (ou então a cabeça de leitura-escrita já
estava, desde o começo, em frente ao bloco procurado). Quanto ao problema
na situação mais geral, não sabemos para que lado nos devemos deslocar. É
por isso que talvez alguns leitores tenham considerado tal problema insolúvel.
Para resolver a situação, imaginemos que nos encontramos numa estrada
infinita para ambos os lados e que a esmeralda, que queremos achar, se
encontra num certo lugar desta estrada. Nós não sabemos onde ela está, mas
sabemos que ela permanece algures sobre a estrada. Que devemos fazer? Se
nos movimentarmos para um lado, pode acontecer que a esmeralda esteja
exactamente na outra direcção. A solução é deslocarmo-nos alternadamente
para um lado e para o outro, incrementando constantemente a amplitude das
nossas oscilações. O seguinte programa resolve o problema.

instrucao(1,25,32). instrucao(18,mud0,16).
instrucao(2,4,3). instrucao(19,stop).
instrucao(3,dir,2). instrucao(20,dir,21).
instrucao(4,dir,5). instrucao(21,mud1,22).
instrucao(5,6,14). instrucao(22,dir,23).
instrucao(6,esq,7). instrucao(23,19,24).
instrucao(7,mud1,8). instrucao(24,mud0,22).

13

This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.
instrucao(8,10,9). instrucao(25,dir,26).
instrucao(9,esq,8). instrucao(26,27,14).
instrucao(10,esq,11). instrucao(27,esq,28).
instrucao(11,12,20). instrucao(28,esq,29).
instrucao(12,dir,13). instrucao(29,30,20).
instrucao(13,mud1,2). instrucao(30,dir,31).
instrucao(14,esq,15). instrucao(31,mud1,2).
instrucao(15,mud1,16). instrucao(32,esq,33).
instrucao(16,esq,17). instrucao(33,34,32).
instrucao(17,19,18). instrucao(34,mud1,19).
Este foi o programa que me saiu naturalmente da pena, sem qualquer esforço
de minimização de comprimento. Mas qual será o comprimento mı́nimo? No
excelente livro [5] a questão é dada como em aberto. Talvez algum leitor nos
queira esclarecer?

Agradecimentos
Agradeço o convite da Prof. Ana Breda para uma conferência nas “Tardes
de Matemática”.

Referências
[1] E. L. Post. Finite Combinatory Processes – Formulation I. Journal of
Symbolic Logic, 1, 1936, pp. 103–105.

[2] D. F. M. Torres. Introdução à Programação em Lógica, Universidade de


Aveiro, 2000.

[3] D. F. M. Torres. Simulando o computador abstracto de Post,


http://www.mat.ua.pt/delfim/simula-post.htm.

[4] A. M. Turing. On Computable Numbers with an Application to the


Entscheidungs-Problem. Proc. London Math. Soc., 2, 1936, pp. 230–265.
(A correction, ibid., 43, 1937, pp. 544–546.)

[5] V. Uspensky. A Máquina de Post, Mir, 1985.

[6] D. Wood. Theory of Computation, Harper & Row Publishers, New York,
1987.

14

This is a draft. Final version in Boletim da Sociedade Portuguesa de Matemática, N o 46, April 2002, pp. 81–94.

You might also like