Você está na página 1de 108

Notas em Matem

atica Aplicada 11
Editado por
Eliana X.L. de Andrade
Universidade Estadual Paulista - UNESP
Sao Jose do Rio Preto, SP, Brasil
Rubens Sampaio
Pontifcia Universidade Catolica do Rio de Janeiro
Rio de Janeiro, RJ, Brasil
Geraldo N. Silva
Universidade Estadual Paulista - UNESP
Sao Jose do Rio Preto, SP, Brasil
Sociedade Brasileira de Matematica Aplicada e Computacional
Notas em Matem

atica Aplicada
1. Restaura c ao de Imagens com Aplica coes em Biologia e Engenharia
Geraldo Cidade, Ant onio Silva Neto e Nilson Costa Roberty
2. Fundamentos, Potencialidades e Aplica coes de Algoritmos Evolutivos
Leandro dos Santos Coelho
3. Modelos Matem aticos e Metodos Numericos em

Aguas Subterraneas
Edson Wendlander
4. Metodos Numericos para Equa coes Diferenciais Parciais
Maria Cristina de Castro Cunha e Maria Amelia Novais Schleicher
5. Modelagem em Biomatematica
Joyce da Silva Bevilacqua, Marat Rakov e Claudia de Lello Courtouke
Guedes
6. Metodos de Otimiza c ao Randomica: algoritmos geneticos e simulated
annealing
Sezimaria F. Pereira Saramago
7. Matematica Aplicada `a Fisiologia e Epidemiologia
H.M. Yang, R. Sampaio e A. Sri Ranga
iv
8. Uma Introdu c ao `a Computa cao Quantica
Renato Portugal, Carlile Campos Lavor, Luiz Mariano Carvalho e
Nelson Maculan
9. Aplica c oes de Analise Fatorial de Correspondencias para Analise de Dados
Dr. Homero Chaib Filho, Embrapa
10. Modelos Matem aticos baseados em automatos celulares para
Geoprocessamento
Marilton Sanchotene de Aguiar, Fabia Amorim da Costa, Gra caliz
Pereira Dimuro e Antonio Carlos da Rocha Costa
11. Computabilidade: os limites da Computa cao
Regivan H. N. Santiago e Benjamn R. C. Bedregal
12. Modelagem Multiescala em Materiais e Estruturas
Fernando Rochinha e Alexandre Madureira
13. Modelagem em Biomatematica
1 - Modelagem matematica do comportamento eletrico de neuronios e
algumas aplica c oes
2 - Redes complexas e aplica coes nas Ciencias
3 - Possveis nveis de complexidade na modelagem de sistemas biologicos
Coraci Malta, 1 - Reynaldo D. Pinto, 2 - Jose Carlos M. Mombach e 3 -
Henrique L. Lenzi, Waldemiro de Souza Romanha e Marcelo Pelajo-Machado
14. A logica na constru c ao dos argumentos
Angela Cruz e Jose Eduardo de Almeida Moura
COMPUTABILIDADE: OS LIMITES DA
COMPUTAC

AO
Regivan H. N. Santiago - UFRN
regivan@dimap.ufrn.br
Benjamn R. C. Bedregal - UFRN
bedregal@dimap.ufrn.br
Sociedade Brasileira de Matematica Aplicada e Computacional
Sao Carlos - SP, Brasil
2004
vi
Coordena c ao Editorial: Vera Lucia da Rocha Lopes
Coordena c ao Editorial da Serie: Geraldo Nunes Silva
Editora: SBMAC
Impresso na Graca: Epece Graca
Capa: Matheus Botossi Trindade
Patrocnio: SBMAC
Copyright c _2004 by Regivan H. N. Santiago and Benjamn R. C. Bedregal
Direitos reservados, 2004 pela SBMAC. A publica cao nesta serie nao impede o autor
de publicar parte ou a totalidade da obra por outra editora, em qualquer meio, desde
que fa ca cita c ao `a edi c ao original.
Cataloga cao elaborada pela Biblioteca do IMECC/UNICAMP.
Santiago, Regivan H. N.
Computabilidade: os limites da Computa cao - Sao Carlos, SP : SBMAC, 2004
xiv, 94 p. - (Notas em Matematica Aplicada; 11)
ISBN 85-86883-20-4
1. Computabilidade. 2. Fun coes Recursivas Parciais. 3. Teoria da Computa cao.
4. Procedimentos efetivos. I. Santiago, Regivan H. N. II. Bedregal, Benjamn R. C.
III. Ttulo. VI. Serie
CDD - 511.3
Para Adriane e Ivanosca.
Prefacio
Entendendo por computa c ao tudo o que os computadores podem realizar, entao
e necesario denir precisamente o que e um computador. Essa resposta poderia
ser dada em termos de hardwares e tecnologias, mas deve haver o cuidado para
que nao haja uma limita c ao `a tecnologia do momento, pois nessa deni cao deverao
coexistir os primeiros computadores, as calculadoras, os supercomputadores, ate
os computadores que estao por existir. Ou seja, e necessario unicar essas carac-
tersticas essenciais e comuns de TODOS os possveis computadores e chegar a um
modelo matematico capaz de realizar qualquer tarefa realizavel nos computadores
reais. Com isso e possvel denir precisamente o que e uma tarefa executada por
qualquer computador, i.e. uma tarefa computavel, dando, assim, origem `a no cao
de computabilidade. A teoria da computabilidade procura responder a partir
desses modelos questoes como: o que, em princpio, os computadores podem fazer?
(sem qualquer restri c ao de espa co, tempo, nem recurso) e quais s ao as inerentes
limitac oes te oricas?, i.e. o que pode e o que n ao pode ser feito por um computador?
ou qual a classe de func oes que um computador consegue implementar?
A computa c ao em cada um desses modelos implementa uma no cao do que
vem a ser um procedimento efetivo, i.e. uma regra mecanica, ou um metodo
automatico, ou um programa para executar alguma opera cao matematica (c.f.
Cutland [8]). Um exemplo de procedimento efetivo e o algoritmo da divisao de
Euclides, que demonstra que os gregos antigos ja se preocupavam com esse tipo de
procedimento. Mas so em 1936 os matematicos Alan Turing e Alonzo Church, de
maneira independente, propuseram formaliza coes (modelos) distintas para esse
conceito. Essas e outras formula coes, que vieram posteriormente, mostraram-se
equivalentes, ja que computam a mesma classe de fun coes, a saber, a classe das
fun coes recursivas parciais que e uma sub-classe pr opria da classe de fun coes
sobre os naturais. Isso signica que todos esses modelos tem o mesmo poder com-
putacional e que a no c ao de computa cao limita-se a essa classe de fun coes. A
correspondencia entre procedimentos efetivos e esses modelos formais e conhecida
como tese de Church-Turing.
O minicurso apresenta 3 classes de modelos de computa cao que captam aspec-
tos distintos da computa c ao atual, a saber: (1) RAM: Random Access Machines
que capta o aspecto dos hardwares; (2) Programas While, que capta o aspecto das
linguagens de programa c ao Software e (3) Fun coes recursivas parciais, que
captam o aspecto funcional da computa cao. Mostra-se a equivalencia entre essas
ix
x
classes, fortalecendo a validade da Tese de Church-Turing.
A segunda etapa do curso, descrita no captulo 6, apresenta o conceito de pro-
gramas universais, demonstrando que existem modelos, em cada uma dessas
classes, capazes de abstrair as atuais arquiteturas von Neumann. Esses programas
universais modelam os computadores de proposito geral, i.e. computadores pro-
gramaveis que simulam qualquer programa de proposito especco.
A terceira etapa, apresentada no captulo 7, introduz a no cao de procedimento
de decisao, que sao procedimentos que vericam se uma propriedade e satisfeita
ou nao por um dado de entrada. Esses procedimentos sao divididos em tres classes:
procedimentos decidveis, semi-decidveis e indecidveis. A primeira e a segunda
classe sao sub-classes dos procedimentos efetivos. Ao passo que a terceira classe
e disjunta da primeira e da segunda. Dentre os problemas pertencentes `as duas
ultimas classes encontram-se os problemas da parada e da divergencia, um
sendo a nega c ao do outro, e ambos pertencentes `a teoria da programa cao, onde
o primeiro e semi-decidvel e o outro completamente indecidvel.
A quarta e ultima etapa, contida no captulo 8, apresenta, de maneira sucinta,
alguns topicos que nao foram abordados neste texto, indicando uma bibliograa
suplementar e a import ancia deles no contexto da computa cao. Dentre esses topicos,
destacamos, por enquanto, as questoes de paralelismo, computabilidade no contnuo
(ja que a computabilidade vista no minicurso sera sobre conjuntos contaveis) e
computa c oes com oraculos.
Agradecimentos
- Aos alunos de gradua c ao em Engenharia da Computa cao da UFRN que cur-
saram a disciplina Computabilidade no semestre 2004-01 e aos alunos de pos-
gradua c ao em Sistemas e Computa cao, da mesma universidade, que cursam a dis-
ciplina Teoria da Computa c ao no mesmo semestre, pois ao serem submetidos a esse
livro contriburam com varias corre coes; e
-
`
A SBMAC pela oportunidade que nos foi dada.
xi
Conte udo
1 Pre-requisitos Matematicos 1
1.1 Conjuntos, rela c oes e fun coes . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Cardinalidade e enumerabilidade . . . . . . . . . . . . . . . . 2
1.1.2 Famlias e produto cartesiano generico . . . . . . . . . . . . . 3
1.1.3 Produto cartesiano e tuplas . . . . . . . . . . . . . . . . . . . 5
2 RAM: Maquinas de Acesso Rand omico 7
2.1 Arquitetura da RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.1 Estrutura de memoria das RAM . . . . . . . . . . . . . . . . 8
2.1.2 Programas RAM . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 Considera c oes nais . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 Fun coes Recursivas Parciais 16
3.1 Fun c oes basicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2 Produto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3 Composi c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4 Operador de recursao primitiva . . . . . . . . . . . . . . . . . . . . . 22
3.5 Predicados e decidibilidade . . . . . . . . . . . . . . . . . . . . . . . 26
3.6 Um pouco de recursao primitiva . . . . . . . . . . . . . . . . . . . . 27
3.7 Operador de minimaliza cao . . . . . . . . . . . . . . . . . . . . . . . 28
3.7.1 A fun c ao de Ackermann . . . . . . . . . . . . . . . . . . . . . 31
3.8 Um pouco de recursao . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.8.1 Recursao por curso de valores . . . . . . . . . . . . . . . . . . 32
3.8.2 Soma limitada e produto limitado . . . . . . . . . . . . . . . 32
3.8.3 Minimaliza c ao limitada . . . . . . . . . . . . . . . . . . . . . 33
3.8.4

