A FÓRMULA DO CAOS - CAPÍTULO IV

O famoso desafio da RSA, no qual ainda se baseia grande parte dos sistemas de criptografia usadas hoje em dia, tornou-se para mim brincadeira de criança. Tinha em mãos um algoritmo capaz de gerar números primos de tamanhos inimagináveis quase que imediatamente, o que era a base fundamental da segurança deste algoritmo. Porém nunca pude reclamar o prêmio por tê-los quebrado: uma das condições para receber tal prêmio era descrever como isto havia sido feito, mas isto era algo que eu era incapaz de fazer. Não sabia. Havia descoberto uma maneira muito rápida de gerar primos gigantescos, mas não fazia a mínima idéia de como isto funcionava. Era uma fórmula até que simples em tamanho, mas inatingível em complexidade. Tentei aplicar vários descompiladores sobre o algoritmo em linguagem de máquina gerado pelo meu programa, mas sua lógica permanecia ininteligível apesar de todos os esforços.

......................

É indescritivelmente frustrante a sensação de ter algo importantíssimo em mãos e não poder apresentá-lo, por ser absolutamente incapaz de explicar o porquê dele funcionar. É inevitável que nossa reação natural seja negar que a descoberta seja assim tão importante. Foi o que fiz. Pensei: "Afinal, que importância tem descobrir a distribuição dos primos? É apenas uma dentre as inumeráveis distribuições caóticas que meu algoritmo principal consegue calcular. Ele sim é que é importante!". Foi com isto em mente que testei outra loucura, só que desta vez estava completamente sóbrio. Bêbado de raiva e frustração talvez, mas sóbrio da substância álcool etílico...

Peguei um velho dado, já um pouco gasto. Lancei, face quatro! Registrei no computador como primeiro número de minha seqüência. Lancei de novo: 5. Incluí na seqüência. Quatro, seis, um, um, três, dois, seis... fui cadastrando as faces obtidas. Tamanha era minha raiva em não compreender a lógica que regia a fórmula dos primos (que estava agora certo de ter conseguido) que repeti isto umas duzentas vezes, talvez um pouco mais. Enfim dei o comando: "Calcular Gerador Pseudo-Randômico". O resultado não demorou, pois a sequência numérica era pequena. Usei a fórmula gerada e calculei os cinco números seguintes: 2,1,3,3,5. "Mas quanta idiotice!", foi o que pensei. Mas por algum motivo inexplicado, decidi prosseguir com o experimento absurdo. Lancei o dado: 2! "Este acaso gosta de nos pregar peças..." De fato a chance de realmente cair a face "prevista" era de 1/6, uma probabilidade considerável. Lancei de novo: 1! "Um pouco mais difícil duas coincidências, mas não impossível: 1/36, mais ou menos 2,7% de chance de acontecer..." Lancei mais 3 vezes, tentando não olhar para o resto da seqüência prevista a fim de não ser influenciado por ela de alguma forma: 3, 3, 5... Pela segunda vez o impossível aparecia escancarado defronte meus olhos! A seqüência "caótica" prevista ia se mostrando no lançar do dado, face após face! Estaria eu enlouquecendo?

Tentei me acalmar, encontrar alguma explicação para isto. Havia lançado o dado um bom número de vezes, anotado a seqüência, e pedido um gerador pseudo-randômico capaz de gerá-la. Até aí, nada anormal, ele fez exatamente o que foi programado a fazer: ajustar um algoritmo capaz de gerar tal sequência. E depois? Bom, pedi a continuação usando o algoritmo calculado, mas sem lançar o dado real. Depois disso, lancei o dado e comecei a perceber que a seqüência prevista se repetia nos lançamentos reais. Não, isto era demais! Me recusava a acreditar que isto estava acontecendo! O que determina a face que aparece num dado? Leis mecânicas, sem dúvida: a gravidade, a colisão com a mesa, a força com que foi lançado, o momento angular transferido ao objeto... Será que o conhecimento de todas estas variáveis tornaria possível prever qual face o objeto finalmente exibiria quando estabilizasse? E os fatores psicológicos, a força que minha mão transferiu ao dado, a intensidade da rotação? Também eram previsíveis? Que fatores realmente eram relevantes para prever que face apareceria no lançamento de um dado?

