Xique no úrtimo, ou o Teorema de Turing

Anuncio que esta postagem está sendo escrita dentro de um browser Google Chrome, que acabo de baixar. Logo, se der pau, a culpa não é minha… Aliás, eu costumava me perguntar por que diabos as empresas que produzem software não testam direito seus produtos antes de lançá-los ao público, expondo-se sempre ao ridículo de ter um “bug” embaraçoso revelado por um nerd qualquer a qualquer momento.
Costumava me perguntar isso até descobrir o Teorema de Turing, que prova que é impossível criar um procedimento infalível para descobrir se programas de computador vão ou não funcionar direito. Basicamente, um “debug” universal é tão viável quanto uma máquina de moto perpétuo. 
O motivo disso é que a idéia de um programa capaz de prever o funcionamento de outros programas leva a um paradoxo. Rapidamente: imagine que o SUPERDEBUG é um programa que aceita outros programas e inputs destinados a outros programas, e que responde “OK” se o outro programa, combinado com o input, for rodar direito, e “TRAVA” se a combinação for levar a um travamento ou a um loop infinito — por exemplo, com caso do famoso programa do Sr. Spock, “DETEMINE_O_DÍGITO_FINAL”, tendo como input “PI”.
Agora, imagine que eu crie um programa, o “ESTRAGA_PRAZER”, com a seguinte característica: ele aceita o SUPERDEBUG e um outro programa qualquer, W, como input, e trava se a solução do SUPERDEBUG para W for “OK”, e diz “OK” se a solução do SUPERDEBUG para W for “TRAVA”. 
Agora, o que acontece se eu botar o O “ESTRAGA _PRAZER” para rodar o “SUPERDEBUG” rodando, em vez de um programa genérico “W”,  o próprio “ESTRAGA-PRAZER” rodando o “SUPERDEBUG” ? Se o “SUPERDEBUG” disser “OK”, o “ESTRAGA_PRAZER” trava. Se o “SUPERDEBUG” disser “TRAVA”, o “ESTRAGA_PRAZER” funciona numa boa a diz “OK”.
Ops.
Temos uma contradição. Logo, um “SUPERDEBUG” universal é impossível, porque sempre haverá um programa “ESTRAGA_PRAZER” capaz de fazê-lo meter os pés pelas mãos.
Claro, programas relativamente simples, como PRINT “aeiou” são fáceis de checar no olhômetro, mas sistemas mais complexos são outra coisa. O único jeito de ter certeza do que um programa de computador, a partir de um certo grau de complexidade, realmente faz é pondo-o para rodar.
Isso tem, aliás, algumas implicações para o debate entre determinismo e livre arbítrio: note que computadores são máquinas determinísticas, operando de forma lógica com base em software que é um conjunto de instruções também lógicas. E, a despeito disso, não dá pra saber o que vão fazer até que façam.
 Quem precisa de metafísica, afinal?

Discussão - 2 comentários

  1. Carlos Hotta disse:

    Por isso nunca me preocupo muito quando me chamam de hipócrita. A hipocrisia é a forma que o homem tem de não travar e dar tela azul!

  2. Igor Santos disse:

    Quinta pessoa hoje usando o google chrome.
    Só não uso porque achei igual ao Opera que uso regularmente...

Envie seu comentário

Seu e-mail não será divulgado. (*) Campos obrigatórios.

Categorias

Sobre ScienceBlogs Brasil | Anuncie com ScienceBlogs Brasil | Política de Privacidade | Termos e Condições | Contato


ScienceBlogs por Seed Media Group. Group. ©2006-2011 Seed Media Group LLC. Todos direitos garantidos.


Páginas da Seed Media Group Seed Media Group | ScienceBlogs | SEEDMAGAZINE.COM