Monday, April 24, 2006

Remontando a Torre de Babel, ou como Gödel realmente é o cara


Se Deus quisesse ter sido mais eficaz em destruir a comunicação entre as pessoas, devia ter dito "Lhes darei Gödel."

(hoje eu vou tomar a liberdade de expandir todos os parênteses pertinentes à discussão até bem longe, então se certifiquem que vocês têm tempo e vontade de ler até o final)

Linguagem. A definição exata do que é uma linguagem (ou idioma, chamem do que vocês quiserem, pois serve para minha abstração aqui) é bastante nebulosa, mas vamos por ora assumir que basicamente uma língua consiste em um conjunto de instruções que os dois lados do diálogo (podem ser pessoas ou não, como veremos mais adiante) entendem, e, a partir disso, fica possível transmitir informações entre estas partes. Tudo bem, agora temos uma noção "intuitiva" do que é uma linguagem, mas isto não serve para efeito de formalizar algum tipo de conhecimento. Precisaríamos de uma noção mais bem-definida.

Já que não temos esta noção, vamos ao menos tentar fazer com que nosso pseudo-idioma seja no mínimo tão conciso quanto conseguirmos. Para o primeiro mega-parêntese, eu vou tentar explicar porque é desejável termos uma linguagem concisa (ou pelo menos o mais concisa que conseguirmos): Considera-se, atualmente, que todos os homens são iguais, e têm direitos iguais, etc. e tal (note que, apesar de eu a princípio concordar com isso, a história não era bem assim antigamente). Se todos somos iguais, devemos, inicialmente, sermos julgados igualmente por aquilo que fazemos (julgamento neste caso pode ser punição ou bonificação, ou qualquer atividade whatsoever). Para podermos documentar esta idéia de julgamento, criamos convenientemente um ou mais códigos de leis, e estas leis são construídas como expressões estritamente permitidas pela linguagem que utilizamos. Para garantirmos igualdade e "imparcialidade" nestas leis, é bom que tenhamos um idioma conciso e sem ambiguidades.

Passando do motivo para se ter uma linguagem concisa (eu estou abusando do termo de propósito), vamos agora tentar definir exatamente _o que_ determina que uma determinada forma de expressão seja "concisa" (eu _não_ vou dizer completa _nem_ consistente antes da hora). Removendo todos os sinônimos, enfeites e redundâncias que idiomas atuais possuem (não estou tirando o valor deles, tanto pela estética quanto pela flexibilidade; estou somente supondo uma simplificação válida para fins do meu argumento), nos restarão algumas construções lógicas básicas, das quais podemos mostrar alguns exemplos:
Considera-se que é necessário sermos capazes de atribuir valores de "verdadeiro" ou "falso" para determinadas afirmativas, assumimos que nossa construção deve ser capaz de expressar idéias do tipo "Se .... então .... senão ...." (o senão não é obrigatório, mas para fins de clareza ele está aqui), e aceitamos que, para todos os casos, negar algo verdadeiro o torna falso e negar algo falso o torna verdadeiro. Existem muitas outras características que são desejáveis em uma linguagem, mas não é meu papel aqui explicitar todas elas; só quero deixar claro que vou me utilizar de alguns exemplos que não foram mostrados logo aí acima.

Além destas construções simples, queremos (a princípio) uma coisa muito, mas muito importante no nosso idioma: queremos que as afirmativas "verdadeiras" possam ser provadas como tal, e o mesmo para as falsas (que possam ser provadas como tal). Provar neste contexto significa utilizar construções permitidas pelo sistema para concluirmos que, a partir de certas definições, aquilo que queremos provar "é" verdadeiro ou não. Agora só para preencher a cota de conhecimento formal do post de hoje, falemos um pouco sobre os conceitos de completeness (completude ?) e de consistência num sistema lógico formal: Diz-se de um sistema que ele é "completo" quando todas as afirmativas verdadeiras deste sistema podem ser provadas, e diz-se que ele é "consistente" quando _somente_ as afirmativas verdadeiras podem ser provadas (notem a diferença entre os dois conceitos). Naturalmente, o que gostaríamos de ter é um sistema que seja completo, consistente, e ao mesmo tempo poderoso o suficiente para expressar as idéias que queremos transmitir.

