Académique Documents
Professionnel Documents
Culture Documents
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
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
1
1.Desenha a Máquina, pela tecla de desenho Drawing.
2
Figura 1. 3: Obtenção da 7-upla
3
Figura 1. 4: Execução do simulador de Suzanne Skinner
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
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.)
6
Figura 3.2: Execução da máquina
7
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
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
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
14
Figura 9: Simulador da Warthmann Associates
Parte Física
Os Símbolos
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 Empilhador
17
Figura 10.4: Empilhador
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.
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
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
19