Você está na página 1de 51

Incompletude e Indecidibilidade em

Sistemas Formais

Vinicius Augusto de Souza


Bacharelado em Matemática Computacional
Universidade Federal de São Paulo (UNIFESP) - SJC

Orientador: Prof. Dr. Marcelo C. Gama

São José dos Campos – SP


Dezembro de 2013
RESUMO

Serão mostrados argumentos que permitem concluir que devem existir determi-
nados predicados lógico-matemáticos indecidı́veis, isto é, predicados cujo valor
lógico não pode ser determinado de forma algorı́tmica. A indecidibilidade é um
caso particular associado à existência de funções com domı́nio e contradomı́nio
no conjunto dos números naturais que não são computáveis, o que significa que
o valor assumido por tais funções não pode ser determinado de forma mecânica
para todos os seus argumentos. Um dos motivos para a existência de tais si-
tuações é a diferença entre as cardinalidades do conjunto de todas as máquinas
de Turing (dispositivo teórico que, supondo verdadeira a Tese de Church, cap-
tura definitivamente o conceito de computabilidade) e do conjunto de todas as
funções sobre os naturais. As demonstrações destes resultados utilizam prin-
cipalmente o método diagonal de Cantor, no qual se supõe que determinado
conjunto de objetos possa ser enumerado, mas, no entanto, consegue-se obter
um objeto do mesmo tipo que não está na enumeração, revelando a falsidade
da suposição inicial. Por fim, um importante exemplo de indecidibilidade e não
computabilidade apresentado é o problema da parada, que nos mostra que não
existe um método geral para determinar se um dado programa, sob determinada
entrada, irá parar ou não sua execução. A partir da indecidibilidade do pro-
blema da parada será verificado que não é possı́vel conceber um sistema formal
que esgote toda a verdade matemática (sistema formal completo), pois, se assim
fosse, o problema da parada seria decidı́vel.

Palavras-chave: Indecidibilidade, sistemas formais, problema da parada,


máquina de Turing.

1
SIGLAS UTILIZADAS

R: Conjunto dos números reais.


Q: Conjunto dos números racionais.
N: Conjunto dos números naturais.
Z: Conjunto dos números inteiros.
APR: Aritmética Primitiva Recursiva.
AP: Aritmética de Peano (ou Aritmética Formal).
fbf: formula bem formada (também denota fórmulas bem formadas).
LPO: Linguagem de Primeira Ordem.
L: sistema axiomático formal para o Cálculo Proposicional Clássico.
URM: Unlimited Register Machine (máquina de registradores ilimitados).
MT: Máquina de Turing.
F (N; N): Conjunto de todas as funções com domı́nio e contradomı́nio no con-
junto dos números naturais.
ZFC: teoria dos conjuntos de Zermelo-Fraenkel com o axioma da escolha.
HC: Hipótese do contı́nuo.

2
Sumário
1 Introdução 4

2 Objetivos 14

3 Fundamentação Teórica 15
3.1 Lógica Clássica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.1 Sistemas Formais . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.2 Cálculo Proposicional Clássico . . . . . . . . . . . . . . . 16
3.1.3 Lógica e Teorias de Primeira Ordem . . . . . . . . . . . . 18
3.2 Computabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.1 Máquina de Registradores Ilimitados . . . . . . . . . . . . 23
3.2.2 URM-Computabilidade . . . . . . . . . . . . . . . . . . . 24
3.2.3 Máquina de Turing . . . . . . . . . . . . . . . . . . . . . . 26
3.2.4 Turing-computabilidade . . . . . . . . . . . . . . . . . . . 27
3.2.5 A Tese de Church . . . . . . . . . . . . . . . . . . . . . . 29
3.3 Problemas de Decisão . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.1 Conjuntos Recursivos e Recursivamente Enumeráveis . . . 30

4 Sobre a Existência de Funções Sobre os Naturais Não Com-


putáveis 32
4.1 Não Enumerabilidade do Conjunto F (N; N) . . . . . . . . . . . . 32
4.2 Enumerabilidade das Máquinas de Turing . . . . . . . . . . . . . 34
4.2.1 Enumeração de Gödel . . . . . . . . . . . . . . . . . . . . 34
4.3 Linguagens Não Decidı́veis . . . . . . . . . . . . . . . . . . . . . . 37
4.4 Funções Sobre os Naturais Incomputáveis . . . . . . . . . . . . . 38
4.5 Reais Não Computáveis e a Indecidibilidade do Problema da Parada 39
4.5.1 Máquina de Turing Universal . . . . . . . . . . . . . . . . 41

5 Uma Breve Explanação Sobre o Problema da Parada e o Pro-


grama de Hilbert 42

6 Conclusão 45

7 Trabalhos Futuros 47
7.1 Incompletude da Aritmética de Peano e o Problema da Decisão
da Lógica de Primeira Ordem . . . . . . . . . . . . . . . . . . . . 47
7.2 Aleatoriedade e Incompressibilidade . . . . . . . . . . . . . . . . 47

Referências Bibliográficas 48

3
1 Introdução
Uma particularidade essencial do ser humano é sua capacidade de pensar sobre
si mesmo e sobre o mundo. O filósofo alemão Karl Jaspers (1883-1969) dizia que
as perguntas são mais essenciais do que as respostas e cada resposta transforma-
se em uma nova pergunta1 . Em outras palavras, cada pergunta traz um novo
horizonte a ser desbravado, onde novas questões serão levantadas.

Algumas questões que surgem ao longo da história são bastante especı́ficas,


associadas à própria realidade (concreta) do ser humano, como “quando será a
próxima cheia do rio Nilo?” Outras são mais gerais e abstratas, como: “o que é o
ser?” Independentemente de sua natureza ou motivação, todas as perguntas tra-
zem consigo um novo problema: existe uma resposta e, se existe, é a verdadeira?

A matemática também não escapa a este problema. Se por um lado está


associada intuitivamente ao contidiano das pessoas, como quando calculamos o
troco ao comprar um alimento, por outro, esconde questões altamente abstratas
que, apesar de serem facilmente propostas, perturbaram a mente de diversos
matemáticos ao longo dos tempos.

Em cada época, a busca por respostas a questões matemáticas fez esta dis-
ciplina se defrontar com situações onde seu corpo de conhecimento não foi su-
ficiente para prover estrutura teórica e metodológica ou, ainda, se deparar com
resultados que, aparentemente, entravam em conflito com o pensamento vigente.

Em tais situações, o matemático pode, por exemplo, introduzir novos objetos


e conceitos em seu discurso. O estado destas novas entidades pode permanecer
incerto durante algum tempo, até que sejam definitivamente incorporados ao
corpo de conhecimento vigente ou refutados. Alguns exemplos destas situações
são a origem dos números racionais e imaginários, o conceito de função e as so-
mas infinitas. Em geral, as criações que permancem são aquelas mais intuitivas
e conservativas, isto é, aquelas que fornecem uma solução de forma mais simples
e sua aplicação a problemas já conhecidos não altera o resultado esperado [30].

No entanto, a introdução de novas entidades nem sempre é suficiente para


superar alguns problemas. A matemática pode se deparar com uma situação
onde se faz necessária uma reflexão mais profunda a respeito de seus fundamen-
tos - seu corpo teórico e sua filosofia. Momentos em que esta reflexão sobre a
própria natureza da matemática foi realizada de maneira mais contundente são
geralmente referenciados como crises da matemática.

A primeira crise remonta à Grécia Antiga, onde as concepções de tempo e


espaço são defrontadas entre as visões discreta e contı́nua do mundo. Primeira-
mente, houve a descoberta de magnitudes que não são comensuráveis umas com
as outras, contrapondo a concepção discreta de número à ideia da continuidade
geométrica.

Outro problema relacionado à primeira crise da matemática é o paradoxo


1 Introdução ao pensamento filosófico - Editora Cultrix, 1997.

4
de Zenão, formulado por Zenão de Eleia (450 a. C.). A alegoria de Aquiles nos
auxilia a entender este paradoxo: Aquiles deseja alcançar o fim do estádio, mas,
para isto, precisaria de um determinado tempo para percorrer primeiramente a
metade do caminho. Da mesma forma, para percorrer a metade do caminho,
Aquiles necessitaria novamente de um determinado tempo para percorrer a me-
tade deste novo caminho, e, assim, sucessivamente. Deste modo, se o espaço
fosse infinitamente divisı́vel, o movimento era impossı́vel, já que Aquiles necessi-
taria de um tempo infinito para percorrer o estádio. O paradoxo surge pelo fato
de que sabemos que o movimento é possı́vel. Para Zenão, portanto, o tempo e
o espaço não eram infinitamente divisı́veis.

Os dois problemas citados mostram, em sua origem, as limitações do dis-


curso da época: a incapacidade de se definir número irracional e a falta de uma
teoria do continuum ([12] citado por [23]).

A segunda crise nos fundamentos da matemática surge nos séculos XVII e


XVIII, e está relacionada ao desenvolvimento inicial do cálculo. Neste perı́odo,
era utilizado particularmente o conceito de infinitésimo (uma quantidade infi-
nitamente pequena). O motivo pelo qual tal conceito trouxe inconsistência à
matemática foi exposto principalmente por George Berkeley, em seu trabalho
“O Analista”, de 1734. Um dos argumentos de Berkeley era que os infinitesi-
mais eram considerados ora como não-nulos e ora como nulos em um mesmo
argumento.

Um exemplo deste argumento de Berkeley pode ser verificado no cálculo


da derivada da função y = x2 . Desejamos verificar, ao realizar um acréscimo
infinitesimal ∆x ̸= 0 à variável x, qual o acréscimo resultante ∆y à variável y.
Assim,
2
∆y = (x + ∆x) − x2
= x2 + 2x∆x + (∆x)2 − x2
= 2x∆x + (∆x)2

O acréscimo relativo (derivada), portanto, é dado a partir de


∆y
= 2x + ∆x
∆x
desprezando-se o termo ∆x (∆x = 0), contrariando a suposição inicial de que
∆x ̸= 0.

Outro argumento que exibe uma inconsistência no uso de infinitésimo nos


leva a contrariar a propriedade arquimediana dos números reais. Esta propri-
edade diz que, dado um número real x > 0, então, dado qualquer y > 0 que
satisfaz y > x, existirá um número natural n > 0 tal que nx > y. No entanto, se
tomarmos um número infinitamente pequeno e o multiplicarmos por um número
natural qualquer, o resultado ainda será infinitamente pequeno, contrariando o
princı́pio de Arquimedes.

A falta de cuidado especial em relação aos fundamentos e rigor formal da


matemática neste perı́odo pode ser explicada, em parte, pelo fato de que seu

5
desenvolvimento (em especial, o cálculo) está entrelaçado às aplicações práticas
oriundas de problemas da fı́sica, por exemplo [30].

Vários matemáticos trabalharam, então, para prover uma fundamentação


para o cálculo e para a matemática, de maneira geral, tornando mais precisos
diversos conceitos. Cauchy (1789-1857), por exemplo, no século XIX, elimina o
infinitésimo através da introdução do conceito de limite. Esta atitude da comu-
nidade matemática ficaria conhecida por Aritmetização da Análise.

Um dos primeiros trabalhos realizados neste sentido foi iniciado por Weiers-
trass (1815-1897), Cantor (1845-1918) e Dedekind (1831-1916), e consistia em
fundamentar a teoria do continuum (ou a teoria dos números reais) em termos
puramente algébricos, eliminando assim a intuição geométrica, utilizada muitas
vezes como base para demonstrações do cálculo. A ideia principal destes ma-
temáticos era de expressar os conceitos básicos da matemática na linguagem da
aritmética, onde temos relações entre números inteiros.

Os números reais são então estabelecidos de acordo com novas definições:


como cortes de Dedekind e como classes de equivalência de sequências de Cau-
chy de números racionais. Assim, em ambas abordagens, os números reais são
construı́dos utilizando-se de conjuntos infinitos de números racionais. Como os
números racionais podem ser reduzidos aos números inteiros e estes últimos,
por sua vez, podem ser reduzidos aos naturais, a proposta de aritmetização da
análise, sob o ponto de vista de Weierstrass, Cantor e Dedekind, trouxe à tona
a necessidade de se fundamentar rigorosamente os números naturais.

A fundamentação dos números naturais, feita na linguagem da teoria dos


conjuntos, consiste na formulação dos Axiomas de Peano (que são atribuı́dos a
Dedekind pelo próprio Peano), expressos da seguinte forma: Dado um conjunto
N de objetos não definidos, cujos elementos são chamados de números naturais,
tomando 0 como elemento primitivo tal que 0 ∈ N e ′ uma aplicação de N em
N (chamada de operação sucessor), que satisfaz:

(DP1 ) ∀x(x′ ̸= 0)
(DP2 ) ∀x, y(x′ = y ′ ⇒ x = y)
(DP3 ) ∀X(0 ∈ X ∧ ∀x(x ∈ X ⇒ x′ ∈ X) ⇒ ∀x(x ∈ X))

A primeira propriedade da operação sucessor diz que 0 não é sucessor de


nenhum outro número (primeiro elemento). A segunda propriedade diz que a
operação sucessor é injetiva. Logo, cada número possui apenas um sucessor,
uma vez que, se dois números possui o mesmo sucessor, eles são iguais. Por
fim, a terceira propriedade (também chamada de princı́pio de indução) nos diz
que, para todo conjunto X, se 0 pertence a este conjunto e X também contém
o sucessor de cada elemento de X, então X contém todos os números naturais.

Estes axiomas, juntamente com a teoria de conjuntos, possibilitam a fun-


damentação da teoria dos números reais. No entanto, antes mesmo de tais
desenvolvimentos estarem consolidados, a descoberta de paradoxos na teoria de
conjuntos abalou novamente os fundamentos da matemática.

6
A descoberta de paradoxos na teoria de conjuntos constituiu a terceira crise
nos fundamentos da matemática, e motivou novamente diversas reflexões sobre
como livrá-la definitivamente de paradoxos.

Um paradoxo é uma racionalização baseada em assunções, aparentemente


verdadeiras, que nos conduzem a uma contradição [2]. Os principais paradoxos
relativos à teoria de conjuntos são o paradoxo de Russel e o paradoxo de Cantor.

O paradoxo de Russel surge quando consideramos o conjunto R de todos os


conjuntos que não são membros de si próprios. Se relacionarmos conjunto à sua
descrição, podemos contruir R como

R = {X : X ∈
/ X}.

Então, queremos agora verificar se o próprio conjunto R é membro de si


mesmo, isto é, se R ∈ R. Se R ∈ R, então, pela definição, R ∈ / R. Por outro
lado, se R ∈
/ R, então, R não é um membro de si próprio, logo, R ∈ R. Assim,
derivamos uma contradição: R ∈ R ⇔ R ∈ / R.

O paradoxo de Cantor, por sua vez, que surge ao considerarmos o conjunto


formado por todos os conjuntos, nos leva a uma contradição com relação a um
teorema do próprio Cantor. Primeiramente, o teorema de Cantor diz que, dado
um conjunto (finito ou infinito) S, o conjunto das partes de S (conjunto formado
por todos os subconjuntos de S, incluindo o conjunto vazio) possui cardinalidade
estritamente maior do que a cardinalidade de S. Vejamos como este paradoxo
é estabelecido.

Considere o conjunto U de todos os conjuntos e o conjunto das partes de


U , que denotamos por ℘(U ). Como U contém todos os conjuntos, em parti-
cular, contém então os elementos de ℘(U ) e, daı́, segue que ℘(U ) ⊆ U , donde
concluı́mos que a cardinalidade de ℘(U ) é menor ou igual à cardinalidade de U ,
contradizendo o teorema de Cantor.

Diversos matemáticos lograram esforços com o objetivo de resolver esta pro-


blemática. Poincaré, por exemplo, chama a atenção para as definições impredi-
cativas, isto é, definições onde determinado objeto é definido em termos de uma
totalidade da qual ele próprio faz parte. No entanto, simplesmente eliminar as
definições impredicativas excluirá também aquelas que não trazem contradições,
como a definição de supremo de um conjunto: o supremo de um conjunto não-
vazio e limitado superiormente é o menor dos limitantes superiores (note que
o supremo é um limitante superior que é definido em relação ao conjunto de
limitantes superiores, do qual também faz parte).