A geometria do objeto parecia ser um fator importante. O dado não era um cubo perfeito, haviam falhas na fabricação. O fato de um vértice ou aresta ser ligeiramente diferente das outras poderia favorecer ou desfavorecer o aparecimento de uma face em relação às demais, e talvez meu algoritmo fosse capaz de detectar tais imperfeições após uma quantidade suficientemente razoável de lançamentos, e usar isto a seu favor ao fazer uma previsão. Talvez não fosse realmente tão difícil prever fisicamente os resultados apresentados por um dado. Tentei então simplificar o experimento para ter um nível maior de segurança em minhas conclusões. Passei a lançar uma moeda: cara é zero, coroa é 1. É um dos experimentos aleatórios mais simples possíveis!

Tratei de anotar cuidadosamente os resultados. Era um cent de dólar que sempre trazia no bolso, uma espécie de talismã. Cara, coroa, coroa, cara, coroa, cara, cara... Acreditem, repeti isto mil vezes! Anotei com cuidado e forneci a seqüência de uns e zeros ao computador. Cliquei então: "Calcular Gerador Pseudo-Randômico". Analisei, até tentei descompilar o algoritmo gerado, mas era ainda mais incompreensível do que o gerador de primos! Era uma lógica maluca de IFs e GOTOs impossíveis de serem estruturados, um código "espaguete" que nem o melhor algoritmo de descompilação era capaz de estruturar na forma de "whiles", "do-whiles", "cases" ou "fors". Mandei gerar os 100 lançamentos seguintes. Me assegurei de não ver de forma alguma a seqüência calculada, para que isto não interferisse no experimento. Era algo novo: e se o fato de observar o experimento alterasse o resultado, como acontece com tantos experimentos quânticos? Tomei o cuidado de não vê-lo e lancei a moeda mais cem vezes. 102 vezes, na verdade, anotando com cuidado a seqüência. Comecei a comparar. Cara, ok! Cara, ok! Coroa, ok! Comparei os dez seguintes: todos coincidiam! Mais dez, e o mesmo resultado! Todos os 100, e tudo batia! Fiz então uma experiência: tentar "prever" depois do evento ter acontecido (lembram que lancei 2 vezes mais do que mandei prever?) Dei o comando: "generate next: 2". Cara, coroa... exatamente a continuação da seqüência que eu havia registrado...

..................

Apesar de todas as evidências me levarem a crer numa descoberta nova e inacreditável, ainda me recusava a aceitá-la plenamente. Era a minha teimosia de cientista falando mais alto do que todas as evidências. Pensei: "Lançamento de dados e moedas são experimentos mecânicos, e talves as leis da mecânica sejam mesmo muito mais previsíveis do que imaginávamos, e como sempre quiseram demonstrar várias gerações de cientistas. O que aconteceria se eu acrescentasse variantes não-mecânicas aos experimentos?" Decidi então testar com cartas. Sim, o descarte de cartas de um baralho depende de muito poucas variáveis mecânicas. Por que decidimos tirar de um maço embaralhado determinada carta do meio, e não uma mais no começo ou final da pilha? Não estou lançando as cartas no ar e capturando alguma ao acaso. Não, estou tomando uma decisão ao descartá-la, ainda que não seja uma decisão totalmente consciente.

Numerei as cartas: ás de paus, 1; dois de paus, 2; três de paus, 3... Incluir ou não os curingas? Resolvi simplificar, e os retirei do baralho. Mapeei então as cartas na seqüência numéria de 1 a 52, e comecei a anotar a seqüência dos descartes: 10, 27, 31, 2, 1, 7... tirei 30 cartas do maço, e enviei a seqüência obtida como entrada de meu algoritmo. Cliquei no comando já conhecido: "Calcular gerador pseudo-randômico" Tentei enganá-lo: "generate next 30", ou seja, tentaria descartar no total 60 cartas, mais do que havia no meu baralho. Ele me forneceu mais 22 números positivos distintos, e depois: 0, 0, 0, 0, 0... Perdi o fôlego vendo este resultado inesperado! Comecei então a descartar o restante das cartas, comparando com a seqüência prevista: 7 de paus, dama de ouros, valete de paus... tudo coincidia, até a última carta retirada do maço! Só me restava então interpretar os zeros finais da seqüência da seguinte forma: acabou, acabou, acabou, acabou...