Algebra da decidibilidade e quantica cao limitada . . . . . . 34
3.8.5 Estendendo a minimaliza cao limitada . . . . . . . . . . . . . 35
3.9 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.10 Considera c oes nais . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
xiii
xiv
4 Linguagem de programa cao While 38
4.1 Sintaxe da linguagem While . . . . . . . . . . . . . . . . . . . . . . 39
4.2 Semantica informal de While . . . . . . . . . . . . . . . . . . . . . . 41
4.3 Semantica formal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.4 Fun c oes While-computaveis . . . . . . . . . . . . . . . . . . . . . . 45
4.5 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.6 Considera c oes nais . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5 Tese de Church-Turing 53
5.1 Procedimentos efetivos e algoritmos . . . . . . . . . . . . . . . . . . 53
5.2 Tese de Church-Turing . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.3 Considera c oes nais . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6 Numera cao de Godel e Programas universais 59
6.1 Enumera c ao efetiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.2 N umeros primos e algumas fun coes recursivas . . . . . . . . . . . . . 60
6.3 Numera c ao de Godel . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.3.1 Numera c ao de programas . . . . . . . . . . . . . . . . . . . . 65
6.3.2 Numera c ao de fun coes computaveis . . . . . . . . . . . . . . . 69
6.4 Programas universais . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.4.1 Fun c oes e programas universais . . . . . . . . . . . . . . . . . 71
6.5 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.6 Considera c oes nais . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7 Problemas Nao Computaveis 77
7.1 Computabilidade e decibilidade . . . . . . . . . . . . . . . . . . . . . 78
7.2 O problema da parada para maquinas RAM . . . . . . . . . . . . . . 79
7.3 Redu c ao de um problema indecidvel ao problema da parada . . . . 81
7.4 Semi-decibilidade e divergencia . . . . . . . . . . . . . . . . . . . . . 82
7.5 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7.6 Considera c oes nais . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
8 Assuntos nao abordados 85
8.1 Paralelismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
8.2 Computabilidade sobre conjuntos nao contaveis . . . . . . . . . . . . 86
8.3 Oraculos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Bibliograa 89
Captulo 1
Pre-requisitos Matematicos
1.1 Conjuntos, relacoes e funcoes
Esta se c ao deve ser lida rapidamente e revista posteriormente caso seja necessario.
Ela se prop oe a ser uma introdu cao da linguagem matematica utilizada neste texto.
Observe cuidadosamente as deni coes de fun cao, produto cartesiano e tuplas dadas
aqui. Pressupoe-se familiaridade com a teoria elementar de conjuntos e os conceitos
de pertinencia , uniao de conjuntos , intersec cao de conjuntos , comple-
mento A, conjunto vazio , inclusao de conjuntos A B, e inclusao propria
de conjuntos A B.
Se X e Y sao conjuntos, entao o conjunto X Y = (x, y) : x X, y Y
chama-se produto cartesiano de X e Y , e e o conjunto de todos os pares orde-
nados, (x, y), formados a partir de X e Y . Um subconjunto R X Y chama-se
rela cao entre X e Y . Observe que se X = ou Y = , entao X Y = , nesse
caso como e unico, entao a rela cao chama-se rela cao vazia. .
O domnio de uma rela c ao R, escrito como dom R, e o conjunto x X :
(x, y) R, para algum y Y . Se x dom R, entao R esta denida para x, o
que pode ser escrito como: R(x) . Se x , dom R, entao R nao esta denida
para x, o que pode ser designado por: R(x) . A imagem de R e o conjunto
im(R) = y Y : (x, y) R, para algum x X. A imagem direta de um
subconjunto A X e o conjunto R(A) = y Y : (x, y) R, para algum x A.
Assim, R(dom R) = im(R). A restri cao de R `a A, onde A X, denotada por
R [ A, e a rela c ao (x, y) R : x A. A rela cao inversa de R, designada por R
1
,
e o conjunto de pares ordenados (y, x) : (x, y) R.
Uma rela c ao f X Y e uma fun cao parcial de X em Y , representada por
f : X Y , se para cada x dom f existe um unico y Y , tal que (x, y) f.
Se, alem disso, domf = X, entao a fun cao f chama-se fun cao total. Dessa forma,
uma fun c ao total e parcial, mas a recproca nao e valida.
1.1. CONJUNTOS, RELAC

OES E FUNC

OES 2
f e uma fun cao injetora, se f(x) = f(x

), entao x = x

. Ou seja, dois objetos


distintos sempre estarao relacionados, via f, com dois elementos distintos de Y . f
e uma fun cao sobrejetiva, se im(f) = Y . Assim, uma fun cao e injetora se a sua
relac ao inversa f
1
e uma fun cao parcial e e sobrejetiva se dom f
1
= Y . Uma
fun c ao total injetora e sobrejetora chama-se bije cao ou fun cao bijetora de X em
Y .
O conjunto de todas as fun coes totais de X para Y e um subconjunto do
conjunto potencia T(X Y ), e sera denotado por Y
X
.
Proposi cao 1.1 Se f : X Y e uma func ao total, ent ao: (1) se X ,= ,ent ao
Y ,= ; e (2) se X = , ent ao f = (i.e. f = X Y = ).
Prova: Suponha que f : X Y e uma fun cao total. (1) Se X nao e vazio,
entao existe pelo menos um elemento em X. Portanto, pela deni cao de fun cao
total deve existir pelo menos y Y tal que (x, y) f. Logo Y ,= . (2) Se X = ,
entao X Y = . Logo, o unico subconjunto de X Y que satisfaz a deni cao
de fun c ao total e o conjunto . Note, que satisfaz a deni cao de fun cao total por
vacuidade, i.e. nao possui qualquer par ordenado (x, y) que viole a deni cao de
fun c ao total.
Corolario 1.2 Existe uma unica func ao de em qualquer conjunto A; a saber o
conjunto vazio (tambem chamado fun c ao vazia).
Proposi cao 1.3 N ao existe func ao total de A em , para A ,= .
Prova: Para existir uma fun cao total f de A em , onde A ,= , entao e suciente
que para cada a A, exista um unico x tal que (a, x) f. O que e absurdo.
Corolario 1.4 Para todo conjunto A, A

= , e para todo conjunto B ,= ,

B
= .
1.1.1 Cardinalidade e enumerabilidade
Um dos resultados da teoria dos conjuntos de George Cantor foi a deni cao da
cardinalidade ou tamanho de um conjunto. Ingenuamente, a cardinalidade ou
tamanho de um conjunto e a quantidade de elementos que ele possui. Portanto
os conjuntos a, a, b, a, b, c, . . . sao conjuntos, respectivamente, com 1, 2, 3,
. . . elementos, e portanto possuem cardinalidade 1, 2, 3, . . . . Entretanto, isso faz
sentido para conjuntos nitos, onde se pode associar a cada conjunto um n umero
natural e dessa forma concluir que os conjuntos que possuem a mesma quantidade
de elementos possuem o mesmo tamanho; i.e. a mesma cardinalidade. Entretanto,
como estender esse conceito para conjuntos innitos? Cantor propos o seguinte:
1.1. CONJUNTOS, RELAC

OES E FUNC

OES 3
Deni cao 1.5 (Cardinalidade, Conjuntos contaveis e incontaveis) Dado
dois conjuntos A e B. Se existe uma bijec ao entre A e B, ent ao diz-se que A
e B possuem a mesma cardinalidade. Se A = ou existe uma bijec ao entre A e
o conjunto 0, . . . , m (para m 0), ent ao A chama-se conjunto nito. Quando
existe uma bijec ao entre A e N, o conjunto A e chamado conjunto enumer avel.
Se A e nito ou enumer avel, ent ao A e dito um conjunto cont avel, e se A n ao
for um conjunto cont avel, ent ao ele chama-se conjunto incont avel.
Exemplo 1.6 Os conjuntos a, b, c e x N : x = 2 K para algum k N s ao
conjuntos cont aveis, ao passo que R n ao e um conjunto cont avel.
1.1.2 Famlias e produto cartesiano generico
Existem ocasioes em que a imagem de uma fun cao e tida como mais importante
do que a propria fun c ao. Quando este e o caso, a terminologia e a nota cao, ambas,
passam por radicais altera c oes. Paul R. Halmos [14] p.55.
Suponha, que x e uma fun cao total do conjunto I para um conjunto X. Se neste
caso quem estara em evidencia e a imagem de x em vez da fun cao em si, entao serao
necessarias algumas terminologias novas. Um elemento i I se chamara ndice,
I sera chamado conjunto de ndices, o contradomnio de x sera dito conjunto
indexado, a fun c ao em si sera denominada famlia, e o valor da fun cao x para
cada ndice i I, recebera o nome: termo da famlia e sera indicado por x
i
.
Exemplo 1.7 Uma seq uencia s : 1, . . . , n R e um bom exemplo de uma
famlia, onde I = 1, . . . , n, R est a indexado por I e s
i
e um termo da seq uencia
s.
Um inaceitavel mas geralmente admitido caminho de comunicar a nota cao e
indicar a enfase (no contradomnio) e falar de uma famlia x
i
em X, ou de uma
famlia x
i
quaisquer que possam ser os elementos de X; quando necessario o con-
junto de ndices I e indicado por alguma expressao entre parenteses como (i I).
Paul R. Halmos [14] p.56. Duas outras alternativas de nota cao sao x
i

iI
e
x
i
: i I.
Dois conceitos bem simples porem muito importantes sao o de famlia constante
e o de famlia de conjuntos.
Deni cao 1.8 Dados dois conjuntos I e X, e um elemento x X. Uma famlia
constante e uma famlia c : I X, tal que c
i
= x, para todo i I.
Deni cao 1.9 Uma famlia de subconjuntos de X e uma famlia da forma
A : I T(X). Seguindo as observac oes acima, pode-se, ent ao, designar uma
famlia de subconjuntos como A
i

iI
ou A
i
: i I.
1.1. CONJUNTOS, RELAC

OES E FUNC

OES 4
Exemplo 1.10 Sejam os conjuntos I = 1, 2, 3 e T(a, b, c), ent ao a func ao
A : I T(a, b, c), onde: A(1) = a, b, A(2) = , e A(3) = c, e uma famlia
de conjuntos. Observe que para o conjunto de ndices J = u, v, x, a famlia
B : J T(a, b, c), onde: B(u) = a, b, B(v) = , e B(x) = c e uma famlia
diferente de A, porem equivalente. Infelizmente essa equivalencia n ao ser a forma-
lizada nesse texto.
Deni cao 1.11 Se A
i

iI
e uma famlia de subconjuntos de X, i.e.
A : I T(X), a uni ao da imagem da famlia e chamada a uni ao da famlia
A; a notac ao padr ao para isso e:
_
iI
A
i
ou
_
i
A
i
.
Dessa maneira, a uni ao de uma famlia de subconjuntos de X e tambem um sub-
conjunto de X.
A linguagem das famlias pode ser utilizada para generalizar a no cao de produto
cartesiano.
O produto cartesiano de dois conjuntos X e Y , foi denido como o conjunto
de todos os pares ordenados (x, y) com x X e y Y . Existe uma natural
correspondencia um-a-um entre este conjunto e um certo conjunto de famlias. De
fato, considere qualquer par particular nao ordenado a, b, com a ,= b, e considere o
conjunto Z de todas as famlias z, indexadas por a, b, tal que z
a
X e z
b
Y . Se a
fun c ao f de Z para XY e denida por f(z) = (z
a
, z
b
), entao f e a correspondencia
um-a-um prometida. A diferen ca entre Z e XY e uma mera questao de nota cao.
A generaliza c ao de produtos cartesianos generaliza Z mais do que o proprio XY .
(Como conseq uencia ha um pequeno atrito de terminologia na passagem do caso
especial para o geral. Nao ha como evita-lo; e com o a linguagem matematica e
usada atualmente). A generaliza cao agora e direta. Paul R. Halmos [14] p.58.
Deni cao 1.12 Seja A
i

iI
e uma famlia de subconjuntos de X, i.e. uma func ao
A : I T(X), o produto cartesiano da famlia A, denotado por
iI
A
i
ou

i
A
i
, e o conjunto de todas as famlias
x : I

iI
A
i
, tal que x
i
A
i
. Dessa forma, fazendo U =

iI
A
i
, o pro-
duto cartesiano
i
A
i
e um subconjunto do conjunto de todas as func oes totais de I
em U, i.e.
i
A
i
U
I
.
Produto cartesiano e exponencia cao de conjuntos. Se X e Y sao conjuntos,
considere a famlia constante de conjuntos c : Y T(X), tal que o valor constante
e A, onde A X, i.e. c
y
= A, para todo y Y , entao

yY
c
y
= A. Por deni cao,
o produto cartesiano
yY
c
y
e o conjunto de todas as famlias f : Y A, tal
que f
y
A, ou mais precisamente, o produto cartesiano, nesse caso, e o conjunto
de todas as fun c oes totais de Y em A, i.e. A
Y
. Portanto, quando a famlia de
conjuntos c : Y T(X) e constantemente igual a A, entao o produto cartesiano
1.1. CONJUNTOS, RELAC

OES E FUNC

OES 5
dessa famlia coincide com o conjunto de todas as fun coes totais de Y em A.
Observe que para dois conjuntos quaisquer X e Y , quando Y = , entao existe
apenas uma e somente uma fun cao de Y em X; ou seja a fun cao vazia , o que
signica que X

= . Portanto, se o conjunto de ndices e vazio, i.e. se I = ,


entao qualquer que seja a famlia de conjuntos A : I T(X) ela sera uma fun cao
pertencente ao conjunto T(X)

= . Mais especicamente, observe que e igual


a qualquer fun c ao f : , portanto a imagem de A que e um subconjunto do
contradomnio T(X) so pode ser , e portanto a uniao

iI
A
i
= . Assim, uma
famlia x : I

iI
A
i
, na verdade sera uma fun cao da forma x : , que sera
igual a . Logo, o produto cartesiano
i
A
i
que e o conjunto de todas as famlias
x : I

iI
A
i
, na verdade e o conjunto f : que e igual a

, e por
conseguinte igual a . Em resumo, o produto cartesiano quando o conjunto de
ndices e vazio e igual ao conjunto unitario .
1.1.3 Produto cartesiano e tuplas
Se I e um par u, v, com u ,= v, e A
i

iI
e uma famlia de conjuntos, entao e
costume identicar

iI
A
i
com o produto cartesiano A
u
A
v
. Observe que os
elementos de

iI
A
i
sao fun coes, ao passo que os elementos de A
u
A
v
sao pares
ordenados (p, q). Tem-se, portanto, duas formas de representar um par ordenado,
quer como um objeto da forma (p, q) ou como uma fun cao x : u, v

i{u,v}
A
i
.
Seguindo a generaliza c ao do produto cartesiano, vista anteriormente, pode-se entao
pensar numa tripla ordenada como sendo uma famlia x : u, v, w

i{u,v,w}
A
i
,
e portanto um elemento do produto cartesiano
i{u,v,w}
A
i
, onde A : u, v, w
T(X) e uma famlia de conjuntos. Nesse caso denota-se uma tripla ordenada
x : u, v, w

i{u,v,w}
A
i
, como (x
u
, x
v
, x
w
). Observe que se o conjunto de
ndices e igual `a 1, 2, 3 obtem-se a nota cao comumente usada: (x
1
, x
2
, x
3
).
Semelhantemente, pode-se denir tuplas ordenadas, i.e. quadruplas ordenadas,
quntuplas ordenadas, etc. como famlias cujos conjuntos de ndices sao tuplas nao
ordenadas, i.e. triplas nao ordenadas, quadruplas nao ordenadas, etc.
Um caso particular da generaliza cao do produto cartesiano diz respeito a si-
tua c ao em que o conjunto de ndices e um conjunto unitario, digamos I = v.
Nesse caso, a imagem de uma famlia de conjuntos A : I T(X) e um conjunto
unit ario A
v
= B, para B X. Em outras palavras, cada famlia esta associada
`a um unico subconjunto de X. Alem disso,

iI
A
i
= A
v
, e o produto
i
A
i
que
e o conjunto de todas as famlias x : I

iI
A
i
, onde x
i
A
i
, e o conjunto de
todas as fun c oes da forma f : v A
v
. Dessa forma, e possvel construir uma
correspondencia biunvoca entre A
v
e o produto cartesiano
iI
A
i
, e suciente
estabelecer a correspondencia entre cada k A
v
, e a fun cao f
k
: v A
v
, onde
f
k
(v) = k. Assim, cada elemento de A
v
pode ser visto como uma fun cao de
iI
A
i
e vice versa. Logo pode-se aplicar um abuso de linguagem e confundir A
v
com

iI
A
i
, onde os elementos de A
v
sao vistos como tuplas de tamanho 1. Observe
1.1. CONJUNTOS, RELAC

OES E FUNC

OES 6
que essa constru c ao justica a visao de um elemento de um certo conjunto como
sendo uma fun c ao.
Outro caso particular, e o caso em que o conjunto de ndices e . Esse caso ja
foi comentado anteriormente, e portanto
i
A
i
= . Dessa forma, a ideia de tupla
vazia, que alguns livros representam como se (), na verdade e formalizada pelo
conjunto . Assim nos casos em que a tupla (x
1
, . . . , x
n
) for vazia, por exemplo em
situa c oes de vaquidade, i.e. n = 0, as nota coes (x
1
, . . . , x
n
) e f(x
1
, . . . , x
n
) podem
ser entendidas como () e f(). O leitor deve observar que existe uma diculdade
de padroniza c ao notacional para esses casos, por exemplo f() e na verdade f()
O conhecido produto cartesiano m-ario sobre um conjunto X qualquer, e
comumente denido como X
m
= (x
1
, . . . , x
m
) : x
i
X 1 i m. Pode-se
recuperar essa deni c ao atraves do conceito de famlias da seguinte maneira: Um
n umero natural m pode ser visto como o conjunto de todos os seus antecessores.
Por exemplo 0 = , 1 = 0, 2 = 0, 1, 3 = 0, 1, 2, etc. Assim, tomando um
n umero natural como um conjunto, pode-se entao pensar num n umero natural como
um conjunto de ndices I. Alem disso, como as componentes de um produto m-
ario (m 1) sao elementos do mesmo conjunto X, entao o produto cartesiano em
questao e o produto
y{0,...,m1}
c
y
, onde c : 0, . . . , m 1 T(X) e a famlia
de conjuntos constantemente igual `a X. Note que, segundo o que foi comentado,
o produto
y{0,...,m1}
c
y
coincide com o conjunto de todas as fun coes totais de
0, . . . , m1 em X, ou seja X
m
. Para o caso em que m = 0, i.e. m = , X
0
=
(veja os comentarios precedentes). Logo, a linguagem de famlias formaliza tambem
a no c ao de produto cartesiano m-ario, para m 0, sobre um conjunto X.
O conceito de tuplas innitas generaliza-se diretamente do precedente, bastando
para isso tomar um conjunto innito de ndices. Observe que a nota cao de tuplas
(x
1
, . . . , x
n
), e (x
1
, . . . , x
n
, . . . ), tem um limite, pois quando o conjunto de ndices
I nao e contavel essa nota c ao nao tem como expressar as componentes da tupla,
visto que a quantidade de componentes e maior do que se pode escrever. Portanto,
a nota c ao de famlias, embora um pouco rebuscada, e uma nota cao mais geral
para expressar os conceitos de produto cartesiano e tuplas ordenadas. Entretanto,
algumas bibliograas utilizam a nota cao (x
i
)
iI
para recuperar a nota cao usual de
tuplas para um conjunto de ndices qualquer.
Captulo 2
RAM: Maquinas de Acesso
Randomico
Por questoes de eciencia, os computadores modernos permitem que os dados arma-
zenados na memoria sejam acessados de maneira aleatoria, i.e. nao e necessario que
eles sejam acessados de maneira seq uencial (um apos o outro). Para isso, e atribudo
`a cada dado um endereco de mem oria que quando localizado pelo computador faz
com que os mesmos tornem-se disponveis para a computa cao. Matematicamente,
poderia-se pensar na memoria de um computador digital real como um vetor:
M : 0, . . . , n 1 0, 1
+
,
onde 0, 1
+
e o conjunto de seq uencias nitas nao nulas de 0s e 1s e.g.
0, 1, 01, 101, 001100111 0, 1
+
que representam as informa coes no formato
digital e os ndices 0, . . . , n1 representam os endere cos de memoria. Essas cadeias
sao chamadas strings binarias, e sao uma dentre muitas formas de representar a
informa c ao.
O nome maquina de acesso randomico, RAM, representa o fato que os
antigos modelos de computa c ao nao possuam acesso aleatorio; eles eram baseados
em tas seq uenciais (e.g. m aquinas de Turing) ou tinham natureza funcional (e.g.
-calculus). Como ponto de partida, considera-se um modelo que em muito lembra
uma m aquina assembly, ele e uma variac ao do modelo RAM proposto em Smith
[27]. Ao contrario de uma maquina assembly real, ele possui instru coes muito
simples, pois objetiva-se simplicar as provas matematicas. Entretanto o poder de
computa c ao dessa m aquina sera o mesmo de qualquer maquina assembly concreta.
2.1 Arquitetura da RAM
O leitor pode perceber que no modelo vetorial de computador descrito acima, a
quantidade de memoria e nita. Entretanto, para que se possa ter uma teoria do
2.1. ARQUITETURA DA RAM 8
que e comput avel em qualquer maquina, e necessario que ela seja desenvolvida para
computadores com qualquer quantidade n de memoria. Dessa forma, daqui por
diante, um computador tera o seguinte aspecto vetorial:
M : N 0, 1
+
,
Isso pode ser ingenuamente interpretado como: nao importa o quanto se au-
mente a capacidade de memoria de um computador, os fatos estabelecidos na teoria
da computabilidade continuarao valendo para o computador com memoria esten-
dida. Outro ponto que precisa ser observado, e que sera considerado tanto memoria
primaria como secundaria (tapes, HDs, CDs, DVDs, etc.) como simplesmente
memoria, pois o que se quer modelar sao: dados e computa coes sobre esses dados,
nao importando a maneira como eles estao armazenados.
2.1.1 Estrutura de memoria das RAM
Antes de denir a estrutura da memoria da RAM, vale observar que como as strings
binarias, citadas acima, sao apenas uma das varias maneiras de representar a in-
forma c ao, e possvel encontrar uma maneira equivalente que seja mais intuitiva para
representa-la. Essa equivalencia e dada pela conversao de base entre os sistemas de
numera c ao binaria e decimal. Assim, uma string binaria nada mais sera do que um
n umero natural, e o modelo vetorial de computador tera o seguinte aspecto:
M : N N (2.1)
Maquina de acesso rand omico RAM: Possui uma quantidade enumeravel
de registradores R
1
, R
2
, . . . . Cada registrador armazena um n umero natural. Gra-
camente, pode-se pensar na memoria da RAM da seguinte maneira:
Registrador R1 R2 R3 . . .
Conte udo 19 2 165 . . .
Ou seja, pode-se pensar na RAM como uma fun cao bijetora
M

: Reg N,
onde Reg = R
1
, R
2
, . . . , R
n
, . . . .
2.1.2 Programas RAM
Os programas RAM sao abstra coes de programas na linguagem assembly. Em outras
palavras, a linguagem de programa cao da RAM e um conjunto bastante reduzido
de instru c oes basicas de uma linguagem assembly real. Cada programa RAM e
uma seq uencia nita de instru coes, que referencia apenas uma quantidade nita de
registradores.
2.1. ARQUITETURA DA RAM 9
Deni cao 2.1 Sejam = N0, N1, N2, . . . um conjunto enumer avel de r otulos e
R = R1, R2, . . . um conjunto enumer avel de nomes de registradores. O con-
junto das instru coes RAM, 1, e o menor conjunto cujos elementos s ao denidos
como segue: para todo i N,
1. INC Ri incrementa o conte udo do registrador R
i
em uma unidade;
2. DEC Ri decrementa o conte udo do registrador R
i
em uma unidade. Se o
conte udo de Ri e 0, o valor permanece inalterado;
3. CLR Ri coloca 0 no registrador R
i
;
4. Ri <- Rj substitui o conte udo do registrador R
i
pelo conte udo do registra-
dor R
j
. O conte udo de R
j
permanece inalterado.
5. JMP Nia executa a pr oxima instruc ao com r otulo Ni, imediatamente pre-
cedente a instruc ao atual. Caso Ni n ao seja um r otulo do programa, ent ao a
m aquina p ara

;
6. JMP Nib executa a pr oxima instruc ao com r otulo Ni, imediatamente pos-
terior a instruc ao atual. Caso Ni n ao seja um r otulo do programa, ent ao a
m aquina p ara

;
7. Rj JMP Nia executa a instruc ao JMP Nia, caso o conte udo do registrador
R
j
seja 0;
8. Rj JMP Nib executa a instruc ao JMP Nib, caso o conte udo do registrador
R
j
seja 0;
9. CONTINUE faz nada.
10. Se Nj e m 1, ent ao Nj m 1.
Deni cao 2.2 Um programa RAM e uma seq uencia nita de instruc oes RAM

Essa e uma das mudan cas no modelo RAM em rela c ao ao proposto em Smith [27], pois naquele
modelo um programa RAM n ao admite jumps para r otulos inexistentes.

Observe que esse tipo de desvio permite que se tenha r otulos repetidos no mesmo programa,
e os jumps desviar ao a execu c ao para o r otulo mais pr oximo (acima ou abaixo, dependendo).
Isso permitir a a jun c ao de programas RAM sem a preocupa c ao com os r otulos das instru c oes, pois
e possvel justapor programas que contenham os mesmos r otulos.

Aqui, um programa RAM e apenas uma seq uencia de instru coes b asicas. Em outras varia c oes
da RAM, exige-se tambem que cada instru c ao JMP (condicional ou n ao) possua um destino v alido
(i.e. o r otulo referenciado no JMP fa ca parte do programa) e a instru c ao nal seja CONTINUE;
entretanto isso n ao ser a imposto aqui.
2.1. ARQUITETURA DA RAM 10
R1 R2 R3 R4 . . . Proxima instru cao
3 2 0 0 . . . N0 R2 JMP N1b
3 2 0 0 . . . INC R1
4 2 0 0 . . . DEC R2
4 1 0 0 . . . JMP N0a
4 1 0 0 . . . N0 R2 JMP N1b
4 1 0 0 . . . INC R1
5 1 0 0 . . . DEC R2
5 0 0 0 . . . JMP N0a
5 0 0 0 . . . N0 R2 JMP N1b
5 0 0 0 . . . N1b CONTINUE
Tabela 2.1: Simula cao de um programa RAM
Exemplo 2.3 O programa que segue implementa a func ao SOMA

.
N0 R2 JMP N1b
INC R1
DEC R2
JMP N0a
N1 CONTINUE
Deni cao 2.4 Para executar uma computa cao na RAM, e necess ario que se
forneca para m aquina uma congura c ao inicial de mem oria, sobre a qual a
RAM executar a as instruc oes do programa em quest ao i.e. e fornecida uma
seq uencia a
1
, a
2
, . . . , a
n
de n umeros naturais nos registradores
R
1
, R
2
, . . . , R
n
. Assume-se que os demais registradores possuem valor igual a zero.
Se P consiste de s instruc oes I
1
, I
2
, . . . , I
s
, ent ao a RAM comeca obedecendo a
instruc ao I
1
, ent ao I
2
, I
3
, e assim por diante, a menos que uma instruc ao JMP seja
encontrada, o que far a com que a m aquina obedeca a instru c ao de acordo com o que
foi descrito anteriormente. A computac ao da RAM p ara se ela executa a instruc ao
nal CONTINUE ou se ela executa um jump para um r otulo que n ao existe no
programa. Um passo de computa c ao na RAM e a execuc ao de uma simples
instruc ao. Um estado da RAM durante uma computac ao, e o par = (c, j), onde
c e a congurac ao de mem oria atual e j o pr oximo passo a ser executado. Observe
que um passo de computac ao altera o estado atual da RAM

.
A tabela 2.1, descreve o comportamento do estado da RAM durante a com-
puta c ao do programa acima para as entradas 3 e 2. Observe que se for considerado
que o programa acima computa uma fun cao f : N
2
N, entao o resultado es-
perado encontra-se no registrador R1, e portanto o programa computa a fun cao

Essa fun c ao e b asica na maioria das linguagens assembly reais, e aqui ela e construda a partir
de instru c oes mais primitivas.

N ao necessariamente o conte udo da mem oria.


2.1. ARQUITETURA DA RAM 11
soma. Entretanto, convenciona-se que um mesmo programa RAM computa fun coes
f : N
m
N
n
, para m, n 0, onde o resultado contido em R1,. . . , Rn apos o nal
de uma computa c ao e interpretado como f(x
1
, . . . , x
m
). Essa abordagem e devido
ao fato de se querer tratar fun coes computaveis da forma f : N
m
N
n
, em vez
de apenas fun c oes da forma f : N
m
N (como na abordagem tradicional). Ao,
simplesmente, interpretar o conte udo de n registradores como o resultado de uma
fun c ao f : N
m
N
n
, aplicada a m argumentos, evita-se que se precise alterar a
arquitetura da RAM estabelecendo uma area de memoria para dados de entrada e
outra para dados de sada, ou adicionar instru coes de entrada e sada aos programas
RAM, mantendo dessa forma a estrutura original da RAM.
Exemplo 2.5 Assim, se o programa:
N0 R3 <- R1
R1 <- R2
R2 <- R3
CONTINUE
for interpretado como a implementac ao de uma func ao f : N
2
N, ent ao ele
computa a func ao segunda projec ao U
2
2
(x, y) = y. Caso ele seja interpretado como
a implementac ao de uma func ao f : N
2
N
2
, ent ao a func ao calculada e a func ao
permutac ao f(x, y) = (y, x), e assim por diante.
Mais precisamente, pode-se denir o seguinte:
Deni cao 2.6 Um programa RAM P computa uma fun cao parcial
f : N
m
N
n
(m, n 0), se, e somente se, quando P e iniciado com x
1
, . . . , x
m

nos registradores R1, . . . , e Rm, respectivamente, e todos os demais registradores usa-


dos por P contem 0

, P p ara se, e somente se, f(x


1
, . . . , x
m
) est a denido e os regis-
tradores R1, . . ., Rn contem valores y
1
, . . . , y
n
, respectivamente, onde f(x
1
, . . . , x
m
) =
(y
1
, . . . , y
n
)

.
Exemplo 2.7
1. Seja SOMA(x, y) o programa do exemplo 2.3, ent ao esse programa computa
a func ao x +y
2. Menos evidente, o programa CONTINUE computa as seguintes func oes:
(a) z : N, onde z() = 0. Nesse caso m = 0 e portanto o conjunto
x
1
, . . . , x
m
da denic ao e vazio. Assim os demais registradores usados
por P comecam a partir de R1. Ou seja, todos os registradores comecam
com zero e portanto o programa termina com zero no registrador R1.

Note que no caso de m = 0 todos os registradores s ao inicializados em zero.

Note que no caso de n = 0, P computa f se: P p ara para a entrada x


1
, . . . , xm se e somente
se f(x
1
, . . . , xm) est a denido.
2.1. ARQUITETURA DA RAM 12
(b) : N , onde (x) = . Como CONTINUE p ara, para qualquer que
seja o conte udo do registrador R1, (x) est a denido e (x) = , ent ao
CONTINUE computa a func ao .
(c) id : , onde id() = . Como = N
0
ent ao m = n = 0
e portanto este caso e de certa forma a junc ao dos anteriores, pois o
conjunto x
1
, . . . , x
n
da denic ao e vazio, id() est a denido e id() =
. Note que para o caso em que m 1, o programa CONTINUE computa
tambem a func ao id : N
m
N
m
, onde id(x
1
, . . . , x
m
) = (x
1
, . . . , x
m
).
Observe que para cada m, n 0, um programa RAM computa exatamente uma
fun c ao f : N
m
N
n
.
Deni cao 2.8 Quando existe um programa P que computa uma func ao
f : N
m
N
n
, f chama-se RAM-comput avel. Dessa forma, denota-se por
RAM, a classe de todas as fun c oes RAM-comput aveis. Sempre que uma
computac ao p ara para x
1
, . . . , x
n
diz-se que ela converge para x
1
, . . . , x
n
, caso
contr ario que ela diverge para x
1
, . . . , x
n
.
Observe que armar que um programa P diverge para x
1
, . . . , x
n
e o mesmo que
armar que ele entra em loop para x
1
, . . . , x
n
e que f(x
1
, . . . , x
n
) esta indenido
quando P computa f. Por questao de brevidade, introduz-se as seguintes nota coes:
Nota cao 2.9 Seja P um programa e x
1
, . . . , x
m
, y
1
, . . . , y
n
N
1. P(x
1
, . . . , x
m
) , signica: o programa P converge para as entradas x
1
, . . . , x
m
;
2. P(x
1
, . . . , x
m
) (y
1
, . . . , y
n
), signica: o programa P converge para as ent-
radas x
1
, . . . , x
m
e retorna, respectivamente, y
1
, . . . , y
n
nos registradores R1,
. . . , e Rn;
3. P(x
1
, . . . , x
m
) , signica: o programa P diverge para as entradas x
1
, . . . , x
m
.
Dessa forma, pode-se armar que SOMA(3, 2) 5, ao passo que o programa
SQRT que segue e calcula

x converge somente para os quadrados perfeitos, ou
seja SQRT(4) 2, enquanto que SQRT(3) . Porem, antes de apresentar SQRT
apresenta-se outras fun c oes RAM-computaveis.

E conveniente ser capaz de abreviar uma seq uencia de programas RAM que
serao re-utilizados. Para ilustrar, a re-utiliza cao do programa SOMA, dentro de
um outro programa, teria o seguinte formato:
Rj <- Ru + Rv (2.2)
Essa abrevia c ao, resume o seguinte trecho de programa:
R1 <- Ru
R2 <- Rv
execuc~ao do programa SOMA(R1,R2);
Rj <- R1
CONTINUE
2.1. ARQUITETURA DA RAM 13
Em geral, uma vez que uma fun cao f : N
m
N
n
tenha sido demonstrada como
RAM-computavel e possvel construir seq uencias de programas RAM, dentro de
qualquer programa, que calcularao as fun coes cujos argumentos estejam nos regis-
tradores R
k1
, . . . , R
km
e o resultado seja colocado nos registradores R
p1
, . . . , R
pn
para que em seguida o controle de execu cao retorne para a proxima instru cao do
programa mais externo. Assim, dada uma fun cao f : N
m
N
n
RAM-computavel,
a seq uencia de instru c oes associada a f que sera re-utilizada dentro de um programa
P pode ser representada por
(R
p1
, . . . , R
pn
) f(R
k1
, . . . , R
km
) (2.3)
Isso nao deve ser interpretado como uma abrevia cao exata do codigo RAM asso-
ciado, mas como um c odigo convenientemente adaptado para utilizar registradores
de entrada e de sada

, nao necessariamente todos distintos, e que retorne o con-
trole de execu c ao para a proxima instru cao apos a fun cao ter sido calculada, a menos
que f seja indenida para os valores contidos em R
k1
, . . . , R
km
, neste caso o con-
trole jamais retornara `a instru cao apos. Seguindo essa conven cao, apresenta-se as
seguintes fun c oes RAM-computaveis. O nome atribudo aos programas referem-se
as fun c oes da forma f : N
m
N que sao calculadas por eles.
Exemplo 2.10
1. SQR(x) = x
2
R4 <- R1
R3 <- R1
N0 DEC R3
R3 JMP N1b
R2 <- R4
R1 <- R1 + R2
JMP N0a
N1 CONTINUE
2. SUB(x, y) = x

y =
_
x y se x y,
0 caso contr ario
N0 R2 JMP N1b
DEC R1
DEC R2
JMP N0a
N1 CONTINUE

i.e. com as devidas altera c oes dos nomes de registradores.


