Vous êtes sur la page 1sur 19

Levantamento de Implementações de Máquinas de Turing 

na Internet 
Danilo Matias1, Marstela Teixeira Souza Lopes1 ,Reginaldo de Matias1  Vinícius 
Torres
1
Departamento de Sistemas e Computação
Universidade do Estado de Santa Catarina (UDESC) – Joinville/SC – Brasil
danilomatias19@gmail.com, maristela.lopes@yahoo.com.br,
reginaldo.matias@gmail.com, vinicius_torres@terra.com.br

Resumo. Os simuladores eletrônicos auxiliam na tarefa de projetar uma Máquina


de Turing, bem como verificar seu comportamento. Simular uma Máquina de
Turing eletronicamente poupa tempo e cansaços físico e mental do Cientista da
Computação, uma vez que torna essa tarefa menos enfadonha.

Introdução

Sipser (2005) diz que projetar uma Máquina de Turing é uma tarefa
enfadonha, a qual exige paciência, tempo, e atenção. Os simuladores eletrônicos
servem para diminuir a complexidade desta tarefa, de forma a poupar quem a
projeta. Esse trabalho traz uma lista com vários deles, cada um com várias
características diferentes. Uns mais básicos e outros sofisticados.

1. Simulador Jastex

O Simulador Jastex, elaborado por Dweck (2004), é compacto e eficaz, e dispõe


de diversas funcionalidades em uma só aplicação, as quais são:
• Desenhar diagramas de estado;
• Gerar código-fonte em LaTex, a fim de que se possa imprimir a Máquina de
Turing dentro de um documento deste formato;
• Obter a descrição em 7-tupla para a Máquina de Turing, exceto para algumas
ambigüidades envolvendo a saída versus alfabeto de fita;
• Traduzir automaticamente a Máquina em instruções úteis para um outro
simulador, de Suzanne Skinner (será descrito a seguir), o qual pode ser
executado dentro deste programa.

Seguem abaixo alguns screenshots da simulação da linguagem { anbncn | n > 0 }:

1
1.Desenha a Máquina, pela tecla de desenho Drawing.

Figura 1. 1: Desenho da Máquina

2. Geração do código-fonte em LaTex.

Figura 1. 2: Geração de código LaTex

3.Obtenção da 7-upla, através da tecla “Descrição da Máquina de Turing”

2
Figura 1. 3: Obtenção da 7-upla

3. Execução do simulador de Suzanne Skinner dentro do Jastex:

3
Figura 1. 4: Execução do simulador de Suzanne Skinner

Como pôde ser visto, o simulador Jastex é uma ferramenta poderosa de


simulação e construção de Máquinas de Turing e outros autômatos, com facilidade,
além de poder gerar código em LaTex, importante processador de textos para o meio
acadêmico.

2. Simulador de Hodges implementado em Java


Script
Essa aplicação, elaborada por Hodges (2003) na linguagem JavaScript tem um
caráter exclusivamente didático, e o poder de simular apenas três exemplos de
máquina: Divisão unária, divisibilidade e primalidade. Em compensação, pode ser
executado diretamente do browser.
A manipulação é simples: Escolhe-se a máquina desejada, clica-se no botão
“Carregar” (Load). Pode-se escolher a opção Step para a máquina executar um passo
por vez, ou “Executar” (Run), para deixá-la executando até terminar o cálculo. A
execução pode ser executada com o botão “Parar” (Break) . Há a possibilidade de
retomar a execução, posteriormente.

4
1.2.1 As Máquinas Simuladas
A primeira máquina ilustra as operações básicas. Ao longo das movimentações
da máquina, adiciona dois grupos de 1s em um grupo único.
A segunda realiza o teste de divisibilidade: A máquina parará com um X
impresso no quadrado vazio, separando os números se e somente se o numero à
esquerda é divisível com o da direita.
Finalmente, a terceira usa o teste da divisibilidade para o teste da primalidade: A
máquina pára com um X no quadrado original se o número da direita é primo. A
figura 2 abaixo mostra um screenshot deste simulador

Figura 2: Simulador de Hodges

5
3. Simulador implementado em C#