Infelizmente, as coisas não são bem assim: No início do século XX, um cara chamado Kurt Gödel mostrou, por um argumento bastante simples até, que qualquer sistema lógico capaz de expressar aritmética é necessariamente incompleto. Caso vocês não tenham ficado chocados com isso, pensem o seguinte: _Todo e qualquer_ sistema lógico que consiga expressar idéias da aritmética (ou seja, um sistema no qual possamos fazer somas e produtos, basicamente) é necessariamente incompleto. O que nos leva para o mega-parêntese 2, que é mais ou menos um esboço da idéia do argumento do Gödel:

Ele começou "recodificando" símbolos simples como "=", "+", "-", entre outros, como sendo certos números (o detalhe de como exatamente ele fez isso é um pouco mais complicado, pois era necessário garantir que cada número representasse um e somente um símbolo e etc e tal, mas a idéia é simples) e deixou os "números" mesmo na expressão como eles estavam. Então ao invés de termos, por exemplo, 6 + 8 = 14, teríamos algo do tipo 6 * 319 * 8 * 1077 * 14 (note que essas multiplicações fui eu que coloquei, e que não fazem parte do argumento verdadeiro. A maneira com que ele "unia" os símbolos na expressão é um pouco mais complicada e não cabe discutir aqui, e também que 319 _não_ é o símbolo certo para "+" e 1077 _não_ é o símbolo certo para "="). Agora, notem que o que antes parecia uma frase esotérica da aritmética foi reduzida a um número (e do jeito que ele organizou seu sistema, em um número único). Este número corresponde a 230.874.336, mas isto não vem ao caso. Agora imaginem que interessante, se eu pegar e escrever uma fórmula do tipo 55 + 230.874.336 = 230.875.391. Em efeito, eu estou adicionando um valor (55) a uma afirmativa, formando assim outra afirmativa. Esta é a grande sacada do trabalho do Gödel: Escrevendo as afirmativas de maneira uniforme, ele foi capaz de criar um sistema onde afirmações podiam "agir" sobre outras afirmações, e com isto ele pöde expressar a seguinte frase: "Esta afirmativa é verdadeira e não pode ser provada". Wow. Acabamos de destruir a completude da aritmética, pois conseguimos mostrar que existem maneiras de se construir, usando a aritmética, afirmações que não podem ser provadas.

Voltando à discussão principal, chegamos à conclusão que qualquer linguagem (ou melhor, qualquer sistema formal) que seja capaz de representar operações aritméticas irá necessariamente ser incompleto. Vamos então à terceira parte do meu argumento (pelo menos eu acho que é a terceira), que trata da comunicação entre pessoas e computadores:

Muito antes da eletricidade, muito antes dos computadores, até muito antes do Gödel, houve outro sujeito que já pensava em assuntos de lógica formal: Este sujeito era o Leibniz, e entre os planos dele estava a de construir um "Logic Mill" (sim, estou roubando descaradamente os termos do Neal Stephenson, mas vocês vão me perdoar :) ), ou seja, uma máquina que fosse capaz de provar teoremas. Como na época não existia tanta tecnologia para implementar a sua idéia, Leibniz acabou passando para a história somente com a "mísera" atribuição de ter conseguido construir uma calculadora mecânica. Em parte, foi sorte dele, pois se ele soubesse que seus "Logic Mills" eram impossíveis por definição, ele não teria ficado muito feliz.

Por outro lado, vamos imaginar o que passaria na cabeça de alguém que quisesse teimar em construir o tal Mill com o seguinte argumento: "Eu faço um programa que recebe um teorema, olha para este teorema e descobre se o teorema pode ser provado. Se ele puder ser provado, meu programa o prova, e se ele não puder ser provado, meu programa me diz que o teorema não pode ser provado". Ironicamente, as pessoas do início do século XX tinham a mania de estragar prazeres, então surgiu um _outro_ chapa, este chamando Alan Turing, que resolveu o entscheidungproblem (bá puxei do fundo do meu alemão). Entscheidungproblem significa, literalmente "Problema da decisão". Ou seja, Turing resolveu o problema se é possível decidir se uma dada afirmação pode ou não ser provada. E não é que o desgraçado mostrou que não tem como decidir!! Ou seja, temos por contribuição do Gödel que nem todas as afirmativas verdadeiras podem ser provadas, e pelo Turing que nós sequer temos como saber quais podem e quais não podem! Nosso objetivo de criar uma linguagem concisa e determinística está indo por água abaixo...