Bertrand Russel (1872-1970), em colaboração com Alfred Whitehead (1861-


1947), no trabalho Principia Mathematica (1910-1913), desenvolve uma teoria
na qual as entidades matemáticas são classificadas em tipos lógicos, e existe
uma uma hierarquia entre estes tipos. Assim, um determinado objeto de tipo
i, por exemplo, só pode ser membro de um objeto de tipo lógico superior a i.
Dessa forma, a sentença X ∈ X (ou X ∈/ X) não estará sintaticamente correta.
O trabalho de Russel e Whitehead, embora tenha exercido grande influência no

7
desenvolvimento posterior da lógica, não é amplamente adotado pela comuni-
dade matemática, devido a sua alta complexidade.

A partir de 1908, L. E. J. Brouwer (1881-1966) propõe aos princı́pios da


matemática uma abordagem revisionista. Suas crı́ticas se direcionavam princi-
palmente ao infinito atual de Cantor (quando consideramos um conjunto infinito
acabado, ou seja, como um objeto matemático próprio), uma vez que Brouwer
acreditava que somente coleções potencialmente infinitas são possı́veis de cons-
trução pela mente humana.

As provas matemáticas não construtivas de existência, aquelas onde se de-


monstra a existência de determinado objeto matemático com uma certa pro-
priedade sem indicar um método de se obter (ou construir) um exemplar de
tal objeto, também são questionadas. Na lógica clássica, o princı́pio do ter-
ceiro excluı́do, que afirma que, dada uma proposição, ou ela é verdadeira ou sua
negação é verdadeira, é um princı́pio considerado válido, e amplamente utilizado
em provas não-construtivas. Do ponto de vista de Brouwer, portanto, a lógica
matemática deve ser obtida eliminando-se o princı́pio do terceiro excluı́do, o que
implicaria em uma revisão em todo o corpo de conhecimento matemático [18].

Já a solução proposta por Zermelo (1871-1953) considera axiomatizar a te-


oria de conjuntos, onde objetos matemáticos possam ser identificados com con-
juntos, e as demonstrações possam ser justificadas com base nos axiomas da
teoria e nos princı́pios da lógica clássica.

O método axiomático consiste em, basicamente, organizar o corpo de conhe-


cimento (uma teoria) em um sistema de axiomas (proposições não demonstra-
das) e, utilizando-se regras de inferência pré-estabelecidas, derivar novas sen-
tenças (verdadeiras) desta teoria (teoremas).

A axiomatização traz consigo o problema da consistência. Uma teoria T é


consistente se não for possı́vel derivar em T uma contradição do tipo α ∧¬α (su-
pondo que a teoria em questão utiliza as regras da lógica clássica), para alguma
fórmula α. Expressando este conceito de outra forma, uma teoria é inconsistente
se existe uma fórmula α tal que α e ¬α podem ser derivadas na teoria (α e ¬α
são ambas teoremas de T ) [23].

Pode-se provar a consistência de uma teoria buscando uma interpretação


que a satisfaça, em outras palavras, exibindo um modelo. Por exemplo, os con-
juntos R e Q, com as operações usuais, são modelos para a teoria de corpos.
Tal prova também é possı́vel interpretando a teoria em uma outra teoria que
seja consistente (consistência relativa). Entretanto, à época, a consistência da
teoria de conjuntos de Zermelo não pôde ser verificada por tais métodos. Então,
David Hilbert (1862-1943), defensor das ideias de Cantor, propõe um método
de validação da matemática, que ficou conhecido como Programa de Hilbert.

O Programa de Hilbert pode ser descrito, brevemente, como sendo composto


por três etapas (conforme apresentado em [30]):

1. A parte finitária da matemática deve consistir de argumentos elementares

8
da aritmética e de manipulação de sı́mbolos e sucessões de sı́mbolos;

2. A matemática infinitária deve ser estabelecida através de um sistema for-


mal composto por: a teoria em questão (por exemplo, a teoria de conjuntos
de Zermelo), uma lógica (lógica clássica, por exemplo) e uma linguagem,
isto é, sı́mbolos abstraı́dos de qualquer significado e que podem ser mani-
pulados. Também deve-se definir as regras sintáticas (regras que fornecem
expressões bem formadas) e de inferência (regras que permitem obter no-
vas expressões de forma válida). As demonstrações matemáticas neste
sistema nada mais são do que sucessões finitas de expressões que obede-
cem as regras definidas anteriormente.
3. Deve-se demonstrar, enfim, a consistência do sistema, verificando que não
é possı́vel obtermos certa combinação de expressões que constituem a
dedução de uma contradição.

Até então, ninguém havia demonstrado a consistência da aritmética formal


(ou Aritmética de Peano, cuja definição precisa será objeto posterior de estudo
deste trabalho). Reconhecendo a importância de tal tarefa para os fundamentos
da matemática, Hilbert a apresenta no Congresso Internacional de Matemáticos,
realizado em Paris, no ano de 1900, juntamente com uma lista de outros 22 pro-
blemas. O problema em questão foi o de número dois e, dentre os outros, por
exemplo, estavam o problema do continuum e o problema de se decidir se uma
equação diofantina possui solução [16].

A aritmética formal colocada no parágrafo anterior diz respeito à descrição


de uma estrutura formal desprovida, a princı́pio, de significado. Demonstrar
sua consistência significa demonstrar que tal estrutura é, de fato, uma estrutura
possı́vel, ou seja, que é a estrututra de algum domı́nio de objetos. Esta estru-
tura, por sua vez, descreve as sequências lineares discretas de pontos (ou objetos
quaisquer), na qual existe um primeiro ponto mas sem um último ponto. Os axi-
omas de Peano (axiomas da aritmética formal) vistos anteriormente (DP1 , DP2
e DP3 ) constituem, portanto, a descrição das propriedades destas sequências
[35].

Como já mencionado anteriormente, a prova da consistência de uma teoria


pode ser dada buscando-se para ela uma interpretação ou pelo método exposto
no terceiro item do Programa de Hilbert. No caso da aritmética formal, ambos
os métodos se mostraram inviáveis. A primeira faz um apelo à intuição, en-
quanto a segunda faz uso de uma meta-teoria (teoria utilizada para demonstrar
a consistência de uma outra teoria, chamada neste contexto de teoria objeto)
que contém a própria aritmética.

Dessa forma, a solução para o segundo problema de Hilbert poderia ser cons-
truı́da apenas dentro de uma meta-teoria mais fraca que a aritmética formal, a
qual Hilbert chama de matemática finitária (como exposto no primeiro item do
Programa de Hilbert). Não existe precisamente uma definição de matemática
finitária dada por Hilbert, no entanto, ela pode se identificar com a Aritmética
Recursiva Primitiva (APR), proposta por Skolem, em 1923. Segundo o próprio
Hilbert, a consistência da APR segue do fato de que seus teoremas possuem

9
todas as suas instâncias verdadeiras2 .

Portanto, o problema da consistência da aritmética pode ser expresso nos se-


guintes termos: demonstre em APR a consistência da aritmética formal (AP),
isto é, que a sentença da linguagem de APR Con(AP), que expressa a con-
sistência de AP, é um teorema de APR [35].

Hilbert professava veementemente sua crença na resolubilidade de todos


os problemas matemáticos, fato este que ficou registrado na história pela sua
célebre frase “aı́ está o problema, ache a resposta; você pode encontrá-la através
do pensamento puro, pois não há ignorabimus em matemática” 3 . No entanto,
em 1931, o matemático Kurt Gödel (1906-1978), em seu trabalho intitulado
“On Formally Undecidable Propositions of Principia Mathematica and Related
Systems”, mostra que a aritmética formal é incompleta, exibindo uma sentença
aritmética que não é provável e também não é refutável neste sistema, embora
seja verdadeira no modelo padrão (o modelo padrão para a aritmética formal é
o conjunto de todos os números naturais, juntamente com as operações usuais
de soma e multiplicação, a operação de sucessor, bem como as constantes 0 e 1).

Outro resultado alcançado por Gödel mostra que não é possı́vel provar a
consistência da aritmética formal através de métodos que pudessem ser forma-
lizados na própria aritmética formal, sendo assim, nenhuma teoria mais fraca
do que AP, por exemplo, a própria APR, poderia demonstrar a consistência
de AP.

Os metateoremas da incompletude de Gödel, como ficaram assim conhecidos


os dois resultados citados anteriormente, interrompem a realização do Programa
de Hilbert nos modos concebidos por Hilbert. Vejamos brevemente o que diz
estes metateoremas.

O primeiro metateorema da incompletude pode ser expresso da seguinte


forma (conforme apresentado em [30]): Se T é uma teoria formal de primeira
ordem, axiomatizada, consistente e contendo a aritmética formal, então, T é
incompleta: existe uma sentença aritmética G tal que ambas G e sua negação
¬G não são teoremas de T .

O significado de consistência já foi discutido anteriormente. Dizer que T é


axiomatizada significa que para qualquer sentença da linguagem de T , podemos
decidir algoritimicamente se tal sentença é ou não um axioma de T [30]. Assim,
tomando a teoria T como a própria AP, podemos interpretar este metateorema
como expressando o fato de que não existe uma lista de axiomas (axiomatização)
a partir da qual podemos provar exatamente todas as sentenças verdadeiras da
aritmética formal [19], supondo que desta lista de axiomas somente podemos
provar sentenças verdadeiras (consistência).

2 Silva [35] cita aqui o trabalho Grundlagen der Mathematik, Berlin - Springer, 1934, de

Hilbert e Bernays.
3 Texto de uma conferência proferida por David Hilbert em 4 de junho de 1925 em um

congresso da Sociedade Matemática de Westfalia, em Münster. Traduzido por Walter Carnielli


em [5], página 90.

10
A principal técnica empregada por Gödel para sua prova da incompletude
consiste em assimilar números naturais a termos e fórmulas de AP. O sucesso
de tal procedimento está baseado no Teorema Fundamental da Aritmética, que
assegura o fato de que todo número natural possui uma única representação
como produto de números primos. Esta numeração permite encontrar um único
número natural para cada fórmula, sequência de fórmulas e, até mesmo, provas
de AP [20]. Note que, para podermos aplicar o metateorema a um sistema for-
mal T , é necessária a utilização da técnica de numeração nesta teoria, por isso,
ela deve conter a aritmética formal (como colocado pelo primeiro metateorema).

Dessa maneira, podemos traduzir todas as propriedades de AP em relações


numéricas definidas nos naturais. Utilizando a linguagem da própria aritmética
formal, podemos construir uma sentença G que exprime intuitivamente (quando
interpretada no modelo padrão) sua própria indemonstrabilidade. Assim, se G é
verdadeira, então, G não é um teorema de AP (como ela afirma de si própria).
Se G é falsa, então, pela hipótese de consistência, ¬G não é um teorema de
AP. Portanto, há uma proposição aritmética verdadeira tal que nem G nem
sua negação ¬G são teoremas de AP. Neste caso, dizemos que G é formalmente
indecidı́vel.

A princı́pio, podemos argumentar que, embora G seja uma sentença inde-


cidı́vel, ela não apresenta nenhuma importância matemática, isto é, que ela não
se refere a nenhuma questão matemática. No entanto, ao longo do tempo, di-
versas proposições matemáticas foram provadas indecidı́veis em áreas como a
Teoria de Grupos de Lie, Análise Funcional, Topologia e Fı́sica Teórica, por
exemplo ([30] apresenta várias referências de trabalhos neste sentido). Dois im-
portantes exemplos que merecem ser citados é o quinto postulado de Euclides e
a Hipótese do Contı́nuo.

Uma das formas equivalentes de se enunciar o quinto postulado de Euclides


afirma que “dada um reta e um ponto que não incide sobre a reta, existe uma
e somente uma reta parelela à reta dada que passa pelo ponto dado” [29]. O
matemático alemão Carl Friedrich Gauss (1777 - 1985) foi um dos primeiros a
notar que este postulado era independente dos demais postulados da geometria
de Euclides, isto é, que, em particular, era impossı́vel demonstrá-lo a partir dos
demais postulados [31]. A partir deste fato, surgiram as geometrias não euclidi-
anas, onde, por exemplo, considera-se que “dada um reta e um ponto que não
incide sobre a reta, não existe reta parelela à reta dada que passa pelo ponto
dado” (geometria elı́ptica); ou que “dada um reta e um ponto que não incide
sobre a reta, existem pelo menos duas retas parelelas à reta dada que passam
pelo ponto dado” (geometria hiperbólica).

A hipótese do contı́nuo (HC), por sua vez, envolve a teoria de conjuntos. Em


1874, Cantor demonstrou que o conjunto dos números reais é não enumerável,
isto é, que não é possı́vel criar uma correspondência um para um deste con-
junto com o conjunto dos números naturais. Isto nos leva a concluir que devem
existir, portanto, diferentes nı́veis de infinitude, digamos assim: a infinitude dos
números naturais e a infinitude dos números reais. Sendo assim, uma pergunta
naturalmente surgiu a Cantor: existe conjunto com cardinalidade intermediária
entre N e R? Esta sentença ficou conhecida como a hipótese do contı́nuo.

11
Uma axiomatização tida como referencial para a teoria de conjuntos é o sis-
tema ZFC (teoria dos conjuntos de Zermelo-Fraenkel com o axioma da escolha).
Dentro deste sistema, Gödel demonstrou em 1938 que, supondo a consistência
de ZFC, ZFC + HC é consistente. Por outro lado, em 1963, o matemático Paul
J. Cohen (1934-2007) demonstrou que, supondo a consistência de ZFC, ZFC +
¬HC é consistente [22]. Estes dois resultados combinados mostram que, por-
tanto, HC é independente do sistema ZFC.

Voltando aos teoremas de Gödel, nas mesmas condições do primeiro metate-


orema, o segundo metateorema da incompletude diz que (conforme [30]): existe
uma sentença aritmética ConsT , que expressa “T é consistente”, que não é teo-
rema de T . O que este metateorema nos diz é que, se T é uma teoria consistente,
então não é possı́vel demonstrar a consistência de T por métodos formalizáveis
dentro desta própria teoria.

Certamente, queremos derivar apenas teoremas verdadeiros de nosso sis-


tema, portanto, se nosso sistema é consistente e contém a aritmética formal, é
necessariamente incompleto, logo, existirão sentenças que não possuirão provas.
Como então poderı́amos diferenciar sentenças verdadeiras que possuem provas
daquelas que não possuem provas? Neste contexto, Hilbert propôs um problema,
batizado de Entscheidungsproblem (problema da decisão). O problema da de-
cisão consiste em investigar a existência de um algoritmo, ou um procedimento
efetivo (termo que, à época, ainda necessitaria ser formalmente definido), que,
tomando como entrada qualquer sentença matemática de um sistema axioma-
tizado, após um número finito de etapas, nos diria se tal sentença possui prova
ou não [19].

Um caso particular do problema da decisão é o problema da validade para a


lógica de primeira ordem. A lógica (clássica) de primeira ordem é uma lingua-
gem que trata de elementos lógicos e não lógicos e versa apenas sobre variáveis
individuais, mas não sobre variáveis para propriedades ou funções (uma abor-
dagem mais ampla sobre a lógica de primeira ordem será realizada na seção
Fundamentação Teórica). Toda sentença da lógica de primeira ordem possui
um valor - verdadeiro ou falso - em toda estrutura lógica apropriada (em toda
interpretação). Chamamos de válidas as sentenças que são verdadeiras em todas
as estruturas apropriadas [19].

Gödel, em seu trabalho de doutorado (1930), construiu uma axiomatização


para a lógica de primeira ordem e demonstrou que toda expressão bem formada
(isto é, toda expressão obtida por meio de regras pré-estabelecidas) da lógica
de primeira ordem é provável [20], isto é, a própria sentença ou a sua negação
possui demonstração. Expressando de outra maneira, uma fórmula é provável a
partir dos axiomas se, e somente se, é válida [19]. Este resultado é referenciado
como o teorema da completude da lógica de primeira ordem.

Assim, o problema da validade pode ser reduzido a encontrar um procedi-


mento efetivo através do qual se possa saber se dada sentença pode ser dedu-
zida ou não a partir dos axiomas da lógica de primeira ordem. Desta forma,
poderı́amos decidir pela veracidade ou não de todas as sentenças matemáticas

12
dentro de um sistema axiomatizado.

No entanto, Alan Turing (1912-1954), um dos pesquisadores que se dedica-


ram ao problema da decisão, mostrou que este problema é insolúvel, isto é, que
não existe um procedimento mecânico que nos informe se uma dada assertiva
pode ser deduzida ou não a partir dos axiomas fixados.