Este é um simulador rudimentar, no qual foi usada a tecnologia C#. Possui uma
interface basicamente dividida em duas porções: A primeira é a implementação da
máquina, usando vários estilos de interação, como botões e caixas de texto. A
segunda parte é a representação visual da máquina como um diagrama de transições
(Diagrama o qual consiste de círculos para representar estados e segmentos de linha
direcionados para representar as transições entre os estados. Uma ou mais ações
(saídas) podem ser associadas com cada transição.)

A interface é dividida em duas partes: O mostrador da máquina e o diagrama de


transições. O mostrador inclui a fita a qual é carregada com o problema, usando o
botão “Carregar” (Load). A opção “Velocidade” (Speed) pode ser devagar (Slow),
rápida (Fast) ou computar (Compute). A última opção é executada o mais rápido
possível, sem mostar nenhuma das operações da fita. No meio da interface há uma
lista com alguns exemplos de maquias a serem rodados. Seguem, abaixo, alguns
screenshots deste simulador.

Figura 3.1: Tela Principal

6
Figura 3.2: Execução da máquina

Figura 3.3: Geração do Diagrama de Transições

7
4. Simulador de Skinner

Esta aplicação, desenvolvida por Skinner (2008) e implementada em linguagem


Java tem o poder de executar apenas três tipos de máquina, as quais são: Subtração,
detecção de palíndromos e Busy Beavers de vários estados (Segundo Skinner
(2008), são Máquinas de Turing como um certo número de estados que escrevem o
maior número de caracteres não-brancos na fita.). Uma vantagem desse simulador, é
que ele pode ser carregado diretamente do browser.

A aplicação divide-se em duas grandes partes: A mostrador da máquina e os


controles. O mostrador inclui a fita (com a célula corrente no centro), setas para
rolagem manual e alguns controles usados na execução do programa. As teclas são
“Iniciar” (Start), a qual reinicia a máquina e a executa, “Step”, para executar uma
única transição. A velocidade de execução pode ser devagar, rápida, muito rápida, ou
computar, esta que executa a máquina o mais rápido possível, sem que sejam
mostradas as operações da máquina. Existe uma tela no canto inferior direito, na qual
são detalhadas todas as operações do simulador, e caso a máquina tenha parado, é
mostrada a razão da parada. Há uma outra tela, a qual mostra o diagrama de
transições. Abaixo, segue um screenshot deste simulador.

Figura 4: Simulador de Skinner

8
5. Simulador de Eck
O simulador xTuring Machine, desenvolvido por Eck (1997) é uma applet em
Java a fim de mostrar máquinas de Turing em ação. A máquina com que ele trabalha
possui um máximo de vinte e cinco estados, e eles somente usam os símbolos 0,1,x,y,z e
$. Apesar disso, ela pode realizar alguns cálculos não triviais.
Quanto sua interface, um menu pop-up na parte superior do simulador é usado
para selecionar as máquinas pré-existentes ou que foram criadas pelo usuário.
Selecionando “Novo” (New) o primeiro item no menu, criará uma nova máquina, que
estará vazia. Na parte superior está a máquina, cuja fita é infinita. A fita é dividida em
células, e cada célula contém um símbolo, ou branco. A máquina trata uma célula por
vez e mostra apenas seu estado corrente. Por convenção, o primeiro estado de máquina é
zero. Quando ela atinge o estado de parada, é mostrada na tela a letra “h”. No lado
esquerdo, estão os controles. O primeiro é um menu pop-up o qual controla a
velocidade de execução da applet, assim como aos oustros simuladores acima. Existem
dois botões adicionais, sendo que um limpa e fita e um outro que apaga um item da
tabela de transições, a qual está na seção inferior direita da applet. A coluna “Mover”
(Move) diz qual a direção será tomada pela máquina: “L” para a esquerda e “R” para a
direita. é possível editar as colunas “Escrever” (Write), “Mover” (Move) e “Novo
Estado”. As colunas com rótulos “Leitura” (Reading) e “Escrita” (Write) podem conter
os símbolos $,0,1,x,y e z. Elas podem também conter o caracter “#”, o qual é usado para
representar uma célula em branco. A coluna “Leitura” pode também conter “outro”
(other) , o qual representa o valor padrão o qual significa “nenhum outro símbolo para
qual nenhuma transição explícita é dada. Se ela apresenta o valor “Mesmo” (Same), o
qual diz à máquina para escrever o mesmo caractere lido. Acima da trabela de
transições, está um editor de transições (rule maker), com um botão “Editar transição”
(Make Rule), o qual são usados para adicionar novas transições à tabela. O retângulo
azul entre o editor de transições é uma paleta a qual é usada para gerenciar transições,
mudar o conteúdo da fita e mudar o estado corrente da máquina.
A vantagem desse simulador é estar disponível diretamente do browser , bem
como é possível criar novas máquinas e simula-las. Abaixo, há um screenshot deste
simulador.

