A máquina de Turing - 001

4
A máquina de Turing foi inventada pelo matemático Alan Turing na tentativa de descobrir se tudo na matemática poderia ser reduzido a computação mecânica. Ele se propôs a desenvolver a máquina mais simples possível que pudesse efetuar computação. A máquina que ele sugeriu era um dispositivo relativamente simples, e ele ainda foi capaz de provar que poderia efetuar todas as operações matemáticas. Pessoalmente, ele tinha grande esperança nela, acreditando que poderia fazer qualquer coisa que o cérebro humano fosse capaz, incluindo ter consciência. Há ainda bastante controvérsia sobre esta questão dentro da comunidade de inteligência artificial. O projeto original de Turing tornou-se uma "referência no projeto de computadores". Um sistema que é capaz de efetuar as mesmas operações que uma máquina de Turing (e, portanto, as mesmas que a matemática) é chamada de Turing completo. Algo bastante interessante é que não existe hierarquia de poder em sistemas computacionais. Se um sistema é um Turing completo, ele pode fazer qualquer coisa que possamos definir em termos de um algoritmo. Alonzo Church postulou uma tese que estabelece que não podem haver sistemas computacionais mais poderosos. Tais sistemas (se existissem) seriam capazes de resolver problemas que nós não podemos nem mesmo formular uma forma estruturada para resolvê-los (algoritmos). Sistemas podem ser simulados uns nos outros e podem haver simulações circulares. Uma máquina registradora pode simular uma máquina de Turing simulando uma máquina registradora. O conceito está relacionado à escrita de uma linguagem de programação nela própria, o que é bem possível. Executar um interpretador nele próprio é uma experiência confusa. Se Church estiver correto ao dizer que não existe um computador mais poderoso do que a Máquina de Turing, uma mente pode teoricamente ser simulada (este é o ponto onde a maioria das pessoas fazem objeções ao conceito). A despeito da ausência de diferenças no poder computacional, existem diferenças substanciais no que os sistemas se parecem. Abaixo são mostrados quatro sistemas semelhantes. Pessoas familiarizadas com computadores que não refletem no tópico com frequência assumem que o segundo, a máquina de registradores, é o único dispositivo de computação possível, uma vez que ele é como os computadores modernos são implementados. Os outros são admitidamente impraticáveis para uso, mas observá-los atentamente nos dá uma melhor percepção do que é computação. A Máquina de Turing Original O que Turing inventou originalmente era uma máquina que consistia de uma fita infinitamente longa divida em células. Sobre cada célula um

Transcript of A máquina de Turing - 001

Page 1: A máquina de Turing - 001

A máquina de Turing foi inventada pelo matemático Alan Turing na tentativa de descobrir se tudo na matemática poderia ser reduzido a computação mecânica. Ele se propôs a desenvolver a máquina mais simples possível que pudesse efetuar computação.

A máquina que ele sugeriu era um dispositivo relativamente simples, e ele ainda foi capaz de provar que poderia efetuar todas as operações matemáticas. Pessoalmente, ele tinha grande esperança nela, acreditando que poderia fazer qualquer coisa que o cérebro humano fosse capaz, incluindo ter consciência. Há ainda bastante controvérsia sobre esta questão dentro da comunidade de inteligência artificial.

O projeto original de Turing tornou-se uma "referência no projeto de computadores". Um sistema que é capaz de efetuar as mesmas operações que uma máquina de Turing (e, portanto, as mesmas que a matemática) é chamada de Turing completo.

Algo bastante interessante é que não existe hierarquia de poder em sistemas computacionais. Se um sistema é um Turing completo, ele pode fazer qualquer coisa que possamos definir em termos de um algoritmo. Alonzo Church postulou uma tese que estabelece que não podem haver sistemas computacionais mais poderosos. Tais sistemas (se existissem) seriam capazes de resolver problemas que nós não podemos nem mesmo formular uma forma estruturada para resolvê-los (algoritmos).

Sistemas podem ser simulados uns nos outros e podem haver simulações circulares. Uma máquina registradora pode simular uma máquina de Turing simulando uma máquina registradora. O conceito está relacionado à escrita de uma linguagem de programação nela própria, o que é bem possível. Executar um interpretador nele próprio é uma experiência confusa.

Se Church estiver correto ao dizer que não existe um computador mais poderoso do que a Máquina de Turing, uma mente pode teoricamente ser simulada (este é o ponto onde a maioria das pessoas fazem objeções ao conceito).

A despeito da ausência de diferenças no poder computacional, existem diferenças substanciais no que os sistemas se parecem. Abaixo são mostrados quatro sistemas semelhantes. Pessoas familiarizadas com computadores que não refletem no tópico com frequência assumem que o segundo, a máquina de registradores, é o único dispositivo de computação possível, uma vez que ele é como os computadores modernos são implementados. Os outros são admitidamente impraticáveis para uso, mas observá-los atentamente nos dá uma melhor percepção do que é computação.

A Máquina de Turing Original

O que Turing inventou originalmente era uma máquina que consistia de uma fita infinitamente longa divida em células. Sobre cada célula um símbolo de um conjunto finito de símbolos pode ser escrito. A cabeça que lê e escreve na fita uma célula para a esquerda ou para a direita a cada passo de tempo.

A própria máquina está em um estado de um número finito de estados. O estado que a máquina está determina o que a máquina deve fazer em cada passo de tempo através de uma tabela de transição de estados como a mostrada abaixo (com apenas um estado). Ela fala para a máquina o que fazer quando ela estiver em um determinado estado e encontrar um determinado símbolo. Os estados podem ser representados por números, símbolos, ou strings (como na tabela a seguir).

Estado Símbolo Write Movimento Próximo Estado

