Professional Documents
Culture Documents
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.
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
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.
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).
Por exemplo,
instrucao(1,stop). instrucao(3,mud0,3).
instrucao(2,4,1). instrucao(4,stop).
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? . . .
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;
0 0 0 0 1 0
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
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
?- 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
0 0 0 1 0 0
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:
......................................................................
0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0
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
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
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).
instrucao(1,esq,2). instrucao(3,mud1,4).
instrucao(2,3,1). instrucao(4,stop).
instrucao(1,dir,2). instrucao(4,mud1,5).
instrucao(2,1,3). instrucao(5,stop).
instrucao(3,esq,4).
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.
[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.