9
6. Simulador de Csaba: Visual Turing 2.0
Desenvolvido por Csaba (2007), o simulador Visual Turing 2.0 é uma aplicação
Java, a qual possui a finalidade de mostrar máquinas de Turing. A máquina é
implementada de maneira totalmente gráfica, utilizando-se de grafos .Esse simulador é
totalmente flexível, pois permite que cada estado da máquina possa ser uma outra
máquina de Turing como pode-se observar na figura abaixo. (Vale ressaltar que o estado
“S” é na verdade uma Máquina de Turing S.)

Quanto à interface, existem duas regiões para a construção das máquinas, sendo
que em uma, o usuário constrói efetivamente a máquina, desenhando seu grafo, e na
outra existem as ferramentas (grafos) para sua construção efetiva. Nas ferramentas
mencionadas existem os símbolos (“Symbols”), sobre o qual é importante salientar que
é possível acrescentá-los de forma a clicar com o botão direito do mouse em Symbols e
escolher a opção apropriada. As máquinas deste simulador podem mover a cabeça para
a direita ( [ R ] Right ), para a esquerda ( [ L ] Left ) ou ficarem paradas ( [ ? ] Do
Nothing ). Ainda é possível perceber a existência de outras máquinas previamente
criadas, e que é possível utilizá-las como subrotinas da máquina a qual está sendo
editada. No exemplo acima, existem dez máquinas as quais podem ser utilizadas dessa
maneira.
Um ponto alto desse simulador é o fato de poder utilizar outras máquinas criadas
anteriormente como subrotinas, pois isso poupa o tempo do programador, ou seja, ele
não precisa refazer as máquinas sempre que necessitar delas. A figura abaixo ilustra o
simulador:

10
Figura 6: Visual Turing

7. Visual Automata Simulador


Simulador desenvolvido por Bovet (2004) , é um simulador semelhante ao
Visual Turing, apresentado acima, esse software foi escrito em Java, porém esse é mais
simples de manusear, pois seu autor usou a interface proporcionada pelo pacote swing
da linguagem Java. Ele é executado a partir de um arquivo.jar, e por isso não necessita
de instalação no computador, além de possuir uma interface bem elaborada. Porém, é
necessário que exista uma máquina virtual Java instalada, para que o arquivo jar seja
executado.

11
Quanto à interface, diferentemente do software anterior, ele possui apenas uma
região na tela a qual o usuário monta graficamente a máquina de Turing desejada. Para a
inserção do movimento da cabeça para a direita, clica-se no botão [→] , e se for
desejado que a cabeça da fita se movimente para a esquerda ele arrastaria o botão [←],
para a área de trabalho. Quando se deseja que a cabeça da máquina escreva na fita
arrasta-se para a área de trabalho o botão com o desenho de um lápis. A ligação dos
estados se estabelece após clicar no botão [ Ω ], e após isso, clicar no estado de origem
da transição, e então, clicar no estado destino da transição partindo do estado de origem.
Para simular a máquina de Turing basta clicar no botão executar (Run)
A característica bastante peculiar desse software é a maneira na qual são
representados o estados inicial (initial), o qual é representado pelo símbolo ( > ),o
estado de aceitação, representado por [] e o de rejeição, representado por [ x ]. Isso
facilita a detecção desses estados. Outro ponto alto é haver a possibilidade de utilizar-se
de uma outra máquina de Turing como sub-rotina. Vale ressaltar também que além de
simular Máquinas de Turing, ele é capaz de criar AFDs e AFNs, e converter AFDs em
AFNs. A figura abaixo mostra um screenshot deste simulador. Através dele, é possível
verificar o quão simples e explicativa sua interface são.

12
8.Simulador de Schweller: Ye Oide Turing Machine

O simulador de Schweller, da Universidade de Buena Vista, Iowa (2008),