Para demonstrar a insolubilidade do problema da decisão, Turing teve que


estabelecer formalmente o conceito de procedimento efetivo enunciado por Hil-
bert. Ele o fez através da criação de um dispositivo abstrato chamado posteri-
ormente de Máquina de Turing. Um procedimento efetivo, ou algoritmo, como
chamado atualmente, é, então, uma lista de instruções para este dispositivo.

Uma vez formalizada esta questão, foi possı́vel verificar que existiam pro-
blemas para os quais nenhum algoritmo poderia resolvê-los (tais problemas são
chamados incomputáveis ou indecidı́veis, quanto expressos por um predicado
lógico). O primeiro destes problemas encontrado por Turing foi o halting pro-
blem (problema da parada). Simplificadamente, este problema nos apresenta
a seguinte questão: existirá um algoritmo que seja capaz de avaliar em tempo
finito se um outro algoritmo terminará ou não? Com auxı́lio deste resultado
(respondido de forma negativa), Turing demonstrou a impossibilidade do Ents-
cheidungsproblem de Hilbert.

Outra questão bastante conhecida que envolve o conceito de computabili-


dade ficou conhecida como o décimo problema de Hilbert, ou o problema das
equações diofantinas. Este problema pode ser formulado assim: “existe um al-
goritmo para decidir se uma dada equação f (x1 , x2 , . . . , xn ) = 0, onde f é um
polinômio com coeficientes em Z, possui solução com cada xi ∈ Z?”. Vários
matemáticos lograram esforços para resolver este problema, entre eles, Martin
Davis, Hilary Putnam e Julia Robinson. Finalmente, em 1970, o matemático
russo Yuri Matiyasevich demonstrou a incomputabilidade do décimo problema
de Hilbert.

Outras formalizações do conceito de procedimento efetivo foram propostas.


Por exemplo, temos o λ-cálculo, de Alonso Church (1936), funções recursivas
parciais, de Gödel e Kleene (1936) e o sistema de manipulação de sı́mbolos de
Post e Markov (1943) (uma descrição destas formalizações pode ser vista em
[10], onde se afirma ainda a equivalência entre todas estas noções). Além da
noção de procedimento efetivo, também foi formalizado o conceito de função
computável, ou função recursiva. A partir de então, estas ideias inauguraram
um novo ramo de pesquisa da lógica matemática, chamada de Teoria de Funções
Recursivas, que é o objeto de estudo principal deste trabalho.

13
2 Objetivos
De maneira geral, este trabalho tem por objetivo realizar um estudo introdutório
sobre dois grandes temas que se estabelecem fundamentalmente na Matemática
e na Ciência da Computação - filosofia da matemática e teoria das funções re-
cursivas.

A longo prazo, seu interesse recai inicialmente sobre resultados particulares


que mostram a impossibilidade de, dado um sistema formal consistente onde
se possa formalizar a aritmética, demonstrar todas as verdades que podem ser
expressas neste sistema e decidir se uma dada sentença pode se demonstrada
ou não. Estes resultados referidos são os teoremas da incompletude, de Kurt
Gödel, e o problema da decisão de Hilbert, solucionado por Turing através do
problema da parada.

Mais especificamente, o argumento inicial deste trabalho afirmará a existência


de funções (com domı́nio e contradomı́nio no conjunto dos números naturais) não
computáveis, isto é, funções que não podem ser calculadas de forma algorı́tmica,
culminando, em seguida, em um importante resultado da teoria da computa-
bilidade conhecido por halting problem, ou problema da parada, que será es-
tabelecido de acordo com a ideia original de Turing (e exposta por Chaitin)
e por meio da teoria da computabilidade. O objetivo principal deste trabalho
de graduação será, portanto, demonstrar os resultados expostos neste parágrafo.

Para alcançar tais objetivos, na Seção 3 nos ocuparemos de estabelecer uma


fundamentação teórica que versará sobre sistemas formais, lógica de primeira or-
dem e as definições fundamentais da teoria da computabilidade, como os concei-
tos de computabilidade de funções e decidibilidade de predicados. Em seguida,
na Seção 4, os argumentos que afirmam a existência de funções não computáveis
e a insolubilidade do problema da parada serão demonstrados. Por fim, na Seção
5, uma análise mais detalhada do Programa de Hilbert será realizada, com o
intuito de apresentar uma breve argumentação sobre a implicação do problema
da parada para o Programa de Hilbert.

14
3 Fundamentação Teórica
Nesta seção, formalizaremos os principais conceitos sobre lógica e sistemas for-
mais. Também passaremos a examinar formalmente os fundamentos da com-
putabilidade, decidibilidade e de suas negações, que são os conceitos principais
estudados neste trabalho.

3.1 Lógica Clássica


O que chamamos atualmente de lógica clássica é um sistema formal dedutivo,
oriundo da lógica aristotélica. A lógica aristotélica estabelecia as formas válidas
de raciocı́nio, apoiada sobre três princı́pios fundamentais (que figuram até hoje):
1. Princı́pio da identidade: todo objeto é idêntico a si mesmo;

2. Princı́pio da não contradição: uma proposição não pode ser simultanea-


mente verdadeira e falsa;

3. Princı́pio do terceiro excluı́do: só há duas possibilidades - toda proposição


ou é verdadeira ou é falsa.

As seções seguintes, que versam sobre sistemas formais, cálculo proposicio-


nal, lógica e teoria de primeira ordem, são baseados em [27].

3.1.1 Sistemas Formais


Um sistema formal, ou teoria formal, S é uma tripla ordenada da forma S =
(F, A, R), onde F é uma coleção não vazia de objetos (fórmulas de S), A é um
subconjunto de fórmulas (axiomas de S) e R é um conjunto de regras de in-
ferência.

Uma regra de inferência é uma relação que nos fornece uma maneira de se
obter novas fórmulas a partir de outras fórmulas. Este processo de obtenção de
novas fórmulas é chamado de dedução, simbolizado por ⊢. A fórmula obtida é
chamada de consequente e as fórmulas que a originaram são as premissas.

As fórmulas são obtidas a partir de um alfabeto, que é um conjunto enu-


merável de sı́mbolos. Sequências de sı́mbolos (geralmente finitas) serão chama-
das de expressões ou palavras. Dentre as expressões possı́veis de serem gera-
das serão extraı́das as fórmulas, que podem ser distinguidas através de regras
previamente estabelecidas (por isso, também são chamadas de fórmulas bem
formadas). Por fim, dentre o conjunto de fórmulas, escolhe-se aquelas que serão
consideradas axiomas do sistema e define-se as regras de inferência.

Quando há um método para se decidir se uma fórmula bem formada é um


axioma ou não, dizemos que o sistema formal é axiomatizado.

Uma prova (ou demonstração) de uma fórmula α em S é uma sequência


α1 , α2 , . . . , αn de fórmulas tais que, para i = 1, 2, . . . , n, cada αi é um axioma
de S ou é consequência de fórmulas precendentes obtida por meio das regras
de inferência, e αn = α. Se existe uma prova de α em S, dizemos que α é um

15
teorema de S e escrevemos S ⊢ α.

Mesmo se estamos trabalhando com uma teoria axiomatizada, em geral, não


existe um procedimento para decidir se, dada uma fórmula bem formada α,
existe uma prova para esta fórmula na teoria. Caso haja tal método, a teoria é
dita decidı́vel; caso contrário, é dita indecidı́vel.

3.1.2 Cálculo Proposicional Clássico


O cálculo proposicional clássico formaliza o raciocı́nio por meio de proposições,
que são expressões escritas que admitem um valor lógico verdadeiro (V) ou falso
(F). Podemos criar novas proposições através dos conectivos linguı́sticos “não”,
“e”, “ou”, “se então” e “se e somente se”.

Do ponto de vista formal, usaremos sentenças para expressar as proposições


e podemos criar novas sentenças utilizando composições. Assim, se A e B são
sentenças, então ¬A é a negação de A, A ∧ B é a conjunção de A e B (lê-se “A
e B”), A ∨ B é a disjunção de A e B (lê-se “A ou B”), A ⇒ B é a condicional de
A para B (lê-se “se A então B”) e A ⇔ B é a bicondicional entre A e B (lê-se
“A se e somente se B”).

Os valores lógicos para estas sentenças podem ser dados pelas tabelas ver-
dades:
A ¬A
V F
F V
A B A∧B A∨B A⇒B A⇔B
V V V V V V
F V F V V F
V F F V F F
F F F F V V
Os sı́mbolos ¬, ∧, ∨, ⇒, ⇔ são chamados de conectivos proposicionais. As
fórmulas válidas, ou bem formadas (por simplicidade, serão chamadas de fbf,
tanto no singular quanto no plural), serão unicamente aquelas expressões obtidas
por meio das seguintes regras:
1. As letras maiúsculas A, B, C, . . . e estas mesmas letras com subı́ndices
são fbf;
2. Se A e B são fbf, então ¬A, A ∧ B, A ∨ B, A ⇒ B e A ⇔ B são fbf;
3. Somente as expressões que decorrem de aplicações de (1) ou (2) são fbf.
Uma fórmula é uma tautologia se em sua tabela verdade ocorre apenas o
valor lógico verdadeiro. Por exemplo, a fórmula A ⇒ (A ∨ B) é uma tautologia,
como se pode verificar pela sua tabela verdade:
A B A∨B A ⇒ (A ∨ B)
V V V V
F V V V
V F V V
F F F V

16
Uma fórmula A implica logicamente uma fórmula B (ou B é consequência
lógica de A) se, e somente se, B é verdadeira sempre que A é verdadeira, e é
logicamente equivalente a outra fórmula quando suas tabelas verdade coincidem.

Uma fórmula que é sempre falsa é dita contraditória. Por exemplo, a fórmula
A ∧ (¬A) é uma contradição, como pode ser verificado pela sua tabela verdade:
A ¬A A ∧ (¬A)
V F F
F V F
Apresentaremos agora um sistema axiomático formal L para o cálculo pro-
posicional clássico:
1. Os sı́mbolos de L são ¬, ⇒, ( , ) e as letras maiúsculas com subscritos Ai ,
i = 1, 2, . . .. Os sı́mbolos ¬ e ⇒ são chamados de conectivos primitivos e
as letras Ai são chamadas de sı́mbolos proposicionais;

2. (a) Todas os sı́mbolos proposicionais são fbf;


(b) Se A e B são fbf, então ¬A e A ⇒ B também são fbf.
3. Se A, B e C são fbf de L, então, são axiomas de L:

(A1) (A ⇒ (B ⇒ A))
(A2) ((A ⇒ (B ⇒ C)) ⇒ ((A ⇒ B) ⇒ (A ⇒ C)))
(A3) (((¬B) ⇒ (¬A)) ⇒ (((¬B) ⇒ A) ⇒ B))

4. Existe uma única regra de inferência, denominada Modus Ponens (MP):


A e (A ⇒ B) implicam logicamente B.
De cada esquema de axioma, podemos obter uma quantidade infinita de axi-
omas, e podemos sempre verificar quando uma fbf é uma axioma ou não, o que
torna nosso sistema L axiomatizado. Também podemos verificar que todos os
axiomas são tautologias construindo suas tabelas verdade.

Outros conectivos poderão ser introduzidos (é possı́vel mostrar a equivalência


lógica entre estas fórmulas):

(D1) (A ∧ B) abrevia ¬(A ⇒ ¬B)


(D2) (A ∨ B) abrevia (¬A) ⇒ B
(D3) (A ⇔ B) abrevia (A ⇒ B) ∧ (B ⇒ A)

Vamos agora apresentar algumas proposições importantes com relação ao


sistema L.

Proposição 3.1. Todo teorema de L é uma tautologia.


Proposição 3.2 (Completude). Se uma fbf de L é uma tautologia, então é um
teorema de L.
Estes dois resultados nos mostram que toda fbf de L é um teorema se, e
somente se, é uma tautologia.

17
Corolário 3.1 (Consistência). O sistema L é consistente, isto é, não existe uma
fbf A tal que A e ¬A sejam ambas teoremas de L.
De fato, pela Proposição 3.1, todo teorema de L é uma tautologia. A negação
de uma tautologia não pode ser uma tautologia, logo, não podemos ter A e ¬A
como teoremas de L.

Podemos perceber também que, como os teoremas de L são tautologias, a


consistência de L implica o fato de que nem todas as fbf deste sistema serão
teoremas (por exemplo, as negações de teoremas não serão teoremas).

3.1.3 Lógica e Teorias de Primeira Ordem


O cálculo proposicional clássico não é o suficiente para a realização de inferências
lógicas que envolvem construções que utilizam expressões como “todo” ou “al-
gum”, por exemplo. Assim, apresentaremos o cálculo de predicados de primeira
ordem (ou lógica de primeira ordem), com o intuito de abarcar estas novas cons-
truções.

A princı́pio, uma nova representação será destacada. Se P (x) nos informa


que x possui determinada propriedade P , então (∀x)P (x) significa que todo x
possui a propriedade P . Se temos que algum x possui a propriedade P , in-
dicaremos este fato por (∃x)P (x). As notações (∀x) e (∃x) são denominadas,
respectivamente, quantificador universal e quantificador existencial.

Além dos sı́mbolos ¬, ⇒, (, ) e ∀, também serão utilizados os seguintes


grupos de sı́mbolos:
1. Variáveis individuais: x1 , x2 , . . . , xn , . . .
2. Constantes individuais: a1 , a2 , . . . , an , . . .
3. Sı́mbolos para predicados: Ank (n e k são inteiros positivos)
4. Sı́mbolos funcionais: fkn (n e k são inteiros positivos)
Com relação aos dois últimos grupos de sı́mbolos acima, o inteiro n indica o
número de argumentos e o inteiro k indexa diferentes sı́mbolos para predicados
ou funções.

Os sı́mbolos funcionais, quando aplicados a variáveis e constantes individu-


ais, dão origem aos termos:
1. todas as variáveis e constantes individuais são termos;
2. se fkn é um sı́mbolo funcional e t1 , t2 , . . . , tn são termos, então fkn (t1 , t2 , . . . , tn )
é um termo;
3. os termos são gerados apenas pelas condições (1) e (2) acima.
Os sı́mbolos para predicados, quando aplicados a termos, dão origem às
fórmulas atômicas. Assim, se Ank é um sı́mbolo para predicado e t1 , t2 , . . . , tn
são termos, então Ank (t1 , t2 , . . . , tn ) é uma fórmula atômica.

As fórmulas bem formadas (fbf) são definidas por:

18
1. Toda fórmula atômica é uma fbf;
2. Se A e B são fórmulas e y é uma variável, então (¬A), (A ⇒ B) e ((∀y)B)
são fbf;
3. as fbf são geradas apenas pelas regras (1) e (2) acima.
Os sı́mbolos ∧, ∨ e ⇔ podem ser definidos da mesma forma realizada para o
sistema L (seção anterior). O sı́mbolo ∃ não precisa ser definido como primitivo,
pois podemos definir o quantificador existencial ((∃x)B) como (¬((∀x)(¬B))).

Na fórmula ((∀y)A), dizemos que “A” é o escopo (ou o alcance) do quanti-


ficador (∀y). Por exemplo, tomemos a fórmula

(∀x1 )(((∃x2 )A21 (x1 , x2 )) ⇒ ((∀x3 )A31 (x1 , x2 , x3 ))).

O escopo de (∀x3 ) é A31 (x1 , x2 , x3 ), o escopo de (∃x2 ) é A21 (x1 , x2 ) e, por fim, o
escopo de (∀x1 ) é (((∃x2 )A21 (x1 , x2 )) ⇒ ((∀x3 )A31 (x1 , x2 , x3 ))).

Uma ocorrência de uma variável x em uma fbf B é dita ligada em B se ela


está em um quantificador da forma ∀x que aparece em B ou está no escopo de
∀x em B. Caso contrário, dizemos que a ocorrência de x em B é livre. Uma
variável é dita livre (ligada) em uma fbf B se possui ocorrência livre (ligada)
em B.
Exemplo 3.1. Considere as seguintes fórmulas:

1) A21 (x1 , x2 ) ⇒ (∀x1 )A11 (x1 )

2) (∀x1 )(A21 (x1 , x2 ) ⇒ (∀x1 )A11 (x1 )).


