Running title • November 2012 • Vol . XXI , No . 1
for completa e consistente seria possível descrever um programa para f . Assim concluímos que nossa teoria axiomátizável e completa é , na verdade , inconsistente .
Este texto foi inspirado em “ Gödel for Goldilocks : A Rigorous , Streamlined Proof of Gödel ’ s First Incompleteness Theorem , Requiring Minimal Background ” e nesta lista de exercícios .
2 . Uma função não-computável
Comece fixando uma linguagem de programação P , pode ser algo como C , Pascal , Fortran , Java , etc . A linguagem é finita , isto é , tem finitos símbolos e cada programa gerado é finito . Mas isso não quer dizer que a quantidade de programas possíveis tenha tamanho limitado ; pense nos números naturais - temos finitos algarismos , cada número usa finitos algarismos e a quantidade de números é infinita .
A quantidade de programas possíveis de serem feitos em P é enumerável . Um conjunto é dito enumerável quando há entre ele e os naturais uma injeção . Vamos dar para cada símbolo da nossa linguagem um número , note que unindo vários símbolos estaremos unindo também vários números e formando um número maior , poderíamos associar então para cada programa esse número gerado pela concaternação dos números de cada símbolo . Mas como garantir que esse número seja único 1 ? Veja essa sequência de símbolos :
∧ |
′ |
0 |
∼ |
¬ |
! |
) |
( |
= |
+ |
. |
∗ |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
Associamos para cada um símbolo um número de três casas decimais . Isso se deve ao fato de não querermos dupla interpretação para uma frase , suponha que tivéssemos os símbolos A e B com os números 1 e 11 , respectivamente , não saberíamos se o número 111 representaria “ AB ”, “ AAA ”, “ BA ” ou “ ∗ ”. Tendo cada número representado por três casas decimais saberemos que 111103 representa somente “ ∗ ∼ ”. Claro que 3 casas decimais seria a melhor representação para uma línguagem com até 900 símbolos , para maiores quantidades poderiam ser 4 casas decimais , 5 ou o “ n ” que melhor se adequasse . Assim poderíamos associar para cada programa de nossa linguagem um número único formado pela concaternação de números de n casas decimais .
Definição 1 . Seja f : N → { 0 , 1 }. Vamos dizer que f é uma função computável se existe um programa feito na linguagem P que , ao receber o valor n , devolve f ( n ).
Da definição sabemos então o que é uma função não computável : uma função para a qual não existe programa feito na linguagem P que ao receber o valor n , devolve f ( n ). Para provar que existem tais funções vamos olhar a ilustração abaixo :
|
|
0 , 1 , 2 , 3 , 4 , 5 , 6 , ... |
f 0 |
= |
0 , 1 , 1 , 0 , 1 , 0 , 0 , ... |
f 1 |
= |
0 , 0 , 1 , 0 , 0 , 1 , 1 , ... |
f 2 |
= |
1 , 1 , 1 , 0 , 1 , 1 , 0 , ... |
f 3 |
= |
1 , 0 , 0 , 1 , 0 , 0 , 0 , ... |
f 4 |
= |
0 , 0 , 1 , 1 , 1 , 0 , 1 , ... |
f 5 |
= |
1 , 1 , 0 , 0 , 1 , 0 , 0 , ... |
f 6 |
= |
0 , 1 , 0 , 0 , 1 , 0 , 1 , ... |
. |
. |
. |
f |
= |
1 , 1 , 0 , 0 , 0 , 1 , 0 , ... |
1 Perceba que tendo cada programa um número único a função que associa para cada programa um número formaria uma injeção com os naturais , logo estaríamos provando que a quantidade de programas em P é enumerável .
2