funciona a partir do browser em uma applet, evitando, assim, o aborrecimento de
esperar baixar o aplicativo. Possui interface gráfica muito intuitiva e com algumas
Máquinas de Turing pré-carregadas, sendo que a primeira escreve Welcome ( Bem-
vindo em Inglês ) na fita, a segunda realiza a adição de números binários, e a terceira
realiza a multiplicação de números e a máquina que reconhece a linguagem a^n b^n.
Outra característica interessante dessa máquina é que aparece a figura do Alan Turing
dizendo frases em inglês.
Para que a máquina seja executada, é necessário que se entre com a função
programa no seguinte formato: Estado de origem, símbolo lido da fita, estado destino,
símbolo a ser escrito na fita, se a cabeça se movimentar para a direita, ou senão > . Caso
não for escrever nada na fita <, onde > indica que a cabeça se movimenta para a direita
e < se movimenta para a esquerda. Para escrever na fita, sem ser com a MT, basta clicar
nela, e digitar os caracteres que deseja que ela contenha.

Os botões da aplicação são os seguintes:


• Carregar (Load): Carregar a máquina cuja função programa o usuário digitou
• Auto: Visualizar seu comportamento da máquina.
• Passo-a-passo (Step):Fazer passo a passo as transições.
• FastAuto faz o mesmo que o anterior, mas de maneira mais veloz.
• Mudar estado (Change State) :Mudar o estado que a cabeça da MT se encontra,
para mudar o usuário necessita inserir o estado que deseja posicionar a cabeça da
MT no lado direito do botão.
• Atualizar (Update): Realiza a transição do estado que se deseja, dando a
impressão que vai para o estado exatamente posterior ao desejado.
• Parar (Stop) : Pára a Máquina.
• Limpar (Clear) limpa tudo o que foi feito.
• Conversar ( Talk) serve para o Turing dizer algo.

Como se pôde observar, a máquina é bem documentada, até informativa, pois acima
descreve sucintamente o significado de uma Máquina de Turing, porém é toda em
inglês, algo que nem todos os cientistas da computação dominam, infelizmente. Na
figura abaixo, há um screenshot deste simulador.

13
Figura 8: Simulador de Schweller

9. Simulador da Warthman Associates


Esse simulador, desenvolvido pela Warthmann Associates (2008) é bem restrito,
pois simula apenas as MT’s que realizam a soma e a multiplicação, porém possui várias
características positivas, as quais serão descritas a seguir:
Um aspecto não observado nos outros simuladores, é o fato de sua interface
chamar a atenção do usuário para o que está acontecendo detalhadamente com a
máquina de Turing projetada, pois informa durante a execução os movimentos da
cabeça, o último movimento lido (Last Read), o último escrito na fita (Last Write) e o
útimo movimento ( Last Move).
Algo que prende a atenção do usuário nesse simulador é o fato das cores da
interface gráfica terem sido muito bem pensadas, além de ser simples e explicativa, não
tornando muito necessário estudar o funcionamento do simulador. Certamente essa
applet é uma excelente ferramenta no ensino de MT’s. Abaixo, segue um screenshot do
simulador.

14
Figura 9: Simulador da Warthmann Associates

10. Simulador de Cousineau com peças de LEGO


Cousineau (2005) idealizou um modelo de Máquina de Turing com peças de
LEGO baseando-se numa construção “binária”, isto é, ela necessitava ser capaz de
empilhar e desempilhar um e somente um elemento da pilha, e isso necessitaria
acontecer por um período indefinido de tempo. Abaixo, segue uma descrição mais
minuciosa de seu modelo:

Parte Física

Os Símbolos

Os símbolos são feitos de cilindros. Usando pratos, ele pode codificar em


binário. Por exemplo, o cilindro da figura 1 abaixo é (1,0,1), ou o número 5. Usou-se
uma detector de luz para identificar cada símbolo.

15
Figura 10.1: Cilindro representando o número 5

A Memória

A pilha é uma espécie de torre vazada, na qual os símbolos caem horizontalmente. Ela é,
portanto, uma memória “compacta”, contendo aproximadamente dez bytes por seis
polegadas. Necessita-se assegurar que os símbolos sempre permanecerão horizontais, o
que implica numa fricção homogênea em todo lugar. Abaixo, na figura 2, é mostrada
apenas uma seção, porém muitas podem ser conectadas juntas.

16
Figura 10. 2: A memória da máquina

O Leitor

O leitor está no fundo da memória. É um mecanismo que expulsa um símbolo