Na fórmula (1), a primeira ocorrência de x1 em A21 (x1 , x2 ) é livre, porém, é
ligada na segunda e terceira ocorrências. Na fórmula (2), todas as ocorrências
de x1 são ligadas. Em ambos os exemplos, as ocorrências de x2 são livres.
Até agora, todo o trabalho com os sistemas apresentados constitui mera ma-
nipulação de sı́mbolos, o que podemos chamar de manipulação sintática. No
entanto, para desenvolver teorias matemáticas mais interessantes, necessitamos
atribuir significado às fbf. Tal significado surge quando uma interpretação é
dada para os sı́mbolos. Esta é a contraparte semântica de um sistema formal.
Definiremos então uma linguagem de primeira ordem e, posteriormente, uma
interpretação.

Uma linguagem de primeira ordem LPO contém os seguintes sı́mbolos:


1. Os conectivos proposicionais ¬ e ⇒ e o sı́mbolo de quantificação universal
∀;
2. Sı́mbolos auxiliares: parênteses e vı́rgula;
3. Variáveis individuais x1 , x2 , . . .;
4. Um conjunto enumerável (possivelmente vazio) de sı́mbolos funcionais;
5. Um conjunto enumerável (possivelmente vazio) de constantes individuais;

19
6. Um conjunto não vazio de sı́mbolos de predicado.
Por termo de LPO entendemos um termo cujos sı́mbolos são sı́mbolos de
LPO. Uma fbf de LPO significa uma fbf cujos sı́mbolos são sı́mbolos de LPO.
As constantes individuais e os sı́mbolos funcionais e de predicados são chamados
constantes não lógicas de LPO.

Seja LPO uma linguagem de primeira ordem. Uma interpretação M de LPO


é uma estrutura M = (D, ρ), onde:
1. D é um conjunto não vazio, o qual chamaremos de domı́nio da inter-
pretação;
2. ρ é uma função cujo domı́nio é o conjunto das constantes não lógicas de
LPO, definida como segue:
(a) Se c é uma constante individual, então ρ(c) ∈ D;
(b) Se fjn é um sı́mbolo funcional, então ρ(fjn ) é uma função de Dn em
D;
(c) Se Anj é um sı́mbolo de predicado, então ρ(Anj ) é um subconjunto de
Dn (é uma relação n-ária sobre D).
Uma sentença, ou fbf fechada, é uma fbf de LPO sem variáveis livres. Dada
uma interpretação para LPO, uma sentença representa, então, uma proposição
que é verdadeira ou falsa. Uma fbf que apresenta variáveis livres pode ser
verdadeira para alguns valores de seu domı́nio e falsa para outros. Vejamos
agora um exemplo de interpretação:
Exemplo 3.2. Considere as seguintes fbf:

1) A21 (x1 , x2 )
2) (∀x2 )A21 (x1 , x2 )
3) (∃x1 )(∀x2 )A21 (x1 , x2 )

Vamos tomar como domı́nio o conjunto dos números inteiros positivos e


interpretar A21 (y, z) como y ≤ z. Assim a fbf (1) representa a expressão “x1 ≤
x2 ”, que é satisfeita para todos os pares ordenados de inteiros positivos (a, b)
tais que a ≤ b. A fbf (2) representa a expressão “ Para todos inteiros positivos
x2 , x1 ≤ x2 ”, que é satisfeita apenas para o inteiro 1. A fbf (3) é a única que
não apresenta variáveis livres, portanto, deve ser verdadeira ou falsa. Como ela
expressa “existe um menor número inteiro positivo”, é uma sentença verdadeira.
Serão introduzidas algumas definições importantes. Seja B uma fbf. Di-
zemos que B é logicamente válida se, e somente se, B é verdadeira para toda
interpretação e B é dita satisfatı́vel se, e somente se, existe uma interpretação
onde B é verdadeira.

Agora, os cálculos lógicos apresentados nesta seção serão estendidos para


sistemas mais gerais, onde se pode discutir diversas teorias matemáticas.

Seja LPO uma linguagem de primeira ordem. Uma teoria de primeira ordem
(a qual também chamaremos apenas de teoria) na linguagem LPO é uma teoria

20
(ou sistema) formal K cujos sı́mbolos e fbf são os sı́mbolos e fbf de LPO e cujos
axiomas e regras de inferência são:
1. Axiomas lógicos: Se B, C e D são fbf de LPO, então são axiomas lógicos
de K:

(A1) B ⇒ (C ⇒ B)
(A2) (B ⇒ (C ⇒ D)) ⇒ ((B ⇒ C) ⇒ (B ⇒ D))
(A3) (¬C ⇒ ¬B) ⇒ ((¬C ⇒ B) ⇒ C)
(A4) (∀xi )B(xi ) ⇒ B(t) se B(xi ) é uma fbf de LPO e t é um termo
livre para xi em B(xi )
(A5) (∀xi )(B ⇒ C) ⇒ (B ⇒ (∀xi )C) se B não contém ocorrências
livres de xi .

2. Axiomas próprios: Cada teoria pode definir seus axiomas próprios. Uma
teoria de primeira ordem que não possui axiomas próprios é chamada
cálculo de predicados de primeira ordem.
3. Regras de inferência: Qualquer teoria de primeira ordem possui as seguin-
tes regras:
• Modus Ponens (MP): C decorre de B e B ⇒ C.
• Generalização (Gen): (∀xi )B decorre de B.
Seja K uma teoria que possui o sı́mbolo de predicado A21 . Escrevemos t = s
como abreviação de A21 (t, s) e t ̸= s como abreviação de ¬A21 (t, s). Então, K
é chamada teoria de primeira ordem com igualdade se as seguintes sentenças
também são teoremas de K:

(A6) (∀x1 )x1 = x1 reflexividade da igualdade


(A7) x = y ⇒ (B(x, x) ⇒ B(x, y)) substitutividade da igualdade

onde x e y são variáveis quaisquer, B(x, x) é uma fbf qualquer e B(x, y) é obtida
a partir de B(x, x) substituindo-se alguma ocorrência livre de x por y.

Agora, podemos apresentar algumas definições e propriedades importantes


de teorias de primeira ordem.

Seja K uma teoria de primeira ordem na linguagem LPO. Um modelo de K


é uma interpretação de LPO onde todos os axiomas de K são verdadeiros.
Proposição 3.3. Toda fbf de K que é uma instância de tautologia é um teorema
de K e pode ser provado usando apenas os axiomas (A1), (A2), (A3) e MP.
Proposição 3.4. Todo teorema do cálculo de predicados de primeira ordem é
logicamente válido.
Uma teoria K é consistente se não é possı́vel provarmos B e ¬B para alguma
fbf B. Caso contrário, ela é dita inconsistente.
Corolário 3.2. O cálculo de predicados de primeira ordem é consistente.

21
De fato, se uma fbf B e sua negação ¬B são ambas teoremas do cálculo
de predicados de primeira ordem, então, pela Proposição (3.4), B e ¬B seriam
logicamente válidas, o que não é possı́vel.

Também pode-se perceber que se K é uma teoria de primeira ordem incon-


sistente, então toda fbf desta teoria seria provável. Suponha que B e ¬B são
teoremas de K. Pelo axioma (A1), segue que B ⇒ (¬B ⇒ C) é uma instância
de tautologia e, pela Proposição (3.3), é provável em K. Aplicando a regra MP,
segue que (¬B ⇒ C) decorre de B e B ⇒ (¬B ⇒ C). Aplicando MP nova-
mente, segue que C decorre de ¬B e (¬B ⇒ C). Assim, demonstramos uma fbf
C arbitrária a partir de B e ¬B.

Portanto, tendo em vista este resultado, podemos afirmar que para uma te-
oria de primeira ordem K ser consistente, temos que encontrar alguma fbf desta
teoria que não é um teorema de K.

Uma teoria de primeira ordem K é dita completa se, para toda fbf B fechada
de K, temos que ou B ou ¬B é um teorema de K. Uma teoria K’ é chamada
de extensão de K se todo teorema de K é um teorema de K’.

Proposição 3.5 (Teorema da completude de Gödel, 1930). Em qualquer cálculo


de predicados, os teoremas são precisamente as fbf logicamente válidas.

Este teorema, apresentado por Gödel em sua tese de doutorado, acarreta


o fato de que, neste caso (lógica de primeira ordem), as noções de implicação
lógica e dedução se equivalem, ou seja, uma fbf α é logicamente válida se, e
somente se, α for um teorema da lógica de primeira ordem.

3.2 Computabilidade
Um procedimento efetivo, ou algoritmo, é um método automático criado para
realizar alguma operação matemática sobre dados de entrada. Por método au-
tomático pode-se entender como uma lista de instruções que diz ao executor
como proceder para resolver determinado problema. Um algoritmo pode ser
dado, então, como uma sequência de passos, onde cada passo é completado em
um tempo finito e, ao final da execução (quando todas as instruções são re-
alizadas ou há uma ordem explı́cita para o término), um valor final deve ser
produzido.

Duas caracterı́sticas principais formam a base do conceito de algoritmo: o


procedimento é executado em uma sequência de passos, onde cada passo é com-
pletado em um tempo finito, e deve terminar, isto é, deve produzir um resultado
após um número finito de passos.

Uma função f de inteiros positivos em inteiros posivitos é denominada efe-


tivamente computável se existe uma lista de instruções que torna possı́vel de-
terminar o valor f (n) para qualquer argumento n pertencente ao domı́nio desta
função. Em outras palavras, quando os valores de uma função matemática
podem ser calculados por um algoritmo, dizemos então que esta função é efe-
tivamente computável (ou apenas computável). O processo de cálculo de f (n)

22
para um dado n é chamado de computação.

Na prática, pode ser impossı́vel para um dispositivo automático ou para um


ser humano calcular o valor de f (n) para determinados valores de n. Duas se-
veras restrições à computação prática são o tempo de execução e o limite de
armazenamento de dados. A primeira restrição nos alerta que determinados
algoritmos podem ser executados em um tempo muito grande, de forma a ul-
trapassar nossa própria existência. A segunda restrição, por sua vez, nos diz
que determinados algoritmos podem produzir uma quantidade muito grande de
dados intermediários, de forma que tornaria cada vez mais difı́cil armazená-los.

Por isso, a teoria da computabilidade utiliza dispositivos idealizados para


realizar computações, de forma que se possa, por exemplo, demonstrar que
determinadas funções não são computáveis, mesmo se houvessem, hipotetica-
mente, tempo e espaço infinitos.

Utilizando estas ideias intuitivas sobre algoritmo, diversas formalizações do


conceito de computabilidade foram propostas. Algumas destas formalizações
capturam o conceito de máquina, como por exemplo, a Máquina de Turing
(Turing, 1937) e a Máquina de Registrados Ilimitados, de Sheperdson e Sturgis
(1963).

3.2.1 Máquina de Registradores Ilimitados


Esta primeira idealização matemática de uma máquina apresentada é chamada
de URM - Unlimited Register Machine - ou máquina de registradores ilimitados.
Sua definição será baseada em [10].

A URM é um dispositivo que possui um número infinito de registradores,


denominados R1 , R2 , . . . , onde cada registrador armazena um número natural.
Seja rn o número contido no registrador Rn . Podemos representar esta máquina
como uma fita infinita à direita:

R1 R2 R3 R4 R5 ···
r1 r2 r3 r4 r5 ···

O conteúdo dos registradores podem ser alterados pela URM através de


quatro instruções básicas. Chamaremos de programa uma lista finita composta
por uma sequência destas instruções, que são:

1. Z(n): Para cada n = 1, 2, 3, . . . , Z(n) altera o conteúdo de Rn para o


valor 0. Os outros registradores permanecem inalterados;

2. S(n): Para cada n = 1, 2, 3, . . . , S(n) incrementa em uma unidade o


valor contido em Rn . Os outros registradores permanecem inalterados;
3. T (m, n): Para cada m = 1, 2, 3, . . . e n = 1 , 2 , 3, . . . , T (m, n) altera o
conteúdo contido em Rn pelo conteúdo de Rm . Em outras palavras, esta
instrução copia o valor rm para o registrador Rn . Apenas o registrador
Rn é alterado;

23
4. J(m, n, q): Para cada m = 1 , 2 , 3, . . . e n = 1 , 2 , 3, . . . e q = 1 , 2
, 3, . . ., existe uma instrução J(m, n, q). Suponha que esta instrução foi
encontrada pela URM em um programa P . Os conteúdos dos registradores
Rm e Rn são comparados (ambos registradores permanecem inalterados).
Então, se rm = rn , a URM desloca a execução para a q-ésima instrução
de P . Caso contrário, a URM passa para a execução para a próxima
instrução em P . Se este avanço de instruções não for possı́vel porque P
possui menos do que q instruções, então a URM encerra a execução do
programa.

Para facilitar futuras referências, vamos denominar as instruções como zero,


sucessor, transferência e condicional, respectivamente, para Z(n), S(n), T (m, n)
e J(m, n, q).

Para executar alguma computação, a URM deve ser carregada com um


programa P , composto pelas instruções I1 , I2 , . . . , Is (podemos escrever como
P = I1 , I2 , . . . , Is ), e uma configuração inicial, isto é, uma sequência a1 , a2 , . . .
de números naturais armazenados nos registradores R1 , R2 , . . .. A URM inicia
a computação executando a instrução I1 . Se em dado momento, a instrução Ik
está sendo executada, então a próxima instrução a ser executada será definida
da seguinte forma:

• Se Ik não for uma instrução condicional, então a próxima instrução a ser


executada será Ik+1 ;

• se Ik = J(m, n, q), a próxima instrução a ser executada será Iq , caso


rm = rn ou Ik+1 , caso contrário (rm e rn são os conteúdos atuais dos
registradores Rm e Rn ).

A computação para quando a próxima instrução a ser executada é uma ins-


trução de ı́ndice maior do que o número de instruções do programa P , isto
é, quando a próxima instrução a ser executada é Iv , com v > s. Quando a
computação para, a sequência r1 , r2 , r3 , . . . dos conteúdos dos registradores é
chamada de configuração final.

Para denotar a computação de um programa P com uma configuração ini-


cial da URM com os valores a1 , a2 , . . ., escrevemos P (a1 , a2 , . . .). Como a
URM possui infinitos registradores, podemos escrever P (a1 , a2 , . . . , an ) para
denotar a computação P (a1 , a2 , . . . , an , 0, 0, 0, . . .). Se determinada computação
P (a1 , a2 , . . .) eventualmente para, denotamos este fato utilizando uma seta para
baixo (P (a1 , a2 , . . .) ↓). Caso a computação nunca para, utilizamos uma seta
para cima (P (a1 , a2 , . . .) ↑).

3.2.2 URM-Computabilidade
Foi estabelecido que uma função f é efetivamente computável se existe um al-
goritmo que permite encontrar o valor de f (n) para todos os valores n do seu
domı́nio. Uma vez estabelecido um modelo teórico de computação dado pela
URM, um algoritmo passa a ser, então, um programa P para este dispositivo.
Suponha que f (n) = b, para algum valor de n. Se este programa consegue exibir
em sua configuração final o valor b (que pode estar armazenado no registrador

24
R1 , por exemplo) tendo como configuração inicial o valor de n, então este pro-
grama computa a função f .

Uma função sobre inteiros positivos em inteiros positivos pode ser total ou
parcial. Ela será total de seu domı́nio for o conjunto dos inteiros positivos. Uma
função parcial será aquela cujo domı́nio é algum subconjunto do conjunto dos
inteiros positivos.

Sejam f uma função parcial de Nn em N, n ≥ 1, P um programa para


uma URM e a1 , a2 , . . . , an , b números naturais. Definiremos agora uma função
computável como aquela computável por um programa P . Estabelecemos ini-
cialmente algumas definições:

• A computação P (a1 , a2 , . . . , an ) converge para b se P (a1 , a2 , . . . , an ) ↓ e,


na configuração final da URM, o registrador R1 contém o valor b. Neste
caso, escrevemos P (a1 , a2 , . . . , an ) ↓ b.
• Dizemos que P URM-computa f se sempre quando (a1 , a2 , . . . , an ) per-
tence ao domı́nio de f e f (a1 , a2 , . . . , an ) = b temos que P (a1 , a2 , . . . , an ) ↓
b. Em outras palavras, a computação P (a1 , a2 , . . . , an ) sempre converge
para todo (a1 , a2 , . . . , an ) pertencente ao domı́nio de f .

Definição 3.1. A função f é URM-computável se existe um programa P que


a URM-computa. A classe das funções URM-computáveis será denotada por C
e a classe das funções de n variáveis URM-computáveis será denotada por Cn .