2.2. EXERCCIOS 14
3. DIST(x, y) =[ x y [
R3 <- R1
R4 <- R2
R1 <- SUB(R1,R2)
R5 <- R1
R1 <- R4
R2 <- R3
R1 <- SUB(R1,R2)
R6 <- R1
R1 <- R5
R2 <- R6
R1 <- R1 + R2
CONTINUE
4. SQRT(x) =

x
R2 <- 0 % inicializa vari avel de teste
R4 <- 0 % inicializa vari avel de busca
N0 R3 <- DIST(R1,R2)
R3 JMP N1b % testa para verificar se achou ou n~ ao o valor desejado
INC R4 % incrementa a vari avel de busca
R2 <- SQR(R4)
JMP N0a
N1 R1 <- R4
CONTINUE
Imitando o que foi feito na tabela 2.1, onde foi feita a simula cao do comporta-
mento do programa soma, o leitor pode vericar que o programa SQRT para quando
o valor inicial do registrador R1 e um quadrado perfeito, por exemplo 4, e retorna
o valor da raiz quadrada no registrador R1, ao passo que o programa entra em loop
quando o valor inicial do registrador R1 nao e um quadrado perfeito, por exemplo 3.
Isso indica que existem fun c oes RAM computaveis cujos programas que as imple-
mentam nao param para qualquer entrada, mas param justamente para os pontos
em que a fun c ao esta denida.
2.2 Exerccios
1. Verique se as seguintes fun coes numericas sao RAM-computaveis:
(a) x y;
(b) x = 3;
(c) x
y
2.3. CONSIDERAC

OES FINAIS 15
(d) sg(x) =
_
1 se x ,= 0,
0 se x = 0
(e) sg =
_
0 se x > 0,
1 se x = 0
(f) x!
(g) min(x, y)
(h) max(x, y)
(i) rm(x, y)
(j) qt(x, y)
2. Verique se as fun c oes caractersticas : N
m
N associada aos seguintes
predicados sao RAM-computaveis:
(a) x y;
(b) x e um quadrado perfeito;
(c) x e par;
(d) x e divisvel por 5. e
(e) x [ y x e divisvel por y.
2.3 Consideracoes nais
O leitor pode ter percebido que as maquinas RAM sao capazes de calcular certas
fun c oes numericas. A questao e:
1. Que tipo de fun c oes ela e capaz de calcular?
2. Existem outras fun c oes que nao sao capazes de serem calculadas por maquinas
RAM?
A primeira questao e respondida no proximo captulo enquanto que a segunda
so sera respondida no captulo 6. Observe que a resposta da ultima questao sera
capaz de impor ou nao um limite no poder de computa cao das RAM. Caso esse
limite seja imposto, sera que ele, como conseq uencia, tambem sera limite para toda
a computa c ao? Esta questao e respondida no captulo 5.
No captulo seguinte apresenta-se uma maneira alternativa para demonstrar que
uma determinada fun c ao e RAM computavel. Por questao de simplicidade, a de-
monstra c ao da computabilidade de certas fun coes que serao importantes para o
desenvolvimento deste curso ser a adiada para o captulo 6.
Captulo 3
Funcoes Recursivas Parciais
No captulo anterior, vericou-se que as fun coes RAM computaveis sao fun coes da
forma f : N
m
N
n
. Nesse captulo caracteriza-se uma classe de fun coes RAM-
comput aveis. Posteriormente se provara que ela e exatamente a classe de todas as
fun c oes RAM-computaveis. Essa classe, chamada classe das func oes recursivas par-
ciais, e gerada a partir de um conjunto nito de fun coes basicas e e algebricamente
fechada sob certos funcionais. Dessa forma, se concluira mais adiante que as fun coes
RAM-computaveis apresentadas anteriormente poderao ser expressas atraves de ter-
mos formados a partir das fun c oes basicas mais esses funcionais.
A deni c ao que segue e um pouco diferente da usual, principalmente no que
diz respeito as fun c oes basicas. Isso se deve ao fato de se estar lidando com
fun c oes da forma f : N
m
N
n
, onde m, n 0. Mais adiante apresenta-se um
processo, chamado numera c ao de Godel, que e quem fundamenta a abordagem ge-
ralmente utilizada em varios textos de fun coes recursivas ou teoria da computa cao
(c.f. Cutland[8], Peter [23], e Smith [27])

.
3.1 Funcoes basicas
Deni cao 3.1 Seja N o conjunto dos n umeros naturais

. Chamam-se fun c oes


recursivas b asicas qualquer uma das seguintes func oes:
1. fun c ao zero: z : N
0
N, onde z() = 0.
2. fun c ao terminal: : N N
0
, onde (x) = .
3. fun c oes identidade: id
m
: N
m
N
m
, tal que id
m
(x) = x, para m 0.
4. fun c ao sucessor: s : N N, tal que s(x) = x + 1.

Nesses textos s ao consideradas fun c oes da forma f : N


m
N, onde m 1.

Para uma deni c ao rigorosa de N


m
(m 0) veja o captulo 1.
3.2. PRODUTO 17
5. fun c ao i-esima proje c ao: U
m
i
: N
i1
. . . N
im
N
im+1
, onde cada
i
j
0, 1 com j = 1, . . . , m+1 e m 1, U
m
i
(x
1
, . . . , x
m
) = x
i
, e 1 i m.
Lema 3.2 Toda func ao recursiva b asica e RAM-comput avel.
Prova: O programa CONTINUE computa as fun coes zero, terminal, e identidade
(Veja o exemplo 2.7). Os seguintes programas computam as fun coes sucessor e
i-esima proje c ao, respectivamente:
1. INC R1
CONTINUE
2. R1 <- Ri
CONTINUE

Fun c oes mais complexas, podem ser expressas a partir da aplica cao dos funcio-
nais que seguem.
3.2 Produto
Como este texto leva em considera cao fun coes cujo contra-domnio e da forma N
k
,
k 0, e necessario um operador capaz de criar n-uplas de n umeros naturais, per-
mitindo a sntese de fun c oes.
Deni cao 3.3 (Produto de fun coes) Sejam as func oes f : N
m
N
n
e
g : N
p
N
q
. A func ao f g : N
m+p
N
n+q
denida por
f g(x
1
, . . . , x
m
, x
m+1
, . . . , x
m+p
) = (y
1
, . . . , y
n
, y
n+1
, . . . , y
n+q
), (3.1)
onde (y
1
, . . . , y
n
) = f(x
1
, . . . , x
m
) e (y
n+1
, . . . y
n+q
) = g(x
m+1
, . . . , x
m+p
) chama-se
produto de f e g. Quando x = (x
1
, . . . , x
n
) e y = (y
1
, . . . , y
p
), abrevia-se (3.1)
por f g(x, y) = (f(x), g(y)).
Exemplo 3.4 Sejam as func oes Soma : N
2
N e Fac : N N (soma e fatorial
respectivamente). Com o operador produto, e possvel obter a func ao
Soma Fac : N
3
N
2
, tal que Soma Fac(x, y, z) = (x +y, z!).
Observe que para fun c oes em que o domnio ou o contradomnio e N
0
a deni cao
nao se altera. Por exemplo, dadas as fun coes s e , a fun cao s : NN NN
0
e
denida por s (x, y) = (x+1, ). Note que o caso em que alguns textos classicos
de computabilidade (por exemplo [4]) falam que N
m
N
0
= N
m+0
= N
m
, e na
3.2. PRODUTO 18
verdade um abuso de linguagem, pois os elementos de N
m
N
0
sao da forma (x, ),
onde x N
m
, enquanto os elementos de N
m
sao da forma x, ferindo portanto o
axioma da extensao da teoria dos conjuntos

. Entretanto, esse abuso de linguagem


decorre do fato de que existe uma bije cao entre os conjuntos N
m
N
0
e N
m
. Esse
abuso de linguagem pode ser estendido para fun coes. Por exemplo, a fun cao s
pode ser pensada como sendo a fun cao s

: NN N denida por s

(x, y) = x+1.
Isso so ocorre devido `as fun c oes id
2
: NN NN e U
2
1
: NN
0
N da deni cao
3.1 serem bije c oes e o seguinte diagrama comutar.
N N
s
N N
0
id
2

_U
2
1
N N
s

N
Generalizando, fun c oes do tipo f : N
i1
N
im
N
j1
N
jn
, com
i
1
, . . . , i
m
, j
1
, . . . , j
n
0, 1, serao tratadas, a menos que se explicite o contrario,
como a fun c ao f

: N
m

N
n

denida por f

= f , onde m

m
1
i
k
e n

n
1
j
k
, i.e. m

e n

sao a quantidade de uns que ocorrem em i


1
, . . . , i
m
e j
1
, . . . , j
n
,
respectivamente, e e sao as bije coes naturais entre N
m

e N
i1
N
im
e
entre N
j1
N
jn
e N
n

, respectivamente. Por exemplo a fun cao f : N N


0

N
0
N N
0
N
0
N N N
0
N denida por f(x, , , y, ) = (, y, x, , y) e
identicada com a fun c ao f

(x, y) = (y, x, y), onde nesse caso (x, y) = (x, , , y, )


e (, x, y, , z) = (x, y, z).
Observa cao: A no c ao de fun cao RAM-computavel pode ser estendida para fun coes
do tipo f : N
i1
N
im
N
j1
N
jn
com i
1
, . . . , i
m
, j
1
, . . . , j
n
0, 1,
da seguinte forma: f e RAM-computavel (estendido) se e somente se f

e RAM-
comput avel.
Observa cao: Daqui em diante, so consideraremos fun coes do tipo f : N
m
N
n
com m, n 0.
Lema 3.5 Se f : N
m
N
n
e g : N
p
N
q
s ao RAM-comput aveis, ent ao a func ao
f g tambem e RAM-comput avel.
Prova: Suponha que f e g sao fun coes RAM-computaveis. Sejam Pf e Pg os
programas que computam f e g respectivamente. Suponha que nenhum registrador
R
j
e referenciado por esses programas para qualquer j > k. Assumindo que os
registradores R1 a Rm contem inicialmente x
1
, . . . , x
m
e os registradores Rm+1 a Rm+p
contem x
m+1
, . . . , x
m+p
, entao o seguinte programa computa f g:
N0 Rk+1 <- Rm+1 % Salva os argumentos da func~ao g
etc

Dois conjuntos A e B s ao iguais se eles possuem os mesmos elementos [14].


3.3. COMPOSIC

AO 19
Rk+p <- Rm+p
CLR Rm+1
etc
CLR Rk
N1 Pf % Calcula f(x_1,...,x_m)
Rk+p+1 <- R1 % Salva f(x_1,...,x_m)
etc
Rk+p+n <- Rn
N2 R1 <- Rk+1 % Recupera os argumentos da func~ao g
etc
Rp <- Rk+p
CLR Rp+1
etc
CLR Rk
N3 Pg % Calcula g(x_1,...,x_p)
Rk+p+n+1 <- R1 % Salva g(x_1,...,x_p)
etc
Rk+p+n+q <- Rq
N4 R1 <- Rk+p+1 % Recupera (f(x_1,...,x_m),g(x_1,..., x_p))
etc
Rn <- Rk+p+n
Rn+1 <- Rk+p+n+1
etc
Rn+q <- Rk+p+n+q
N5 CONTINUE
Dessa forma, quando fun c oes RAM-computaveis sao combinadas via produto, o
resultado sera uma fun c ao RAM-computavel.
3.3 Composicao
A composi c ao de fun c oes e uma opera cao conhecida da matematica. Aqui ela e
generalizada para ser aplicada ` a varias fun coes computaveis.
Deni cao 3.6 Uma func ao h : N
n
N
p
e denida por composi c ao ou substi-
tui c ao a partir de m func oes g
1
: N
n
N
p1
, . . . , g
m
: N
n
N
pk
e uma func ao
f : N
t
N
p
, onde t = p1 +p2 + +pk, se e somente se:
h(x
1
, . . . , x
n
) = f(g
1
(x
1
, . . . , x
n
), . . . , g
m
(x
1
, . . . , x
n
)) (3.2)
ou seja h(x
1
, . . . , x
n
) = f(y
q1
1
, . . . , y
q1
p1
, . . . , y
q
k
1
, . . . , y
q
k
pk
), onde para todo i = 1, . . . , mk,
q
i
= g
i
(x
1
, . . . , x
n
).
Quando m = 1, obtem-se a denic ao usual:
h(x
1
, . . . , x
n
) = f(g
1
(x
1
, . . . , x
n
)). (3.3)
3.3. COMPOSIC

AO 20
e escreve-se h(x
1
, . . . , x
n
) = f g
1
(x
1
, . . . , x
n
).
Alguns livros como o de Kleene [19] em vez de h utilizam a nota cao
S
n
m
(f, g
1
, . . . , g
m
) para enfatizar a existencia de um operador de composi cao sobre
fun c oes. Entretanto, por quest oes de simplicidade isso sera evitado.
Exemplo 3.7 Sejam as func oes de subtrac ao natural, SUB(x, y) = x

y, vista no
captulo anterior, e a primeira projec ao: U
2
1
(x, y) = x. A express ao
min(x, y) = SUB(U
2
1
(x, y), SUB(x, y)) e denida por composic ao e descreve a
func ao que calcula o mnimo entre x e y

.
Observe que em vez de escrever explicitamente a proje cao na expressao:
min(x, y) = SUB(U
2
1
(x, y), SUB(x, y)), pode-se omiti-la am de obter uma ex-
pressao mais simples como: x

(x

y). Seguindo esse princpio, daqui por diante


omite-se sempre que for possvel o aparecimento das proje coes.
Exemplo 3.8 O valor absoluto de x y pode ser expresso por composic ao como:
[ x y [= (x

y) + (y

x)
Como na substitui c ao os argumentos em g sao repetidos, podemos usar esta
opera c ao para obter fun c oes de N
m
N
n
com m < n.
Exemplo 3.9 A func ao f : N N
2
denida por f(x) = (x, x) e obtida como
f(x) = id
2
(id
1
(x), id
1
(x)), i.e.
f = S
1
2
(id
2
, id
1
, id
1
)
J a a func ao f : N N N
0
denida por f(x) = (x, ) e obtida como f(x) =
id
1
id
0
(id
1
(x), (x)), i.e.
f = S
1
2
(id
1
id
0
, id
1
, )
Note que esta ultima func ao e a inversa da func ao bije c ao U
2
1
entre NN
0
e N.
Lema 3.10 Se as func oes g
1
: N
n
N
p1
, . . . , g
m
: N
n
N
pm
, e f : N
t
N
p
(onde
t = p1 + p2 + + pm) s ao RAM comput aveis, ent ao a func ao
h(x
1
, . . . , x
n
) = f(g
1
(x
1
, . . . , x
n
), . . . , g
m
(x
1
, . . . , x
n
)), tambem e RAM-comput avel.
Prova: Suponha que h e uma fun cao de n argumentos denida por composi cao
a partir de f, g
1
, . . . , e g
m
. Sejam Pf, P1,. . . ,Pm os programas que computam f,
g
1
, . . . , e g
m
respectivamente. Seja k um n umero natural tal que nenhum registrador
R
j
com j > k e referenciado por qualquer desses programas. O seguinte programa
computa h:

Se a nota c ao de Kleene [19] fosse utilizada, isso seria explicitamente descrito como
min(x, y) = S
2
2
(U
2
1
, SUB)(x, y).
3.3. COMPOSIC

AO 21
N0 Rk+1 <- R1 % Salva os argumentos das func~oes g
Rk+2 <- R2
etc.
Rk+n <- Rn
N1 P1 % Computa a func~ao g1 sobre os argumentos R1 `a Rn
Rk+n+1 <- R1 % Assumindo que (y1,...,yq) e o resultado
% da computac~ao de P1. Este trecho guarda
% esse resultado nos registradores Rk+n+1 a Rk+n+q
etc.
Rk+n+q <- Rq
N2 R1 <- Rk+1 % Recupera os argumentos das func~oes g
R2 <- RK+2
etc.
Rn <- Rk+n
CLR Rn+1 % Limpa os registr. utilizados durante a computac~ao
CLR Rn+2
etc.
CLR Rk
P2 % Computa a func~ao g2 sobre os argumentos R1 a Rn
Rk+n+(q+1) <- R1 % Assumindo que (z1,..., zp2) e o resultado
% da computac~ao de P2, este trecho guarda esse
% resultado nos registradores Rk+n+(q+1) a Rk+n+(q+p2)
etc.
Rk+n+(q+p2) <- Rp2
N3 % Assim como anteriormente recupera-se os argumentos,
% limpa-se os demais registradores e executa P3. Esse
% processo e, ent~ao, repetido ate a execuc~ao do programa Pm.
Nm R1 <- Rk+1 % Recupera os argumentos das func~oes g
R2 <- Rk+2
etc.
Rn <- Rk+n
CLR Rn+1 % Limpa os registr. utilizados durante a computac~ao
CLR Rn+2
etc.
CLR Rk
Pm % Computa a func~ao gm sobre os argumentos R1 a Rn
Rk+n+(j+1) <- R1 % Assumindo que Rk+n+(j+1) e o primeiro registrador
% n~ao utilizado ate este ponto, e que (w1,...,wu) e o
% resultado da computac~ao de Pm, esse trecho guarda esse
% resultado nos registradores Rk+n+(j+1),...,Rk+n+(j+u)
Rk+n+(j+u) <- Ru
Nm+1 R1 <- Rk+n+1 % recupera o resultado de P1
etc.
Rq <- Rk+n+q
Nm+2 Rq+1 <- Rk+n+(q+1) % recupera o resultado de P2
etc.
Rq+t <- Rk+n+(q+p2)
etc..
3.4. OPERADOR DE RECURS

AO PRIMITIVA 22
Rj+1 <- Rk+n+(j+1)
etc.
Rj+u <- Rk+n+(j+u)
CLR Rj+(u+1) % limpa o restante dos registradores
etc.
CLR Rk+n+(j+u)
Nv CONTINUE
Dessa forma, quando fun c oes RAM-computaveis sao combinadas via composi cao,
o resultado sera uma fun c ao RAM-computavel.
3.4 Operador de recursao primitiva
Recursao e um metodo para denir fun coes que descreve como uma fun cao retorna
valores a partir de resultados previamente obtidos. Pode-se pensar que o valor da
fun c ao para um determinado argumento e construdo passo-a-passo.
As progressoes geometricas e aritmeticas sao exemplos de fun coes denidas por
recursao. Por exemplo, na PA a
0
= 5 e a
n+1
= a
n
+ 4, o valor a
2
e obtido
calculando-se primeiramente a
0
, em seguida a expressao a
1
= a
0
+ 4, e nalmente
a expressao a
2
= a
1
+ 4. Note que houve a repeti cao do processo adicione 4 em
cada resultado previamente obtido ate a
2
ser alcan cado. Mais geralmente, temos a
seguinte deni c ao:
Deni cao 3.11 Sejam g : N
m
N
s
e h : N
m+1+s
N
s
func oes arbitr arias.
Ent ao a func ao f : N
m+1
N
s
e denida por recurs ao primitiva a partir de g e
h, se
_
f(x, 0) = g(x)
f(x, y) = h[x, y, f(x, y

1)], para y > 0;


(3.4)
onde x = (x
1
, . . . , x
m
). Segundo Kleene [19], isso pode ser designado por R
k
(g, h),
onde k = m+1, entretanto por quest ao de simplicidade evita-se essa notac ao sempre
que possvel. As equac oes acima s ao conhecidas como equa c oes de recurs ao.
Observe a possibilidade da existencia de circularidade na segunda equa cao. Note
ainda, que quando ha circularidade, a cada passo, f(x, y) solicita uma avalia cao
f(x, y

1), assegurando que se todas as fun coes estiverem denidas durante o pro-
cesso de avalia c ao, em um n umero nito de passos o valor de f(x, y) sera obtido.
Quando n = 0 as equa c oes de recursao possuem a seguinte forma:
_
f(0) = a
f(y) = h(y, f(y

1)).
(3.5)
onde a N.
3.4. OPERADOR DE RECURS

AO PRIMITIVA 23
Exemplo 3.12 A func oes que seguem est ao denidas por recurs ao primitiva.
1.
_
SOMA(x, 0) = U
1
1
(x)
SOMA(x, y + 1) = s(SOMA(x, y))
2.
_
0! = 1
(n + 1)! = (n + 1) n!
3.
_
_
_
f(0) = 1
f(1) = 2
f(n) = f(n 1) + 2f(n 2).
Observe que as denic oes est ao numa forma simplicada, onde n ao ocorre a
presenca de todos os smbolos de func ao necess arios para a denic ao por recurs ao,
pois a presenca deles tornariam as express oes rebuscadas.
Lema 3.13 Se g : N
m
N
s
e h : N
m+1+s
N
s
s ao func oes RAM-comput aveis,
ent ao a func ao f : N
m+1
N
s
denida por recurs ao primitiva e RAM-comput avel.
Prova: Suponha que as fun c oes g e h do enunciado sejam RAM-computaveis, e
que f esteja denida por recursao primitiva. Sejam P
g
e P
h
programas que com-
putam g e h respectivamente. Assuma que nenhum desses programas referenciam
qualquer registrador Rj (para j k) e utilizem os labels Nu e Nv. Entao o seguinte
programa implementa o esquema de recursao primitiva.
Rk <- Rm+1 % salva o valor de y em Rk
Rk+1 <- R1 % Salva os argumentos de x1..xm
Rk+2 <- R2
etc.
Rk+m <- Rm
CLR Rk+m+1 % inicializa o numero de iterac~oes: y
Pg % computa g(x1,...,xm)
Rk+m+2 <- R1 % armazena o valor da func~ao
etc
Rk+m+s+1 <- Rs
Nu Rk JMP Nvb % Testa a terminac~ao do loop
INC Rk+m+1 % Incrementa y
R1 <- Rk+1 % Recupera os argumentos x1..xm
R2 <- Rk+2
etc.
Rm <- Rk+m
Rm+1 <- Rk+m+1 % copia o valor atual de y
Rm+2 <- Rk+m+2 % copia o ultimo valor calculado
etc
Rm+s+1 <- Rk+m+s+1
CLR Rm+s+2 % Limpa os registr. utilizados durante a computac~ao
CLR Rm+s+3
etc.
3.4. OPERADOR DE RECURS

AO PRIMITIVA 24
CLR Rk-1
Ph % Computa a func~ao h sobre os argumentos R1,...,Rm+s+1
Rk+m+2 <- R1 % Guarda o resultado da computac~ao de Ph
etc
Rk+m+s+1 <- Rs
DEC Rk % decrementa o numero de passos da computac~ao
JMP Nua
Nv CONTINUE
Dessa forma, o resultado de combinar fun coes RAM-computaveis via recursao
primitiva produzira uma fun cao RAM-computavel.
Deni cao 3.14 (Exponencia cao) Seja uma func ao f : N
m
N
m
, a exponen-
cia c ao de f, f
#
: N
m+1
N
m
, e denida por:
f
#
(x, y) =
y vezes
..
f(f(. . . (f(x))), (3.6)
onde f(x, 0) = x, para todo x.
Assim, para calcular f
#
(x, y), f e composta consigo mesma y vezes. No lugar
de f
#
(x, y), usualmente escreve-se f
y
(x). Note que f
y
(x) estara denido somente
se f(x), f(f(x)), . . . estiverem todos denidos, i.e. (x, y) dom f
#
se e somente
se f
k
(x) dom f, para 0 k < y.
Exemplo 3.15 SOMA(x, y) = s
#
(x, y) = s
y
(x), onde s(x) = x + 1.
Lema 3.16 Seja m, k1, k2 N tais que k
1
k
2
m. A func ao U
m
[k1,k2]
: N
i1

. . . N
im
N
i
k1
. . . N
i
k2
, onde cada i
j
0, 1 com j = 1, . . . , m+1 e m 1,
denida por U
m
[k1,k2]
(x
1
, . . . , x
m
) = (x
k1
, . . . , x
k2
e primitiva recursiva.
Prova: Trivialmente, U
m
[k1,k2]
= U
k1
k1
id
k2k11
U
mk2+1
k2
.
Proposi cao 3.17 Toda func ao denida por exponenciac ao pode ser denida por
recurs ao primitiva.
Prova: Sejam as fun c oes: f : N
m
N
m
, x = (x
1
, . . . , x
m
), id(x) = x e
h = U
m+1+m
[m+1+1,m+1+m]
(
(m+1)vezes
..
f), entao as seguintes equa coes denem a
exponencia c ao:
_
f
#
(x, 0) = id(x)
f
#
(x, y) = h[x, y, f
#
(x, y

1)], para y > 0.


3.4. OPERADOR DE RECURS

AO PRIMITIVA 25
Ou seja, f
#
(x, 0) = x, e f
#
(x, y) = f(f
#
(x, y

1)) (para y > 0).


A proposi c ao acima permite que certas fun coes como a SOMA sejam expressas
mais facilmente atraves de exponencia cao do que atraves recursao.
Deni cao 3.18 (Recursao primitiva) A menor classe de func oes sobre os na-
turais que contem as func oes recursivas b asicas e e fechada sob as operac oes de
composic ao, produto e recurs ao e chamada classe das fun c oes recursivas pri-
mitivas, aqui denotada por RP. Em outras palavras, uma fun c ao recursiva pri-
mitiva ou e uma func ao b asica ou ela e obtida exclusivamente utilizando a aplicac ao
da composic ao, do produto ou da recurs ao.
Observe que todo programa associado `a uma fun cao recursiva primitiva e um
programa que para para qualquer entrada, pois tanto as fun coes recursivas b asicas
como aquelas que sao o resultado da aplica cao da composi cao, do produto ou da
recursao sao fun c oes totais.
No que segue demonstra-se que alguma fun coes bem conhecidas sao recursivas
primitivas, e por conseguinte computaveis.
Proposi cao 3.19 As seguintes func oes s ao recursivas primitivas:
1. Adic ao: x +y
2. Multiplicac ao: x y
3. Exponenciac ao: x
y
4. Predecessor: x

1
5. Subtrac ao pr opria: x

y
6. Valor absoluto da diferenca: [ x
y [
7. Mnimo de x e y: min(x, y)
8. M aximo de x e y: max(x, y)
Prova: As provas que seguem utilizam os operadores de recursao e composi cao,
as fun c oes recursivas basicas e fun coes que ja foram demonstradas serem recursivas
primitivas.
1. usando recursao e sucessor:
_
x + 0 = x
x + (y + 1) = s(x +y).
2. usando recursao e (1):
_
x 0 = 0
x (y + 1) = (x y) +x.
3. usando recursao e (2):
_
x
0
= 1
x
(y+1)
= (x
y
) x
4. usando recursao e proje cao:
_
0

1 = 0
(x + 1)

1 = x.
5. usando recursao e (4):
_
x

0 = x
x

(y + 1) = (x

y)

1.
3.5. PREDICADOS E DECIDIBILIDADE 26
6. usando composi c ao (1) e (5):
[ x y [= (x

y) + (y

x)
7. usando composi c ao e (5):
min(x, y) = x

(x

y)
8. usando composi cao e (5):
max(x, y) = x + (y

x)

Mais adiante apresenta-se outras fun coes recursivas primitivas importantes que
serao utilizadas neste livro, mas antes de prosseguir e necessario introduzir um
conceito necessario para aquelas fun coes e para alguns captulos subseq uentes: o
conceito de predicado. A se c ao seguinte introduz este conceito e relaciona-o com a
no c ao de computa c ao ate aqui desenvolvida, dando origem a deni cao de decidibi-
lidade.
3.5 Predicados e decidibilidade
Uma das no c oes importantes que e utilizada em matematica e a de predicado. Esta
se c ao nao apresenta uma deni cao logico-formal, mas procura ser intuitiva.
Um predicado (de primeira ordem) e uma frase escrita numa certa linguagem e
expressa uma propriedade que certos objetos dum determinado universo de discurso
possuem. Por exemplo: Ao pensar na classe de todos os animais, a propriedade x
e humano e uma propriedade de certos elementos desta classe que e expressa na
linguagem do Portugues. A propriedade x e um n umero primo e outra proprie-
dade expressa em Portugues que caracteriza certos elementos da classe dos n umeros
naturais. Dessa forma, ao estabelecer o conjunto dos seres humanos e dos n umeros
naturais, obtem-se a partir dos predicados anteriores, respectivamente, os subcon-
juntos dos seres humanos e dos n umeros primos que em nota cao matematica
geralmente tem a forma: x Animais : x e humano e x N : x e primo.
Alem disso, a substitui c ao, por exemplo, de x por algum elemento do conjunto dos
n umeros naturais resulta em proposi coes como: 5 e um n umero primo e 4 e um
n umero primo, que sao senten cas respectivamente verdadeira e falsa. Dessa forma,
pode-se interpretar um predicado como uma fun cao da seguinte forma:
Deni cao 3.20 Dado um conjunto A e um subconjunto B, a fun c ao carac-
terstica associada a B e da forma C
B
: A N, onde
C
B
(x) =
_
1 ,se x B
0 ,se x , B.
(3.7)
onde 0 representa o valor verdade Falso e 1 representa o valor verdade Ver-
dadeiro. Logo, se P(x) e um predicado que descreve os elementos de B, a equac ao
acima pode ser reescrita da seguinte forma:
C
B
(x) =
_
1, se P(x) e verdadeiro
0, se P(x) n ao e verdadeiro.
(3.8)
3.6. UM POUCO DE RECURS

AO PRIMITIVA 27
Exemplo 3.21 Seguindo os exemplos acima, a func ao caracterstica associada ao
conjunto dos n umeros primos pode ser descrita como C
Primos
: N N, onde
C
Primos
(x) =
_
1, se x e primo
0, se x n ao e primo.
J a a func ao caracterstica C

: N N N, onde
C

(x, y) =
_
1, se x e menor ou igual a y
0, se n ao e o caso que x e menor ou igual a y.
interpreta o predicado bin ario (que contem duas vari aveis) x e menor ou igual a
y que est a denido sobre o conjunto de todos os pares de naturais N N.
Observe que, os predicados podem ser unarios, binarios, etc. Designa-se um
predicado n-ario da seguinte forma P(x
1
, . . . , x
n
), onde P e apenas um nome da
propriedade em questao. Como os predicados sobre os naturais sao interpretados
como fun c oes sobre os naturais, entao eles se tornam candidatos a serem implemen-
tados em programas RAM. Agora, sera que todo predicado sobre os naturais pode
ser implementado num programa RAM? Isso da origem a seguinte deni cao:
Deni cao 3.22 Um predicado n- ario P(x
1
, . . . , x
n
) e um predicado decidvel, se
sua func ao caracterstica e RAM-comput avel. Se alem disso, a func ao caracterstica
e recursiva primitiva, ent ao ele e um predicado recursivo primitivo.
3.6 Um pouco de recursao primitiva
Esta se c ao pretende ser uma referencia e apresenta varias fun coes recursivas primi-
tivas que sao importantes.
Proposi cao 3.23 O predicado sg(x): x e positivo e a sua negac ao sg(x) s ao
recursivos primitivos. Alem disso, a igualdade x y e a sua negac ao x ,
ytambem s ao predicados recursivos primitivos.
Prova: As seguintes fun c oes recursivas parciais demonstram a proposi cao acima:
1. usando recursao:
_
sg(0) = 0
sg(x + 1) = 1.
2. sg(x) = 1

sg(x).
3. x y = sg([ x y [).
4. x , y = sg([ x y [).

Proposi cao 3.24 (Divisibilidade) As seguintes func oes s ao recursivas primiti-


vas:
3.7. OPERADOR DE MINIMALIZAC

AO 28
1. rm(x, y) o resto quando y e dividido por x.
2. qt(x, y) o quociente quando y e dividido por x.
3. div(x, y) x divide y.
Conven coes: Para obter uma func ao total, convenciona-se que rm(0, y) = y e
qt(0, y) = 0. Observe que, div(0, 0) = 1 mas n ao e o caso que div(0, y) = 0 quando
y ,= 0.
Prova:
1. o resto pode ser denido como:
rm(x, y + 1) =
_
rm(x, y) + 1 se rm(x, y) + 1 ,= x.
0 se rm(x, y) + 1 = x.
e reescrito na seguinte equa cao recursiva:
_
rm(x, 0) = 0.
rm(x, y + 1) = (rm(x, y) + 1) sg([ x (rm(x, y) + 1) [).
2. visto que
qt(x, y + 1) =
_
qt(x, y) se rm(x, y) + 1 ,= x.
qt(x, y) + 1 se rm(x, y) + 1 = x.
tem-se a seguinte deni cao recursiva:
_
qt(x, 0) = 0.
qt(x, y + 1) = qt(x, y) +sg([ x (rm(x, y) + 1) [).
3. como
_
div(x, y) = 1, se x divide y.
div(x, y) = 0, se x nao divide y,
entao fa ca div(x, y) = sg(rm(x, y)).

3.7 Operador de minimalizacao


O leitor pode observar que cada fun cao recursiva primitiva esta denida para qual-
quer n umero natural, logo elas sao fun coes totais. Note que se deseja caracterizar
a famlia de todas as fun c oes RAM-computaveis, assim toda fun cao que seja imple-
mentada por um programa RAM devera constar dessa caracteriza cao. Entretanto,
nem todo programa RAM para para todos os seus argumentos. Por exemplo, o
programa
3.7. OPERADOR DE MINIMALIZAC

AO 29
N1 INC R1
JMP N1a
CONTINUE
nao para para qualquer n umero natural. Dessa forma, as fun coes recursivas pri-
mitivas nao podem interpretar esses programas. O programa que calcula a raiz
quadrada de x, visto na se c ao anterior, e outro exemplo de um programa que com-
puta uma fun c ao numerica que nao e total. Portanto, quais tipos de fun cao sobre
os naturais interpretam esse tipo de programa? Isso motiva o operador a seguir: o
operador de minimaliza c ao.
O operador de minimaliza c ao e um operador de busca analogo aos conhecidos
loops while do Pascal e de outras linguagens. Basicamente, ele busca nos n umeros
naturais (partindo de zero) pelo primeiro n umero que possui uma determinada pro-
priedade, caso armativo ele retorna tal n umero, caso negativo a busca passa para
o sucessor do n umero corrente. Assim, se a tal propriedade nao for satisfeita por
algum n umero natural (e.g. [ x
2
3 [= 0) entao o operador entra numa busca
eterna. Logo, dependendo da propriedade em questao o operador pode dar origem
`a uma fun c ao que nao e total.
Escreve-se:

y
(...) (3.9)
para expressar: o menor y tal que .... Inicialmente, tome a seguinte deni cao:
Deni cao 3.25 Seja uma func ao f : N
m+1
N, x = (x
1
, . . . , x
m
) e o conjunto
A
x
= y : f(x, y) = 0 e f(x, y

) est a denido para cada y

< y. Seja min(A


x
) o
menor membro de A
x
, desde que A
x
,= . A minimaliza c ao de f e a func ao
f : N
m
N tal que
(f)(x) =
_
min(A
x
), se A
x
,= ; ou
indenido, se A
x
= .
(3.10)
Denota-se o elemento min(A
x
) por (
y
)[f(x, y) = 0]. Assim, (
y
)[f(x, y) = 0]
pode ser calculado computando-se f(x, 0), f(x, 1), . . . , ate que um desses valores
seja igual a 0. A computac ao n ao ir a parar se houver uma tentativa de calcu-
lar f(x, y) usando um valor de y para o qual a func ao n ao esteja denida, ou se
f(x, y) = 0 para nenhum valor de y.
Lema 3.26 Se f : N
m+1
N e RAM-comput avel, ent ao a func ao (f) : N
m
N
e RAM-comput avel.
Prova: Suponha que f e RAM-computavel e P
f
e o programa RAM que im-
plementa esta fun c ao. Se k e tal que nenhum registrador R
j
, para j > k, seja
referenciado por Pf e tanto Nu quanto Nv sao rotulos que nao sao utilizados por
Pf, entao o seguinte programa computa (f):
3.7. OPERADOR DE MINIMALIZAC

AO 30
Rk+1 <- R1 % Salva os argumentos da func~ao f
RK+2 <- R2
etc.
RK+m <- Rm
CLR Rk+m+1 % inicializa a variavel de busca
Nu R1 <- Rk+1 % Recupera os argumentos x1..xn
R2 <- RK+2
etc.
Rm <- Rk+m
Rm+1 <- Rk+m+1 % copia o valor atual da variavel de busca
CLR Rm+2 % Limpa os demais registradores
etc.
CLR Rk
Pf % Computa f(x1,...,xm,Rk+m+1)
R1 JMP Nvb % verifica se f(x1,...,xm,Rk+n+1) = 0
INC Rk+m+1 % incrementa a variavel de busca
JMP Nua % Tenta novamente
Nv R1 <- Rk+m+1
CONTINUE

Corolario 3.27 Se R(x, y) e um predicado decidvel, ent ao a func ao


g(x) =
y
[R(x, y)] =
_
o menor y tal que R(x, y) e verdadeiro, se tal y existe; ou
indenido, caso contr ario.
(3.11)
e comput avel.
Prova: Fa ca g(x) =
y
(sg(C
R
(x, y)) = 0); onde C
R
e a fun cao caracterstica
associada `a R.
Exemplo 3.28 Seja f(x, y) =[ x y
2
[. Essa func ao e recursiva primitiva, e
portanto uma func ao total. A partir de f dena o seguinte predicado decidvel
f(x, y) = 0, cuja func ao caracterstica e sg([ xy
2
[). Segundo o corol ario anterior
a func ao g(x) =
y
(f(x, y) = 0) e uma func ao comput avel. Observe que essa func ao
implementa exatamente a func ao

x cujo domnio e o subconjunto pr oprio dos


quadrados perfeitos.
Note que a fun c ao parcial

x e computavel e qualquer programa que compute
essa fun c ao entrara em loop para argumentos que nao sejam quadrados perfeitos.
Assim, o operador pode produzir fun coes computaveis que nao sao totais a partir
de fun c oes comput aveis totais. Portanto, ao utilizar o operador de minimaliza cao
juntamente com os operadores de recursao, produto e substitui cao, e possvel se
3.7. OPERADOR DE MINIMALIZAC

AO 31
produzir fun c oes comput aveis que nao sao recursivas primitivas, ou seja a classe das
fun c oes RAM-computaveis nao e sucientemente descrita somente com recursao,
produto e composi c ao, e necessario tambem a minimaliza cao. Isso da origem a
seguinte deni c ao:
Deni cao 3.29 (Recursao Parcial) A classe das fun c oes recursivas par-
ciais, aqui denotada por FRP, e a menor classe de func oes sobre os naturais que
contem as func oes b asicas e e fechada sob os operadores de recurs ao primitiva,
produto, composic ao e minimalizac ao.
Proposi cao 3.30 Toda func ao recursiva parcial e RAM-comput avel; i.e. FRP
RAM
Prova: Direto dos lemas 3.5, 3.10, e 3.13, e do corolario 3.27.
A proposi c ao acima, entao caracteriza uma classe de fun coes numericas que e
RAM comput avel. Entretanto, sera que essa classe e exatamente a classe das fun coes
RAM-computaveis? i.e. sera que FRP = RAM? Essa resposta sera dada no que
segue, por enquanto surge ainda mais uma questao: Sera que existem fun coes totais
em FRP que nao recursivas primitivas? Do ponto de vista dos programas RAM, isso
signica que mesmo sendo fun coes que sempre param, e necessario uma opera cao
de busca para implementar essas fun coes, i.e. e necessario uma minimaliza cao.
3.7.1 A funcao de Ackermann
Ao contrario do que se possa imaginar, a minimaliza cao nao produz sempre fun coes
que nao sao totais. Existem fun coes computaveis totais que somente podem ser
expressas por meio da minimaliza cao. No que segue apresenta-se um exemplo de
uma fun c ao recursiva parcial que e total, mas em cuja expressao a presen ca da
minimaliza c ao e essencial. A fun cao e uma modica cao de Rozsa Peter [23] de um
exemplo dado por Ackermann, apos o qual a fun cao recebeu o seu nome. A fun cao
possui a seguinte deni c ao:
_
_
_
(0, y) = y + 1
(x + 1, 0) = (x, 1)
(x + 1, y + 1) = (x, (x + 1, y))
(3.12)
Essa deni c ao envolve uma especie de dupla recursao que e mais forte que a re-
cursao primitiva. Entretanto, e possvel perceber que essas equa coes de fato denem
uma fun c ao, pois e suciente notar que qualquer valor (x, y) (x > 0) esta denido
em termos de valores anteriores (x
1
, y
1
) com x
1
< x, ou x
1
= x e y
1
< y. Pode-se
estabelecer por indu c ao sobre x e y que (x, y) pode ser obtida usando-se apenas
um n umero nito desses valores. A prova da computabilidade e do fato dela nao
ser recursiva primitiva e bastante difcil, e por questoes de simplicidade nao fazem
3.8. UM POUCO DE RECURS

AO 32
parte deste curso. Entretanto o leitor pode vericar esse fato em Rozsa P`eter [23].
Note que na deni c ao da classe das fun coes recursivas parciais nenhuma restri cao
foi imposta ao uso do operador de minimaliza cao, de maneira que a classe FRP
possui tanto fun c oes totais como fun coes que nao sao totais. Note tambem que com
essa deni c ao nao se tem como distinguir algebricamente todas as fun coes totais
das nao totais, ja que existem fun coes computaveis totais cuja deni cao necessita
do operador de minimaliza c ao. Dessa maneira, daqui por diante dene-se fun cao
recursiva toda fun c ao recursiva parcial que e total.
3.8 Um pouco de recursao
Os operadores que seguem sao abrevia coes para se denir fun coes recursivas. Quando
as fun c oes envolvidas forem recursivas o resultado sera uma fun cao recursiva, e se
elas forem recursivas primitivas, o resultado sera uma fun cao recursiva primitiva.
3.8.1 Recursao por curso de valores
Deni cao 3.31 (Recursao por curso de valores) Se f
1
(x), . . . , f
k
(x) s ao func oes
recursivas e P
1
(x), . . . , P
k
(x) s ao predicados decidveis, tal que para cada x exata-
mente um dos predicados e v alido (i.e. eles s ao mutuamente exclusivos). Ent ao a
func ao
g(x) =
_

_
f
1
(x), se P
1
(x) e verdadeiro.
.
.
.
f
k
(x), se P
k
(x) e verdadeiro.
(3.13)
chama-se fun c ao recursiva por curso de valores.
Observe que nao se exige que as fun coes f
i
envolvidas sejam recursivas primitivas.
Proposi cao 3.32 Uma func ao g(x) recursiva por curso de valores e RAM-comput avel.
Prova: Assumindo a deni cao acima, a fun cao pode ser expressa atraves da
seguinte equa c ao: g(x) = C
P1
(x) f
1
(x) + +C
P
k
(x) f
k
(x); onde C
Pj
e a fun cao
caracterstica associada ao predicado P
j
.
3.8.2 Soma limitada e produto limitado
Deni cao 3.33 Suponha que f(x, z) e qualquer func ao. A soma limitada de
f(x, z), denotada por

z<y
f(x, z), e dada pelo seguinte esquema de recurs ao pri-
mitiva:
3.8. UM POUCO DE RECURS

AO 33
_
_
_

z<0
f(x, z) = 0,

z<y+1
f(x, z) =
_

z<y
f(x, z)
_
+f(x, y).
(3.14)
A partir da soma limitada a express ao

zy
f(x, z) signica

z<y
f(x, z)+f(x, y).
Exemplo 3.34 A express ao

z<4
f(x, z) descreve, portanto, a serie nita
0 + f(x, 0) + f(x, 1) + f(x, 2) + f(x, 3), enquanto que a express ao

z4
f(x, z)
descreve a serie 0 +f(x, 0) +f(x, 1) +f(x, 2) +f(x, 3) +f(x, 4).
Deni cao 3.35 O produto limitado de f(x, z), denotado por

z<y
f(x, z), e
denido como:
_
_
_

z<0
f(x, z) = 1,

z<y+1
f(x, z) =
_

z<y
f(x, z)
_
f(x, y).
(3.15)
Semelhantemente, a express ao

zy
f(x, z) signicar a

z<y
f(x, z) f(x, y).
Exemplo 3.36 A express ao

z<4
f(x, z) descreve, portanto, o produto
1 f(x, 0) f(x, 1) f(x, 2) f(x, 3), enquanto que a express ao

z4
f(x, z) descreve
o produto 1 f(x, 0) f(x, 1) f(x, 2) f(x, 3) f(x, 4).
Proposi cao 3.37 Se f(x, z) e uma func ao recursiva, ent ao as func oes

z<y
f(x, z),

zy
f(x, z),

z<y
f(x, z), e

zy
f(x, z) s ao func oes recursivas.
Prova: Direto das deni c oes, ja que elas sao denidas por recursao primitiva.
Corolario 3.38 Suponha que f(x, z) e k(x, w) s ao func oes recursivas, ent ao as
func oes

z<k(x,w)
f(x, z),

zk(x,w)
f(x, z),

z<k(x,w)
f(x, z), e

zk(x,w)
f(x, z)
tambem s ao.
Prova: Por substitui c ao de y por k(x, w) nas expressoes

z<y
f(x, z),

zy
f(x, z),

z<y
f(x, z), e

zy
f(x, z).
3.8.3 Minimalizacao limitada
Assim como na minimaliza c ao, e possvel denir um operador de busca para uma
faixa nita de n umeros naturais e garantir que o processo de minimaliza cao tambem
seja nito.
Deni cao 3.39 Chama-se minimaliza c ao limitada, e denota-se por
(
z
< y)(. . . ) (3.16)
3.8. UM POUCO DE RECURS

AO 34
o processo pelo qual se busca e retorna o menor z que e menor que y e possua
a propriedade (...). Caso esse z n ao exista ent ao o valor resultante do processo
ser a y. O operador (
z
< y) e chamado operador de minimaliza c ao limitada
ou -operador limitado.
Lema 3.40 Dada uma func ao recursiva f(x, y), ent ao a func ao
(
z
< y)(f(x, z) = 0) e recursiva.
Prova: Considere a fun c ao recursiva h(x, v) =

uv
sg(f(x, u)). Dados x e y,
suponha que z
0
= (
z
< y)(f(x, z) = 0). Logo, caso v < z
0
, entao h(x, z) = 1; caso
z
0
v < y, entao h(x, v) = 0. Portanto, z
0
e o n umero de vs menores que y tal que
h(x, v) = 1, ou seja z
0
=

v<y
h(x, v). Caso tal z
0
nao exista, entao a expressao

v<y
h(x, v) sera igual `a y. Portanto, (
z
< y)(f(x, z) = 0) =

v<y
h(x, v).
Dessa maneira, quando as fun coes envolvidas nessa busca sao fun coes recursivas,
entao a fun c ao resultante tambem sera uma fun cao recursiva. Observe, ainda, que
se elas forem recursivas primitivas o resultado sera uma fun cao recursiva primitiva.
Corolario 3.41 Se f(x, z) e k(x, w) s ao func oes recursivas, ent ao a func ao
(
z
< k(x, w))(f(x, z) = 0)
Prova: Por substitui c ao se k(x, w) em y.
Assim como no caso da minimaliza cao, agora generaliza-se o lema acima para
um predicado recursivo qualquer.
Corolario 3.42 Suponha que R(x, y) e um predicado recursivo, ent ao a func ao
f(x, y) = (
z
< y)(R(x, z)) e recursiva.
Prova: Fa ca f(x, y) = (
z
< y)(sg(C
R
(x, z) = 0)).
Observe que assim como no caso do produto e soma limitados, a expressao
(
z
< k(x, w))R(x, z) tambem e uma fun cao recursiva, quando k(x, w) e uma fun cao
recursiva.
3.8.4

Algebra da decidibilidade e quantica cao limitada
A partir dos operadores anteriores e possvel demonstrar que as opera coes usuais
com proposi c oes e as quantica coes limitadas sao fun coes recursivas.
Proposi cao 3.43 (

Algebra da decidibilidade) Se P(x), P


1
(y) e P
2
(z) s ao pre-
dicados decidveis, ent ao os seguintes predicados tambem s ao decidveis:
1. P(x): n ao e o caso que P(x)
2. P
1
(y) P
2
(z): P
1
(y) e P
2
(z)
3.8. UM POUCO DE RECURS

AO 35
3. P
1
(y) P
2
(z): P
1
(y) ou P
2
(z)
4. P
1
(y) P
2
(z): Se P
1
(y), ent ao P
2
(z)
Prova: As fun c oes: C
P
(x) = 1

C
P
(x), C
P1P2
(y, z) = C
P1
(y) C
P2
(z), e
C
P1P2
(y, z) = max(C
P1
(y), C
P2
(z)) computam, respectivamente, os dois primeiros
predicados, enquanto que P
1
(y) P
2
(z) e equivalente `a P
1
(y) ou P
2
(z).
Proposi cao 3.44 Suponha que R(x, y) seja um predicado decidvel, ent ao os se-
guintes predicados s ao decidveis:
1. P
1
(x, y) (z < y)R(x, z)
2. P
2
(x, y) (z < y)R(x, z)
Prova:
1. C
P1
(x, y) =

z<y
C
R
(x, z)
2. P
2
(x, y) [(z < y)R(x, z)]

Observe que como nos casos da minimaliza cao, soma e produto limitados se k(x, w)
e uma fun c ao recursiva, entao os predicados P
1
(x, k(x, w)) (z < k(x, w))R(x, z)
e P
2
(x, k(x, w)) (z < k(x, w))R(x, z) tambem sao predicados decidveis, ja que
e so substituir y por k(x, w) nas expressoes.
3.8.5 Estendendo a minimaliza cao limitada
Se existe somente um z tal que z < y, e para o qual o predicado recursivo R(x, z)
vale, entao z e calculado pela minimaliza cao limitada (
z
< y)(R(x, z)). Partindo
disso, e possvel utilizar essa minimaliza cao limitada para calcular
O maior z, tal que z < y e para o qual R(x, z) e verdadeiro.
Nesse caso, representa-se essa minimaliza cao, por:
(
z
< y)(R(x, z)) (3.17)
Se tal z existe, entao ele e o unico z menor que y (e portanto o menor z:
z
) para o
qual R(x, z) vale e para todo k, onde z < k < y, R(x, k) e verdadeiro. Portanto,
isso pode ser escrito em termos da minimaliza cao limitada (
z
) da seguinte maneira:
(
z
< y)(R(x, z)) = (
z
< y)(R(x, z) ((k < y)[k > z R(x, k)]) (3.18)
3.9. EXERCCIOS 36
3.9 Exerccios
1. Usando fun c oes recursivas parciais, mostre que as seguintes fun coes sao recur-
sivas:
(a) mmc(x, y);
(b) mdc(x, y);
(c) D(x) = ao n umero de divisores
de x;
(d) p
n
=o n-esimo n umero primo;
(e) (x)
n
= o expoente de p
n
(n-esimo primo) na fatora cao
prima de x convenciona-se
que (x)
n
= 0 caso x = 0 ou
n = 0;
2. Mostre que fun c ao : N
2
N, (x, y) = 2
x
(2y + 1) 1 e uma bije cao e
encontre as fun c oes
1
,
2
: N N
2
tal que (
1
(n),
2
(n)) = n.
3. Usando fun c oes recursivas parciais, mostre que os seguintes predicados sao
decidveis:
(a) x e par
(b) x e mpar
(c) Pr(x):x e um n umero primo
(d) x e uma potencia de um n umero
primo
(e) x [ y i.e. y e divisvel por x.
3.10 Consideracoes nais
Nesse captulo, provou-se que FRP RAM. No que segue apresenta-se um esbo co
da prova de que RAM FRP. Logo e possvel concluir que o limite computacio-
nal das RAMs e exatamente calcular fun coes recursivas parciais. Isso responde a
primeira pergunta das considera coes nais do captulo anterior. Com isso, o limite
da computac ao depende de se chegar `a conclusao, ou assumir, que todo e qualquer
possvel modelo de computador e equivalente `a RAM.
Teorema 3.45 RAM= FRP.
Prova: A proposi c ao 3.30 mostra que FRP RAM. O oposto, RAM FRP, e
provado da seguinte maneira:
Suponha que f(x) e uma fun cao RAM-computavel por um programa P com
instru c oes (I
1
, . . . , I
s
). Um passo na computa cao de P(x), onde x = (x
1
, . . . , x
m
)
e a execu c ao de uma unica instru cao I
j
desse programa. Considere as seguintes
fun c oes que estao relacionadas com as computa coes de P:
3.10. CONSIDERAC

OES FINAIS 37
c
m
n
(x, t) =
_

_
Conte udo dos registradores R
1
, . . . , R
n
,
apos t passos da computa cao de P(x),
se P(x) ainda n ao parou; ou
Conte udo nal dos registradores R
1
, . . . , R
n
,
se P(x) parou ap os uma quantidade de passos menor ou igual a t.
(3.19)
j
m
n
(x, t) =
_

_
O ndice da proxima instru cao na seq uencia (I
1
, . . . , I
s
)
quando t passos da computa cao de P(x) tenham sido completados,
se P(x) ainda nao parou apos uma quantidade de passos menor ou
igual a t; ou
0, se P(x) parou apos uma quantidade de passos menor ou igual `a t.
(3.20)
Intuitivamente, c
m
n
e j
m
n
sao fun coes totais. Observe o seguinte:
Se f(x) esta denida, entao P(x) converge apos exatamente t
0
passos. Nesse
caso t
0
= (
t
)(j
m
n
(x, t) = 0) e f(x) = c
m
n
(x, t
0
). Se por outro lado f(x) nao
esta denido, entao P(x) diverge e j
m
n
(x, t) nunca e zero. Nesse caso, a expressao
(
t
)(j
m
n
(x, t) = 0) esta indenida. Portanto, em ambos os casos tem-se:
f(x) = c
m
n
_
x, (
t
)(j
m
n
(x, t) = 0)
_
. (3.21)
Portanto, para mostrar que f e recursiva parcial, resta apenas demonstrar que as
fun c oes c
m
n
e j
m
n
tambem sao. Na verdade, essas fun coes sao recursivas primitivas,
mas a prova rigorosa disto sera adiada ate o captulo 6, onde serao apresentados al-
guns conceitos necessarios para iso. Por enquanto, o leitor deve inicialmente aceitar
que essas duas fun c oes sao recursivas primitivas. Isso conclui a prova e o captulo.
Captulo 4
Linguagem de programacao
While
Ate o presente foram apresentados dois modelos de computa cao que capturam dois
importantes aspectos da computa cao real: o primeiro, as maquinas RAM, cuja ope-
racionalidade se assemelha aos computadores reais, e portanto capta o computador
enquanto m aquina (hardware). O segundo modelo, as fun coes parciais recursivas,
que capta a natureza funcional dos computadores.
Neste captulo sera abordado um terceiro modelo: a linguagem de programa cao
te orica While, que, como o proprio nome diz, e uma linguagem de programa cao e
portanto capta o aspecto de software da computa cao real.
Todo modelo de computabilidade se baseia na premissa de que certas opera coes
ou fun c oes basicas sao inerentemente computaveis. No caso da linguagem While,
considera-se tres opera c oes basicas: escrever zero, somar um a qualquer n umero
natural

e comparar dois n umeros naturais para decidir se eles sao iguais ou nao.
Alem dessas opera c oes basicas, a linguagem While considera atribui coes simples
e o comando while. Assim a linguagem While pode ser vista como uma sub-
linguagem das linguagens de programa cao procedural de alto nvel, tipo Pascal,
Fortran ou Java, so que mais pobre em comandos assim como em tipos de dados (so
considera o tipo de dados dos n umeros naturais). O primeiro ponto nao e problema
uma vez que, como sera visto neste curso, esta linguagem e tao poderosa quanto
qualquer linguagem de programa cao real com a diferen ca que a linguagem While,
por ser te orica, nao possui limita coes de maquina, como representar somente uma
quantidade nita de n umeros. A segunda limita cao, tambem como sera vista no
decorrer do curso, e aparente, uma vez que a mesma linguagem usada para repre-
sentar n umeros naturais pode ser usada para representar inteiros, pontos utuantes,
listas de inteiros, etc.

Na verdade, representa c oes de n umeros naturais em alguma linguagem formal.


4.1. SINTAXE DA LINGUAGEM WHILE 39
4.1 Sintaxe da linguagem While
Para descrever a sintaxe da linguagem While sera usado, como usual em linguagens
de programa c ao, as formas de Backus-Naur (BNF). Uma BNF e um conjunto de
produ c oes da forma
nome) ::= expressao (4.1)
onde palavras entre e ) sao variaveis auxiliares e podem ser substitudas
pela expressao ao lado direito do smbolo ::=. A expressao do lado direito e
uma cadeia de variaveis auxiliares com smbolos terminais (os smbolos basicos da
linguagem), podendo ate ser vazia (nesse caso denotada por ). Quando houver
mais de uma produ c ao com a mesma variavel auxiliar no lado esquerdo, abrevia-se
colocando o mesmo lado esquerdo e separando os direitos com smbolo [. Por
exemplo, abrevia-se as produ coes a)::= expr1, a) ::= expr2 e a) ::= expr3, por
a) ::= expr1 [ expr2 [ expr3.
A linguagem While possui quatro classes basicas de palavras (alfabeto da
linguagem):
Nomes de variaveis. Um nome de variavel valido e qualquer cadeia de letras
mai usculas e dgitos numericos que comece com uma letra. Por exemplo,
TEMP, X, NOME1, N23TXR0, A5, etc. Distinguiremos entre dois tipos de
variaveis as de entrada, que sempre come caram com a letra A e as que nao
sao de entradas.
Smbolos de opera cao. Os unicos smbolos de opera cao sao e 0, que
denotam a fun c ao sucessor e a fun cao constante zero, respectivamente. Note
que outras constantes, por exemplos 2 (dois) nao sao permitidas.
Smbolos de rela cao. Considera-se apenas o smbolo de rela cao ,=, que denota
a nao igualdade dos valores de duas variaveis.
Smbolos de programa. Existem os smbolos , ; e ,. O smbolo
denotar a atribui c ao, isto e, o valor da expressao que esta no lado direito de
e atribudo `a variavel que esta no lado esquerdo. O smbolo ; denotara o
nal de um comando e o smbolo , sera usado para separar nomes de uma
lista. Alem dos smbolos existem seis palavras reservadas: input, output,
begin, end, while e do.
Como usual, um programa numa linguagem procedural e uma seq uencia de
comandos os quais sao executados seq uencialmente na ordem em que aparecem a
menos que ocorra um desvio. Um programa While, antes de come car o programa
propriamente dito declara quais variaveis serao de entrada e quais serao de sada

Declarar as entradas e sadas n ao e essencial. De fato muitas linguagens te oricas, por exemplo
While de [18] e PL em [4], n ao usam esse tipo de comandos. J a na linguagem LPM em [9] e
While de [16], as vari aveis de entrada e de sada s ao declaradas explicitamente.
4.1. SINTAXE DA LINGUAGEM WHILE 40
seguida pelas palavras reservadas (begin e end) para indicar o incio e o m do
programa. Estas declara c oes das variaveis de entrada e de sada so sao feitas se o
programa While tiver entradas e/ou sadas. Assim, um programa While e descrito
como
programa-while) ::= comandos de entrada-sada) begin comandos) end
comandos de entrada-sada) ::= entradas); sadas); [ entradas); [ sadas); [
entradas) ::= input lista de variaveis de entradas)
sadas) ::= output lista de variaveis de sada)
lista de variaveis de entrada) ::= variavel de entrada) [ variavel de entrada),
lista de variaveis de entrada)
variavel de entrada) ::= variavel de entrada)letra) [ variavel de entrada)dgito)
[ A
lista de variaveis de sada) ::=variavel nao de entrada) [ variavel nao de entrada),
lista de variaveis de sada)
variavel nao de entrada) ::= variavel nao de entrada)letra) [ variavel)dgito) [
letra diferente de A)
letra diferente de A) ::= B [ . . . [ Z
letra) ::= A [ letra diferente de A)
dgito) ::= 0 [ 1 [ . . . [ 9
Comandos de um programa sao uma seq uencia (podendo ser vazia) de comandos
validos.
comandos) ::= [ comando); comandos)
Um comando pode ser dois tipos: de atribui cao que indica que uma variavel do
programa, independente do seu valor atual, passa a ter o valor zero ou o valor de
uma variavel do programa (podendo ser ela mesma ou outra variavel) incrementado
em um. O outro tipo de comando e o while que indica que uma seq uencia de
comandos vai ser executado enquanto o valor de duas variaveis forem diferentes.
comando) ::= atribui c ao) [ while condi cao) do begin comandos) end
atribui c ao) ::= variavel nao de entrada) 0 [ variavel nao de entrada)
variavel)

condi c ao) ::= variavel) , = variavel)


variavel) ::= variavel de entrada) [ variavel nao de entrada)
4.2. SEM

ANTICA INFORMAL DE WHILE 41


Exemplo 4.1 Exemplos de programas While:
input A;
output B;
begin
B 0;
while B ,= A do
begin
B B

;
end
end
Programa a.
input A1, A2;
output B;
begin
U 0;
while U ,= A2 do
begin
A1 A1

;
U U

;
end
B A1

;
end
Programa b.
input A1, A2;
output B;
begin
U 0;
B 0;
while U ,= A1 do
begin
V 0;
while V ,= A2 do
begin
V V

;
U U

;
end
B B

;
end
end
Programa c.
input A;
output B;
begin
U 0;
B 0;
while A ,= U do
begin
U U

;
while A ,= U do
begin
U U

;
B B

;
end
end
end
Programa d.
4.2 Semantica informal de While
A execu c ao de um programa While obedece os seguintes requisitos:
1. Os comandos sao executados na ordem que aparecem;
2. Os comandos de atribui cao sao interpretados da seguinte maneira:
(a) X 0; associa o n umero natural zero `a variavel X.
4.2. SEM

ANTICA INFORMAL DE WHILE 42


(b) X Y

; associa `a variavel X o valor associado `a variavel Y incrementado


em uma unidade.
3. Um comando while X ,= Y do begin comandos) end, executara comandos)
enquanto o valor associado `a variavel X for diferente do valor associado `a
variavel Y . Note que se estes valores nunca tornam-se iguais, entao o programa
entrara em um ciclo innito e portanto nao parara nem retornara qualquer
resultado.
4. O comando input lista de variaveis de entrada); nao so declara que as
variaveis da lista sao de entrada, mas tambem aciona um mecanismo que
permite receber valores de algum medio fsico. Porem como a linguagem
while e te orica, pode-se somente supor que ela e executada numa maquina
te orica e portanto nao ha um medio fsico como nos computadores reais (que
sao teclado, memoria primaria e memoria secundaria), assim pode-se pensar
que a m aquina te orica que executa o programa possui uma quantidade ilimi-
tada de registradores cada um permitindo armazenar um n umero natural de
qualquer ordem e que sao usados tanto para armazenar valores de entrada
quanto de sada e temporarios. A maquina teorica associa `a cada variavel o
conte udo de um dos registradores.
5. O valor inicial de uma variavel nao declarada como entrada e sempre 0.
6. O comando output lista de variaveis de sada) e analogo ao comando input.
Quando executado pela maquina teorica ele declara que as variaveis da lista
serao consideradas como sada, e que portanto os registradores a elas associa-
dos, ao nal da execu c ao (caso termine), serao preservados enquanto os outros
serao limpados. Note que variaveis declaradas como de entrada nao podem
ser de sada.
Exemplo 4.2 Seja
1) input A1, A2;
2) output B;
3) begin
4) U 0;
5) while U ,= A2 do
6) begin
7) A1 A1

;
8) U U

9) end
10) B A1

11) end
o programa While b. do exemplo 4.1 com as linhas numeradas. A sem antica
informal deste programa e a seguinte: Em 1) declara-se que as vari aveis A1 e A2
ser ao de entrada e recebe valores para a computac ao vari aveis; em 2) declara-se que
4.3. SEM

ANTICA FORMAL 43
a vari avel B ser a de sada, no nal da execuc ao ele retornar a o valor associado
a B; em 3) inicia-se o programa propriamente dito; em 4) atribu-se ` a vari avel
U o valor zero (note que este comando e desnecess ario, uma vez que toda vari avel
inicialmente tem associado o valor 0, mas por motivos de claridade optou-se por
atribuir explicitamente ` a U o valor 0); em 5) compara-se os valores associados
` as vari aveis U e A2, se os valores s ao os mesmos ent ao o programa executar a a
instruc ao 10), caso contr ario executar a o bloco de comandos entre o begin e o end,
i.e. as linhas 7) e 8), ap os uma execuc ao do bloco volta-se comparar os valores de U
e A2; em 7) atribui-se ` a vari avel A1 o valor atual de A1 mais um; em 8) atribui-se
` a vari avel U o valor atual de U mais um; em 10) atribui-se ` a vari avel de sada
B o valor atual da vari avel A1 mais um; em 11) p ara-se a execuc ao do programa
retornando o valor associado ` a vari avel declarada como de sada, ou seja associado
` a B. Analisando esse programa, percebe-se que o bloco de comandos ligados ao
while ser a executado k-vezes, onde k e o valor associado a A2. A cada execuc ao,
o valor de A1 e incrementado em uma unidade, A1 ter a o seu valor inicial (dado
como entrada) mais o valor dado como entrada para A2. O sucessor desse valor e
ent ao atribudo ` a vari avel de sada B. Portanto este programa calcula o sucessor
da soma de dois valores dados como entrada.
4.3 Semantica formal
Existem muitas formas de tratar formalmente a semantica de uma linguagem de
programa c ao. Entre as mais conhecidas esta a semantica denotacional, introduzida
por Dana Scott e Christopher Strachey em [26]. A ideia da semantica denotacional
e associar a cada frase da linguagem de programa cao um objeto matematico, de
formas que o signicado de um programa sera a composi cao do signicado de suas
frases [21]. Portanto, a denota cao de um programa e determinada pela denota cao
de suas frases. Semantica denotacional permite que se de deni coes canonicas de
signicados de programas, e portanto livres de tecnicas de implementa cao. A parte
matematica e chamada de teoria dos domnios (alguns textos sobre esta teoria sao
[1, 25, 29]).
A semantica denotacional da linguagem While e dada pela fun cao parcial
[ [ ] ] : While [N

]
onde [N

] = f : N
k
N
m
: f e parcial e k, m N, ou seja
[N

] =
_
k,mN
[N
k
N
m
]
com [N
k
N
m
] sendo o conjunto das fun coes parciais que mapeiam k-tuplas de
n umeros naturais em m-tuplas de n umeros naturais.
Seja P = inputA
1
, A
2
, . . . , A
k
; ouputB
1
, B
2
, . . . , B
m
; begin C end um pro-
grama While, onde X
1
, . . . , X
k
, Y
1
, . . . , Y
m
sao variaveis validas da While, entao
4.3. SEM

ANTICA FORMAL 44
[ [P] ] =
n
k,m
[ [C] ]
n
k
(4.2)
onde n e o n umero de variaveis usadas no programa P.
n
k
e chamada fun cao de
entrada, e e denida por
n
k
(x
1
, . . . , x
k
) = (x
1
, . . . , x
k
, 0, . . . , 0
. .
(nk)vezes
). Ja a fun cao

n
k,m
e chamada fun cao de sada, e denida por
n
k,m
(x
1
, . . . , x
n
) = (x
k+1
, . . . , x
k+m
).
Seja i : V ar(P) N a fun cao que atribui a cada variavel que ocorre em P o
n umero de sua apari c ao. Note que se uma variavel ocorre mais de uma vez so e
considerada sua primeira apari cao. Assim, no caso do programa b do exemplo 4.1
tem-se que i(A1) = 1, i(A2) = 2, i(B) = 3 e i(U) = 4.
Se C = c
1
; . . . ; c
p
, entao [ [C] ] = [ [c
p
] ] . . . [ [c
1
] ], onde para cada j = 1, . . . , p tem-se
que [ [c
j
] ] : N
n
N
n
e denida por:
1. Se c
j
= X 0 para alguma variavel X entao
[ [X 0] ](x
1
, . . . , x
n
) = (x
1
, . . . , x
i(X)1
, 0, x
i(X)+1
, . . . , x
n
).
2. Se c
j
= X Y

para variaveis X e Y quaisquer entao


[ [c
j
] ](x
1
, . . . , x
n
) = (x
1
, . . . , x
i(X)1
, x
i(Y )
+ 1, x
i(X)+1
, . . . , x
n
).
3. [ [while X ,= Y do begin C; end] ](x
1
, . . . , x
n
) =
_
(x
1
, . . . , x
n
) , se x
i(X)
,= x
i(Y )
[ [while X ,= Y do begin C; end] ]([ [C] ](x
1
, . . . , x
n
)) , senao
Exemplo 4.3 Seja P o programa a. do exemplo 4.1. Ent ao para k = 1, m = 1,
n = 2, i(A) = 1 e i(B) = 2. Assim,

2
1
(x) = (x, 0),

2
1,1
(x, y) = y,
[ [B 0] ](x, y) = (x, 0),
[ [while B ,= A do begin B B

; end] ](x, y) =
_
(x, y) , se x = y
[ [while B ,= A do begin B B

; end] ][ [B B

] ](x, y) , sen ao
Assim, para a entrada 2 tem-se que
4.4. FUNC

OES WHILE-COMPUT

AVEIS 45
[ [P] ](2) =
2
1,1
[ [while B ,= A do begin B B

; end] ] [ [B 0] ]
2
1
(2)
=
2
1,1
[ [while B ,= A do begin B B

; end] ] [ [B 0] ](2, 0)
=
2
1,1
[ [while B ,= A do begin B B

; end] ](2, 0)
=
2
1,1
[ [while B ,= A do begin B B

; end] ] [ [B B

] ](2, 0)
=
2
1,1
[ [while B ,= A do begin B B

; end] ](2, 1)
=
2
1,1
[ [while B ,= A do begin B B

; end] ] [ [B B

] ](2, 1)
=
2
1,1
[ [while B ,= A do begin B B

; end] ](2, 2)
=
2
1,1
(2, 2)
= 2
Generalizando, tem-se que [ [P] ](x) = x.
4.4 Funcoes While-computaveis
Diz-se que uma fun c ao f : N
k
N
m
e computada por uma programa While
P, se [ [P] ] = f. Uma fun c ao f : N
k
N
m
e dita While-computavel se existe
um programa While P que computa f. O conjunto de todas as fun coes While-
comput aveis sera denotado por FWC.
Os programas a., b., c. e d.,do exemplo 4.1, computam as fun coes f(x) = x,
f(x, y) = x + y + 1, f(x, y) = qt(y, x) se y divide x e f(x, y) caso contrario,
e f(x) = x

1, respectivamente. Um programa While que computa a fun cao


multiplica c ao entre dois n umeros naturais e o seguinte:
input A1, A2;
output B;
begin
B 0;
U 0;
while U ,= A1 do
begin
V 0;
while V ,= A2 do
begin
V V

;
B B

end
U U

end
end
Todas estas fun c oes sao recursivas parciais. A seguir sera provado que todas as
fun c oes While-computaveis sao tambem recursivas parciais.
Teorema 4.4 If f : N
k
N
m
e While-comput avel ent ao f e parcial recursiva.
Isto e, FWC FRP.
4.4. FUNC

OES WHILE-COMPUT

AVEIS 46
Prova: Seja P um programa que computa f, isto e [ [P] ] = f. Mostra-se, entao, que
[ [P] ] e uma fun c ao parcial recursiva. Uma vez que composi cao de fun coes recursivas
parciais e parcial recursiva e que a semantica denotacional de um programa While
e a composi c ao da fun c ao de entrada com a fun cao que denota cada comando do
programa com a fun c ao de sada, e suciente mostrar que cada uma delas e parcial
recursiva.

n
k
= Id
k
Z . . . Z
. .
(nk)vezes

n
k,m
= . . .
. .
kvezes
Id
m
. . .
. .
(n(k+m))vezes
.
[ [X 0] ] = Id
i(X)1
Z Id
ni(X)
[ [X Y

] ] = S
n
3
(Id
n
, Id
i(X)1
, (S U
n
i(Y )
) . . .
. .
ni(Y )
, Id
ni(X)
).
[ [while X ,= Y do begin C; end] ] = S
n
2
([ [C] ]

, Id
n
, (S
n
2
(, U
n
i(X)
, U
n
i(Y )
) [ [C] ])).
Inversamente, a seguir sera provado que toda fun cao parcial recursiva e While-
comput avel e portanto FRP FWC.
Teorema 4.5 Se f : N
k
N
m
e uma func ao parcial recursiva ent ao f e While-
comput avel.
Prova: Se f e parcial recursiva entao pela deni cao 3.29, ou f e uma fun cao
basica, ou pode ser obtida a partir de duas ou mais fun coes recursivas parciais via
opera c ao de composi c ao, ou via opera cao de produto cartesiano, ou via recursao pri-
mitiva, ou via minimaliza c ao. Sera provado por indu cao na quantidade de opera coes
usadas para obter f que existe um programa While que computa f. Mas so se
mostrara o programa sem demonstrar que ele realmente computa f, pois seria ne-
cessario provar que a semantica denotacional do programa resulta em f, o qual e
bastante mais complicado, pois provavelmente a expressao da fun cao obtida via [ [P] ]
nao sera igual `a expressao da fun cao parcial recursiva original.
A fun c ao zero e While-computavel. De fato, um programa While que com-
puta Z e o seguinte:
input ;
output B;
begin
B 0
end

Lembre que aqui se est a fazendo um abuso de linguagem, na verdade


n
k
= Id
k1

S
nk+1
(Id
nk+1
, Id
1
, Z , . . . , Z
. .
(nk)vezes
).
4.4. FUNC

OES WHILE-COMPUT

AVEIS 47
A fun c ao terminal e While-computavel. De fato, um programa While que
computa e o seguinte:
input A;
output ;
begin
end
A fun c ao identidade e While-computavel. De fato, um programa While que
computa Id
m
e o seguinte:
input A1, . . . , Am;
output B1, . . . , Bm;
begin
B1 0;
while B1 ,= A1 do
begin
B1 B1

end
.
.
.
Bm 0;
while Bm ,= Am do
begin
Bm Bm

end
end
A fun c ao sucessor e While-computavel. De fato, um programa While que
computa S e o seguinte:
input A;
output B;
begin
B A

end
Para cada n > 1 e 1 i n a fun cao i-esima proje cao e While-computavel.
De fato, um programa While que computa U
n
i
e o seguinte:
input A1, . . ., An;
output XB;
begin
B 0;
while B ,= Ai do
4.4. FUNC

OES WHILE-COMPUT

AVEIS 48
begin
B B

end
end
Se g
1
: N
n
N
p1
, . . . , g
m
: N
n
N
pm
e f : N
t
N
p
, onde
t =

m
i=1
pi, sao While-computaveis, entao por hipoteses existem programas
While P
g1
, . . . , P
gm
e P
f
tais que [ [P
gi
] ] = g
i
para cada i = 1, . . . , m e
[ [P
f
] ] = f. Claramente, se renomeia as variaveis de um programa, e o novo
programa continuar a computando a mesma fun cao. Assim, pode-se renomear
as variaveis dos programas P
g1
, . . . , P
gm
de tal forma que todos tenham as
mesmas variaveis de entrada (por exemplo A1, . . . , An) e diferentes variaveis
auxiliares (por exemplo o i-esimo programa poderia ter as variaveis auxiliares:
B
i
1, . . . , B
i
k
i
onde k
i
=[ V ar(P
gi
) [ n) de tal modo que as variaveis de sada
sejam sempre as primeiras (B
i
1, . . . , B
i
pi). Assim, o programa While que
computa a fun c ao g
i
tem a seguinte forma:
input A1, . . . , An;
output B
i
1, . . . , B
i
pi;
begin
C
i
end
onde C
i
e o corpo (comandos) do programa. Analogamente o programa P
f
pode ser modicado renomeando as variaveis de tal forma que as variaveis
de entrada sejam B
1
1, . . . , B
1
p1, . . . , B
m
1 . . . , B
m
pm e as variaveis auxiliares
sejam diferentes das usadas nos P
gi
(ja modicado), por exemplo F1, . . . , F
r
,
onde r =[ V ar(P
f
) [ t (assim as variaveis de sada seriam F1, . . . , Fp).
O programa While que tem como variaveis de entrada A1, . . . , An e como
variaveis de sada as variaveis de sada de P
f
e como comandos: C
1
; . . . ; C
m
; C
f
,
onde C
f
sao os comandos de P
f
(ja modicado) computa a fun cao
h : N
n
N
p
, denida por:
h(x
1
, . . . , x
n
) = f(g
1
(x
1
, . . . , x
n
), . . . , g
m
(x
1
, . . . , x
n
)).
Se f : N
k
N
m
e g : N
n
N
p
sao fun coes recursivas parciais e While-
comput aveis, entao por hipoteses existem programas While P
f
, . . . , P
g
tais
que [ [P
f
] ] = f e [ [P
g
] ] = g. Sem qualquer perda, as variaveis desses programas,
podem ser renomeadas de tal forma que ambos tenham diferentes variaveis.
Seja o programa While
input AF1, . . . , AFk, AG1, . . . , AGn;
output BF1, . . . , BFm, BG1, . . . , BGp;
begin
4.4. FUNC

OES WHILE-COMPUT

AVEIS 49
C
f
;
C
g
end
onde AF1, . . . , AFk sao as variaveis de entrada, BF1, . . . , BFm e C
f
os co-
mandos do programa P
f
(ja modicado) e AG1, . . . , AGn sao as variaveis de
entrada, BG1, . . . , BGp e C
f
os comandos do programa P
g
(ja modicado).
Claramente este programa computa f g.
Se g : N
m
N
s
e h : N
m+1+s
N
s
sao While-computaveis, entao
existem programas P
g
e P
h
que computam g e h, respectivamente. Por sim-
plicidade pense que as variaveis de entrada de P
g
sao A1, . . . , Am e as de P
h
sao A1, . . . , An, onde n = m+ 1 +s, pense tambem que as variaveis de sada
de P
g
e P
h
sao BG1, . . . , BGs e BH1, . . . , BHs, respectivamente. Entao
input A1, . . . , A(m+ 1);
output BH1, . . . , BHs;
begin
C
g
;
B 0;
while B ,= A(m+ 1) do
begin
C

h
;
B B

end
end
onde C

h
e C
h
substituindo todas as ocorrencias de A
m+1
, A
m+2
, . . . , A
m+1+s
por B, BG1, . . . , BGs, respectivamente.
Este programa computa a fun cao f da deni cao 3.11 (recursao primitiva a
partir de g e h).
Seja f : N
m+1
N uma fun cao While-computavel. Entao existe um pro-
grama P
f
que computa f. Sejam A1, . . . , A(m + 1) as variaveis de entrada,
B a variavel de sada e C
f
os comandos de P
f
. O seguinte programa
input A1, . . . , Am;
output Y ;
begin
Y 0;
C

f
;
while B ,= 0 do
begin
Y Y

;
X1 0;
4.5. EXERCCIOS 50
.
.
.
Xk 0;
C

f
end
end
onde C

f
e C
f
substituindo todas as ocorrencias de A(m+1) por Y e X1, . . . , X
k
sao as variaveis auxiliares de C
f
que nao sao de sada (assim, k =[ V ar(P
f
) [
(m+ 2)).
Este programa computa a minimaliza cao de f, isto e f.
Corolario 4.6
FWC = FRP
4.5 Exerccios
1. Identique os erros sintaticos no seguinte programa While:
input A1; B2, C3;
output
begin
A1 0;
while C ,= B2 do
begin
i 1;
while i = C3 do
begin
C i;
i i

;
end
end
end
2. De a semantica informal e formal para o programa While a seguir:
input A1, A2;
output B;
begin
B 0;
C 0;
while C ,= A1 do
begin
C C

4.6. CONSIDERAC

OES FINAIS 51
end
while C ,= A2 do
begin
B B

;
B B

;
C C

end
end
3. Descreva informalmente que faz o programa do exerccio anterior.
4. Fa ca programas While que computem as fun coes:
(a) f(x, y) = (y, x).
(b) f : N
2
N denida por f(x, y) = x + y (note que o exemplo 4.1, b.,
faz f(x, y) = x +y + 1 enquanto o exemplo 4.1, d., faz f(x) = x

1).
(c) fac : N N denida por fac(x) =

x
i=1
i.
(d) f(x, y) = 1 se x y, caso contrario f(x, y) = 0.
(e) f(x, y, z) = maxx, y, z.
(f) f(x) = 1 se x e par e f(x) = 0 se x e mpar.
4.6 Consideracoes nais
A linguagem de programa c ao While, por ser teorica, e uma linguagem de baixo
nvel (sem uma grande quantidade de variantes de comandos nem de tipos de dados).
Porem, assim como na computa cao real as primeiras linguagens de programa cao fo-
ram de baixo nvel e paulatinamente aumentaram de nvel, incorporando comandos
mais poderosos. Na linguagens de programa cao While isso tambem pode ser feito
atraves de um recurso conhecido como macros. A ideia e incorporar comandos
mais complexos `a linguagem, por exemplo atribui coes do tipo: B C, B C+D
e B C D (com a sua semantica natural) ou comandos de controle tipo:
for B = 0 to C do
begin
comandos)
end
onde B nao ocorre em comandos), e
if condi c ao)
then
begin
comandos)
end
4.6. CONSIDERAC

OES FINAIS 52
else
begin
comandos)
end
Como usual, pode-se pensar que um comando desses tipos e, em tempo de com-
pila c ao

, substitudo por uma seq uencia de comandos, por exemplo a atribui cao
B C seria substituda pelos comandos:
B 0;
while B ,= C do
begin
B B

end
Ja um comando do tipo:
for B = 0 to C do
begin
comandos)
end
seria substitudo pelos comandos:
B 0;
while B ,= C do
begin
comandos);
B B

end
Note que quem determina o tipo de dados em While e a fun cao semantica.
Assim, incluir outros tipos de dados em While poderia ser feito simplesmente,
classicando os nomes de variaveis (por exemplo aquelas que terminem em Z seriam
do tipo Inteiro, as que terminem em F seria do tipo ponto utuante, etc. Assim,
While poderia suportar varios tipos de dados.

Essa express ao e usada em linguagens de computa c ao real para indicar que no momento
da compila c ao do programa, o compilador substitui a macro pela seq uencia de comandos pre-
estabelecidos. J a numa linguagem te orica como While, quem faz a tarefa do compilador e a fun c ao
sem antica, e a sem antica de uma macro seria igual ` a composi c ao da sem antica dos comandos que
ele sintetiza.
Captulo 5
Tese de Church-Turing
Neste captulo serao apresentadas as no coes intuitivas de procedimento efetivo e
algoritmos e a tese de Church-Turing que liga essas no coes com a de fun coes com-
putaveis por alguns dos modelos apresentados aqui (assim por outros nao apresen-
tados neste texto).
5.1 Procedimentos efetivos e algoritmos
A no c ao de procedimentos efetivo e uma no cao intuitiva que tenta reetir processo
estritamente mecanico, i.e. processos que se seguidos a risca sempre proporcionem o
mesmo resultado. O interesse por este tipo de processos e antigo, de fato ja os gregos
antigos tentaram encontrar processos efetivos para algumas opera coes matematicas,
por exemplo o algoritmo da divisao de Euclides e um tal processo.
Deni cao 5.1 Um procedimento efetivo e uma descric ao nita e n ao ambgua
de um conjunto nito de operac oes as quais devem ser efetivas, no sentido que exista
um procedimento estritamente mec anico para realizar estas.
Observe que uma destas opera coes efetivas num procedimento efetivo pode ser
do tipo va para a opera c ao n. Assim, o conjunto nito de opera coes pode descre-
ver um conjunto innito de passos computacionais (execu cao das opera coes). Um
conceito estreitamente ligado ao de procedimento efetivo e o de algoritmo?
Deni cao 5.2 Um algoritmo e um procedimento efetivo que especica uma seq uencia
de operac oes as quais sempre param.
5.2 Tese de Church-Turing
No exemplo 2.10 o poder da maquina RAM foi aumentado ao se permitir a abre-
via c ao, e a re-utiliza c ao de programas RAM ja conhecidos. Ou seja, os programas
5.2. TESE DE CHURCH-TURING 54
RAM ja conhecidos foram incorporados `a linguagem. O mesmo ocorre com a lin-
guagem de programa c ao While, que pode ser estendida considerando macros (veja
as considera c oes nais do captulo 4). Isso nao somente mostra como um programa
RAM (ou While) pode ser construda de partes mais simples, mas destaca um
aspecto negativo ao se trabalhar com modelos de baixo nvel, i.e. modelos que po-
ssuem instru c oes muito primitivas, pois enquanto se necessita de pouca imagina cao
para construir novos programa RAM utilizando macro-instru coes (como o programa
SQRT do exemplo 2.10 que usa os macro-comandos SQR e DIST), faze-los sem elas
tomaria muito tempo ou facilmente levaria a erros de implementa cao e nao acres-
centaria nada ao entendimento. O conjunto de instru coes da maquina RAM e tao
restrito que qualquer argumento, solu cao ou prova matematica de que um problema
nao trivial pode ser implementado na RAM seria extremamente trabalhoso.
Apesar dessa diculdade, se quer argumentar que as maquinas RAM podem
efetuar nao somente opera c oes simples para as quais sao oferecidos programas
explcitos, mas tambem processos mais complexos. Observe que adicionar novos
comandos `as m aquinas RAM, que podem ser computados pelas proprias RAM, nao
incrementa o poder computacional das maquinas, so as tornam mais manipulaveis.
Por outro lado, pode-se perceber que essas maquinas sao capazes de realizar tare-
fas mais complexas atraves do artifcio da macro-instru cao, mas ca a pergunta do
quao complexas podem ser? ou em outras palavras, qual o seu verdadeiro poder de
computa c ao? Desse modo, seria desejavel achar uma maneira de efetuar uma dis-
cussao razoavelmente rigorosa que conduzisse a conclusao de que um determinado
processo e comput avel em alguma maquinas RAM sem ter que escrever o codigo
de baixo nvel, mas infelizmente nao existe maneira completamente satisfatoria de
fazer isso. A sada para esse problema e a aplica cao da tese de Church-Turing, que
sera apresentada mais adiante.
Suponha que, em algum sentido, as maquinas RAM tem o mesmo poder de com-
puta c ao que qualquer computador tpico. Como pode-se defender ou refutar essa
hipotese? Para defende-la seria necessario se tomar uma seq uencia de problemas
crescentemente mais complicados e mostrar como eles sao resolvidos por maquinas
RAM. Deveria-se tambem tomar o conjunto de instru coes da linguagem de maquina
de algum computador especco e projetar uma maquina RAM que pudesse efetuar
todas as instru c oes no conjunto. Embora isso seja totalmente enfadonho para qual-
quer um, e algo totalmente possvel, em princpio, se a hipotese estiver correta.
Entretanto, enquanto todo sucesso nessa dire cao fortaleceria a convic cao na ver-
dade da hipotese, ela nao levaria a uma prova mas seria apenas uma evidencia do
fato. A diculdade esta no fato de que nao esta claro o que seja exatamente um
computador tpico e nao se tem meios de tornar essa deni cao precisa. Assim,
ao comparar as m aquinas RAM com um computador especco, por exemplo um
Pentium XXXX, se deixaria de fora computadores mais poderosos que certamente
vao surgir no futuro (inclusive talvez com novos paradigmas computacionais).
Pode-se tambem abordar o problema de outra perspectiva; a saber, tentando
5.2. TESE DE CHURCH-TURING 55
encontrar algum procedimento para o qual se possa escrever um programa de com-
putador, mas para o qual tambem se possa mostrar que nao pode existir nenhuma
m aquina RAM que implemente este procedimento. Se isso fosse possvel teria-se
uma base para rejeitar a hipotese. Entretanto, ate agora ninguem foi capaz de
produzir um tal contra-exemplo. Portanto, essas infrutferas tentativas de con-
tradi c ao tambem devem ser tomadas como uma evidencias circunstancial de que tal
contra-exemplo nao pode ser dado, e portanto que a hipotese e valida. Dessa forma,
seguindo as evidencias, tudo indica que as maquinas RAM sao, em princpio, tao
poderosas quanto qualquer computador.
Argumentos como esse levaram Alonzo Church e Alan Turing, em torno de 1936,
de maneira independente, e usando formalismos diferentes

, `a hoje conhecida Tese


de Church-Turing

. O texto abaixo e uma cita cao de Andrew Hodges [15] sobre


Alan Turing [31] :
Diz-se que uma fun c ao e efetivamente calculavel se seus valores po-
dem ser determinados por um processo puramente mecanico. Embora
seja relativamente facil captar intuitivamente essa ideia, e contudo de-
sej avel dispor de alguma deni cao mais precisa, matematicamente ex-
primvel. Uma deni c ao desta natureza foi formulada primeiro por
Godel em Princeton, em 1934 ... Tais fun coes foram descritas como re-
cursivas gerais por Godel ... Outra deni cao de calculabilidade efetiva
foi dada por Church ... que a identica com a -denibilidade. O au-
tor [ou seja, o proprio Turing] sugeriu recentemente uma deni cao que
corresponde mais estreitamente `a ideia intuitiva ... Armou-se acima
que uma fun c ao e efetivamente calculavel se os seus valores podem ser
determinados por algum processo puramente mecanico. Podemos inter-
pretar este enunciado literalmente, entendendo por processo puramente
mecanico um processo que poderia ser levado a cabo por uma maquina ...
O desenvolvimento destas ideias conduz `a deni cao do autor para uma
fun c ao comput avel e a uma identica cao da computabilidade [no sentido
tecnico preciso de Turing] com a calculabilidade efetiva. Nao e difcil,
embora trabalhoso, provar que estas tres deni coes sao equivalentes.
Pode-se perceber nesta cita cao, que na epoca ja se tinha a no cao intuitiva de
que um procedimento efetivo era um procedimento capaz de ser realizado por uma
m aquina. Alan Turing prop os uma maquina conceitual, chamada maquina de
Turing, para ser a maquina a qual se refere o conceito intuitivo de fun cao efeti-
vamente calculavel. A proposta de Turing estabeleceu o princpio do computador
moderno e deu origem a ciencia da computa cao. A sua proposta mostrou-se equiva-
lente as propostas de Church e Godel, entretanto o modelo de maquina de Turing,
difere das demais, pois, num certo sentido, deixa de lado o universo formal e coloca

Enquanto Turing usou suas m aquinas, Church usou um modelo chamado de fun c oes -
denveis.

Esta tese tambem e conhecida como Tese de Church ou Tese de Turing.


5.2. TESE DE CHURCH-TURING 56
em cena o mundo fsico como uma alega cao do que pode ser feito.
A equivalencia entre as propostas e obtida do fato delas computarem a mesma
classe de fun c oes; a saber a classe das fun coes recursivas parciais FRP. Partindo
disso, pode-se concluir que as RAM sao tambem equivalentes `a esses modelos, e
portanto que e permitido se reescrever a tese de Church-Turing da seguinte maneira:
Tese de Church-Turing. Qualquer computa cao que pode ser efetuada por
meios mecanicos pode ser efetuada por uma maquina RAM.

E importante ter em mente o que e a tese de Church-Turing. Ela nao e algo


que possa ser provado. Para isso seria necessario uma deni cao precisa do termo
meios mecanicos e isso requereria algum outro modelo abstrato que nao levaria
muito mais longe do que o anterior. Esta tese e vista mais apropriadamente como
uma deni c ao do que constitui um procedimento efetivo; ou seja:
Deni cao 5.3 Um procedimento efetivo que calcula uma fun c ao
f : N
m
N
n
e um programa RAM P que computa f. Uma func ao chama-
se fun c ao efetiva, efetivamente calcul avel, ou fun c ao comput avel se ela e
uma func ao para a qual existe um programa RAM que a computa. Se P e um proce-
dimento efetivo que calcula f e f e uma func ao total, ent ao P chama-se algoritmo
que calcula f.
Assumir a tese de Church-Turing como uma deni cao, deixa em aberto a questao
do quanto essa deni c ao e sucientemente abrangente, ou seja, com rela cao aos
computadores ela e suciente para cobrir tudo o que foi feito ate hoje e o que e
concebido como um futuro factvel? Um sim inequvoco nao e possvel, mas as
evidencias em seu favor sao muito fortes. Alguns argumentos para aceitar essa tese
como deni c ao sao os seguintes:
1. O resultado fundamental: Muitas propostas independentes (por exemplo as
propostas de Godel, Church e Turing citadas acima) para uma formula cao
precisa da ideia intuitiva de procedimento efetivo tem conduzido a mesma
classe de fun c oes; a classe das fun coes recursivas parciais.
2. Uma vasta cole c ao de fun coes efetivamente computaveis tem sido mostrada
ser recursiva parcial.
3. A implementa c ao de um programa P numa maquina RAM para computar
uma fun c ao e claramente um exemplo de um procedimento efetivo; assim
diretamente da classe das fun coes RAM-computaveis RAM, pode-se perceber
que todas as fun c oes nessa classe sao computaveis no sentido informal.
4. Ninguem ate agora encontrou uma fun cao que pudesse ser aceita como com-
putavel no sentido informal, que nao fosse RAM-computavel.
5.3. CONSIDERAC

OES FINAIS 57
Esses argumentos nao podem ser utilizados para provar a tese de Church-Turing,
eles sao apenas evidencias, ou seja, a tese desempenha o mesmo papel em ciencia da
computa c ao como fazem as leis basicas da fsica e da qumica. A fsica classica, por
exemplo, e baseada fortemente nas leis do movimento de Newton. Embora sejam
chamadas de leis, elas nao sao logicamente necessarias. Em contrapartida elas sao
modelos plausveis que explicam o mundo fsico. Sao aceitas porque as conclusoes
que sao tiradas a partir delas concordam com a experiencia e a observa cao da reali-
dade. Semelhantemente, elas n ao podem ser provadas verdadeiras, embora possam
ser refutadas por um experimento que resulte na contradi cao de alguma conclusao
baseada nas mesmas, a partir disso come caria-se a questionar a validade dessas leis.
Por outro lado, repetidos insucessos de refuta cao de uma lei fortalece a conan ca
nela. Esta e a situa c ao para a tese de Church-Turing. Portanto, nao ha problema
em considera-la uma lei basica da ciencia da computa cao, pois as conclusoes que se
tiram a partir dela concordam com o que se sabe acerca dos computadores reais.
Entretanto, existe sempre a possibilidade de que alguem apare ca com outra de-
ni c ao que explique alguma situa cao sutil que nao possa ser coberta por m aquinas
RAM, mas que ainda caia no escopo da no cao intuitiva de procedimento efetivo.
Em tal eventualidade, algumas das discussoes subseq uentes teriam que ser consi-
deravelmente modicadas. Algumas discussoes mais aprofundadas sobre a validade
da tese de Church-Turing, considerando argumentos a favor e contra, podem ser
encontradas em [2, 28, 30]. Com base nas evidencias, daqui por diante assume-se
a tese de Church-Turing, e portanto a deni cao de procedimento efetivo em termos
de m aquinas RAM.
Identicar um procedimento efetivo com um programa RAM permite provar
rigorosamente argumentos como existe um procedimento efetivo. . . ou nao existe
nenhum procedimento efetivo. . .. Entretanto, para construir explicitamente um
procedimento desse tipo, mesmo para problemas relativamente simples, pode ser
bastante trabalhoso. Para evitar isso pode-se apelar para a tese de Church-Turing
e alegar que qualquer coisa que pode ser realizada com qualquer computador pode
tambem ser feita por uma m aquina RAM. Conseq uentemente, pode-se substituir as
m aquinas RAM por um programa em JAVA, por exemplo, na deni cao 5.3. Isto
facilita consideravelmente a exibi cao do tal procedimento, visto que a linguagem
em questao e mais poderosa que as maquinas RAM, entretanto o leitor deve ter
em mente que e a tese de Church-Turing que suporta a possibilidade de se escrever
uma m aquina RAM para o tal procedimento, ja que ele pode ser implementado num
computador concreto.
5.3 Consideracoes nais
Considere, agora, o seguinte argumento contra a tese de Church-Turing:
A m aquina RAM e um computador de proposito especco, pois uma
vez que um programa RAM P seja denido (instalado na maquina), ela
ca restrita a efetuar a computa cao particular que esse programa faz.
5.3. CONSIDERAC

OES FINAIS 58
Os computadores digitais, por outro lado, sao maquinas de proposito
geral, i.e. m aquinas que podem ser programadas para fazer diferentes
tarefas em tempos diferentes. Conseq uentemente, nenhuma maquina
RAM pode ser considerada equivalente aos computadores digitais de
prop osito geral.
No entanto, esta obje c ao pode ser superada projetando-se um programa que
imita todos os programas, o chamado programa RAM universal. O que e e
como seria construdo um programa universal para maquinas RAM e uma assunto
para o proximo captulo.
Captulo 6
Numeracao de Godel e
Programas universais
Este captulo mostra que programas podem ser armazenados na memoria da RAM
para serem processados. Dessa forma, a RAM, como qualquer PC, e um computa-
dor de prop osito geral. A ideia por tras e a mesma de que programas sao cadeias
binarias carregadas na memoria do computador e simulados pela CPU. O conceito
matematico associado `a CPU e o de programa universal.
No que segue, essas ideias sao formalizadas. Mostra-se tambem que o conjunto
de todos os programas RAM e um conjunto enumeravel, e portanto tem a mesma
quantidade de elementos que o conjunto dos n umeros naturais. Isso da origem ao
primeiro limite da computa c ao nas RAM; a saber que existem mais fun coes do que
programas RAM para computa-las, o que signica, em outras palavras, que nao se
pode fazer tudo com as RAM.
A enumera c ao aqui proposta baseia-se nas propriedades de n umeros primos,
que permitirao a transforma cao de seq uencias nitas de n umeros naturais em um
unico n umero natural. Alem da transforma cao de programas em n umeros naturais,
apresenta-se o conceito de cardinalidade e enumerabilidade.
6.1 Enumeracao efetiva
Algumas referencias bibliogracas introduzem o conceito de conjuntos efetiva-
mente enumeraveis (veja Cutland [8] p.73). Um conjunto X e efetivamente enu-
meravel se existe uma bije c ao f : X N tal que f e f
1
sao fun coes efetivamente
comput aveis. Quando X N
m
, para algum m 0, nao ha qualquer problema,
visto que para mostrar que X e efetivamente enumeravel e suciente reescrever a
bije c ao f e a sua inversa f
1
como fun coes recursivas parciais, ou, equivalentemente,
encontrar um programa RAM que as implemente. Na verdade isso acontecera mais
6.2. N

UMEROS PRIMOS E ALGUMAS FUNC



OES RECURSIVAS 60
adiante neste captulo (se c ao 6.3) quando for estabelecido, por exemplo, que o con-
junto de todas as seq uencias nitas de n umeros naturais,

k>o
N
k
, e efetivamente
enumeravel. Uma outra maneira nesses casos seria mostrar que existe uma fun cao
recursiva parcial f : N
m
N tal que dom(f) = X veja Brainerd [4].
O problema surge quando X nao e parte de N
m
. Ou seja a natureza dos obje-
tos nao esta ligada aos n umeros naturais. Por exemplo, para o conjunto dos n umeros
inteiros existe uma bije c ao efetivacom os n umeros naturais. Mas tambem existem
subconjuntos dos inteiros para os quais toda bije cao entre eles e os n umeros naturais
e nao efetiva. So que os modelos usados para capturar a no cao de procedimento
efetivo geralmente so trabalham com fun coes de N
m
em N
n
. Todavia, a ideia de
fundo e a mesma para o caso N
m
, i.e. X e recursivamente enumeravel se existe um
meio efetivo capaz de gerar todos os elementos de X. Entretanto, por questoes de
espa co isso nao sera aprofundado neste texto, apenas se mencionara que X e efe-
tivamente enumeravel, e quando isso acontecer o leitor deve imaginar que existem
meios efetivos capazes de transformar X em N e vice-versa. Por exemplo, quando
X e o conjunto de programas RAM (i.e. um conjunto de seq uencias de instru coes
RAM) pode-se imaginar que existe um programa que analisa cada instru cao na
seq uencia e a transforma num n umero natural, transformando uma seq uencia de
instru c oes (I
1
, . . . , I
s
) numa seq uencia de naturais (a
1
, . . . , a
s
) que em seguida e
transformada no n umero natural n. Assim, no que segue apresenta-se bije coes que
indicam que o conjunto de todas as instru coes RAM, 1, e o conjunto de todos os
programas RAM,P, sao efetivamente enumeraveis, e como conseq uencia existe uma
metodo efetivo capaz de armazenar cada elemento destes conjuntos na memoria do
computador sob a forma de n umero natural.
6.2 N umeros primos e algumas funcoes recursivas
Os dois teoremas que seguem suportam o desenvolvimento deste captulo. O pri-
meiro deles garante a existencia de tantos n umeros primos quantos forem necessarios,
enquanto que o segundo estabelece a rela cao entre n umeros naturais e seq uencias
nitas de n umeros naturais.
Teorema 6.1 Existem innitos n umeros primos.
Teorema 6.2 Sejam os n umeros primos dispostos em ordem crescente de magni-
tude: p
0
, p
1
, . . . , p
n
, . . . (i.e. p
0
= 2, p
1
= 3, p
2
= 5, . . . ). Todo inteiro positivo a
pode ser fatorado num produto de n umeros primos que e unico dentro da ordem dos
fatores.
Isso signica que para todo n umero natural a > 0,
a = p
a0
0
p
a1
1
p
ai
i
. . . (6.1)
onde a
i
e o n umero de vezes que p
i
ocorre como fator de a. Note que se p
i
nao e
um fator de a, entao a
i
= 0, o que justica o produto innito acima e caracteriza
uma representa cao innita para n umeros naturais.
6.2. N

UMEROS PRIMOS E ALGUMAS FUNC



OES RECURSIVAS 61
Exemplo 6.3
1. 18 = 2
1
3
2
5
0
7
0
. . .
2. 13 = 2
0
3
0
5
0
7
0
11
0
13
1
17
0
. . .
3. 100 = 2
2
3
0
5
2
7
0
. . .
4. 16 = 2
4
3
0
5
0
7
0
. . .
Observe, entretanto, que existe no maximo uma quantidade nita de a

j
s que
caracterizam o natural a > 0 e o restante dos expoentes sera zero. Isso da origem
a seguinte proposi c ao:
Proposi cao 6.4 Considerando os n umeros primos em ordem de magnitude:
p
0
, p
1
, p
2
, . . . , p
n
, . . . , para cada natural positivo a existe uma unica seq uencia -
nita de n umeros naturais (a
0
, a
1
, . . . , a
n
) que corresponde, respectivamente, aos
expoentes de p
0
, p
1
, p
2
, . . . , p
n
na decomposic ao prima de a ou seja a =
p
a0
0
p
a1
1
p
an
n
p
0
n+1
p
0
n+2
. . . . Inversamente, associado a cada seq uencia
(a
0
, a
1
, . . . , a
n
) de n umeros naturais est a associado um unico n umero natural a tal
que a = p
a0
0
p
a1
1
p
an
n
.
Exemplo 6.5
(a) 18 est a associado a (1, 2)
(b) 13 est a associado a (0, 0, 0, 0, 0, 1)
(c) 100 est a associado a (2, 0, 2)
(d) 16 est a associado a 4
A proposi c ao que segue mostra que algumas fun coes que serao necessarias para
o desenvolvimento deste captulo sao recursivas primitivas.
Proposi cao 6.6 (Divisibilidade e recursao primitivas) As seguintes func oes
s ao recursivas primitivas:
1. D(x) = ao n umero de divisores de x; onde por convenc ao D(0) = 1
2. Pr(x) =
_
1, se x e primo;
0, se x n ao e primo.
3. p
n
= ao n-esimo numero primo; onde por convenc ao p
0
= 0, e obviamente
p
1
= 2, p
2
= 3, etc
4. (x)
n
=
_
ao expoente de p
n
na decomposic ao prima de x, para x, n > 0,
0, se x = 0 ou n = 0.
6.3. NUMERAC

AO DE G

ODEL 62
Prova:
1. D(x) =

yx
div(y, x)
2. Pr(x) = sg([ D(x) 2 [)
3.
_
p
0
= 0
p
n+1
= (
z(pn!+1)
)(z > p
n
e Pr(z) = 1.)
4. (x)
n
= (
z<x
)(div(p
z+1
n
, x))

6.3 Numeracao de Godel


Como mencionado anteriormente, esta se cao se encarregara de mostrar que um
programa RAM pode ser transformado num n umero natural, gra cas `as fun coes e
propriedades de n umeros primos vistas acima, e por conseguinte pode ser carregado
na memoria das RAM. Esta se c ao juntamente com a que segue mostra a existencia
de programas RAM que fazem o papel da CPU em computadores convencionais
os programas universais demonstrando que a arquitetura da RAM e uma arqui-
tetura de prop osito geral.
Antes de desenvolver o captulo, e necessario demonstrar que algumas fun coes
auxiliares sao recursivas primitivas.
N umeros naturais na base 2 e fun coes auxiliares. Todo n umero natural
x pode ser escrito na base dois da seguinte maneira: x =

i=0
(i, x)2
i
; onde
(i, x) = 0 ou (i, x) = 1. Por exemplo, o n umero 35 pode ser reescrito como a
seguinte expressao: 1 2
0
+1 2
1
+0 2
2
+0 2
3
+0 2
4
+1 2
5
+0 2
6
+. . . . Entretanto,
observe que (0, 35) = (1, 35) = (5, 35) = 1, enquanto que (j, 35) = 0, para
j ,= 0, 1, 5. Isso signica que existe uma quantidade nita, l(x), de is tal que
(i, 35) = 1; no caso l(35) = 3. Assim, o n umero 35 poderia ser escrito com uma
quantidade nita de parcelas; ou seja l(35) parcelas: 35 = 1 2
0
+ 1 2
1
+ 1 2
5
.
Fazendo b
j
igual ao j-esimo expoente na soma nita: 1 2
0
+1 2
1
+1 2
5
, entao
b
1
= 0, b
2
= 1, e b
3
= 5. Assim, 35 pode ser, entao, reescrito como um somatorio
nito sem parcelas nulas: 2
b1
+ 2
b2
+ 2
b
l(35)
. Generalizando esses fatos, se x > 0
e l(x) = l, onde l e a quantidade de posi coes i tal que (i, x) = 1, entao pode-se
reescrever x segundo a seguinte equa cao:
x = 2
b1
+ 2
b2
+ + 2
b
l
(6.2)
Sendo assim, dado um n umero natural x, tem-se associado as seguintes fun coes:
1. : N N N, onde (i, x) e
i
na expressao x =

i=0

i
2
i
6.3. NUMERAC

AO DE G

ODEL 63
2. l : N N, onde l(x) =
_
l, como em (6.2), se x > 0
0, caso contrario.
3. b : NN N, onde b(i, x) =
_
b
i
, como em (6.2), se x > 0 e 1 i l(x)
0, caso contrario.
Proposi cao 6.7 As func oes (i, x), l(x), e b(i, x) s ao recursivas primitivas.
Prova:
1. Como x =

i=0
(i, x)2
i
, entao qt(2
i
, x) = (i, x) + 2 (i + 1, x) + . . . , e
portanto (i, x) = rm(2, qt(2
i
, x))
2. l(x) e o n umero de is tal que (i, x) = 1; logo l(x) =

i<x
(i, x)
3. Se x > 0, entao x = 2
b(1,x)
+ 2
b(2,x)
+ + 2
b(l(x),x)
, assim, se 1 i l(x),
entao b(i, x) e o i-esimo ndice k tal que (k, x) = 1. Portanto,
b(i, x) =
_
_
_
(
z<x
)
_

ky
(k, x) = i
_
, se 1 i l(x) e x > 0;
0, caso contrario.

N umeros naturais positivos e seq uencias. Assim, como a todo n umero na-
tural positivo x > 0 esta associado uma unica seq uencia de n umeros naturais
b
1
, b
2
, . . . , b
l(x)
, tal que x = 2
b1
+2
b2
+ +2
b
l(x)
, entao dada uma seq uencia nita
de n umeros naturais (a
1
, . . . , a
k
), existe uma unica expressao para x associada a
(a
1
, . . . , a
k
); a saber:
x = 2
a1
+ 2
a1+a2+1
+ 2
a1+a2+a3+2
+ + 2
a1+a2++a
k
+(k1)
(6.3)
Dessa forma, a
1
= b
1
e a
i+1
= b
i+1
b
i
1. Portanto, dado um n umero
positivo x, a i-esima componente da seq uencia (a
1
, . . . , a
k
) associada a x pela
expressao acima, pode ser obtida atraves da seguinte fun cao recursiva primitiva:
a : N N
+
N, onde:
_
a(i, x) = b(i, x), se i = 0 ou i = 1;
a(i + 1, x) = (b(i + 1, x)

b(i, x))

1, se i 1.
(6.4)
Para transformar um programa num n umero natural (n umero de Godel), o pro-
grama sera primeiramente transformado numa seq uencia de n umeros naturais que
posteriormente sera transformada no natural desejado. A proposi cao que segue
demonstra que o passo da transforma cao da seq uencia de naturais num n umero
natural, de fato e um processo efetivo pois pode ser expresso numa fun cao recursiva
primitiva, alem disso introduz-se duas bije coes efetivas que sao necessarias para
especicar uma bije c ao efetiva entre o conjunto dos programas e o conjunto das
seq uencias nitas de naturais.
6.3. NUMERAC

AO DE G

ODEL 64
Proposi cao 6.8 Os seguintes conjuntos s ao efetivamente enumer aveis:
1. N N
2. N N
+
N
3.

k>0
N
k
o conjunto de todas as seq uencias nitas de n umeros naturais
Prova:
1. A fun c ao : N N N, denida por (m, n) = 2
m
(2n + 1) 1, e uma
bije c ao recursiva primitiva. A inversa
1
: N N N, dada por
1
(x) =
(
1
(x),
2
(x)), e uma fun c ao recursiva primitiva, pois
1
(x) e
2
(x) sao fun coes
recursivas primitivas denidas por
1
(x) = (x +1)
1
e
2
(x) =
1
2
_
x + 1
2
1(x)
1
_
.
2. A fun c ao : NN
+
N N, denida por (m, n, q) = ((m, n1), q) e uma
bije c ao recursiva primitiva (c.f. o tem anterior). A inversa

1
: N NN
+
N, denida por
1
(x) = (
1
(
1
(x)),
2
(
1
(x)) +1,
2
(x))
e recursiva primitiva.
3. A fun c ao :

k>0
N
k
N denida por:
(a
1
, . . . , a
k
) = 2
a1
+ 2
a1+a2+1
+ 2
a1+a2+a3+2
+ + 2
a1+a2++a
k
+(k1)
1
(6.5)
e uma bije c ao recursiva primitiva. Da propria expressao, pode-se concluir
que ela e recursiva primitiva. Observe que a expressao 2
a1
+ 2
a1+a2+1
+
2
a1+a2+a3+2
+ + 2
a1+a2++a
k
+(k1)
designa um n umero positivo, assim
para que o 0 seja imagem de uma seq uencia foi necessario a subtra cao de
uma unidade nesta expressao na verdade 0 = (0) = 2
0
1. Por outro
lado, dado um n umero positivo x a fun cao
1
(x) e calculada da seguinte
forma: Como x possui uma unica representa cao binaria, pode-se encontrar
unicamente k 1 n umeros naturais b
1
, . . . , b
k
, tal que 0 b
1
< b
2
< < b
k
e x+1 = 2
b1
+2
b2
+ +2
b
k
, a partir dos quais calcula-se
1
(x) = (a
1
, . . . , a
n
),
onde a
1
= b
1
e a
n+1
= b
n+1
b
n
1 (1 n < k).

Exemplo 6.9
1. (0, 2, 3) = 2
0
+ 2
0+2+1
+ 2
0+2+3+2
1 = 1 + 8 + 128 1 = 136
2.
1
(136) e calculado da seguinte maneira: calcule o sucessor de 136, i.e. 137;
em seguida encontre a expans ao literal de 137 na base 2, no caso
137 = 1 2
0
+ 0 2
1
+ 0 2
2
+ 1 2
3
+ 0 2
4
+ 0 2
5
+ 0 2
6
+ 1 2
7
. Portanto,
137 = 2
0
+ 2
3
+ 2
7
; fazendo b
1
= 0, b
2
= 3 e b
3
= 7, recupera-se a seq uencia
anterior (0, 2, 3) do seguinte modo: a
1
= b
1
, a
2
= b
2
b
1
1 e a
3
= b
3
b
2
1.
6.3. NUMERAC

AO DE G

ODEL 65
(I
1
, . . . , I
s
)

=
&&
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
(a
1
, . . . , a
s
)

k>0
N
k

//
e N
Figura 6.1: Esquema da numera cao de Godel
6.3.1 Numeracao de programas
Seja P um programa RAM visto como uma seq uencia de instru coes (I
1
, . . . , I
s
),
(a
1
, . . . , a
s
) uma seq uencia de n umeros naturais e e um n umero natural. Entao o
processo de numera c ao de Godel que segue pode ser visualizado na gura 6.1.
Ou seja, a enumera c ao do conjunto dos programas se da atraves da trans-
forma c ao de um programa numa seq uencia de n umeros naturais atraves da fun cao
que e seguida pela transforma c ao da seq uencia resultante no n umero natural corre-
spondente. A proposi c ao 6.8 garante a segunda parte da prova. Como um programa
e uma seq uencia de instru c oes, e portanto uma seq uencia de objetos que nao sao
n umeros naturais, a bije c ao efetiva esperada e apresentada a seguir, entretanto
como ja mencionado, por quest oes de espa co nao ha como expressar matematica-
mente a efetividade da fun c ao : P

k>0
N
k
, onde P e o conjunto dos programas,
pois seria necessario todo um desenvolvimento para isso. Entretanto, apela-se para
a no c ao informal de efetividade; pode-se por exemplo pensar em como sendo um
compilador (um programa) que le programas RAM e transforma cada instru c ao do
mesmo em n umeros naturais. Partindo disso, pode-se concluir que a numera cao
de Godel, nada mais e do que a aplica cao da bije cao : P N. No que segue
mostra-se como pode ser denida.
Para simplicar as provas, a quantidade de instru coes basicas da RAM e re-
duzida, pois nem todas as instru coes basicas ate aqui apresentadas sao primitivas,
algumas instru c oes basicas podem ser obtidas de outras fun coes basicas, mas, por
questao de simplicidade de programa cao, se preferiu nao adotar antes um conjunto
mnimo de instru c oes primitivas para a RAM.
Proposi cao 6.10 Para todo programa RAM P, existe um outro programa P

que
computa as mesmas func oes, e tal que P

n ao possui as instruc oes CLR Ri,


Ri <- Rj, JMP Nia, e JMP Nib.
Prova: Suponha que P e um programa RAM. No que segue elimina-se a cada
passo uma das instru c oes acima. No primeiro passo eliminam-se os jumps incon-
6.3. NUMERAC

AO DE G

ODEL 66
dicionais JMP Nia e JMP Nib. Escolha o menor n umero natural n tal que Rn nao e
referenciado por P. Construa o seguinte programa, P2, a partir de P substituindo
cada Nk JMP Nix, onde Nix e Nia ou Nib, pelo seguinte peda co de codigo
RAM:
Nk CLR Rn
Rn JMP Nix
Para eliminar a instru c ao Ri <- Rj, escolha os menores n umeros naturais m e
n, tal que P2 nao fa ca referencia aos registradores Rm e Rn. Sejam Nc e Nd dois
rotulos que nao sejam utilizados em P2. Forme entao o seguinte programa P3 a
partir de P2 substituindo Nk Ri <- Rj pelo seguinte codigo RAM:
Nk CLR Ri
CLR Rn
CLR Rm
Nc Rj JMP Ndb
DEC Rj
INC Ri
INC Rn
Rm JMP Nca
Nd Rn JMP Ncb
DEC Rn
INC Rj
Rm JMP Nda
Nc CONTINUE
Finalmente elimina-se a instru cao CLR. Seja Nc um rotulo nao utilizado pelo
programa P3. Escolha um n tal que nenhum registrador Rm e referenciado por P3
para qualquer m n. Isso garante que o registrador Rn inicialmente contera zero.
Finalmente construa P a partir de P3 substituindo cada instru cao Nk CLR Ri
pelo seguinte c odigo RAM:
Nk Ri JMP Ncb
DEC Ri
Rn JMP Nka
Nc CONTINUE

Utilizando o conjunto minimal de instru coes, descreve-se agora como codicar


um programa RAM em um unico n umero natural. O processo que segue, encarrega-
se de especicar a fun c ao : P

k>0
N
k
. Para isso, e necessario descrever como
cada instru c ao deve ser individualmente codicada num n umero natural.
Proposi cao 6.11 O conjunto das instruc oes 1 e efetivamente enumer avel.
6.3. NUMERAC

AO DE G

ODEL 67
Prova: O metodo efetivo que transformara cada instru cao da RAM num n umero
natural e interpretado na bije cao : 1 N, onde:
1. (Ni INC Rj) = 5 (i, j 1)
2. (Ni DEC Rj) = 5 (i, j 1) + 1
3. (Ni CONTINUE) = 5 i + 2
4. (Ni Rj JMP Nka) = 5 (i, j, k) + 3
5. (Ni Rj JMP Nkb) = 5 (i, j, k) + 4

A fun c ao estabelece, portanto, que qualquer bije cao efetiva que seja implemen-
tada entre o conjunto das instru coes e o conjunto dos n umeros naturais devera ma-
pear os cinco tipos de instru cao, respectivamente, em n umeros naturais da forma
5n, 5n+1, 5n+2, 5n+3, e 5n+4, e o valor resultante devera obedecer as expressoes
analticas acima.
A decodica c ao de um n umero natural numa instru cao RAM, obedece a fun cao

1
: N 1 a seguir. Como para cada x N, existe um unico q N e um unico
r N tal que x = 5 q +r e 0 r < 5, entao o valor de r indica o tipo da instru cao
codicada, enquanto que o quociente q contem informa coes referentes ao rotulo e
possivelmente ao registrador referenciado ou ao rotulo de destino (no caso de desvios
condicionais). Assim, a decodica cao da instru cao a partir de um n umero natural
e especicada da seguinte maneira: Dado x N e q = qt(5, x),
1. se rm(5, x) = 0, entao
1
(x) =N
1
(q) INC R(
2
(q) + 1)
2. se rm(5, x) = 1, entao
1
(x) =N
1
(q) DEC R(
2
(q) + 1)
3. se rm(5, x) = 2, entao
1
(x) =Nq CONTINUE
4. se rm(5, x) = 3, entao
1
(x) = NU
3
1
(
1
(q)) R(U
3
2
(
1
(q))) JMP NU
3
3
(
1
(q))a
5. se rm(5, x) = 4, entao
1
(x) = NU
3
1
(
1
(q)) R(U
3
2
(
1
(q))) JMP NU
3
3
(
1
(q))b
Se o programa RAM que se esta tentando codicar possui instru coes sem rotulo,
entao coloque nestas instru c oes o menor rotulo que nao esta sendo usado pelo pro-
grama.
Exemplo 6.12 Segundo essa regra, o programa:
N0 R2 JMP N1b
INC R1
DEC R2
N1 CONTINUE
6.3. NUMERAC

AO DE G

ODEL 68
e transformado no programa equivalente abaixo, para posterior codicac ao:
N0 R2 JMP N1b
N2 INC R1
N2 DEC R2
N1 CONTINUE
Proposi cao 6.13 O conjunto de todos os programas P e efetivamente enumer avel.
Prova: O metodo efetivo que transformara um programa num n umero natural e
interpretado na bije c ao : P N, onde dado um programa RAM P = (I
1
, . . . , I
s
),
no formato discutido anteriormente, (P) = ((I
1
), . . . , (I
s
)). e uma bije cao
efetiva pois as fun c oes ,
1
, e
1
sao bije coes que interpretam metodos efe-
tivos. Observe que a fun c ao : P

k>0
N
k
e denida por (I
1
, . . . , I
s
) =
((I
1
), . . . , (I
s
)) e = .
Deni cao 6.14 Dado um programa RAM P, o valor (P) chama-se c odigo de
G odel ou n umero de G odel de P. Dene-se P
n
como sendo o programa cujo
n umero de G odel e n.
Dessa forma, dado um programa P, pode-se efetivamente encontrar o n umero
de Godel (P), e dado um n umero natural n, pode-se efetivamente encontrar o
programa P
n
, obedecendo assim o esquema da gura 6.1.
Exemplo 6.15 Tome o programa P
N0 INC R1
N1 INC R2
N2 CONTINUE
ent ao (N0 INC R1) = 5(0, 11) = 5(0, 0) = 5(2
0
(20+1)1) = 5(11) = 0,
(N1 INC R2) = 5 (1, 1) = 5 (6 1) = 25, e (N2 CONTINUE) = 5 2 + 2 = 12.
Portanto (P) = (0, 25, 12) e (P) = 2
0
+ 2
0+25+1
+ 2
0+25+12+2
1 = 2
0
+ 2
26
+
2
39
1 = 1 + 67.108.864 + 549.755.813.888 1 = 549.822.922.752. Assim o c odigo
de G odel associado a P e 549.822.922.752, o que e denotado por P
549.822.922.752
.
Inversamente, dado 549.822.922.752, calcula-se
1
(549.822.922.752) como segue:
primeiramente calcule
1
: N

k>0
N
k
, i.e. encontre b
1
, b
2
, . . . , b
l
tal que 0
b
1
< b
2
< < b
l
e 2
b1
+ 2
b2
+ + 2
b
l
= 549.822.922.752 + 1. Com certeza
o leitor encontrar a a express ao 2
0
+ 2
26
+ 2
39
. Em seguida calcule a
1
= b
1
= 0,
a
2
= (b
2
b
1
) 1 = (26 0) 1 = 25 e a
3
= (b
3
b
2
) 1 = (39 26) 1 = 12.
Dessa forma
1
(549.822.922.752) = (0, 25, 12). Por m, o programa listado acima
e a seq uencia (
1
(0),
1
(25),
1
(12)).
6.3. NUMERAC

AO DE G

ODEL 69
Existem, obviamente, outras bije coes efetivas entre P e N, a escolha aqui foi
arbitraria e nao obedeceu qualquer criterio especial. Para a teoria que segue, qual-
quer outra bije c ao efetiva

e suciente. Todavia, e necessario xar uma forma de


numerar os programas RAM, e para isso elege-se a codica cao acima, ou seja para
o resto deste livro xa-se a numera cao de Godel como sendo a fun cao proposta
acima.
Um primeiro limite. Uma das conclusoes desta se cao e que existem no maximo
tantos programas quantos sao os n umeros naturais. Isso signica que e, por exemplo,
impossvel gerar computacionalmente todos os n umeros reais, ou qualquer outro
conjunto incontavel

.
6.3.2 Numeracao de funcoes computaveis
A partir do metodo de numera cao proposto, pode-se enumerar tambem fun coes
comput aveis juntamente com o seu domnio e imagem. A seguir se introduz a
nota c ao que sera utilizada no restante deste livro, esta nota cao segue a utilizada
em Cutland [8]. O principal resultado desta se cao e a existencia de apenas uma
quantidade enumeravel de fun coes computaveis, reescrevendo o comentario anterior
de que existem apenas uma quantidade enumeravel de programas RAM; entretanto
a abordagem aqui e um pouco mais rigorosa.
Deni cao 6.16 Para cada a N, e m, n 0:
1.
(m,n)
a
e a func ao
(m,n)
a
: N
m
N
n
implementada por P
a
2. W
(m,n)
a
= dom(
(m,n)
a
), i.e (x
1
, . . . , x
m
) : P
a
(x
1
, . . . , x
m
)
3. E
(m,n)
a
= ` a imagem da func ao
(m,n)
a
, i.e. (y
1
, . . . , y
n
) : P
a
(x
1
, . . . , x
m
)
(y
1
, . . . , y
n
).
Escreve-se
a
, W
a
e E
a
, respectivamente no lugar de
(1,1)
a
, W
(1,1)
a
e E
(1,1)
a
.
Exemplo 6.17 Seja a = 549.822.922.752 do exemplo anterior. Sabe-se que
P
a
e o programa (N0 INC R1, N1 INC R2, N2 CONTINUE). Portanto,
1.
a
(x) = x + 1
2.
(1,2)
a
(x) = (x + 1, 1)
3.
(1,3)
a
(x) = (x + 1, 1, 0), etc.
4.
(2,1)
a
(x, y) = x + 1
5.
(2,2)
a
(x, y) = (x + 1, y + 1)
6.
(2,3)
a
(x, y) = (x + 1, y + 1, 0),etc.
7. W
a
= N, E
a
= N
+
8. W
(1,2)
a
= N, E
a
= N
+
1

Na verdade existem conjuntos cont aveis cujos elementos nao podem ser gerados computacio-
nalmente, mas isso n ao ser a tema deste livro.
6.3. NUMERAC

AO DE G

ODEL 70
9. W
(1,3)
a
= N, E
a
= N
+
1 0, etc.
Se f : N N e uma fun c ao computavel, entao existe um programa P que
computa f, e portanto f =
a
, onde a = (P). Diz-se que a e um ndice para f.
Como existem varios programas que computam f, entao f possui varios ndices.
Assim, toda fun c ao comput avel da forma f : N N aparece na enumera cao

0
,
1
,
2
, . . .
O mesmo se aplica para fun c oes da forma f : N
m
N
n
; para m, n N; i.e. pode-se
pensar numa enumera c ao

(m,n)
0
,
(m,n)
1
,
(m,n)
2
, . . .
para cada m, n N.
Proposi cao 6.18 Dados m, n N, seja (
(m,n)
o conjunto de todas as func oes
comput aveis da forma f : N
m
N
n
, e ( =

(
(m,n)
: m, n N. Ent ao (
(m,n)
e
( s ao enumer aveis.
Prova: Tomando a enumera cao
(m,n)
0
,
(m,n)
1
,
(m,n)
2
, . . . , que possui repeti coes,
constroi-se a seguinte enumera cao sem repeti coes:
_
f(0) = 0
f(k + 1) =
z
(
(m,n)
z
,=
(m,n)
f(0)

(m,n)
z
,=
(m,n)
f(k)
)
assim,
(m,n)
f(0)
,
(m,n)
f(1)
,
(m,n)
f(2)
. . . e uma enumera cao de (
(m,n)
sem termos repetidos

.
Como ( =

(
(m,n)
, entao a enumerabilidade do conjunto ( segue do fato que
a uniao enumeravel de conjuntos enumeraveis e um conjunto enumeravel.
Revisitando o limite anterior. O teorema que segue e na verdade uma ou-
tra versao do limite descrito anteriormente; a saber: que existe uma quantidade
enumeravel de programas disponveis para a toda e qualquer computa cao.
Teorema 6.19 Existe uma func ao f : N N, tal que f , (
(1,1)
, e portanto f , (.

Observe que esta enumera c ao possui ocorrencias repetidas da mesma fun c ao, j a que v arios
programas computam a mesma fun c ao, e portanto v arios ndices de programas est ao associados ` a
mesma fun c ao.

A enumera c ao f n ao e efetiva. Entretanto existe uma bije c ao efetiva proposta em


Friedberg [11].
6.4. PROGRAMAS UNIVERSAIS 71
Prova: No que segue constr oi-se uma fun cao total f que e simultanemente di-
ferente de toda fun c ao na enumera cao
0
,
1
,
2
, . . . do conjunto (
(1,1)
. Explicita-
mente dene-se:
f(k) =
_

k
(k) + 1, se
k
(k) estiver denido;
0, caso contrario.
(6.6)
Assim, para cada k N, f(k) difere de
k
(k), pois se
k
(k) estiver denido, entao
f difere de
k
, ja que retorna o sucessor de
k
(k). Se
k
(k) estiver indenido,
entao f difere de
k
, pois f(k) estara denido. Como f difere de toda fun cao
comput avel
k
, entao signica que f nao aparece na enumera cao acima e portanto
nao e uma fun c ao do conjunto (

. Logo, existem fun coes numericas que nao sao
comput aveis.
6.4 Programas universais
O computador moderno e capaz de carregar programas na memoria juntamente com
os seus dados e simular o comportamento descrito pelo programa sobre os dados in-
formados. Programa e dados de entrada sao carregados no formato binario e a CPU
se encarrega de simular o comportamento do programa carregado. Dessa forma,
pode-se pensar na CPU como sendo um programa que imita todos os programas,
i.e. ela e um programa universal. A prova da existencia de programas universais
e um dos pilares da computabilidade e depende do processo de numera cao descrito
anteriormente. No que segue demonstra-se a existencia de programas e fun coes
comput aveis universais.
6.4.1 Funcoes e programas universais
Considere a fun c ao U(x, y) denida por
U(x, y) =
x
(y). (6.7)
Num certo sentido, a fun c ao U engloba todas as fun coes computaveis
0
,
1
,
2
, . . . ,
pois para um k particular, a fun cao f : N N denida por:
f(y) = U(k, y) (6.8)
e por transitividade a fun c ao computavel
k
. Diz-se entao que U e a fun cao uni-
versal associada `as fun coes computaveis
0
,
1
,
2
, . . . . Mais geralmente,
da-se a seguinte deni c ao:

O argumento desta prova utiliza um metodo de prova criado por George Cantor, chamado
metodo da diagonaliza c ao de Cantor, que e geralmente utilizado para demonstrar que certos con-
juntos s ao enumer aveis.
6.4. PROGRAMAS UNIVERSAIS 72
Deni cao 6.20 A fun c ao universal associada as func oes comput aveis

(m,n)
0
,
(m,n)
1
,
(m,n)
2
, . . . , designada por U
(m,n)
: N
m+1
N
n
, e denida como
U
(m,n)
(e, x
1
, . . . , x
m
) =
e
(x
1
, . . . , x
n
) (6.9)
Escreve-se U(e, x) no lugar de U
(1,1)
(e, x).
A questao que surge e: As fun coes universais sao computaveis?. Se sim, entao
isso garante a existencia de programas universais, i.e. programas que sao capazes
de simular programas. A proposi cao que segue, demonstra a computabilidade das
fun c oes universais. A prova descreve as fun coes universais como fun coes recursivas
parciais. Mais especicamente, como fun coes que decodicam o codigo de Godel
de um programa e simulam o seu comportamento diante de um argumento. Isso j a
era de se esperar, visto que os programas universais sao versoes da CPU dos nossos
dias.
Proposi cao 6.21 Para cada m, n N, a func ao universal U
(m,n)
e comput avel.
Prova: Na deni c ao 2.4, foi comentado que o par ordenado (c, j), caracteriza o
estado corrente de uma computa cao, onde c e a congura cao atual dos registradores
e j o proximo passo de computa cao a ser executado. Na verdade, como c contem as
informa c oes do conte udo dos registradores r
1
, r
2
, . . . , entao c pode ser especicado
como sendo o n umero c = 2
r1
3
r2
. . . . Diz-se que c e o codigo de congura cao
do programa de ndice e. Dessa forma, o n umero natural = (c, j), armazena
a informa c ao sobre o estado corrente. Note que o conte udo r
i
do registrador
R
i
pode ser facilmente recuperado de pela expressao (
1
())
1
e j pela expressao

2
(). Convenciona-se que se P
e
parou, entao j = 0 e c e a congura cao nal.
A mudan ca dos valores c, j e durante a computa cao de P
e
, a dependencia
desses valores em rela c ao ao c odigo de Godel e, da entrada x e o n umero t de passos
completados e expresso atraves das seguintes fun coes: Para x = (x
1
, . . . , x
m
),
1. c
m
n
(e, x, t) =`a congura c ao c apos t passos da computa cao de P
e
(x) haver
sido completada; ou `a congura cao nal, se P
e
(x) em t ou menos passos.
2. j
m
n
(e, x, t) =
_

_
ao n umero da
proxima instru cao
de P
e
(x), quando
tenham sido completados
t passos, se P
e
(x) nao parou apos t passos
ou menos;
0, se P
e
(x) em t passos ou menos.
3.
m
n
(e, x, t) = (c
m
n
(e, x, t), j
m
n
(e, x, t)) i.e. o estado da computa cao de P
e
(x)
apos t passos.
6.4. PROGRAMAS UNIVERSAIS 73
No que segue dene-se a fun c ao
m
n
e mostra-se que ela e computavel. Ao denir esta
fun c ao, tem-se que c
m
n
(e, x, t) =
1
(
m
n
(e, x, t)) e j
m
n
(e, x, t) =
2
(
m
n
(e, x, t)). Logo,
a computabilidade dessas fun coes esta em fun cao da computabilidade da fun cao
m
n
.
Observe ainda que, em demonstrando a computabilidade de
m
n
, se a computa cao
de P
e
(x) para, entao isso ocorre em (
t
)(j
m
n
(e, x, t) = 0) passos, e a congura cao
nal da RAM sera c
m
n
(e, x, (
t
)(j
m
n
(e, x, t) = 0)), e portanto se tera:
U
(m,n)
(e, x) = ((c)
1
, (c)
2
, . . . , (c)
n
) (6.10)
onde c = c
m
n
(e, x, (
t
)(j
m
n
(e, x, t) = 0)).
A fun cao
m
n
e recursiva primitiva. A prova que segue e uma adapta cao de
Cutland [8]. Dene-se duas fun coes config e nxt que descrevem as mudan cas
em c
m
n
e j
m
n
durante a computa cao. Suponha que em algum estagio da computa cao
de P
e
o estagio corrente e = (c, j) e que P
e
possui s instru coes. Pode-se denir
o efeito da j-esima instru c ao de P
e
no estado atraves das seguinte fun coes:
1. config(e, ) =
_

_
a nova congura cao apos
a j-esima instru cao de P
e
ter sido executada, se 1 j ln(e);
c, caso contrario.
2. nxt(e, ) =
_

_
o n umero da proxima instru cao
apos a j-esima instru cao de P
e
ter sido executada sobre
a congura cao c, se 1 j ln(e) e;
a proxima instru cao
existe em P
e
0, caso contrario.
Assim,
m
n
e denida por recursao primitiva a partir de config e nxt:
_

m
n
(e, x, 0) = (2
x1
3
x2
. . . p
xm
m
, 1)
(e, x, y + 1) = (config(e,
m
n
(e, x, t)), nxt(e, x, t))).
(6.11)
Observe que
m
n
(e, x, 0) expressa o estado inicial do programa, i.e. o estado antes
da primeira instru c ao de P
e
ser executada. Note ainda que nao se deve confundir a
j-esima instru c ao do programa P
e
= (I
1
, . . . , I
s
) i.e. 1 j s com o codigo
(I
j
).

m
n
sera recursiva primitiva, caso config e nxt forem recursivas primitivas. Para
isso, e suciente estabelecer que as fun coes: ln, gn, ch, e v que seguem sao recursivas
primitivas:
1. ln(e) = e o n umero de instru coes do programa P
e

6.4. PROGRAMAS UNIVERSAIS 74


2. gn(e, j) =
_
_
_
O c odigo da j-esima instru cao em P
e
, se 1 j ln(e);
0, caso contrario.
3. ch(c, z) = a congura c ao resultante quando a congura cao c e operada com
a instru c ao de c odigo z
4. v(c, j, z) =
_

_
O n umero j

da proxima instru cao,


quando a congura cao c e operada com
a instru c ao de codigo z, e isso ocorre
como a j-esima instru cao do programa, se j > 0;
0, caso contrario.
Como = (c, j), c =
1
(), e j =
2
(), se essas quatro fun coes forem recursivas
primitivas, entao, as fun c oes config e nxt denidas abaixo tambem serao recursivas
primitivas:
config(e, ) =
_
ch(
1
(), gn(e,
2
())), se 1
2
() ln(e);

1
(), caso contrario.
(6.12)
nxt(e, ) =
_
v(
1
(),
2
(), gn(e,
2
())), se este n umero e ln(e);
0, caso contrario.
(6.13)
As fun coes ln(e) e gn(e) sao recursivas primitivas. Com efeito,
ln(e) = l(e +1) e gn(e, j) = a(j, e +1), onde l e a sao as fun coes da proposi cao 6.7.
As seguinte fun c oes tambem sao recursivas primitivas:
1. u : N N, tal que se z = (Ni INC Rj) ou z = (Ni DEC Rj), entao u(z) = j,
para isso e suciente fazer u(z) =
2
(qt(5, z)) + 1, sempre que rm(5, z) = 0
ou rm(5, z) = 1.
2. se z = (Ni Rj JMP Nka) ou z = (Ni Rj JMP Nkb), entao v
0
(z) = i,
v
1
(z) = j e v
2
(z) = k, para isso fa ca v
0
(z) = U
3
1
(
1
(qt(5, z))), v
1
(z) =
U
3
2
(
1
(qt(5, z))) e v
2
(z) = U
3
3
(
1
(qt(5, z))), sempre que rm(5, z) = 3 ou
rm(5, z) = 4.
3. inc(c, j) = a mudan ca na congura cao c causada pelo efeito da instru cao
Ni INC Rj = c p
j
4. dec(c, j) = a mudan ca na congura cao c causada pelo efeito da instru cao
Ni DEC Rj = qt(p
j
, c)
5. a fun c ao ch(c, z) descrita acima: ch(c, z) =
_
_
_
inc(c, u(z)), se rm(5, z) = 0;
dec(c, u(z)), se rm(5, z) = 1;
c, caso contrario;
6.5. EXERCCIOS 75
6. a fun c ao v(c, j, z) descrita acima, onde:
v(c, j, z) =
_

_
j + 1, se rm(5, z) ,= 3 ou rm(5, z) ,= 4
i.e. se z e o codigo de uma
instru cao Ni INC Rj, Ni DEC Rj,
ou Ni CONTINUE;
j + 1, se rm(5, z) = 3 ou rm(5, z) = 4,
e (c)
v1(z)
,= 0;
ln(e) + 1, se rm(5, z) = 3, (c)
v1(z)
= 0, e
(
k
< j)(v
2
(z) = v
0
(gn(e, k))) = j
(
k
< j)
(v
2
(z) = v
0
(gn(e, k))), se rm(5, z) = 3, (c)
v1(z)
= 0, e
(
k
< j)(v
2
(z) = v
0
(gn(e, k))) ,= j
(
k
< ln(e) + 1)
(k > j v
2
(z) =
v
0
(gn(e, k))), se rm(5, z) = 4 e (c)
v1(z)
= 0
(6.14)
Observe que v(c, j, z) retorna o valor ln(e)+1, nos casos em que a minimaliza cao nao
satisfaz a igualdade v
2
(z) = v
0
(gn(e, k)), o que signica que o destino do jump,
codicado em v
2
(z), nao e encontrado no programa, e portanto a maquina devera
parar. Isso completa a prova que a fun cao
m
n
e recursiva primitiva e portanto que
a fun c ao universal U
(m,n)
e recursiva parcial.

6.5 Exerccios
1. Encontre o n umero de Godel dos programas abaixo:
INC R1
INC R2
CONTINUE
INC R1
DEC R2
CONTINUE
2. Encontre os programas que correspondem ao codigo de Godel 100 e 453.
3. Encontre o domnio e imagem das fun coes
100
,
(2,1)
100
e
(2,2)
100
6.6 Consideracoes nais
Como mencionado a prova original da existencia de programas universais, proveu
o princpio para o computador de proposito geral dos dias de hoje. Alem disso,
6.6. CONSIDERAC

OES FINAIS 76
uma importante conseq uencia do fato da fun cao
m
n
ser recursiva primitiva e que
e possvel se provar que toda fun cao recursiva parcial pode ser obtida de fun c oes
recursivas primitivas com no m aximo uma aplica cao do operador de minimaliza cao
este importante fato e conhecido como a forma normal de Kleene.
No que segue, apresenta-se outros limites da computa cao alem daqueles apre-
sentados aqui. La mostra-se que certos problemas, nao podem ser tratados compu-
tacionalmente devido `a sua natureza.
Captulo 7
Problemas Nao Computaveis
Os captulos anteriores caracterizaram o que pode ser feito com os computadores,
entretanto nao cou claro o que nao pode ser feito. Embora a tese de Church-Turing
leve `a cren ca de que essas limita coes nao sao muitas, em varias ocasioes observa-
se que nao existe um algoritmo que resolva certos problemas que sabe-se que tem
solu c ao ou seja, nao existe uma solu cao efetiva para o problema. De fato, pela
enumera c ao de Godel das m aquinas RAM, so existe uma quantidade enumeravel
de tais m aquinas, porem a quantidade de fun coes parciais de N em N e incontavel.
Logo, existe uma quantidade incontavel de fun coes que nao podem ser calculadas
por m aquinas RAM. Assim, existem mais questoes que nao sao computaveis do
que comput aveis. Felizmente, a maioria das fun coes conhecidas sao calculaveis por
m aquinas RAM. Na verdade e difcil encontrar fun coes que nao sejam computaveis,
entretanto nao se deve confundir o fato de nao conhecer um algoritmo (ou maquina
RAM) que compute uma determinada fun cao com o fato de nao existir um tal al-
goritmo.
O argumento que o poder da computa cao e limitado nao e surpreendente. In-
tuitivamente, sabe-se que muitas questoes vagas e especulativas requerem ideias e
raciocnios bem alem da capacidade de qualquer computador previsvel. O que e
mais interessante para o cientista da computa cao e que existem questoes que podem
ser claras e estabelecidas de forma simples, aparentando terem solu cao algortimica,
mas que nao sao computacionalmente sol uveis.
Partindo dessas considera coes, este captulo apresenta os conceitos de problema
de decisao e redu c ao de problemas. Sao apresentados alguns problemas classicos de
indecidibilidade como o famoso problema da parada. Desse problema segue um
n umero de problemas relacionados que tambem sao indecidveis.
7.1. COMPUTABILIDADE E DECIBILIDADE 78
7.1 Computabilidade e decibilidade
A deni c ao 2.6, estabelece que uma fun cao f : N
m
N
n
e RAM-computavel se
existe um programa RAM P que computa o valor de f, para todos os argumentos no
seu domnio, isto e P(x
1
, . . . , x
m
) f(x
1
, . . . , x
m
) quando (x
1
, . . . , x
m
) dom(f) e
P(x
1
, . . . , x
m
) caso contrario.
Por simplicidade, se estudara a classe dos problemas de decisao, que sao
os problemas de determinar se um elemento x de algum universo U pertence ou
nao a um determinado subconjunto A de U (ou equivalentemente, se satisfaz uma
determinada propriedade); i.e. dado x U, determinar se x A . Se existir um
algoritmo que receba x e de como resultado um simples sim, caso x A ou nao,
caso x , A, diz-se que o problema de decisao para o conjunto A e decidvel. Se tal
algoritmo nao existir, entao diz-se que o problema de decisao para o conjunto A e
indecidvel.
Observe que todo problema decidvel e computavel, no sentido de que existe
um algoritmo (programa RAM) que computa uma solu cao para o problema, mas a
recproca nao e verdadeira, isto e, existem problemas que sao computaveis mas por
nao serem problemas de desi cao nao sao decidveis.
Quando se estabelecem resultados de decibilidade ou indecibilidade, deve-se,
sempre, saber qual e o domnio em questao, porque isso pode afetar a conclusao.
Um problema pode ser decidvel sobre algum domnio mas nao sobre outro. Espe-
cicamente uma unica instancia do problema e sempre decidvel, pois a resposta
e sempre ou verdadeira ou falsa. No primeiro caso a maquina RAM que sempre
responde verdadeiro da a resposta correta, enquanto no segundo caso uma que
responde sempre falso e apropriada. Isso pode parecer uma resposta falaciosa,
mas enfatiza um ponto importante: O fato de nao se saber qual a resposta correta
nao faz nenhuma diferen ca, o que importa e que existe alguma maquina RAM que
de a resposta correta. Por exemplo, o problema de dado qualquer n umero natural
determinar se sua expansao decimal ocorre ou nao na expansao decimal de , nao
e decidvel, porem qualquer instancia deste problema e decidvel. Por exemplo, o
problema de decidir se a seq uencia 1234567890 ocorre ou nao na expansao decimal
de e decidvel, pois mesmo nao sabendo, ou ela ocorre ou nao ocorre. Se de fato
ocorrer entao o programa RAM abaixo do lado esquerdo computaria a resposta
correta para esse problema. Senao ocorrer, entao o programa do lado direito seria
quem computaria a resposta correta.
CLR R1
INC R1
CONTINUE
CLR R1
CONTINUE
7.2. O PROBLEMA DA PARADA PARA M

AQUINAS RAM 79
7.2 O problema da parada para maquinas RAM
Dentre os problemas indecidveis, o mais conhecido e o problema da parada, para
as m aquinas RAM. Estabelecido de modo simples, ele possui o seguinte enunciado:
dado um programa RAM P e valores x N
m
, P(x) ?. O domnio desse problema
e o conjunto de todos os programas RAM e N
m
, isto e RAM N
m
. Assim, se
esta procurando um programa RAM H que, em dado o n umero de Godel e de um
programa RAM arbitrario P e uma, tambem arbitraria, entrada x, H(e, x) 1 ou
H(e, x) 0.
A resposta para esse problema nao pode ser encontrada simplesmente atraves
da simula c ao da a c ao de P sobre x (efetuada num programa RAM universal) pois
nao existe limite no comprimento da computa cao. Se P entra num la co innito,
entao nao importa quanto tempo se espere, nao se podera, jamais, estar seguro que
P, realmente, esta num la co. Pode acontecer, simplesmente, o caso de ser uma
computa c ao muito longa

O que se precisa e um algoritmo que possa determinar


a resposta correta para qualquer P e x, ao efetuar uma analise da descri cao do
programa (c odigo de Godel) e da entrada. Mas, como se vera, esse algoritmo nao
existe. Para discussoes posteriores, e conveniente ter uma ideia precisa do que se
quer dizer com o problema da parada. Por isso, se dara a seguinte deni cao.
Deni cao 7.1 Suponha que k
P
e a codicac ao de G odel de um programa RAM, P,
e seja x qualquer elemento de N
m
. Uma solu cao para o problema da parada e
um programa RAM H, onde para qualquer k
P
e x, fornece a computac ao:
H(k
P
, x) 1 se P(x)
e
H(k
P
, x) 0 se P(x)
Note que o problema da parada so faz sentido se m 1, pois caso contrario
(m = 0) somente o programa que sempre ca em la co innito (e o qual pode ser
computacionalmente detectado) nao para o resto sempre ira parar. Assim, so se
considerar a daqui para frente m 1.
Teorema 7.2 N ao existe qualquer programa RAM, H, que se comporta como as
exigencias da denic ao 7.1. O problema da parada e portanto indecidvel.
Prova: Assuma que existe um algoritmo, e conseq uentemente um programa
RAM H, que resolve o problema da parada. A entrada para H sera a descri cao
(codicada de alguma forma) de P, k
P
, assim como a entrada x. A exigencia e,
entao, que dado qualquer (k
P
, x), o programa RAM H parara com um sim (R1 = 1)
ou um nao (R1 = 0) conforme a deni cao 7.1. H e da forma:

Por exemplo, o problema de se achar os fatores primos de um n umero grande, por exemplo
de 200 dgitos levaria bilh oes de anos, usando um computador que efetue uma instru c ao a cada
microsegundo.
7.2. O PROBLEMA DA PARADA PARA M

AQUINAS RAM 80
Instruc~ao 1 de H
:
Instruc~ao s de H
CONTINUE
Seja o programa RAM H

descrito a seguir:
Instruc~ao 1 de H
:
Instruc~ao s de H
Nl R1 JMP Nfb
JMP Nla
Nf CONTINUE
Comparando H e H

observa-se que, na situa cao onde H retorna 1, o programa


modicado H

entra num la co innito. Formalmente, a a cao de H

e descrita por
H

(k
P
, x) 0 se P(x)
e
H

(k
P
, x) se P(x)
Dena agora o programa RAM

H. Este novo programa toma a entrada k
P
, a
copia para o registrador R2, e entao se comporta exatamente com H

. Formalmente,

H e o programa descrito a seguir:


R2 <- R1
Instruc~ao 1 de H
:
Instruc~ao s de H
Nl R1 JMP Nfb
JMP Nla
Nf CONTINUE
Assim, a a c ao de

H e tal que

H(k
P
, x

) = H

(k
P
, k
P
, x

), onde x

= (x
2
, . . . , x
m
)
quando x = (x
1
, x
2
, . . . , x
m
). Assim,

H(k
P
, x

) se P(k
P
, x

) e

H(k
P
, x

) 0 se P(k
P
, x

)
Agora

H e um programa RAM que tem uma descri cao (codica cao)

k. Esse
valor alem de ser a descri c ao de

H pode, tambem, ser usado como entrada. O que
aconteceria se

H fosse aplicado a

k? Assim, identicando P com

H, se obteria:

H(

k, x

) se

H(

k, x

) e

H(k
P
, x

) 0 se

H(

k, x

)
o qual e um absurdo. Essa contradi cao resultou da suposi cao de que uma maquina
RAM H existe e portanto a decibilidade do problema da parada, deve ser falsa.
7.3. REDUC

AO DE UM PROBLEMA INDECIDVEL AO PROBLEMA DA PARADA 81

E importante ter em mente o que o teorema 7.2 diz. Ele nao probe a solu cao
algortmica do problema da parada para casos especcos. Freq uentemente pode-se,
via uma analise de P e x, dizer se a maquina RAM parara ou nao. O que o teorema
diz e que isso nao pode ser feito sempre, ou seja nao existe um algoritmo que retorne
a decisao correta para todo P e x.
7.3 Reducao de um problema indecidvel ao pro-
blema da parada
Diz-se que um problema A e reduzido a um problema B, se a decibilidade de A
acarreta a decibilidade de B. A ideia e expressar a solu cao do problema B em ter-
mos da solu c ao do problema A e de problemas conhecidos como decidveis. Assim,
se A for decidvel, entao poderia-se concluir que B tambem e decidvel. Inversa-
mente, se e sabido que B e indecidvel entao necessariamente A e indecidvel.
Exemplo 7.3 O problema da parada para registradores zerados Seja P um
programa RAM qualquer. Existe um procedimento de decis ao que mostre que P ao
nal da computac ao parar a ou n ao quando todos os registradores forem inicializados
com 0? Suponha que este problema seja decidvel, ent ao existe um programa RAM
Z tal que Z(k
P
, 0, . . . , 0) = 1 se P(0, . . . , 0) e Z(k
P
, 0, . . . , 0) = 1 caso contr ario.
Dena o seguinte programa RAM P

:
R1 <- x1
:
Rm <- xm
P
Claramente, Z(k
P
, 0, . . . , 0) se e somente se H(k
P
, x
1
, . . . , x
m
) . Logo, se Z
for decidvel ent ao H tambem ser a.
Exemplo 7.4 O problema de zerar um registrador Seja P um programa RAM
qualquer e i N tal que 1 i n. Decidir se P parar a ou n ao com 0 no registrador
Ri e um problema indecidvel. Suponha que este problema seja decidvel, ent ao existe
um programa RAM I tal que I(k
P
, x) = 1 se P(x) = (y
1
, . . . , y
i1
, 0, y
i+1
, . . . , y
n
)
e I(k
P
, x) = 0 caso contr ario. Dena

P como sendo o seguinte programa RAM:
P
CLR Ri
CLR R1
INC R1
CONTINUE
Este programa p ara (com R1 = 1 e Ri = 0) se P p ara (com Ri = 0 ou n ao), e n ao
p ara caso contr ario. Assim, I(k

P
, x) = 1 se e somente se H(k

P
, x) . Logo, se I
for decidvel ent ao H tambem ser a.
7.4. SEMI-DECIBILIDADE E DIVERG

ENCIA 82
A constru c ao dos argumentos desses dois exemplos ilustra uma abordagem co-
mum para estabelecer resultados de indecibilidade.
Uma solu c ao para um problema de decisao e uma fun cao cuja imagem e 0, 1,
isto e, uma fun c ao caracterstica de um determinado conjunto. Para ver se fun coes
mais gerais sao comput aveis a tecnica de redu cao ao problema da parada e, tambem,
adequada. Devido `a tese de Church-Turing, esperasse que fun coes encontradas
em circunst ancias praticas sejam computaveis. Assim, para achar exemplos de
fun c oes nao comput aveis deve-se ir um pouco alem. Muitos exemplos de fun coes
nao comput aveis estao associados `a tentativa de prever o comportamento de um
programa RAM.
Exemplo 7.5 Considere a func ao f(n) cujo valor e o n umero m aximo de coman-
dos que s ao executados por programas RAM de n instruc oes que p aram quando
inicializados todos seus registros em zero. Esta func ao, como n ao poderia deixar de
ser, n ao e comput avel.
Antes de provar a armativa, mostra-se que f(n) e denida para todo n. Ob-
serve que existe um n umero innito de m aquinas RAM com n instruc oes. De todas
essas m aquinas, existem algumas que sempre param. Por exemplo, aquelas que n ao
tem instruc oes JMP. Por outro lado, algumas dessas m aquinas n ao param quando
iniciam com todos seus registros zerados, mas essas n ao entram na denic ao de f.
Toda m aquina que p ara executar a um certo n umero de comandos. Desses tomasse
o maior para fornecer f(n).
Tome qualquer programa RAM, P, e m um inteiro positivo. Tudo o que se tem a
fazer e simular P, via um programa RAM universal, contar os comando executados e
terminar quando este n umero exceder m. Este programa RAM universal modicado
ser a denotado por

P
U
. Assuma, agora, que f(n) e comput avel por algum programa
RAM F. Pode-se, ent ao, juntar P

e F. Primeiro obtem-se via F, o valor de


f([ P [), onde [ P [ e a quantidade de instruc oes de P. O valor obtido junto com
o n umero de G odel do programa P e dado como entrada para

P
U
quem retornar a
1 se o programa P quando inicializado com seus registradores em zero p ara antes
de executar f([ P [) instruc oes ou retornar a 0 caso contr ario. e, ent ao, usado
como m para construir P

, conforme j a esbocado. Se P quando inicializada com


todos seus registradores zerados executa mais do que f([ P [) movimentos, ent ao,
devido ` a denic ao de f, se pode concluir que P nunca p ara. Portanto, teria-se uma
soluc ao para o problema da parada para registradores zerados do exemplo 7.3. A
impossibilidade da conclus ao leva a aceitar que f n ao e comput avel.
7.4 Semi-decibilidade e divergencia
Na verdade problemas, como o problema da parada sao chamados problemas semi-
decidveis, pois existe um algoritmo (programa RAM) que consegue detectar quando
7.5. EXERCCIOS 83
o programa RAM para, embora nem sempre consiga detectar quando nao para. Ou
seja resolve parcialmente o problema da parada. Formalmente um problema de de-
cisao para um conjunto A e semi-decidvel se existe um programa RAM P
A
tal que
P
A
(x) 1 se x A. Analogamente, um problema de decisao para um conjunto A
e co-semi-decidvel se existe um programa RAM P
A
tal que P
A
(x) 1 se x , A.
Seja A um conjunto e A seu complemento. Assim, claramente P
A
e semi-decidvel
se e somente se P
A
e co-semi-decidvel. O problema P
A
e chamado de comple-
mento do problema P
A
e algumas vezes e denotado por P
A
. Dualmente, P
A
e
co-semi-decidvel se e somente se P
A
e semi-decidvel. Note ainda que P
A
e semi
e co-semi decvel se e somente se P
A
e decidvel. Como corolario tem-se que P
A
e
decidvel se e somente se, P
A
e P
A
sao semi-decidveis. Note tambem que se P
A
e
semi-decidvel e P
A
e co-semi-decidvel nao implica que P
A
seja decidvel.
Assim, todo problema decidvel e semi-decidvel mas a reversa nem sempre e
verdade, por exemplo o problema da parada e semi-decidvel mas nao e decidvel.
Analogamente, todo problema decidvel e co-semi-decidvel mas a reversa nem sem-
pre e verdade, por exemplo o complemento de problema da parada, tambem con-
hecido como problema da divergencia, e co-semi-decidvel mas nao e decidvel
nem semi-decidvel. Ou seja existem problemas que sao semi-indecidveis (ou co-
semi-indecveis) que nao sao decidiveis (sao indecidveis) mas nem todo problema
indecidvel e semi ou co-semi decidvel, ou seja existem problemas que sao comple-
tamente indecidveis, por exemplo o problema de dado dois programas RAM
determinar se um para e o outro nao para quando todos seus registradores forem
inicializados em zero, ou seja computar a fun cao
f(n, m) =
_
_
_
1 , se P
n
(0, . . . , 0) e P
m
(0, . . . , 0)
1 , se P
n
(0, . . . , 0) e P
m
(0, . . . , 0)
0 , caso contrario
onde P
n
e a n-esima m aquina RAM na enumera cao de Godel.
7.5 Exerccios
1. Mostre que os seguintes problemas sao indecidveis:
(a) Dado um programa RAM P arbitrario e k 1 xo, decidir se a fun cao
f : N
k
N
k
computada por P e uma fun cao contante ou nao.
(b) Dado um programa RAM P arbitrario e k 1 xo, decidir se a fun cao
f : N
k
N
k
computada por P e a fun cao identidade ou nao.
(c) Dado um programa RAM P arbitrario e k 1 xo, decidir se a fun cao
f : N
k
N computada por ela satisfaz f(x) k para todo x N
k
.
(d) Dado um programa RAM P arbitrario e k 1 xo, decidir se a fun cao
f : N
k
N
k
computada por ela tem uma imagem nita ou innita.
7.6. CONSIDERAC

OES FINAIS 84
2. Dos problemas descritos no item anterior, indicar quais deles sao semi-decidveis,
quais sao co-semi-decidveis e quais sao completamente indecveis.
3. Seja F o conjunto dos n umeros de Fermat, onde n e um n umero de Fermat se
existem n umeros naturais x, y, z maiores que 0 tais que x
n
+y
n
= z
n
. Deter-
minar se P
F
e decidvel, semi-decidvel, co-semi-decidvel ou completamente
indecidvel.
7.6 Consideracoes nais
Os problemas indecidveis mostrados neste capitulo sao aparentemente articiais.
Mas, e so aparentemente, pois a indecidibilidade do problema da parada tem como
conseq uencia a impossibilidade de se determinar computacionalmente (construir
um programa) se um programa qualquer cara em la co innito para alguma ent-
rada. Outro problema mais natural que pode ser reduzido ao problema da parada
e o de determinar se dois programas RAM (o dois programas em alguma lingua-
gem de programa c ao) computam a mesma fun cao. Existem, tambem, problemas
matematicos que sao indecidveis, por exemplo o problema do exerccio 3. Um
outro problema que nao e computavel e o problema de dado um n umero natural n
arbitrario determinar se a expansao decimal de possui n 7s (setes) consecutivos.
Captulo 8
Assuntos nao abordados
8.1 Paralelismo
Um programa RAMe uma seq uencia de instru coes que modela algoritmos seq uenciais
e portanto computadores convencionais mono-processador. De fato, para muitos au-
tores, esses programas sao considerados a formaliza cao mais elegante da arquitetura
von Neumann [32]. Esses modelos teoricos de computa cao proporcionam um am-
biente propcio para desenvolvimento de softwares, sem a necessidade de que haja
preocupa c oes com detalhes de implementa cao ou com restri coes fsicas, dando ao
software resultante uma portabilidade e uma performance previsvel.
Para modelar algoritmos paralelos e computadores multi-processadores, diver-
sos modelos te oricos foram desenvolvidos [17]. Entre eles destacam-se: maquinas
de vetores (Vector Machines) [22], maquinas de Turing alternadas (Alternating Tu-
ring Machines) [6], m aquinas apontadoras paralelas (Parallel Pointer Machines)
[7] e m aquinas paralelas de acesso aleatorio (Parallel Random Access Machines
PRAM).
As PRAM foram introduzidas por Fortune e Wyllie em [10] com o objetivo de
modelar algoritmos paralelos e computadores multi-processadores sem custo de sin-
croniza c ao ou overhead de acesso `a memoria. Esse modelo consiste de uma cole cao
de processadores RAM que sao executados em paralelo e se comunicam via uma
memoria compartilhada que e ilimitada [13].
A m aquina PRAM pode ser usada para obter limites teoricos de rendimento
(performance), escabilidade e programabilidade de computadores paralelos. Assim,
modelos PRAM sao computadores paralelos ideais sem custo de sincroniza cao de
acesso `a memoria. Na realidade, nao existem arquiteturas paralelas de computado-
res concretos baseados nas PRAM, porem as PRAM tem-se mostrado um veculo
extremamente util no estudo da estrutura logica da computa cao paralela em um
contexto diferente da comunica cao paralela [17]. Algoritmos desenvolvidos para ou-
8.2. COMPUTABILIDADE SOBRE CONJUNTOS N

AO CONT

AVEIS 86
tros modelos mais realsticos sao geralmente baseados em algoritmos originalmente
projetados para a PRAM.
Implementa c oes da arquitetura PRAM devem especicar como ocorrem as opera coes
de leitura e escrita concorrente na memoria. Quatro op coes de acesso sao usual-
mente considerados:
ER (Exclusive-Read): permite que no maximo um processador leia de qualquer
posi c ao da memoria em cada ciclo,
EW (Exclusive-Write): Permite que no maximo um processador escreva em uma
posi c ao de memoria,
CR (Concurrent-Read): Permite que m ultiplos processadores escrevam em uma
posi c ao de memoria por ciclo de escrita, e
CW (Concurrent-Write): Permite que escritas simultaneas possam ser feitas na
mesma posi c ao de memoria.
A combina c ao delas, resulta nas arquiteturas PRAM-EREW, PRAM-CREW,
PRAM-ER-CW e PRAM-CRCW.
Obviamente, pela tese de Church-Turing, o poder computacional da PRAM e
exatamente o mesmo que o da RAM, ou seja so computa fun coes recursivas parciais.
Isto pode ser levado para o ambito de computadores paralelos concretos: tudo o
que um computador paralelo pode fazer, uma RAM tambem pode, a diferen ca entre
computadores paralelos e seq uenciais reais esta na capacidade de armazenamento
(que em uma RAM, por ser teorica, e ilimitada) e a velocidade de computa cao.
8.2 Computabilidade sobre conjuntos nao contaveis
As abordagens classicas para teoria da computabilidade, como as vistas ate agora,
tratam com problemas discretos (por exemplo, sobre os n umeros naturais, n umeros
inteiros, strings sobre um alfabeto nito, ou sobre grafos, etc.). No entanto, cam-
pos da matematica pura e aplicada tratam com problemas envolvendo n umeros
reais, n umeros complexos, supercies, etc. Isto acontece, por exemplo, em analise
numerica, sistemas dinamicos, geometria computacional e teoria da otimizacao.
Assim, uma abordagem computacional para problemas contnuos e desejavel, ou
ainda necessaria, para tratar formalmente com computa coes analogicas e em com-
puta c oes cientcas em geral.
A computabilidade sobre conjuntos contaveis e obtida a partir do desenvolvi-
mento de uma teoria da computabilidade sobre os n umeros naturais de tal modo
que nos outros conjuntos discretos (contaveis) a computabilidade se reduz `a com-
putabilidade no conjunto dos n umeros naturais. Como o representante natural dos
conjuntos contnuos sao os n umeros reais, e de se esperar que eles tenham um papel
8.3. OR

ACULOS 87
numa teoria da computabilidade para conjuntos com a cardinalidade do contnuo
semelhante `a dos n umeros naturais na teoria da computabilidade para conjuntos
contaveis.
Na literatura, existem diferentes abordagens para a computabilidade sobre os
n umeros reais, mas, uma importante diferen ca entre estas abordagens, esta na ma-
neira como sao representados os n umeros reais [12], dentre as quais destacam-se
os intervalos encaixantes, expansao r-adica, seq uencias de Cauchy, n umeros reais
pregui cosos, etc. Num dos primeiros artigos sobre teoria dos domnios, D.Scott [24]
sugeriu que o cpo consistindo de intervalos da reta real poderia ser usado para estu-
dar computabilidade sobre os n umeros reais. Previamente Martin-Lof [20] construiu
um espa co similar de aproxima coes. Em ambos os casos a reta real e mergulhada
num espa co de aproxima c oes onde a no cao de computabilidade pode ser denida
de uma maneira natural. Muitos resultados de computabilidade sobre os n umeros
reais, podem ser obtidos neste contexto. Nesta abordagem, uma aproxima cao da
sada com precis ao arbitraria e computada a partir de uma aproxima cao razoavel
da entrada [5]. Esta abordagem parece natural, uma vez que seja qual for o modelo
computacional nunca se tera como manipular um dado innito em sua totalidade,
assim se recorre `as aproxima c oes do valor, como por exemplo usando pontos utuan-
tes dinamicos. Do ponto de vista teorico, pode-se dizer que uma fun cao f : R R
e comput avel num determinado modelo, se para cada n umero real x e seq uencia de
n umeros racionais q
1
, q
2
, . . . convergindo para x, tem-se uma maquina M, no mo-
delo, tal que M(q
1
), M(q
2
), . . ., onde M(q
i
) e a sada da maquina M para a entrada
q
i
, e uma seq uencia de n umeros racionais que convergente para f(x).
Uma outra linha de pesquisa para computabilidade real foi desenvolvida por
Blum, Shub e Smale [3]. Nesta abordagem, um n umero real e visto como uma
entidade acabada e as fun c oes computaveis sao geradas a partir de uma classe de
fun c oes basicas (numa maneira similar `as fun coes parciais recursivas). Um outro
modelo nesta linha altera o tipo de dado dos registradores das maquinas RAM de
naturais para permitirem n umeros reais [33].
Mesmo sabendo que cada uma destas propostas tem seus meritos, nenhuma tem
sido aceita pela maioria dos matematicos e cientistas da computa cao.
8.3 Oraculos
O uso de oraculos em teoria da computa cao tem por objetivo modelar agentes ex-
ternos ao computador. Por exemplo, o acoplamento de um sensor que possa ser
acessado e manipulado por programas atraves do acrescimo de comandos novos
da linguagem.
Incorporar oraculos em modelos computacionais entao e simplesmente adicionar
um novo comando ao modelo, de forma analoga como se usam as macros, so que
8.3. OR

ACULOS 88
aqui nao se exige que esse comando seja traduzido em termos de outros comandos
mais primitivos do modelo (como nas macros). Ou seja pode-se adicionar como
oraculo uma fun c ao nao computavel. Claramente, se o oraculo e computavel (uma
macro) entao as fun c oes computadas pelo modelo mais o oraculo serao exatamente
as mesmas que sao computadas pelo modelo sem o oraculo, ja se for adicionada uma
fun c ao nao comput avel como oraculo, necessariamente a quantidade de fun coes com-
putadas ira aumentar.
O estudo das fun c oes que sao computaveis esta bem consolidado, porem, para
entender melhor este universo e necessario conhecer o que nao e computavel. Dentre
o conjunto de todas as fun c oes de N em N, que e incontavel, tem-se que so ha uma
quantidade contavel de fun c oes computaveis. Felizmente, a maioria das fun coes
que se conhecem (e portanto se usam) sao computaveis. Um exemplo de uma
fun c ao nao comput avel e aquela que resolve o problema da parada, denotada
por H. Como visto no captulo anterior, diversos outros problemas podem ser
reduzidos ao problema da parada, isto e, se eles forem computaveis implicariam na
computabilidade do problema da parada, porem nem todo problema nao computavel
pode ser reduzido ao problema da parada. Assim, se a fun cao H for considerada
como um oraculo, todas as fun coes computaveis e aquelas que resolvem problemas
que se reduzem ao problema da parada seriam agora computaveis neste modelo
estendido. So, que novamente surgiria um novo problema da parada para esta
nova classe (denotado por H

). Agora, H

pode ser considerado com um oraculo,


obtendo uma classe maior de problemas, e assim por diante. Ou seja teriam-se
innitas classes de problemas ou graus de redutibilidade.
Bibliograa
[1] S. Abramsky and A. Jung. Handbook of Logic in Computer Science, volume 3,
chapter Domain Theory, pages 1168. Oxford University Press, 1994.
[2] R. E. Biraben. Tese de church: Algumas questoes historicos-conceituais. In
Colec ao CLE, volume 20. Centro de logica, epistemologia e historia da ciencias
Unicamp, Campinas - SP, 1996.
[3] L. Blum, M. Shub, and S. Smale. On a theory of computation and complexity
over real number: Np-completness, recursive functions and universal machines.
Bull. of the Amer. Math. Soc., 21:146, 1989.
[4] W. S. Brainerd and L.H. Landweber. Theory of Computation. John Wiley &
Sons, New York-USA, 1974.
[5] V. Brattka. Recursive characterization of computable real-valued functions and
relations. Theoretical Computer Science, 162(1):4577, August 1996.
[6] A.K. Chandra, D.C. Kosen, and L.J. Stockmeyer. Alternation. Journal of the
ACM, 28(1):114133, january 1981.
[7] P.W. Cook, S.A.and Dymond. Parallel pointer machines. Computation Com-
plexity, 3(1):1930, 1993.
[8] N.J. Cutland. Computability: An introduction to recursive function theory.
Cambridge university press, Cambridge-UK, 1997.
[9] R.L. de Carvalho and C.M.G.M. de Oliveira. Modelos de computa cao e sis-
temas formais. In 11
a
Escola de Computac ao. DCC/IM,COPPE/Sistemas,
NCE/UFRJ, Rio de Janeiro, julho 1998.
[10] S. Fortune and J. Wyllie. Parallelism in random access machine. In Conference
Record of the Tenth Annual ACM Symposium on Theory of Computing, pages
114118, San Diego, CA, may 1978.
[11] R. M. Friedberg. Three theorems on recursive enumeration: I decomposition,
ii maximal set, iii enumeration without duplication. Journal of Symbolic Logic,
23(3):309316, 1958.
BIBLIOGRAFIA 90
[12] P. Di Gianantonio. A Functional Approach to Computability on Real Numbers.
PhD thesis, Universita di Pisa, Genova-Udine, Italy, march 1993.
[13] R. Greenlaw, H.J. Hoover, and W.L. Ruzzo. Limits to Parallel Computation:
P-Completeness Theory. Oxford University Press, 1995.
[14] P. R. Halmos. Teoria Ingenua dos Conjuntos. Ciencia Moderna, 2001.
[15] A Hodges. Turing. Um l osofo da natureza. Grande Filosofos. UNESP, 2001.
[16] N.D. Jones. Computability and Complexity: From a programming perspective.
Foundations of computing. The MIT Press, London-UK, 1997.
[17] R.M. Karp and V. Ramachandran. Handbook of Theoretical Computer Science,
volume A: Algorithms and Complexity, chapter Parallel Algorithms for Shared-
Memory Machines, pages 869941. Elsevier, 1990.
[18] A.J. Kfoury, R.N. Moll, and M.A. Arbib. A programing approach to computa-
bility. Text and monographs in computer science. springer-Verlag, Berlin-De,
1882.
[19] S.C. Kleene. Introduction to metamathematics, volume 1 of Monographs on
applied mathematics. North-hollad, Amsterdam-Holland, 1964.
[20] P. Martin-Lof. Notes on Contructive Mathematics. Almqvist & Wiksell, Stock-
holm, 1970.
[21] P. D. Mosses. Handbook of Theoretical Computer Science, volume B: Formal
Models and Semantics, chapter Denotational semantics. Elsevier Science Pu-
blishers and MIT Press, Amsterdam, 1990.
[22] V.R. Pratt and L.J. Stockmeyer. A characterization of the power of vector
machines. Journal of Computer and System Science, 12(2):198221, april 1976.
[23] R. Peter. Recursive Functions. Academic Press, New York, 3rd edition, 1967.
[24] D. S. Scott. Outline of a mathematical theory of computation. In 4th Princeton
Conference on Inf. Science and Systems, page 65:106, 1970.
[25] D.S. Scott and C.A. Gunter. Handbook of Theoretical Computer Science, vo-
lume B: Formal Models and Semantics, chapter Semantic Domains, pages 633
674. Elsevier Science Publishers and MIT Press, Amsterdam, 1990.
[26] D.S. Scott and C. Strachey. Towards a mathematical semantics for computer
languages. In Proceedings, 21st Symposium on Computers and Automata, pages
1946. Polytechnic Institute of Brooklyn, 1971. Also, Programming Research
Group Technical Monograph PRG-6, Oxford University.
[27] C.H. Smith. A recursive introduction to the theory of computation. Springer-
verlag, New York-USA, 1994.
BIBLIOGRAFIA 91
[28] J. Z. Sobrinho. Aspectos da tese de church-turing. Matem atica universit aria,
(6):123, 1987.
[29] V. Stoltenberg-Hansen, I. Lindstrom, and E.R. Grier. Mathematical Theory
of Domains. Cambridge tracts in theoretical computer science. Cambridge
University Press, Cambridge, 1994.
[30] W. J. D. Thomas. Logic, Language and Probability, chapter About some stan-
dard arguments for Churchs thesis, pages 5565. D. Reidel, Dorbrecht, 1973.
[31] A. M. Turing. Systems of logic based on ordinals. In Proceedings of London
Mathematical Society, number 45 in 2, pages 161288, 1939.
[32] L.G. Valiant. Handbook of Theoretical Computer Science, volume A: Algo-
rithms and Complexity, chapter General Purpose Parallel Architectures, pages
943971. Elsevier, 1990.
[33] K. Weihrauch. Computable Analysis an introduction. Springer Verlag, 1997.

Indice
FRP, 32
FWC, 46
RAM, 13
-operador limitado, 35

Algebra da decibilidade, 35

Indice, 4
de um programa, 73
Ackermann, 32
Algoritmo, 54, 57
divisao de Euclides, 54
paralelo, 86
sequencial, 86
Arquitetura von Neumann, 86
Axioma da extensao, 19
Bije c ao, 3
efetiva, 61
BNF, 40
Brainerd, 61
Codigo de congura c ao, 73
Codigo de Godel, 69
decodica c ao, 73
Cantor, George, 3, 72
Church, Alonso, vii, 56
Composi c ao de fun c oes, 20
Computa c ao real, 39
Computabilidade, vii
no contnuo, 88
Computador
especco, 55
tpico, 55
Congura c ao
atual, 73
nal, 73
Congura cao de memoria, 11
Conjunto, 2
cardinalidade, 3
contavel, 4
de ndices, 4
efetivamente enumeravel, 60
enumeravel, 4
exponencia cao, 5
nito, 4
incontavel, 4
indexado, 4
tamanho, 3
CPU, 73
Cutland, vii, 60, 74
Equa cao de recursao, 23
Estado corrente, 73
Exponencia cao, 25
Famlia, 4
constante, 4
de subconjuntos, 4
produto cartesiano, 5
termo, 4
uniao, 5
Fun cao, 2
-denvel, 56
bijetora, 3
caracterstica, 27
composi cao, 20
computavel, 57
computada por uma RAM, 12
de Ackermann, 32
efetiva, 57
efetivamente calculavel, 56, 57
i-esima proje cao, 18

INDICE 93
identidade, 17
injetora, 3
parcial, 2
RAM-computavel, 13
recursiva, 33
recursiva parcial, 32
recursiva primitiva, 26
sobretiva, 3
sucessor, 17
terminal, 17
total, 2, 29
universal, 72
vazia, 3
While-computavel, 46
zero, 17
Fun c oes recursivas
basicas, 17
Fun c oes recursivas parciais
classe, 32
Funoes recursivas primitivas, 17
Godel, 56
Grau de redutibilidade, 89
Halmos, Paul R., 4, 5
Hardware, 39
Hodges, Andrew, 56
Instru c oes da RAM, 10
Kleene, 21
Limita c oes de m aquina, 39
Linguagem
assembly, 10
LPM, 40
PL, 40
Linguagem de programa c ao
procedural, 39
te orica, 39
While, 39
Linguagem While, 39
execu c ao, 42
semantica denotacional, 44
semantica formal, 44
semantica informal, 42
sintaxe, 40
variantes, 40
Maquina, 56
assembly, 8
de acesso randomico, 8, 9
de Turing, 56
Macro, 88
comando, 55
instru cao, 55
Memoria, 8
acesso aleatorio, 8
endere co, 8
Minimaliza cao, 30
limitada, 34
N umero de Godel, 64, 66, 69
esquema, 66
N umero natural
base 2, 63
N umero primo, 61
n-esimo, 62
Numera cao de programas, 66
Operador de busca, 30
Operador de minimaliza cao, 30
limitado, 35
Oraculo, 88
Paralelismo, 86
PRAM, 86
Predicado, 27
decidvel, 28
primeira ordem, 27
recursivo primitivo, 28
Problema
co-semi-decidvel, 84
complemento, 84
da divergencia, 84
da parada, 80, 89
de decisao, 79
decidvel, 79
indecidvel, 79
nao Computavel, 78
registradores zerados, 82
semi-decidvel, 83

INDICE 94
Procedimento efetivo, vii, 54, 57
Processo mecanico, 56
Produto
limitado, 34
Produto cartesiano, 2, 5
m-ario, 7
de uma famlia, 5
Produto de fun c oes, 18
Programa
RAM, 10
universal, 60, 73
While, 40
RAM, 8, 9
arquitetura, 9
computa c ao de fun c oes, 12
instru c oes, 10
memoria, 9
nomes de registradores, 10
paralela, 86
passo de computa c ao, 11
programa, 10
rotulo, 10
real, 88
Recursao por curso de valores, 33
Recursao primitiva, 23
Redu c ao de problemas, 82
Redutibilidade, 89
Rela c ao, 2
imagem, 2
direta, 2
inversa, 2
restri c ao, 2
vazia, 2
Representa c ao
innita de n umeros naturais, 61
Rozsa, Peter, 32
Scott, Dana, 44
Semantica denotacional, 44
Seq uencia, 4
de n umeros, 61
Smith, 8
Software, 39
Soma limitada, 33
Strachey, Christopher, 44
String binarias, 8
Substitui cao, 20
Tarefa comutavel, vii
Teoria da computabilidade, vii
Teoria dos domnios, 44
Tese
de Church, 56
de Church-Turing, 54, 57
Argumentos a favor, 57
de Turing, 56
Tupla, 6
innita, 7
nao ordenada, 6
ordenada, 6
Turing, Alan, vii, 56
While
execu cao de programas, 42
fun cao de entrada, 45
fun cao de sada, 45
nome de variavel, 40
palavras, 40
smbolos de opera cao, 40
smbolos de programa, 40
smbolos de rela cao, 40
semantica denotacional, 44
semantica formal, 44
semantica informal, 42
sintaxe, 40
variantes, 40

Você também pode gostar