Vamos para o (não sei mais qual número) mega parêntese: É necessário agora distinguir ciência de empirismo (ou empiricismo?) (eu sei que parece não ter nada a ver, mas acreditem em mim, tem). Eu vou aqui definir, para os propósitos do meu argumento, que empirismo trata-se simplesmente de sermos cuidadosos e imparciais em nossas observações de experimentos. Ou seja, trata-se de assumirmos que as coisas seguem um padrão mais ou menos "racional", e trata-se do nosso compromisso de sermos capazes de "contar" (as in one two three four five) as ocorrências de algum ou outro evento. Aumentando a complexidade deste argumento vai eventualmente nos levar até a estatística, que tem como objetivo "catalogar" eventos de forma que possamos fazer observações úteis sobre eles. Eu diferenciei isto de ciência simplesmente para poder dizer que a estatística, como argumento mais complexo deste meu sistema de "contar" as coisas, pode ser aplicada em _qualquer_ área de _qualquer_ coisa. Como ela não se preocupa em encontrar as "razões" metafísicas ou whatever para o acontecimento de alguma coisa, podemos utilizá-la simplesmente para compilar um catálogo de eventos convenientes para nós. A ciência, por outro lado (sim, isto merecia um novo parágrafo, mas é que ainda faz parte do mega parêntese), pelo menos como tem sido praticada até pouco tempo atrás, segue uma orientação estritamente determinista (felizmente hoje em dia se aceita teorias científicas com uma certa dose de eventos randômicos (me corrijam se eu estiver falando besteira, mas me parece que a física quântica é por estas linhas)). Determinismo significa, no sentido mais simples da palavra, que em um sistema S, que aceita como parâmetros as coisas S(p1,p2,p3,p4,p5...), o resultado deste sistema será sempre o mesmo, dados os mesmos parâmetros de entrada. Os pensadores do final do século XIX entendiam que o mundo funcionava desta forma, mas na verdade nada nos garante que realmente _é_ assim (eu acredito nisso, caso alguém se interesse pelas minhas "crenças"). Para completar o parêntese, só vou dizer que os computadores de hoje em dia são máquinas deterministas: se repetirmos o mesmo conjunto de valores na memória de um computador um número arbitrário de vezes, o resultado sempre será o mesmo.

Já vimos que nossa vontade de fazer uma linguagem "perfeita" deve ser redefinida, e aqui em cima vimos um pouco sobre o que é determinismo. O fato é que, para modelar acontecimentos mais complexos no mundo, o modelo determinista simplesmente não funciona muito bem (ou seja, é muito difícil modelar eventos complexos como comportamento de populações, estratégias em jogos, reações biológicas (eu sou teimoso e eu -Não- vou dizer emoções) e etc.). Hmm, acabamos de concluir que uma linguagem "perfeita" não existe, e que a simples idéia de determinismo não é muito desejável para todos os casos. Entretanto, nós somos capazes de conversar uns com os outros de maneira mais ou menos eficiente, usando português, inglês e etc. Como resolver isto? Mostramos que não existe uma linguagem boa, e que o próprio conceito de "ser bom" não é desejável sempre, mas mesmo assim conseguimos conversar, e vocês conseguem entender (or God I hope so ;) ) o que eu estou escrevendo aqui!

Para este grande dilema, existem duas soluções: Ou o homem é dotado de uma característica áurea que o dota da "razão" (por razão eu digo a capacidade de se comunicar e etc. etc., não me encham o saco), ou nós funcionamos com alguma coisa diferente de um sistema determinístico. Eu acredito que a resposta seja a _segunda_ opção, e vou tentar mostrar porque a primeira eh besteira em ainda outro mega parêntese:

Se o ser humano é dotado de alguma coisa "extra" material, quando colocarmos um ser humano em uma situação totalmente devoid de contexto, ele deveria perder sua capacidade de raciocínio. Ou seja, se assumimos que um ser humano é algo além de uma maravilhosa combinação de átomos, quando nós de fato o _reduzirmos_ a esta condição de combinação de átomos, ele deveria perder sua capacidade de raciocínio. Portanto, vou lançar o seguinte gedankenexperiment: Imaginem um homem nu no espaço. Sim, ele não vai sobreviver por muito tempo, mas nos instantes antes do sangue dele ferver etc. etc. e tal, vocês realmente acham que ele perderia sua "razão"? Pois eu acho que não.

O que nos deixa somente com o segundo argumento: As coisas funcionam de uma forma mais ou menos não determinista. E é aí que entra a idéia de um modelo heurístico: Um modelo heurístico é aquele que descreve bem determinado acontecimento para uma certa quantidade de amostras. Ou seja, é uma solução de um problema que não funciona sempre, mas que pode funcionar várias vezes. Não é a solução "ideal" (ou seja, aquela com o melhor resultado no menor tempo), mas é uma que "serve" e pode ser encontrada em tempo razoável. Mas um sistema determinístico não aceitaria esta solução, pois ela não é ideal e nem vem de um modelo de solução "perfeito" (que já vimos exaustivamente que de fato não existe). Portanto, precisamos de um método de tolerância a erros. Precisamos estabelecer alguma coisa que faça com que nós possamos resolver problemas de maneira satisfatória, e de fato ficarmos "satisfeitos" com esta solução. (Comic relief here:) Este método se chama de saco. Falando seriamente agora, quero dizer que acredito que nosso sistema de comunicação, e até mesmo de pensamento, é baseado numa carga gigantesca de experiência (cedida a nós pela boa e velha seleção natural), e esta carga de experiências nos habilita a construir um modelo de soluções que funciona para a grande maioria dos casos, mas definitivamente não para todos, e não da melhor maneira possível.

Para completar, e finalmente _mostrar_ o meu argumento, quero dizer que eu acredito que seja possível se comunicar com computadores (como faríamos com pessoas), mesmo que estes sejam determinísticos. Vejam, não estou dizendo que isto é necessariamente desejável, mas sim meramente possível. Várias soluções de problemas computacionais empregam modelos heurísticos, como o jogo de xadrez (e eu já falei pra vocês em outro post que computadores sabem jogar xadrez), então eu não vejo porque um modelo heurístico de interpretação não possa ser implementado. Claro que o computador _não_ vai poder nos responder 42, e é claro que vão existir algumas coisas que ele não vai entender; mas eu desafio qualquer humano de carne e osso entre vocês a me falar que vocês nunca "não entenderam" alguma coisa. De repente é por causa disto tudo que o HAL 9000 se chama Heuristically programmed Algorithmical Computer, e NÃO É porque HAL == IBM - 1. Oh bollocks...

Sim, este foi o post mais comprido ever, mas vocês foram avisados devidamente.

5 Comments:

Blogger Felipe Rijo said...

Heheh... ele morreu de fome porque tinha medo da comida estar envenenada, então só comia o que a esposa cozinhava. Aí ela ficou doente, e ele morreu por não comer nada.

Nem comento sobre o resto do post porque não entendi absolutamente nada. NAAAAA-DAAAAA. Também porque comecei a fazer speed-reading na terceira linha, e tudo o que eu li foi 'bla-bla-bla' ehheheheheh...

10:41 AM  
Blogger Paulo Becker said...

"Para completar o parêntese, só vou dizer que os computadores de hoje em dia são máquinas deterministas: se repetirmos o mesmo conjunto de valores na memória de um computador um número arbitrário de vezes,o resultado sempre será o mesmo."

Mentira tá :P

Brincadeiras à parte, acho que eu devia ser um papa-óstea carolo pra de vez em quando discordar dos teus posts e criar caso.

2:26 PM  
Anonymous Anonymous said...

Nossa... soh li o titulo
mas eu acredito em vc intaum o Godel era o cara =p (nem sei quem era o cara, mas em todo o caso)
Deleta o comment de propaganda >.>

2:38 PM  
Blogger Felipe Rijo said...

A demora pelo próximo update é diretamente proporcional ao tamanho do post anterior?

11:43 PM  
Blogger Felipe Rijo said...

okay, enough. faz quase um mês já. UPDATEEE

7:21 PM  

Post a Comment

Subscribe to Post Comments [Atom]

<< Home