"trocar zeros com 'x's" 0 x direita "trocar zeros com 'x's"

"trocar zeros com 'x's" 1 1 direita "trocar zeros com 'x's"

Em cada passo um símbolo é escrito na fita e a cabeça é movida um passo para a esquerda ou para a direita. Depois do passo de tempo, a máquina move-se para um novo estado.

O maior problema quando se programa máquinas de Turing é que não há local para se armazenar os

Page 2: A máquina de Turing - 001

dados que não seja a fita. Então ela ela torna-se ruim para processar mais de um símbolo por vez. Comparações de dados consistindo de mais do que um símbolo, por exemplo, requerem armazenadores de informação e um grande número de estados para guardar a informação necessária.

O estado terá que ser usado para armazenar informações como o "vai um", booleanos e deslocamentos relativos, entre outras. E cedo, mesmo para operações aparentemente simples, o número de estados cresce para proporções gigantescas.

A abstração é quase impossível. É difícil de imaginar o equivalente a uma chamada de procedimento. Isto torna uma tarefa difícil quebrar um problema em subproblemas.

Alguém poderia imaginar uma máquina de Turing operando diretamente sobre o código de uma máquina registradora, combinando registradores para formar estados. É claro, mesmo para um pequeno conjunto de instruções, haveriam bilhões de símbolos (possivelmente instruções simples) e trilhões de estados. Teoricamente, isto não é problema, desde que haja um limite superior para ambos.

Máquina Registradora

Uma máquina registradora consiste de um conjunto de instruções executadas em série que operam sobre registradores que contêm dados. A máquina tem um conjunto de operações básicas que teoricamente podem ser muito poucas, consistindo apenas de saltos condicionais, comparação e atribuição.

Todos os computadores modernos tem uma memória linear contendo tanto as instruções quanto os dados. Esta idéia, criada por Alan Turing e desenvolvida por John von Neumann é totalmente essencial para máquinas práticas. Na máquina registradora pura, contudo, assim como na máquina de Turing, as instruções tidas como corretas. O método de armazenamento não é especificado.

Programar é bastante intuitivo, uma vez que esta é a forma pela qual normalmente formulamos algoritmos. "Se X > 0 escreva 5 em Y e salte para a próxima instrução". Pode ser que esta não seja a melhor forma de fazer isto, mas é a forma mais simples com a qual estamos acostumados. Em computadores paralelos SIMD (essencialmente máquinas registradoras mas como operações trabalhando em muitos dados simultaneamente), poderíamos dizer "pegue todos os zeros e adicione um a eles" em vez de "se A é zero some um a ele. Seja A o valor do próximo registrador e repita esta operação" em uma máquina serial.

Cientistas da computação tendem a aceitar a máquina registradora como o único sistema computacional razoável, mas de fato ele tem muitas desvantagens, sendo a principal a serialização das instruções. Uma outra é que ele usa programação imperativa, isto é, nós temos que falar a ele como fazer as coisas, em vez de o quê fazer.

Isto também parece óbvio para nós, mas, por exemplo, na programação lógica alguém define o que constitui um resultado e o sistema então encontra ele sem ser direcionado (pelo menos esta é a idéia). Ordenação, por exemplo, é trivial. As instruções poderiam ser "encontre uma lista contendo esses elementos onde cada elemento é menor do que seu sucessor". Em contraste, fazer isto imperativamente em uma máquina registradora pura é bastante complicado.

É claro, como já estamos nos acostumando, programação lógica pode ser implementada em máquinas registradoras, ou em máquinas de Turing, autômatos celulares e assim por diante.

Autômato Celular

Autômato celular faz, lembrar em alguns pontos, os computadores paralelos. Dados estão contidos em um conjunto de células e todos os dados são alterados a cada passo. O estado de uma célula depende apenas do estado da sua célula vizinha na geração anterior. Não há estado e a distinção entre código e dado também é difícil.

Um dos autômatos celulares mais conhecidos é o chamado "Jogo da Vida". Ele está muito distante do que geralmente compreendemos ocmo computação, ou programação. Programar esses sistemas é muito contra-intuitivo, uma vez que pequenas alterações no código frequentemente têm efeitos gigantescos em

Page 3: A máquina de Turing - 001

termos de comportamento.

E ainda, é possível provar que o sistema do Jogo da Vida é um Turing completo. Ele deveria então ser capaz de construir uma configuração inimaginavelmente complexa de células que implementam a fita e as transições de estados de uma máquina de Turing.

O Universo

Sim, o universo também é uma máquina de Turing. Quase por definição, na verdade. Qualquer coisa que pode ser implementada em uma máquina de Turing é por si só uma. O "sistema" no qual essas simulações, seu computador e você próprio "estão implementados" é o conjunto de leis naturais fornecidos pelo universo em que vivemos.

Dos sistemas apresentados acima, a natureza mais se parece com o autômato celular. Em uma forma massivamente paralela, todos os "dados" interagem com os "dados" vizinhos para determinar o estado futuro do sistema. Esta é também a razão pela qual o autômato celular foi inventado. As redes neurais em nossos cérebros também funcionam desta forma.

Então é possível declarar que o universo não é nada mais do que um grande computador. Isto significa que deveria, em princípio, ser possível simular ele com uma máquina de Turing, se a tese de Church estiver correta. Na prática, contudo, é obviamente impossível simular um sistema com memória totalmente infinita nele próprio. Simular o universo requeriria um sistema com a mesma memória que o universo. Então um simulador teria que ficar fora do universo que está sendo simulado.

Vendo tudo como computação pura poderia levar o conceito de máquinas de Turing muito além, mas ele definitivamente mostra que a computação pode ser feita mais formas do que a geração atual de computadores a faz.

http://www.fundao.wiki.br/articles.asp?cod=20