por vez. O símbolo expulso passa na frente de um detector de luz (não mostrado), então
o código de barras pode ser lido. É composto pela parte inferior da pilha de memória
que desempilha o símbolo, e de uma alavanca ativada por dentro e por fora através de
um eixo vermelho. A figura 3 mostra essa parte da máquina e a alavanca.

Figura 10.3: Leitor e alavanca

O Empilhador

O empilhador está no topo. Sua função é colocar novos símbolos da pilha.


Funciona usando duas pás azuis. Toda vez que a pá rotaciona 90 graus, um símbolo cai
na memória. A figura 4 abaixo o ilustra

17
Figura 10.4: Empilhador

Parte Computacional: Implementação

A implementação fundamenta-se em três sub-rotinas, sendo que uma é


selecionar qual símbolo será posto no topo da memória, outra para girar a peça que
fornece os símbolos um quarto de volta, e a última é para desempilhar o símbolo para a
memória. A linguagem utilizada para tal é Pro-Bot.

A sub-rotina Empilhador gira a peça que fornece os símbolos um quarto de volta. Usa
um sensor para ligá-lo e desligá-lo.

A segunda sub-rotina seleciona qual símbolo será posto no topo


da pilha. Usa duas variáveis globais: Uma indica e localização
corrente e a outra indica qual o símbolo desejado. Compara a posição
atual com a posição desejada e move o motor “Seletor” .

A última sub-rotina remove um símbolo do fundo da pilha de


memória, lendo-a pelo caminho, retornando numa variável “símbolo”
o número de barras pretas nele.

Figura 10.5 Máquina Pronta

18
Conclusão
Todos os simuladores vistos auxiliam adequadamente no projeto de uma
Máquina de Turing, porém dentre eles, dois deles destacaram-se: O primeiro, de
Cousienau, o qual conseguiu simular uma Máquina de Turing com pecinhas de LEGO,
com sua complexidade enorme. Caso fosse possível visualizar seu funcionamento “ao
vivo e a cores” seria possível entender melhor o real significado de uma Máquina de
Turing, pois se trata de algo palpável, e não excessivamente abstrato, como os outros
simuladores. O segundo foi o da Warthman Associates, pela sua interface, muito bem
detalhada, explicando “passo-a-passo” todo o emaranhado de movimentações da
máquina,durante a execução os movimentos da cabeça, o último movimento lido (Last
Read), o último escrito na fita (Last Write) e o útimo movimento ( Last Move).

Referências

BOVET, J. “Visual Automata Simulator”, 2004. Disponível em <


http://www.cs.usfca.edu/~jbovet/vas.html> Acesso em 27 jun. 2008

COUSINEAU, D. “Turing Machine” Montreal, 2005. Disponível em


<http://www.mapageweb.umontreal.ca/cousined/lego/5-Machines/Turing/Turing.html>
Acesso em 27 jun.2008

CSABA,G. “Visual Turing Machine 2.0 for Linux” 2007. Disponível em <
http://linux.softpedia.com/get/Science-and-Engineering/Mathematics/Visual-Turing-
Machine-27643.shtml> Acesso em 27 jun. 2008

DWECK,B.J. “Jastex: Turing Machine Simulation.” 2004. Disponível em


<http://www1.cs.columbia.edu/~zeph/software/BJDweck/> Acesso em 27 jun.2008

ECK,D. “The xTuring Machine Applet” 1997. Disponível em <


http://math.hws.edu/TMCM/java/xTuringMachine/> Acesso em 27 jun.2008

HODGES,A. “JavaScript Turing Machines.” 2003. Disponível em


<http://www.turing.org.uk/turing/scrapbook/tmjava.html> Acesso em 27 jun.2008

SCWHELLER, K “Turing Machine” Disponível em


<http://web.bvu.edu/faculty/schweller/Turing/Turing.html> Acesso em 27 jun. 2008

SIPSER,M. “An Introduction to the Computer Theory.” Thomson Learning, 2005.

SKINNER, S. “Turing Machine Simulator.” Phoenix, 2008. Disponível em


< http://ironphoenix.org/tril/tm/> Acesso em 27 jun.2008

WARTHMAN ASSOCIATES. “Turing Machine Java Animation” Disponível em <


http://www.warthman.com/ex-turing.htm> Acesso em 27 jun. 2008

19

Vous aimerez peut-être aussi