ASSINE
search button

A ponte caiu, e o programa travou

Compartilhar

Nada mais irritante que um programa que trava inesperadamente. Você está na maior felicidade, fazendo um trabalho cheio de ideias novas e, de repente, o computador “dá pau”. E não tem jeito melhor: você tem que reiniciar a máquina e torcer para que o problema não se repita. 

Nesse momento, você se lembra de uma notícia vista no noticiário da TV: uma ponte de aço, na aparência firme e resistente, é derrubada por uma rajada de vento nem tão forte assim. Mostraram no noticiário que, sob a influência do vento, a ponte oscila de modo irregular e, de repente, se parte e desaba. De modo tão imprevisível quanto é o bug que faz travar seu computador. 

Você se pergunta, numa intuição súbita: será que se relacionam a imprevisibilidade da queda da ponte e a do programa que trava de repente? Será que um bom engenheiro de computação seria capaz de blindar aquele programa que travou? E, você ainda imagina, a queda da ponte foi consequência de um erro de cálculo ou poderia ter sido evitada? Existe relação entre a queda da ponte e o bug inesperado do programa? 

Sim. A ponte que se quebra, inesperadamente, e o programa que trava são concretizações do mesmo fenômeno abstrato. A relação entre um e outro não é  óbvia, mas mesmo assim esboço aqui o que têm em comum. Tudo começa numa dificuldade que existia na Teoria do Caos, que estuda sistemas determinísticos, mas cujo comportamento é tão imprevisível quanto o de um processo aleatório. Exemplos de tais sistemas foram estudados desde 1963, quando Edward Lorenz descobriu um sistema simples, dado por três equações, mas de comportamento imprevisível, em meteorologia. Determinístico e imprevisível. 

Desde então se produziram diversos exemplos de tais sistemas em diferentes áreas. E, em 1974, Morris Hirsch, professor de matemática em Berkeley, fez a pergunta: Há alguma “receita matemática” geral que nos permita dizer se tal sistema vai exibir um comportamento caótico?  Receita matemática é, em essência, um programa de computador. A pergunta de Hirsch foi respondida em 1990. Não existe tal receita e, para maior surpresa, isso vale para qualquer que seja a definição usada para caos, porque existem várias definições para sistemas caóticos. 

Programas de computação devem ser “debugados,” isto é, testados para que se eliminem todas as irregularidades em seu comportamento. Para um programa complicado, como os que servem a um aeroporto, não pode existir técnica geral, pois o teste do programa tem que ser feito na base da tentativa e erro. Esse programa não existe devido ao Teorema de Rice. Conforme demonstrou Henry Gordon Rice, em 1951, não há programa geral para se testar programas de gestão para quaisquer serviços, como também não existe vacina universal para vírus de computador. Você tem que testar na tentativa e erro, sem regra ou procedimento geral, todo programa de computação novo, para achar seus bugs. 

Mostra-se que existe uma versão (chama-se “extensão”) do Teorema de Rice para largos domínios da matemática, muito além da computação. A teoria matemática que estuda, por exemplo, o comportamento das pontes que vibram sob a influência do vento. O Teorema de Rice estendido demonstra que não tem receita geral para antevermos todos os casos em que a ponte quebra, e afeta outras ciências que usam a matemática como linguagem básica. Se, em economia, descrevemos matematicamente algum mercado competitivo, não há receita geral para calcularmos seus preços de equilíbrio. Há dificuldades semelhantes em física, em matemática, em economia etc. 

Isso não impede que possamos calcular muita coisa nas ciências matematizáveis. Isso apenas nos diz que não existem técnicas gerais para resolvermos quaisquer problemas. Cada caso é um caso. Ou, se preferirem, nenhum robô pode fazer matemática. A matemática precisa da criatividade humana.

* Professor emérito da UFRJ