Exemplo 3.3. A função f : N2 → N dada por f (a1 , a2 ) = a1 + a2 é URM-


computável. Considere uma URM com configuração inicial

R1 R2 R3 R4 R5 ···
a1 a2 0 0 0 ···

A ideia é somar 1 ao conteúdo de R1 a2 vezes, utilizando o registrador R3


como contador. O programa P = I1 , I2 , I3 , I4 que URM-computa f é dado por:

I1 : J(3, 2, 5)
I2 : S(1)
I3 : S(3)
I4 : J(1, 1, 1)

A primeira instrução compara os conteúdos dos registradores R3 e R2 . Se


estes conteúdos são iguais, então já adicionamos ao valor de a1 o valor a2 ,
contabilidando a1 + a2 . Neste caso, a computação para, já que a próxima
instrução é I5 (inexistente). Caso contrário, segue-se para as instruções I2 e
I3 , que adicionam 1 aos conteúdos dos registradores R1 e R3 (contador). A
última instrução faz a computação voltar novamente à instrução I1 . Ao final
da computação, o registrador R1 possui exatamente o valor a1 + a2 = f (a1 , a2 ).
Portanto, P URM-computa f e f é URM-computável.
Dado um programa P , existe uma única função n-ária computada por P .
(n)
Denotamos esta função por fP . Assim, podemos definir uma função em termos

25
de um programa P da seguinte forma:

 b tal que P (a1 , a2 , . . . , an ) ↓ b, se
(n)
fP (a1 , a2 , . . . , an ) = P (a1 , a2 , . . . , an ) ↓

indef inida se P (a1 , a2 , . . . , an ) ↑

Note que uma dada função pode ser computada por diferentes programas.
Neste caso, se dois programas P1 e P2 são diferentes mas computam a mesma
(n) (n)
função, temos que fP1 = fP2 para algum n natural.

3.2.3 Máquina de Turing


A Máquina de Turing, que denominaremos por MT, é um dos principais meca-
nismos quando se trabalha com a noção de computabilidade. Foi estabelecida
por Alan Turing, em 1936 [37]. Introduziremos inicialmente algumas definições
e, em seguida, formalizaremos uma Máquina de Turing com base em [5] e [10].

Uma Máquina de Turing (MT) é um dispositivo constituı́do por uma fita


infinita à esquerda e à direita, dividida em quadrados. Cada quadrado está
vazio ou contém algum sı́mbolo de uma lista finita s1 , s2 , . . . , sn de sı́mbolos
(alfabeto da MT). A MT ainda possui uma cabeça de leitura, que realiza a
leitura de um único sı́mbolo de um quadrado da fita e é capaz de realizar três
tipos de operações:

1. apagar o sı́mbolo do quadrado lido e escrever neste quadrado um sı́mbolo


do alfabeto
2. mover a cabeça de leitura um quadrado à direita do quadrado que está
sendo lido (ou equivalentemente, mover a fita um quadrado para a es-
querda)
3. mover a cabeça de leitura um quadrado à esquerda do quadrado que está
sendo lido (ou equivalentemente, mover a fita um quadrado para a direita)

Em qualquer instante de tempo, a MT está em um estado oriundo de um


número finito de estados, representados por q1 , q2 , . . . , qm . A ação a ser tomada
pela MT depende de seu estado atual e do sı́mbolo que está sendo lido no mo-
mento. Podemos especificar suas ações por um conjunto finito Q de quádruplas,
que podem ter uma das formas abaixo:

(qi , sj , sk , ql )
(qi , sj , D, ql )
(qi , sj , E, ql )
para 1 ≤ i, l ≤ m, 0 ≤ j, k ≤ n.

Uma quádrupla (qi , sj , α, ql ) ∈ Q informa à MT, quando ela está no estado


qi e realiza a leitura do sı́mbolo sj , que deve realizar as seguintes ações:

1. Verifique as condições abaixo:


(a) se α = sk , apague sj e escreva sk no quadrado que está sendo lido

26
(b) se α = D, mova a cabeça de leitura um quadrado para a direita
(c) se α = E, mova a cabeça de leitura um quadrado para a esquerda

2. Modifique o estado atual para ql

3.2.4 Turing-computabilidade
Para realizar uma computação, a máquina deve ser inicializada com uma fita
que pode apresentar determinados sı́mbolos em seus quadrados. A máquina
deve estar em um estado inicial e a cabeça de leitura deve estar posicionada em
determinado quadrado. Vamos ainda estabelecer algumas convenções:
1. Uma MT sempre começa no seu estado de menor número, que chamaremos
de q1 ;
2. Se não houver instrução a seguir, a máquina interrompe a computação,
isto é, a máquina para se, quando estiver no estado qi e realizando a leitura
do sı́mbolo sj , não houver uma quádrupla da forma qi sj αβ em Q;

3. Não deve haver confilto entre instruções, isto é, não deve haver duas
quádruplas com os dois primeiros valores iguais mas um dos dois últimos
diferentes.
Uma configuração de uma MT passa a ser então uma tripla ordenada da
forma (conteúdo da fita, quadrado examinado, estado atual ).

Para representarmos números naturais, utilizamos o alfabeto Σ = {0, 1},


onde ‘0’ representa que o quadrado está em branco e ‘1’ será nossa marcação.
Assim, x ∈ N será representado como x + 1 aparições em sequência do sı́mbolo
‘1’ (que denotaremos por 1x+1 ), cada sı́mbolo escrito em um quadrado da fita
de uma MT:

... 1 1 ... 1 ...

(x + 1 quadrados)
Uma fita estará na configuração padrão se está em branco ou contém somente
uma cadeia da forma 1k , para algum natural k ≥ 1. Podemos ainda representar
n-uplas de números naturais (x1 , x2 , . . . , xn ) como uma lista das representações
de cada xi separados pelo sı́mbolo ‘0’.

Exemplo 3.4. As fitas abaixo mostram as representações para os naturais 0 e


3 e para a tripla (1, 3, 2), respectivamente:

... 1 ...

... 1 1 1 1 ...

... 0 1 1 0 1 1 1 1 0 1 1 1 0 ...

27
É importante lembrarmos novamente que uma função f : Nk −→ N ( k ∈ N,
k ≥ 1) é parcial se não está necessariamente definida para todos os valores de
seu domı́nio. Caso contrário, ou seja, se f está definida para todos os valores
de seu domı́nio, então dizemos que f é total.

Definiremos agora a computabilidade de uma função parcial f : Nk −→ N (


k ∈ N, k ≥ 1) por uma máquina de Turing MT. Primeiramente, estabelecemos
como uma MT computa uma função f :

• Considere uma computação de uma MT cuja fita contém somente as re-


presentações de x1 , x2 , . . . , xk (o restante da fita está em branco), inicia
no estado de menor número e sua cabeça de leitura está posicionada no
quadrado que possui o primeiro sı́mbolo ‘1’ à esquerda;

• Então, após uma sequência finita de instruções de Q, f (x1 , x2 , . . . , xk )


será igual ao número de ocorrências do sı́mbolo ‘1’ na configuração final
da fita (caso a computação termina) ou será indefinida, caso a MT nunca
atinja seu estado final. Observe que a representação do valor da função
no final da computação difere da representação dos valores de entrada
representados inicialmente na fita.

• Quando possı́vel, a MT para em seu estado de maior número e sua fita


está na configuração padrão.

Definição 3.2. Uma função parcial f é Turing-computável se existe uma máquina


de Turing que a computa. A classe de todas as funções Turing-computáveis será
representada por T C.

Da mesma forma como especificado para as máquinas de registradores ili-


mitados, uma mesma função pode ser computada por diferentes máquinas de
Turing, mas, no entanto, uma máquina de Turing computa apenas uma deter-
minada função.

Exemplo 3.5. A função f : N2 → N dada por f (a1 , a2 ) = (a1 + a2 ) é Turing-


computável. Considere uma MT com as representações de a1 e a2 em sua
fita, inicializando no estado q1 e examinando inicialmente o quadrado mais à
esquerda:

... 1 1 ... 1 1 B 1 1 ... 1 1 ...

Como a configuração inicial da fita apresenta (a1 + 1) + (a2 + 1) = a1 + a2 + 2


ocorrências do sı́mbolo ‘1’, temos simplesmente que apagar as duas primeiras
ocorrências deste sı́mbolo. Dessa forma, a fita possuirá exatamente a1 + a2
ocorrências do sı́mbolo ‘1’. Para fazermos a fita finalizar na configuração padrão,
a máquina irá escrever ‘1’ no quadrado em branco, irá para a esquerda e apagará
três sı́mbolos ‘1’. A sequência de instruções que realiza este processo é

q1 1 D q1
q1 0 1 q2
q 2 1 E q2
q2 0 D q3

28
q3 1 0 q4
q4 0 D q5
q5 1 0 q6
q6 0 D q7
q7 1 0 q8
q8 0 D q9

As duas primeiras quádruplas buscam pelo quadrado em branco e escreve o


sı́mbolo ‘1’ neste quadrado. A terceira e a quarta quádruplas movem a cabeça
de leitura para o primeiro ‘1’ à esquerda. As quádruplas restantes apagam os
três primeiros sı́mbolos ‘1’. A máquina para a execução no estado q9 , já que
não há nenhuma quádrupla que informe à MT o que fazer quando estiver neste
estado.

3.2.5 A Tese de Church


A tese de Church, basicamente, estabelece a equivalência entre duas noções de
computabilidade: a intuitiva, onde se assume a existência de um método a partir
do qual se possa calcular o valor de uma função, e a noção formal, estabelecida
pela turing-computabilidade (ou URM-computabilidade).

Sendo assim, a tese de Church pode ser expressa da seguinte forma: toda
função efetivamente calculável pode ser calculada (é computável) por uma máquina
de Turing (ou por uma URM). Portanto, considerando verdadeira a tese de
Church, podemos simplesmente dizer que uma função é computável se ela for
URM-computável ou turing-computável (conforme as definições 3.1 e 3.2) [10].

O grande impacto da suposta veracidade da tese de Church é que, uma vez


demonstrado que determinada função não é turing-computável, pode-se estabe-
lecer sua não computabilidade efetiva, ou seja, não será, de fato, calculável por
nenhuma outra noção de computabilidade.

Um dos principais argumentos em favor da tese de Church é o fato de que


todas as formalizações do conceito de computabilidade, como as funções recur-
sivas gerais, de Gödel-Herbrand-Kleene (1936), o λ-cálculo, de Church (1936),
as funções recursivas gerais, de Gödel-Kleene (1936), as máquinas de Turing
(1936), o sistema de manipulação de sı́mbolos de Post (1943), as funções de
Markov (1951) e as máquinas de registradores ilimitados de Sheperdson-Sturgis
(1963), por exemplo, se mostraram equivalentes [10].

Neste trabalho, em todos os resultados sobre computabilidade e não compu-


tabilidade de certos conjuntos e funções, será suposta a veracidade da tese de
Church.

3.3 Problemas de Decisão


Denomina-se de problema de decisão a tarefa de se verificar se existe um algo-
ritmo que sempre responda “sim” ou “não” a determinada questão lógica ou
matemática [10].

29
Exemplo 3.6. Queremos verificar se determinado número natural x possui
certa propriedade, por exemplo, ser múltiplo de um outro natural y. Se ado-
tarmos que 1 significa “sim” e que 0 significa “não”, podemos escrever nosso
problema em termos de uma função sobre os naturais:
{
1, se x é múltiplo de y,
f (x, y) =
0, se x não é múltiplo de y.

Dessa forma, se definirmos o predicado M (x, y) como “x é múltiplo de y”,


podemos verificar se ele admite uma resposta “sim” ou “não” exibindo um al-
goritmo que calcule (ou computa em relação a alguma formalização) f (x, y).

De maneira geral, podemos formalizar o conceito de decidibilidade de predi-


cados da seguinte forma: Seja M (x1 , x2 , . . . , xn ) um predicado sobre os naturais
x1 , x2 , . . . , xn . Sendo x = (x1 , x2 , . . . , xn ), a função caracterı́stica CM (x) asso-
ciada a M (x) é dada por:
{
1, se M(x) é verdadeiro,
CM (x) =
0, se M(x) é falso.

Diremos que o predicado M (x) é decidı́vel se a função CM (x) é computável.


Caso contrário, diremos que M (x) é indecidı́vel. Um algoritmo que computa
CM (x) é chamado procedimento de decisão para M (x).

Em alguns casos, pode acontecer que, quando verdadeiro, determinado pre-


dicado pode ser decidido, mas, quando falso, a computação da função carac-
terı́stica pode não terminar. Sendo assim, dizemos que um predicado M (x) é
parcialmente decidı́vel se a função f dada por
{
1, se M(x) é verdadeiro,
f (x) =
indef inida, se M(x) é falso.

é computável. Neste caso, f é chamada de função caracterı́stica parcial de M


e o algoritmo para computar f é chamado de procedimento de decisão parcial
para M .

3.3.1 Conjuntos Recursivos e Recursivamente Enumeráveis


Dado um subconjunto A ⊆ N, podemos construir um predicado M (x) =
“x ∈ A”. Dessa forma, surge a seguinte questão: pode-se construir um pro-
cedimento de decisão para M (x)? Utilizando as definições de decidibilidade por
meio da computabilidade de funções caracterı́sticas, estabelecemos as seguintes
definições:
Definição 3.3. Seja A um subconjunto de N. A função caracterı́stica de A,
denotada por CA , é dada por:
{
1, se x ∈ A,
CA (x) =
0, se x ∈
/ A.

O conjunto A é dito recursivo se a função caracterı́stica CA é computável (ou,


de forma equivalente, “x ∈ A” é um predicado decidı́vel).

30
Em algumas situações, é possı́vel construir um procedimento efetivo (uma
MT ou uma URM, por exemplo) que computa parcialmente a função carac-
terı́stica de determinado conjunto. Geralmente, nesses casos, pode-se concluir
que um dado elemento pertence ao conjunto, no entanto, não pode-se concluir
que um elemento não perteça ao conjunto, isto é, para determinados argu-
mentos, o dispositivo de computação pode nunca parar. Assim, tais conjuntos
correspondem a predicados parcialmente decidı́veis.

Definição 3.4. Seja A um subconjunto de N. Então, A é recursivamente


enumerável se a função f dada por
{
1, se x ∈ A,
f (x) =
indef inida, se x ∈
/ A.

é computável (ou, de forma equivalente, “x ∈ A” é um predicado parcialmente


decidı́vel).

31
4 Sobre a Existência de Funções Sobre os Natu-
rais Não Computáveis
Nesta seção, será apresentado um argumento do ponto de vista matemático que
nos mostra que deverão existir funções não computáveis. Este argumento pode
ser resumido da seguinte forma: como o conjunto de todas as funções de in-
teiros positivos em inteiros positivos é não enumerável e o conjunto de todas
as máquinas de Turing é enumerável, deverão existir funções que não são com-
putáveis [3]. Para demonstrar este resultado, estaremos supondo a veracidade
da tese de Church.

Além deste resultado, serão apresentados dois outros problemas importantes


da teoria de computabilidade que se mostram indecidı́veis. Um destes problemas
é a decidibilidade de linguagens. Será demonstrado que nem todo subconjunto
formado por palavras sobre um dado alfabeto é reconhecido por alguma máquina
de Turing. O outro problema, conhecido como halting problem, ou o problema
da parada, nos pergunta se existe um procedimento genérico que nos permita
decidir se um dado programa eventualmente para ou não.

4.1 Não Enumerabilidade do Conjunto F (N; N)


Utilizando [25] como referência, denotaremos por In o conjunto dos números
naturais de 1 até n, ou seja, In = {p ∈ N : 1 ≤ p ≤ n}. Algumas definições são
estabelecidas:
Definição 4.1. Um conjunto X é finito quando é vazio ou existe, para algum
n ∈ N, uma função bijetora φ : In → X. Um conjunto é dito infinito quando
não é finito, ou seja, quando não é vazio e, para qualquer n ∈ N, não existe
uma bijeção φ : In → X.
Definição 4.2. Um conjunto X é dito enumerável se é finito ou, sendo infinito,
existe uma função bijetora f : N → X. Se não houve tal bijeção, dizemos que
X é um conjunto não enumerável. Conforme [4], X também é enumerável se
ele é vazio ou existe uma função injetora f : X → N.
Quando um conjunto é enumerável, podemos dispor seus elementos em uma
lista, de modo que podemos referenciar cada elemento como o i-ésimo elemento
da lista. A bijeção f descrita anteriormente enumera, portanto, os elementos
do conjunto, por isso, cada bijeção f : N → X é chamada de enumeração dos
elementos do conjunto X. Assim, pondo-se x1 = f (1), x2 = f (2), . . ., temos
que X = {x1 , x2 , . . .}.

Vamos demonstrar agora alguns resultados importantes para esta seção. Da-
dos dois conjuntos X e Y , denotaremos por F (X; Y ) o conjunto de todas as
funções f : X → Y . O Teorema 4.1 e os Corolários 4.1 e 4.2 possuem como
referência [25].

Teorema 4.1 (Cantor). Sejam X um conjunto arbitrário e Y um conjunto


contendo pelo menos dois elementos. Nenhuma função φ : X → F (X; Y ) é
sobrejetora.

32
Demonstração: Dada φ : X → F (X; Y ), indicaremos o valor de φ(x) por
φx , para todo x ∈ X (note que φx é uma função de X em Y ). Para mostrar que
φ : X → F (X; Y ) não é sobrejetora, temos que exibir uma função em F (X; Y )
que não é imagem de nenhum x ∈ X (ou seja, a imagem não é igual ao con-
tradomı́nio). Esta função pode se construı́da da seguinte forma: definimos para
todo x ∈ X uma função f : X → Y que assume um valor diferente de φx (x)
(isto é possı́vel, pois, por hipótese, Y possui pelo menos dois elementos). Assim,
f (x) difere de φx (x) para todo x ∈ X. Portanto, f não pertence à imagem de
φ e concluı́mos que φ : X → F (X; Y ) não é sobrejetora. 

Usando este teorema, obtemos como corolário o fato de que o conjunto


F (N; N) é não enumerável. Para isto, basta mostrarmos que nenhuma função
φ : N → F (N; N) é sobrejetora, e portanto, não existirá uma bijeção entre N e
F (N; N).
Corolário 4.1. O conjunto de todas as funções de naturais em naturais é não
enumerável.
Demonstração: Tomando X = Y = N no teorema anterior, obtemos que
nenhuma função φ : N → F (N; N) é sobrejetora. Logo, não é possı́vel construir
uma bijeção entre os conjuntos N e F (N; N), donde segue que F (N; N) é não
enumerável. 

Quando fazemos X = N e mantemos Y como um conjunto contendo pelo


menos dois elementos no teorema anterior, estamos utilizando um método de
demonstração denominado de método diagonal de Cantor. Este método foi cri-
ado por Cantor e utilizado em sua demonstração de que o conjunto dos números
reais é não enumerável.

A ideia principal do método da diagonal é mostrar que determinado conjunto


de objetos não pode ser enumerado. Para isto, supomos inicialmente que ele
possa ser enumerado, dispondo-os em uma lista O1 , O2 , . . . , On . Então, cons-
truı́mos um objeto O do mesmo tipo que difere de todo Oi da lista, fazendo-o
diferir de cada Oi exatamente na i-ésima posição. Vamos estabelecer agora um
corolário utilizando o método diagonal:
Corolário 4.2. Seja Y um conjunto contendo ao menos dois elementos. Ne-
nhuma função φ : N → F (N; Y ) é sobrejetora.
Demonstração: Primeiramente, note que os elementos de F (N; Y ) são
funções f : N → Y . Portanto, φ é uma função que corresponde a um natural
uma destas funções f . Suponha que φ fosse sobrejetiva. Então, toda função fi
estaria correspondida a um número natural, donde podemos escrever φ(1) = f1 ,
φ(2) = f2 , e assim por diante. Mas cada fi é uma função de N em Y , assim, se
yij é o j-ésimo valor assumido pela i-ésima função, construı́mos a lista abaixo:

f1 = (y11 , y12 , y13 , . . .)


f2 = (y21 , y22 , y23 , . . .)
f3 = (y31 , y32 , y33 , . . .)
.. ..
. .

33
Podemos construir uma função f : N → Y escolhendo, para cada n ∈ N,
um elemento yn ∈ Y diferente do n-ésimo termo da diagonal. Esta função f
assumiria então os seguintes valores: f = (y1 , y2 , y3 , . . .), sendo que yn ̸= ynn
para todo natural n. Dessa forma, nossa função f não está na lista, pois, para
todo natural n, o n-ésimo valor assumido por f difere do n-ésimo valor assumido
pela função fn . Assim, nenhuma lista enumerável pode esgotar todas as funções
do conjunto F (N; Y ). 

4.2 Enumerabilidade das Máquinas de Turing


Agora, será demonstrado que o conjunto de todas as máquinas de Turing é enu-
merável. A ideia por trás deste resultado reside no fato de que as máquinas
de Turing podem ser descritas, em última análise, por uma quantidade finita
de sı́mbolos. Sendo assim, se pudermos mostrar que o conjunto de todas as
sequências finitas de sı́mbolos é enumerável, obtemos imediatamente o resul-
tado desejado.

De acordo com [17], um alfabeto é um conjunto finito não vazio de sı́mbolos,


representado pela letra Σ. Um tipo de alfabeto bastante utilizado é o alfabeto
binário Σ = {0, 1}. Uma palavra é uma sequência finita de sı́mbolos de um dado
alfabeto. Por exemplo, 11011 e 01101 são palavras do alfabeto binário definido
anteriormente. Denotamos por ϵ a palavra vazia, isto é, a palavra com zero
sı́mbolos, que pode ser escolhida a partir de qualquer alfabeto.

Podemos agora determinar subconjuntos de um alfabeto Σ. Definindo o


comprimento de uma palavra como o número de sı́mbolos que ela apresenta,
denotamos por Σk o subconjunto das palavras de comprimento k que pertencem
a Σ. O conjunto de todas as palavras sobre um alfabeto Σ é denotado por Σ∗ .
Um conjunto de palavras, todas escolhidas de Σ∗ a partir de algum Σ especı́fico,
é chamado de linguagem.
Exemplo 4.1. Considere o alfabeto Σ = {0, 1}. Então, temos

Σ0 = {ϵ}

Σ1 = {0, 1}
Σ2 = {00, 01, 10, 11}


Σ∗ = Σi .
i=0

4.2.1 Enumeração de Gödel


Um método de enumeração importante é a enumeração de Gödel. Simplifica-
damente, este método consiste em atribuir um dado número a uma palavra de
determinado alfabeto. A unicidade desta associação provém do fato de que tal
número é construı́do utilizando-se do Teorema Fundamental da Aritmética. Ve-
jamos em mais detalhes como funciona este método (baseado em [5]).

Considere um alfabeto finito Σ. Para cada sı́mbolo si ∈ Σ, associe um


número natural ai , de forma que cada ai esteja associado a um único sı́mbolo.

34
O que queremos agora é para cada possı́vel palavra w formada por sı́mbolos
do alfabeto, associar a ela um único número natural G(w), de forma que cada
natural esteja associado a uma única palavra. O número G(w) será chamado
de número de Gödel da palavra w.

Uma enumeração será eficiente quando satisfaz os seguintes aspectos, os


quais serão chamados de critérios de Hermes:
1. Se w e z são duas palavras distintas, então devem possuir números de
Gödel diferentes, isto é, se w ̸= z, então G(w) ̸= G(z);
2. O número G(w), para qualquer palavra w, é computável, ou seja, dada
uma palavra w arbitrária, podemos efetivamente encontrar o seu número
de Gödel em um número finito de passos;
3. O problema enunciado por “dado um número natural n, ele é ou não o
número de Gödel de alguma palavra w” é decidı́vel. Isto significa que, para
qualquer natural n, podemos verificar em um número finito de passos se
ele é o número de Gödel de alguma palavra w ou não;
4. Se n é um número de Gödel, podemos construir a palavra associada em
um número finito de passos.
A forma como Gödel encontrou para atribuir a cada palavra w um único
natural G(w) se baseia no Teorema Fundamental da Aritmética. Relembremos
o que diz este teorema:
Teorema 4.2 (Fundamental da Aritmética). Todo inteiro positivo pode ser
expresso como produto de números primos e esta representação é única, a menos
da ordem dos fatores.
Assim, para cada palavra w = x1 x2 . . . xn , com xi ∈ Σ, associamos um
número natural G(w) dado por

G(w) = 2d1 . 3d2 . . . . . pdnn , (1)


onde di é o número associado inicialmente ao sı́mbolo xi e pi é o i-ésimo número
primo.

Esta enumeração satisfaz os critérios de Hermes. De fato, pode-se verificar


que:
• O Teorema Fundamental da Aritmética nos garante que G(w) é o único
número associado à palavra w;
• Dada uma palavra w, G(w) pode ser efetivamente calculado pelo método
exposto acima;
• Dado um número natural n, podemos fazer sua decomposição em fatores
primos n = q1e1 .q2e2 . . . . .qkek . Se o número qi que aparece nessa decom-
posição corremponder exatamente ao i-ésimo número primo, então n é o
número de Gödel de alguma palavra w (neste caso, a palavra correspon-
dente pode ser obtida substituindo os valores e1 e2 . . . ek pelos seus respec-
tivos sı́mbolos). Caso contrário, n não é o número de Gödel de nenhuma
palavra.

35
Exemplo 4.2. Vamos enumerar as palavras do alfabeto Σ = {a, b, c}. Primei-
ramente, associamos a cada sı́mbolo xi do alfabeto um inteiro positivo di , que
pode ser feito da seguinte forma:

 1 se xi = a
di = 2 se xi = b

3 se xi = c

Então, para cada palavra w = x1 x2 . . . xn , associamos a ela o número dado


pela equação G(w) = 2d1 . 3d2 . . . . . pdnn . Pode-se agora tomar uma palavra
qualquer, digamos “abac”, e encontrar seu número de Gödel, que, neste caso
será
G(abac) = 21 . 32 . 51 . 73 = 30870.
Exemplo 4.3. Podemos também, dado qualquer n, verificar se corresponde a
alguma palavra. Tomemos, por exemplo, os números 360 e 130. A decomposição
em fatores primos destes números nos mostra que 360 = 23 . 32 . 51 e que 130 =
2. 5. 13. Note que na decomposição do 360, temos a sequência correta de
números primos. Assim, 360 corresponde à palavra dada pela substituição dos
expoentes pelos respectivos sı́mbolos do alfabeto: “cba”. Já a decomposição do
número 130 não apresenta a ordem correta dos números primos, portanto, 130
não está associado a nenhuma palavra sobre o alfabeto em questão.
A numeração de Gödel nos permite, então, associar qualquer palavra sobre
um alfabeto a um número natural. Portanto, pode-se esperar que o conjunto de
todas as palavras sobre um alfabeto seja enumerável. A seguir, este resultado é
formalizado.
Teorema 4.3. Seja Σ um alfabeto enumerável. Então, o conjunto das palavras
finitas sobre este alfabeto, que denotamos por Σ∗ , é enumerável.
Demonstração: A cada palavra w ∈ Σ∗ , podemos associar um único
número natural G(w), dado pelo método de enumeração de Gödel. Assim,
temos que G : Σ∗ → N é injetiva, pois a numeração de Gödel satisfaz o pri-
meiro critério de Hermes. Pela Definição 4.2, segue que Σ∗ é enumerável. 

Uma vez que podemos enxergar uma máquina de Turing como uma sequência
finita de sı́mbolos, pelo teorema anterior, o conjunto de todas as máquinas de
Turing deve ser enumerável.
Corolário 4.3. O conjunto de todas as máquinas de Turing é enumerável.
Demonstração: Podemos representar uma máquina de Turing por meio de
uma palavra finita. Vamos considerar que o estado inicial é aquele de menor
número e o estado final (ou estado de parada) é aquele de maior número, para
o qual não há mais quádruplas informando a ação. Queremos ainda que, para
todo estado qi (exceto o estado de parada) e para todo sı́mbolo sj do alfabeto
da MT, existe uma quádrupla começando com qi sj . Se não houver alguma ins-
trução para qi sj , interpretamos este fato como uma instrução para a máquina
parar. Dessa forma, podemos adicionar uma instrução que mantenha o mesmo
sı́mbolo e altere o estado atual para o estado de parada. Assim, obtemos um
conjunto de quádruplas onde todos os estados e todos os sı́mbolos do alfabeto
da MT estão representados. Os elementos deste conjunto podem ser dispostos

36
lado-a-lado, formando uma cadeia finita de sı́mbolos. Assim, se tomarmos o con-
junto de todas as máquinas de Turing, estamos tomando o conjunto de palavras
sobre um dado alfabeto (que é a união dos conjuntos de estados e alfabetos de
cada MT e dos sı́mbolos “D” e “E”). Logo, pelo teorema anterior, este conjunto
é enumerável 

Os resultados obtidos nesta parte do trabalho permitirão demonstrar impor-


tantes teoremas sobre a incomputabilidade de certos conjuntos e funções.

4.3 Linguagens Não Decidı́veis


Relembrando algumas definições da Seção 4.2, temos que, dado um alfabeto Σ,
uma linguagem consiste em um conjunto de palavras obtidas de Σ∗ (conjunto
de todas as palavras sobre Σ), ou seja, uma linguagem L nada mais é do que
um subconjunto de Σ∗ . Podemos definir uma linguagem dando uma descrição
de sua formação, como mostra o exemplo abaixo:
Exemplo 4.4. Considere o alfabeto Σ = {0, 1}. Então, são exemplos de lin-
guagens:
L1 = {w : w possui o mesmo número de 0’s e 1’s}
L2 = {0n 1n : n ≥ 1}
Assim, as palavras 100110 e 0101 pertencem à linguagem L1 , já que possuem a
mesma quantidade de 0’s e 1’s; enquanto que as palavras 000111 e 0011 perten-
cem a linguagem L2 , pois são formadas por uma certa quantidade de 0’s seguida
pela mesma quantidade de 1’s.
Uma máquina de Turing pode ser projetada para reconhecer uma dada lin-
guagem. Reconhecer uma linguagem significa que, inicializando a fita de uma
MT com uma dada palavra desta linguagem e posicionando a cabeça de leitura
no sı́mbolo mais à esquerda, a MT finalmente para em seu estado de maior
número (estado de aceitação). Quando isto ocorre, dizemos que a entrada é
aceita, caso contrário, dizemos que a entrada é rejeitada.

O conjunto de linguagens que são reconhecidas por máquinas de Turing são


chamadas de linguagens recursivamente enumeráveis. As linguagens que são
aceitas por alguma máquina de Turing que sempre para, independentemente da
entrada, são chamadas de linguagens recursivas ou decidı́veis [17].

A questão que se coloca naturalmente, então, é a seguinte: será que toda


linguagem é aceita por uma máquina de Turing? Em outras palavras, será que
todo subconjunto L de Σ∗ é decidı́vel (podemos sempre projetar uma MT para
decidir se dada palavra w pertence ou não a uma linguagem)? Provaremos que
a resposta a esta questão é não, isto é, nem toda linguagem é decidı́vel.
Teorema 4.4. Seja Σ um alfabeto. Existe uma linguagem que não é reconhe-
cida por alguma máquina de Turing, em outras palavras, existe um subconjunto
L de Σ∗ que não é decidı́vel.
Demonstração: Vamos mostrar inicialmente que o conjunto de todas as
linguagens (que nada mais é do que o conjunto das partes de Σ∗ ) é não enu-
merável. De fato, qualquer subconjunto S ⊆ ℘(Σ∗ ) pode ser descrito em termos

37
de uma função caracterı́stica fS : Σ∗ → {0, 1}, definida como
{
1, se xj ∈ S,
fS (xj ) =
0, se xj ∈ / S,

para toda palavra xj ∈ Σ∗ (note que podemos falar da j-ésima palavra, pois,
pelo teorema 4.3, Σ∗ é enumerável). Suponha que ℘(Σ∗ ) fosse enumerável.
Então, poderı́amos enumerar todas as linguagens L1 , L2 , . . ., cada Li ∈ ℘(Σ∗ ).
No entanto, seria possı́vel construir uma linguagem L da seguinte forma: para
toda palavra xj ∈ Σ∗ , xj ∈ L se, e somente se, xj ∈ / Lj , ou, em termos de sua
função caracterı́stica fL ,
{
1, se xj ∈
/ Lj ,
fL (xj ) =
0, se xj ∈ Lj .

Assim, L é uma linguagem que não aparece na enumeração, pois ela difere de
toda linguagem Lj exatamente na j-ésima palavra. Portanto, o conjunto de
todas as linguagens não é enumerável e como o conjunto de todas as máquinas
de Turing é enumerável (Corolário 4.3), segue que existem linguagens que não
são reconhecidas por alguma máquina de Turing. 

4.4 Funções Sobre os Naturais Incomputáveis


Em virtude dos resultados encontrados nos corolários 4.1 e 4.3, temos que existe
uma quantidade não enumerável de funções de naturais em naturais, enquanto
que existe apenas uma quantidade enumerável de máquinas de Turing.

Assim, apenas uma quantidade enumerável de funções podem ser compu-


tadas por máquinas de Turing. Assumindo verdadeira a tese de Church (e
relembrando que uma MT computa apenas uma única função), deverão existir
funções sobre os naturais não efetivamente computáveis.

Há outro modo de provar este resultado fazendo uso do método diagonal.
Vamos supor que as funções sobre os naturais (podemos nos restringir às funções
de um argumento) possam ser enumeradas. Então, veremos que é possı́vel
construir uma função que difere de todas as demais da enumeração. Sendo
assim, esta função não é computável (cf. [3], [10]).
Teorema 4.5. Existe uma função total sobre os naturais de um argumento que
não é computável.
Demonstração: Pelo Corolário 4.3, existe apenas uma quantidade enu-
merável de máquinas de Turing. Sendo assim, o conjunto de todas as funções
computáveis é enumerável. Logo, podemos listar estas funções como f1 , f2 , . . ..
Agora, construa uma função f da seguinte forma:
{
fn (n) + 1, se fn (n) é definida,
f (n) =
0, se fn (n) é indefinida.

Claramente f é uma função total de um argumento bem definida e que, além


disso, difere de toda função fn exatamente no seu n-ésimo valor assumido:
• se fn (n) está definida, então f (n) ̸= fn (n), logo, f ̸= fn ;

38
• se fn (n) não está definida, então f difere de fn já que f está definida.
Portanto, f é uma função que não ocorre na enumeração, logo, f não é com-
putável 

A não computabilidade da função f acima está diretamente relacionada à


parada do programa que computa fn (n). De fato, para f ser computável, preci-
sarı́amos sempre poder deliberar sobre a parada ou não de determinada máquina
de Turing que computa fn para todo natural n. No entanto, como veremos na
próxima seção, este problema, de decidir se um dado programa eventualmente
para sob determinada entrada ou não, é insolúvel.

4.5 Reais Não Computáveis e a Indecidibilidade do Pro-


blema da Parada
Um dos principais resultados da teoria da computabilidade é a insolubilidade do
halting problem, ou do problema da parada. Em seu trabalho de 1936, intitulado
On computable numbers, with an application to the Entscheidungsproblem [37],
Turing fala sobre a computabilidade de números reais. Para ele, um número
real é computável se sua expressão como um decimal pode ser calculada por
meios finitos.

De acordo com Chaitin [8], o problema da parada e o seu consequente re-


sultado sobre o problema de decisão para sistemas formais revela uma impor-
tante limitação sobre a fundamentação da matemática. Pelo método da enu-
meração de Gödel, podemos pensar em programas (ou máquinas de Turing)
como números naturais. Assim, podemos listar todos os programas p1 , p2 , . . .,
e os números reais que eles computam:
p1 .d11 d12 d13 . . .
p2 .d21 d22 d23 . . .
p3 .d31 d32 d33 . . .
.. ..
. .
A princı́pio, não nos importamos se todo programa pi consegue imprimir
todos os dı́gitos decimais. Usando o método diagonal de Cantor, podemos cons-
truir um novo número .d1 d2 d3 . . . tal que di ̸= dii , para todo natural i. Dessa
forma, este número não é computável.

A conexão entre este número real não computável (vamos chamá-lo de µ)


e o problema da parada surge quando nos perguntamos: por que, afinal, este
número não é computável? Perceba que, para computar o n-ésimo dı́gito de µ
(dn ), temos que tomar o n-ésimo programa da lista (pn ), executá-lo e esperar
que ele imprima o n-ésimo dı́gito do número que ele computa (no caso, dnn ),
para daı́ podemos fazer dn ̸= dnn .

O que ocorre, então, se o n-ésimo programa nunca imprime o n-ésimo dı́gito


do número que ele computa, ou em outras palavras, se o programa pn nunca
imprime o dı́gito dnn ? Como demonstramos que existe um número real não com-
putável, isto significa que não podemos sempre decidir se o n-ésimo programa

39
imprime o n-ésimo dı́gito, pois, se pudéssemos sempre decidir esse problema, µ
não seria incomputável. Daı́ segue a indecidibilidade do problema da parada:
não existe um método geral para decidir se o n-ésimo programa imprime um
n-ésimo dı́gito (e para) ou não (continua indefinidamente).

Uma possı́vel demonstração para este fato pode ser dada em termos da
incomputabilidade da função caracterı́stica do predicado “Mm para com entrada
n”, apresentada em seguida.
Teorema 4.6 (Problema da Parada). O problema de decidir se uma dada
máquina de Turing arbitrária para ou não com deteminada entrada é insolúvel.
Demonstração: Como o conjunto das máquinas de Turing é enumerável
(Corolário 4.3), podemos listar todas elas da seguinte forma: M1 , M2 , M3 , e
assim por diante. Podemos tomar, em particular, as máquinas que computam
funções de uma variável. Considere o predicado P red(m, n) = “Mm para com
entrada n”. A função caracterı́stica associada é dada por
{
1, se Mm para com entrada n,
p(m, n) =
0, caso contrário.

Vamos mostrar que p(m, n) não é computável. Para isto, suponha que p(m, n)
fosse computável. Sendo assim, poderı́amos construir uma máquina de Turing
T que faz o seguinte: dada uma entrada n ∈ N,

1. Execute o n-ésimo programa com entrada n (calcule p(n, n));


2. Se, em sua configuração final, a fita possui um único 1, então entre em um
laço (é equivalente dizer que se Mn para com entrada n, então não pare,
isto é, entre em um laço infinito);

3. Se, em sua configuração final, a fita está vazia, então escreva 1 e pare (é
equivalente dizer que se Mn não para com entrada n, escreva 1 e pare).

Sabemos que o conjunto das máquinas de Turing é enumerável. Assim, nosso


programa T deve ser alguma máquina da lista inicial M1 , M2 , M3 , . . .. Suponha
que T seja a j-ésima máquina, isto é, que T seja Mj . Como, por hipótese, a
função caracterı́stica p é computável, podemos saber se Mj para com entrada
j. Mas, se assim fosse, então (lembre-se de que Mj é nossa máquina T definida
acima):

• Dado j, execute o j-ésimo programa (que é o próprio Mj ) com entrada j;


• Se Mj para com entrada j, então Mj entra em loop;

• Se Mj não para com entrada j, escreva 1 e pare.


Logo, Mj para se, e somente se, Mj não para com entrada j, uma contradição.
Portanto, p não pode ser computável, o que implica na indecidibilidade do
predicado P red(m, n). 

40
4.5.1 Máquina de Turing Universal
Devemos fazer uma ressalva em relação ao teorema anterior. Nossa definição
da máquina de Turing T possuı́a três instruções. A primeira delas dizia para,
dada uma entrada n, calcular p(n, n), o que é equivalente a executar o n-ésimo
programa da enumeração inicial. De certa forma, T é um programa capaz de
executar (ou simular) outro programa com uma dada entrada. Esta ideia é
possı́vel devido à existência da máquina universal de Turing.

Turing mostrou que podemos contruir uma máquina U , chamada de univer-


sal, capaz de executar qualquer outra MT. Mais especificamente, para qualquer
ı́ndice i ∈ N e para qualquer entrada n ∈ N (valor inicialmente representado
na fita), U , recebendo como entrada i e n, realiza a mesma computação da
máquina Mi com entrada n [19]. O ı́ndice i para uma máquina de Turing pode
ser encontrado utilizando o método de enumeração de Gödel descrito na Seção
4.2.1.

41
5 Uma Breve Explanação Sobre o Problema da
Parada e o Programa de Hilbert
A ideia principal do Programa de Hilbert, como exposto na introdução deste
trabalho, era axiomatizar a matemática, isto é, fundamentar a matemática por
meio de um sistema formal axiomatizado, de forma que todos os teoremas pudes-
sem ser provados sem corrermos o risco de encontrar contradições. No entanto,
a indecidibilidade do problema da parada é um dos resultados que impossibili-
tam a realização deste programa. Para compreendermos este fato, relembremos
inicialmente algumas ideias de Hilbert.

O programa de Hilbert consistia basicamente de três considerações (já ex-


postas na introdução):

1. Hilbert considerava que a parte combinatória (finitária, ou computável)


da matemática estava isenta de problemas;

2. A parte infinitária (na qual entraria, por exemplo, a teoria de conjuntos


e a análise) deveria ser justificada através da parte finita. Isto seria feito
através do método axiomático (construção de sistema formal);
3. A consistência deste sistema seria verificada por meios finitos.

O ponto de vista finitário possui, portanto, um importante papel no pro-


grama de Hilbert, ponto de vista este que é concentrado em uma filosofia da
matemática denominada de finitismo.

O finitismo consiste, basicamente, na ênfase sobre objetos concretos que


podem ser imediatamente captados pela intuição e operações que não fazem
uso de elementos ideais4 [38]. Objetos concretos, para Hilbert, são sı́mbolos,
a princı́pio, isentos de significado, que podem ser manipulados e comparados.
A base da teoria de números, portanto, poderia ser desenvolvida por meio de
sequências finitas de sı́mbolos, como, por exemplo, 1, 11, 111, 1111, 11111, ....,
e assim por diante.

Com relação às operações e aos métodos de prova aceitáveis do ponto de vista
do finitismo, não há uma definição precisa por parte de Hilbert, mas comumente
aceita-se aqueles métodos que podem ser formalizados em um sistema conhecido
por Aritmética Recursiva Primitiva (APR) [38], que consiste em (conforme
[30]):
• Linguagem: variáveis x, y, z, ..., para números;

• Constantes 0, 1, 2...;
• Sı́mbolo funcional f para cada função recursiva primitiva;

• Os axiomas são os dois primeiros axiomas de Peano:


4 Hilbert considerava como elementos ideiais aqueles objetos matemáticos abstratos que

são introduzidos no discurso matemático com o intuito de ampliar seu alcance. Por exemplo,
a introdução dos números imaginários forneceu o elemento necessário para que se pudesse
alcançar o Teorema Fundamental da Álgebra.

42
1. ∀x(x′ ̸= 0)
2. ∀x, y(x′ = y ′ ⇒ x = y)

definições de operações recursivas primitivas, como, por exemplo,


1. x + 0 = x
2. x + y ′ = (x + y)′
3. x.0 = 0
4. x.y ′ = x.y + x

e um esquema de indução limitada


1. (A(0) ∧ ∀x(A(x) ⇒ A(x′ ))) ⇒ A(x)

Conforme exposto na seção Fundamentação Teórica, um sistema formal, ou


teoria formal, é composto por uma coleção não-vazia de objetos (fórmulas), um
subconjunto de fórmulas (axiomas) e um conjunto de regras de inferência, que
nos dizem como manipular e combinar tais sı́mbolos. Quando há um método
para se decidir se uma fórmula bem formada é um axioma ou não, dizemos que
o sistema formal é axiomatizado.

Em um sistema axiomatizado, podemos algoritmicamente identificar os axi-


omas e, utilizando as regras de inferência, poderı́amos listar todas as possı́veis
provas do sistema. Para isto, basta listarmos todas as palavras de comprimento
1, depois as de comprimento 2, e assim por diante, e, então, verificar quais destas
palavras correspondem a provas [19]. Note que cada linha da prova é um axioma
ou decorre das linhas anteriores mediante uma regra de inferência. Tomando
a última linha das provas, terı́amos listado todos os teoremas do sistema formal.

No entanto, a insolubilidade do problema da parada impossibilita a existência


de um sistema formal onde toda verdade matemática pudesse ser demonstrada.
Analisemos em mais detalhes esta afirmação.

Vamos supor que exista um sistema formal U onde todo problema ma-
temático pudesse ser demonstrado (o que, de certa forma, está vinculado à
filosofia de Hilbert). Este sistema seria completo, isto é, toda sentença bem
formulada ou é teorema de U ou sua negação é teorema de U . Sendo assim,
poderı́amos buscar pela prova de que um dado programa qualquer para ou não
sob determinada entrada, o que implicaria na decidibilidade do predicado “Mm
para com entrada n”. A decidibilidade deste predicado, por sua vez, implicaria
na computabilidade da função caracterı́stica p(m, n) do teorema do problema da
parada (Teorema 4.6). Mas na própria demonstração do teorema, vimos que se
p(m, n) for computável, podemos construir uma contradição do tipo “a máquina
de Turing Mj para se e somente se Mj não para com entrada n” neste sistema.
O mı́nimo que devemos pedir de um sistema formal (dentro da lógica clássica)
é que ele seja consistente (não podemos derivar contradições), portanto, se U
for consistente, nada disto pode ocorrer. Portanto, U deve ser incompleto.

Assim, de um único conjunto finito de axiomas não é possı́vel provar, de


forma algorı́tmica, todas as sentenças verdadeiras da matemática, contrariando

43
fundamentalmente o Programa de Hilbert.

Outra consequência que tentaremos obter a partir da insolubilidade do pro-


blema da parada é a indecidibilidade em um sistema formal. Para isto, vamos
supor que exista um programa P que procurasse por demonstrações (ou por
refutações) de um problema bem formulado de uma teoria T , que vamos supor
ser consistente, axiomatizada e que contém um mı́nimo de aritmética.

Poderı́amos perguntar, por exemplo, se a Conjectura (forte) de Goldbach5


(vamos chamá-la de CG) possui demonstração, isto é, se CG ou ¬CG é teorema
de T . Na filosofia de Hilbert, todo problema poderia ser resolvido, em outras
palavras, todo problema pode ter seu valor verdade determinado. Assim, se CG
for verdadeira, P deveria responder “Sim”, caso contrário, P deveria responder
“Não”, significando que ele encontrou uma demonstração em T para CG ou
¬CG, respectivamente.

Podemos pensar agora não em CG, mas em uma sentença arbitrária. Seria
possı́vel sempre decidir se tal sentença possui demonstração em T ? O problema
é que Gödel demonstrou que existem sentenças que, apesar de verdadeiras, não
possuem demonstração ou refutação em um teoria como T 6 . Se, por acaso, CG
fosse uma dessas sentenças de Gödel, o programa P nunca pararia (já que nunca
encontraria uma demonstração de CG ou de ¬CG).Como verificamos, a insolu-
bilidade do problema da parada não nos permite verificar algoritimicamente se
um programa irá parar ou não. Assim, não podemos verificar de forma mecânica
se um dado problema qualquer possui demonstração ou não em T .

Dessa forma, se um sistema formal é incompleto, não deve existir um procedi-


mento de decisão para esta teoria, já que existirão proposições que não possuem
demonstração. Um programa que por acaso, recebesse uma sentença indecidı́vel
para verificar se ela possui demonstração, nunca terminaria sua execução.

Por fim, analisemos o problema da consistência. Até agora, obtemos que um


sistema formal para toda a matemática seria incompleto e não decidı́vel, já que
o problema da parada não permite que todos as proposições desta teoria sejam
demonstráveis. No entanto, tais resultados supõem que a teoria em questão
seja consistente, ou seja, não é possı́vel derivarmos contradições a partir de seus
axiomas e regras de inferência estabelecidos. Neste trabalho, não foi obtido
nenhum resultado sobre consistência de sistemas formais a partir do problema
da parada, mas é sabido que Gödel, em seu segundo teorema da incompletude,
demonstrou que, em um sistema formal axiomático, consistente e que contém a
aritmética, a sentença que exprime sua própria consistência não é demonstrável
dentro desta própria teoria.

5 Esta conjectura diz que todo número par maior do que 2 é a soma de dois números primos.
6 Relembrando que o primeiro teorema da incompletude de Gödel diz que se T é uma teoria
formal de primeira ordem, axiomatizada, consistente e contendo a aritmética, então existe um
sentença aritmética G tal que nem G nem a sua negação ¬G são teoremas de T [30].

44
6 Conclusão
Alguns fatos ocorridos ao longo da história do desenvolvimento da matemática e
da computação motivaram a escolha deste tema para este trabalho. Por exem-
plo, as ligações entre modelos matemáticos e a computação (teórica e fı́sica)
possuem implicações teóricas fundamentais, e contribuı́ram para o desenvolvi-
mento da Ciência da Computação. Vemos que apesar de o poder computaci-
onal de processamento e armazenamento de informação ser crescente, alguns
problemas nunca poderão ser resolvidos por computadores, devido a aspectos
referentes à sua própria natureza.

A busca por uma linguagem universal que nos possibilitasse alcançar todas
as verdades matemáticas, tal como Hilbert desejava através da axiomatização,
se mostrou inviável frente ao problema da parada, como mostrou-se neste tra-
balho. No entanto, a presença de indecidı́veis na matemática ocasionou o seu
desdobramento em diferentes cenários, possibilitando a coexistência de paisa-
gens matemáticas onde se estabelece ou não a veracidade destes indecidı́veis.

A noção do conceito de computabilidade capturado pelas máquinas de Tu-


ring reduz problemas matemáticos, como o cálculo de funções e decidibilidade
de predicados, em última análise, a uma simples manipulação de sı́mbolos –
como ler e escrever um sı́mbolo, mover uma cabeça de leitura, mudar de estado.

Da ideia intuitiva de procedimento efetivo, ou de algoritmo, extraı́mos o fato


de que certos problemas matemáticos podem ser solucionados mecanicamente,
isto é, apenas seguindo um conjunto de instruções. Tais instruções devem ser
precisas, não devem requerer criatividade do executor. Por isso, um determi-
nado conjunto de instruções deve ser facilmente diferenciado de outro conjunto
de instruções. Sob certo ponto de vista, se pudéssemos formar um conjunto de
todas as instruções ou programas possı́veis de existir, tais programas não pode-
riam ser arbritariamente próximos um dos outros, isto é, cada instrução deve
ser precisa.

Sendo assim, as máquinas de Turing operam com um conjunto finito de


sı́mbolos, chamado de alfabeto, e um conjunto finito de estados. Deste conjunto
finito de sı́mbolos, podemos formar uma quantidade infinita de palavras, que
são concatenações de tamanho arbitrário dos sı́mbolos do alfabeto. Neste tra-
balho, foi demonstrado que, a partir de qualquer alfabeto finito ou enumerável,
podemos construir uma infinidade enumerável de palavras.

A enumeração de Gödel é um método bastante conhecido de verificar a enu-


merabilidade de determinado conjunto e o faz exibindo uma forma de traduzir
objetos deste conjunto em números naturais. Cada palavra pode, portanto, ser
traduzida em um número natural. As máquinas de Turing podem ser descritas
como uma palavra oriunda de determinado alfabeto, portanto, deve haver tan-
tas máquinas de Turing como há números naturais.

O fato de o conjunto de todas as máquinas de Turing ser enumerável nos


permite concluir que deverão haver objetos matemáticos que não podem ser
computados. Este trabalho mostrou dois destes objetos: funções com domı́nio

45
e contradomı́nio em N e subconjuntos de palavras (os quais foram chamados de
linguagens). Foram exibidas formas de como formalizar a computabilidade de
uma função e como reconhecer uma linguagem por máquinas de Turing. Como
foi demonstrado que o conjunto de todas as funções f : N → N e o conjunto
de todas as linguagens (conjunto das partes do conjunto de todas palavras) são
não enumeráveis, não é possı́vel que todos os objetos destes conjuntos possam
ser computados, uma vez que cada MT possui a capacidade de resolver apenas
um problema.

Estes dois resultados nos mostram uma limitação fundamental: com a atual
noção formal de computabilidade, não poderı́amos resolver todos os proble-
mas matemáticos de forma algorı́tmica, já que a quantidade de problemas ma-
temáticos é muito maior do que nossos dispositivos mecânicos, mesmo supondo
que tais dispositivos possam continuar trabalhando por um tempo infinito. Este
fato tem como base a tese de Church, que afirma que aquilo que achamos que
deva ser calculável mecanicamente (noção intuitiva de computabilidade), se as-
sim o for, deve então ser calculável por alguma máquina de Turing.

Por fim, um exemplo clássico de não computabilidade é o problema da pa-


rada, que, conforme foi demonstrado, é insolúvel. Basicamente, este resultado
mostra que não existe um método geral para decidir se um dado programa para
ou não sob determinada entrada. Em outras palavras, não é possı́vel projetar
um algoritmo que decida sobre a parada ou não de qualquer outro algoritmo ao
receber determinada entrada. Este resultado está fortemente associado a auto-
referência que pode se construı́da utilizando-se das ideias da máquina universal
de Turing. Se o problema da parada fosse decidı́vel, então, seria permitido a
um programa saber sobre sua própria parada.

Sendo assim, se existisse um sistema formal a partir do qual toda verdade ma-
temática pudesse ser demonstrada, poderı́amos listar todas as provas possı́veis
e procurar por aquela que diz que um dado programa para ou que não para, nos
dando a possibilidade de decidir sobre a parada de qualquer programa. Como
o problema da parada é indecidı́vel, não deve existir um tal sistema formal com
essa propriedade. Uma das conclusões centrais deste trabalho diz, portanto, que
o problema da parada impede a completude de um sistema formal axiomatizado
com a caracterı́stica de provar todo problema formulado dentro deste sistema.

Esta incompletude significa, portanto, que há sentenças verdadeiras que não
são demonstráveis neste sistema. Então, dada um sentença qualquer, seria
possı́vel verificarmos mecanicamente se ela possui demonstração ou não? Foi
verificado que isto não é possı́vel, pois precisarı́amos saber sobre a parada ou
não de um determinado programa mediante uma entrada arbitrária (e não po-
demos saber isto sem inserir uma contradição na teoria). Assim, um sistema
formal incompleto não deve possuir um procedimento de decisão.

46
7 Trabalhos Futuros
7.1 Incompletude da Aritmética de Peano e o Problema
da Decisão da Lógica de Primeira Ordem
Os teoremas da incompletude de Gödel são considerados importantes resultados
da lógica. Uma de suas principais implicações está no fato de que as noções de
verdade e demonstrabilidade não se equivalem em determinados sistemas for-
mais axiomatizados. No caso da Aritmética de Peano, por exemplo, temos que
este sistema formal (supondo sua consistência) não consegue encerrar (demons-
trar) toda a verdade a respeito da teoria dos números.

Um caso particular para o problema da decisão em um sistema axiomático


formal qualquer é o problema da decisão para a lógica de primeira ordem.
Church e Turing provaram, de forma independente, que este problema particular
é insolúvel, ou seja, não existe um método geral pra decidir se dada sentença da
lógica de primeira ordem possui ou não uma demonstração dentro deste sistema.

A lógica de primeira ordem é um sistema formal importante dentro da ma-


temática. De fato, é uma linguagem onde muitos problemas podem ser formula-
dos. Uma consequência que se impõe em virtude da incompletude da Aritmética
de Peano e da insolubilidade do problema da decisão é que, uma vez que existem
sentenças verdadeiras que não possuem demonstração em AP, não podemos sa-
ber de antemão se determinado teorema possui ou não demonstração.

O estudo destes dois resultados contemplariam o objetivo inicial deste tra-


balho, donde, juntamente com as ideias apresentadas, se alcançaria, portanto,
um referencial teórico inicial importante a respeito da incompletude e indecidi-
bilidade em sistemas formais.

7.2 Aleatoriedade e Incompressibilidade


O trabalho de Chaitin a respeito da incompletude se baseia na medida da in-
formação e mostra que alguns fatos matemáticos não podem ser comprimidos
em uma teoria do sistema, e, posteriormente, que existe um número infinito de
teoremas matemáticos que não podem ser demonstrados a partir de um conjunto
finito de axiomas. Com relação aos fenômenos de incompletude e incomputa-
bilidade, Chatin reconfigura os resultados destas limitações, mostrando que os
limites de prova dentro de um sistema axiomático formal podem ser formulados
em termos do conceito de conteúdo informacional, ou complexidade conceitual.
Neste contexto, os limites de prova de um sistema axiomático formal são verifi-
cados pela relação entre o conteúdo informacional de seus axiomas e o mesmo
conteúdo do teorema que se deseja provar.

A medida da informação usada por Chaitin consiste no tamanho dos pro-


gramas, isto é, pela quantidade de informação que um computador necessita
para realizar uma determinada tarefa. Chaitin nota que, segundo o princı́pio
da navalha de Occam, que diz que a teoria mais simples que explica um dado
fato é a melhor, deverı́amos procurar pelo programa mais simples que resolve
determinada tarefa. No pior caso, é possı́vel que o menor programa capaz de

47
reproduzir um conjunto de dados possua o mesmo tamanho que este conjunto
de dados – seria aquele programa que apenas exibe o conjunto. Neste caso, este
conjunto de dados se mostraria não comprimı́vel, ou aleatório.

Desta ideia, se avança para uma definição da aleatoriedade baseada na me-


dida do tamanho do programa. Lembrando novamente do princı́pio da navalha
de Occam, Chaitin estabelece o conceito de complexidade conceitual como a
medida de complexidade de um programa baseada em seu tamanho, e deve ser
dada, portanto, pelo menor programa capaz de realizar determinada tarefa, o
qual foi chamado de programa elegante. No entanto, ter certeza de que esta-
mos de posse do menor programa escapa da racionalização matemática. Em
face desta abordagem, Chaitin anuncia o seguinte resultado: Se temos n bits de
axiomas, então não é possı́vel demonstrar que um programa é elegante se seu
tamanho supera n bits. A partir do fato de que não se pode sempre afirmar que
determinado programa é elegante, obtém-se imediatamente a insolubilidade do
problema da parada [9].

Os resultados desenvolvidos por Chaitin possuem desdobramentos interes-


santes com relação a teorias fı́sicas, biológicas e à filosofia da ciência e mostram
uma diferente abordagem em relação aos fenômenos da incompletude e incom-
putabilidade. Por isto, compreender futuramente tais resultados torna-se um
importante complemento conceitual a este trabalho.

Referências
[1] Barker-Plummer, David. Turing Machines. The Stanford Encyclopedia
of Philosophy (Winter 2012 Edition), Edward N. Zalta (ed.), URL =
http://plato.stanford.edu/archives/win2012/entries/turing-machine.
[2] Bolander, Thomas. Self-Reference. The Stanford Encyclopedia of Phi-
losophy (Fall 2012 Edition), Edward N. Zalta (ed.), URL =
http://plato.stanford.edu/archives/fall2012/entries/self-reference.
[3] Boolos, George S. Computabilidade e lógica. George S. Boolos, John P. Bur-
gess, Richard C. Jeffrey; tradução de Cezar A. Mortari - São Paulo: Editora
Unesp, 2012.
[4] Neri, Cassio; Cabral, Marco. Curso de análise real. 2 ed. V2.1 - Rio de
Janeiro, 2009.
[5] Carnielli, Walter; Epstein, Richard. Computabilidade, funções computáveis,
lógica e os fundamentos da matemática. 2 Edição - Revista. São Paulo: Edi-
tora UNESP, 2009.
[6] Chaitin, Gregory J. Computers, paradoxes and the foundations of mathema-
tics. American Scientist, vol. 90, 2002.
[7] Chaitin, Gregory J. The limits of reason. Scientific American, 2006.
[8] Chaitin, Gregory J. Randomness in arithmetic and the decline and fall of
reductionism in pure mathematics. In Thinking About Gödel and Turing -
Essays on Complexity, 1970-2007. World Scientific, 2007.

48
[9] Chaitin, Gregory J. Metamat! Em busca do Ômega. Tradução de Gita Guins-
burg - São Paulo: Perspectiva, 2009.
[10] Cutland, N. J. Computability: an introduction to recursive function theory.
Cambridge University Press, 1980.
[11] Filho, Edgard de Alencar. Iniciação à lógica matemática. São Paulo: Nobel,
2002.
[12] Fraenkel, A. A; Bar-Hillel, Y. Foundations of set theory. Amsterdam, Noth-
Holland, 1958.
[13] George, Alexander; Velleman, Daniel J. Philosophies of Mathematics.
Blackwell Publishers, 2002.
[14] Gödel, Kurt. On Formally Undecidable Propositions of Principia Mathe-
matica and Related Systems. 1931. Tradução de Martin Hirzel disponı́vel em
http://www.research.ibm.com/people/h/hirzel/papers/canon00-goedel.pdf

[15] Goldstein, Rebbeca. Incompletude: A prova e o paradoxo de Kurt Gödel.


Companhia das Letras, 2008.

[16] Hilbert, D. (Tradução de Sérgio Nobre). Problemas matemáticos. Re-


vista Brasileira de História da Matemática - Vol. 3 - n. 5 (abril/2003-
setembro/2003).
[17] Hopcroft, John E.; Ullman, Jeffrey D.; Motwani, Rajeev. Introdução à
teoria de autômatos, linguagens e computação. Rio de Janeiro: Elsevier,
2002.
[18] Horsten, Leon. Philosophy of Mathematics. The Stanford Encyclope-
dia of Philosophy (Summer 2012 Edition), Edward N. Zalta (ed.),
URL = http://plato.stanford.edu/archives/sum2012/entries/philosophy-
mathematics.
[19] Immerman, Neil. Computability and Complexity. The Stanford Encyclo-
pedia of Philosophy (Fall 2011 Edition), Edward N. Zalta (ed.), URL =
http://plato.stanford.edu/archives/fall2011/entries/computability.

[20] Kennedy, Juliette. Kurt Gödel. The Stanford Encyclopedia of Phi-


losophy (Winter 2012 Edition), Edward N. Zalta (ed.), URL =
http://plato.stanford.edu/archives/win2012/entries/goedel.
[21] Kleene, Stephen Cole. Introduction to Metamathematics. North Holland,
1952.
[22] Koellner, P. The Continuum Hypothesis, The Stanford Encyclope-
dia of Philosophy (Summer 2013 Edition), Edward N. Zalta (ed.),
URL = http://plato.stanford.edu/archives/sum2013/entries/continuum-
hypothesis/
[23] Krause, Décio. Introdução aos fundamentos axiomáticos da
ciência. Florianópolis, 2002. Versão digital disponı́vel em
http://www.cfh.ufsc.br/˜dkrause/Krause2002.pdf

49
[24] Lewis, Harry R.; Papadimitriou, Christos H. Elementos de teoria da com-
putação. 2. Edição - Porto Alegre: Bookman, 2000.
[25] Lima, Elon Lages. Curso de análise. Vol. 1 - 13. Edição – Rio de Janeiro:
IMPA, 2011.
[26] Lucchesi, Cláudio L. et al. Aspectos teóricos da computação. Rio de Janeiro:
Instituto de Matemática Pura e Aplicada, 1979.
[27] Mendelson, Elliot. Introduction to mathematical logic. 5. edição - CRC
Press, 2010.
[28] Mosterı́n, Jesús. Kurt Gödel: Obras Completas. Madrid: Alianza Editorial,
2006.
[29] Nagel, E. A prova de Gödel. Ernest Nagel e James Newman; [tradução de
Gita K. Guinsburg]. São Paulo: Perspectiva, 2012.
[30] Oliveira, A. J. F. O advento da matemática não-standard. Monografias da
Sociedade Paranaense de Matemática, Curitiba, n. 8, Abril de 1990.
[31] Sant’Anna, A. S. O que é um axioma. Barueri - São Paulo: Manole, 2003.

[32] Santiago, Regivan H. N. Computabilidade: os limites da computação. São


Carlos: SBMAC, 2012.

[33] Shapiro, Stewart. Thinking about mathematics - The philosophy of mathe-


matics. Oxford University Press, 2000.

[34] Shepherdson, J. C.; Sturgis, H. E. Computability of recursive functions. J.


Assoc. Computing Machinery 10, 217-55, 1963.
[35] Silva, Jairo José. O segundo problema de Hilbert. Revista Brasileira de
História da Matemática - Vol. 3 no 5 (abril/2003 - setembro/2003).
[36] Sipser, Michael. Introdução à teoria da computação. Editora Thomson Le-
arning, 2007.
[37] Turing, Alan M. On Computable Numbers, with an Applica-
tion to the Entscheidungsproblem. Proceedings of the London
Mathem. Society, 1937. Disponı́vel em Turing Digital Archive -
http://www.turingarchive.org/browse.php/B/12
[38] Zach, Richard. Hilbert’s Program. The Stanford Encyclopedia of
Philosophy (Fall 2003 Edition), Edward N. Zalta (ed.), URL =
http://plato.stanford.edu/archives/fall2003/entries/hilbert-program.

50

Você também pode gostar