Você está na página 1de 27

EA869

Computabilidade

Faculdade de Engenharia Elétrica e de Computação (FEEC)


Universidade Estadual de Campinas (UNICAMP)

Prof. Levy Boccato

1
Introdução
 Vimos na aula anterior que a principal motivação para o
desenvolvimento da computação foi a busca por resolver
problemas de forma mais ágil e precisa.

 Exemplos:
 Calculadora, régua de cálculo.
 Bombe – decifrar mensagens produzidas pela máquina Enigma.
 ENIAC – cálculos balísticos.

 A disponibilidade de uma máquina digital programável, de


propósito geral, conhecida como computador, representa um
passo extraordinário para que soluções efetivas sejam alcançadas
em um tempo notavelmente inferior.

 Contudo, quais problemas podem ser resolvidos com o auxílio


desta máquina? Todos?
2
Exemplo
 Problema: dados dois números naturais a e b diferentes de
zero, determine o máximo divisor comum entre eles.

É possível provar que este


procedimento sempre termina.

Algoritmo de Euclides
Euclides, 300 a.C.

3
Outro exemplo
 Problema: determinar o menor número perfeito maior do
que N.
 Um número é dito ser perfeito caso seja igual à soma de todos os
seus divisores (exceto ele próprio).
 Exemplos:
 6=1+2+3
Não é possível provar
 28 = 1 + 2 + 4 + 7 + 14 que este procedimento
sempre termina.

Até hoje, são conhecidos


51 números perfeitos,
sendo que o maior deles
possui 49.724.095 dígitos.

4
Tipos de problemas
 Podemos perceber, portanto, a existência de dois tipos de
problemas:

Aqueles que possuem um


procedimento que sempre ALGORITMOS
termina (obtém um resultado).

Problemas

Aqueles que possuem um


procedimento que não é PROCEDIMENTOS
possível comprovar que
sempre termina.

5
Procedimento
 Propriedades de um procedimento:
1. A descrição do procedimento deve ser finita, composta por
uma sequência finita de palavras e símbolos que o
descrevem.
2. Há sempre um conjunto de dados de entrada e pode ser
previsto um resultado, ou um conjunto de resultados, como
ocorre no caso do MDC.
3. Algum agente pode executar o procedimento, tratando e
armazenando resultados intermediários e finais.
4. Toda instrução – passo atômico do procedimento – deve
estar bem definida e ser passível de execução em tempo
finito.

6
Procedimento
 Propriedades de um algoritmo:
1. A descrição do procedimento deve ser finita, composta por
uma sequência finita de palavras e símbolos que o
descrevem.
2. Há sempre um conjunto de dados de entrada e pode ser
previsto um resultado, ou um conjunto de resultados, como
ocorre no caso do MDC.
3. Algum agente pode executar o procedimento, tratando e
armazenando resultados intermediários e finais.
4. Toda instrução – passo atômico do procedimento – deve
estar bem definida e ser passível de execução em tempo
finito.
5. Deve garantidamente terminar sua execução após um
número finito de passos para qualquer entrada.
7
Computabilidade
 Passos para resolver um problema com o auxílio de um
computador:

O procedimento
Crio um
Problema procedimento
comprovadamente Algoritmo
para encontrar gera um resultado
sua solução em tempo finito?
O problema é
computável!

 Computadores somente executam comandos previamente definidos.


 Logo, para que computadores resolvam um determinado problema, é
preciso que exista um algoritmo para ele.
 Ou seja, temos de saber se o problema é ou não computável.
8
Computabilidade
 Computabilidade: refere-se à existência ou não de um
procedimento que resolve um determinado problema em
um número finito de passos.
Todos os
problemas
Não existe um
algoritmo para
decidir sobre a
computabilidade
de qualquer
problema bem
formulado.
Problemas
computáveis

9
Computabilidade
 Alan M. Turing:
 Em seu brilhante trabalho intitulado “On Computable Numbers, with an
application to the Entscheidungsproblem” (1936), Turing traduz a noção
de computabilidade em termos da existência de uma máquina
abstrata – a chamada máquina de Turing (MT).

 Problema da decisão (Entscheidungsproblem): existe um algoritmo


capaz de decidir se uma proposição lógica arbitrária é verdadeira ou
falsa? Em outras palavras, existe um algoritmo que consegue
demonstrar a veracidade (ou não) de qualquer proposição lógica a
partir dos axiomas da lógica de primeira ordem?

10
Computabilidade
 Alan M. Turing:

 Em essência, a MT é uma máquina de estados finitos dotada de uma


fita duplamente infinita e de um leitor/atuador.
 Características:
 A fita contém símbolos pertencentes a um alfabeto finito.
 Uma tabela de configurações define a ação tomada pela máquina
dependendo do estado em que ela se encontra, bem como do símbolo
atualmente percebido na fita.
 A ação envolve: (1) apagar ou escrever um símbolo; (2) mover o sensor para
a direita ou esquerda; e (3) alterar o estado da máquina.

11
Computabilidade
 Exemplo de MT:
Estado Símbolo Ação Novo Estado Legenda:
L – mover para esquerda
P ə; R; P ə; R; P0;
A Em branco B R – mover para direita
R; R; P0; L; L
P – imprimir
B 1 R; P x; L; L; L B E - apagar
B 0 Nenhuma C O que esta máquina faz?
C 0 ou 1 R; R C Lida em notação binária,
produzimos a seguinte
C Em branco P 1; L D sequência (com cada
D x E x; R C número separado por
um 0 dos adjacentes):
D ə R E
1, 3, 7, 15, 31, 63, 127, …
D Em branco L; L D

E 0, 1, x ou ə R; R E Ou seja, esta MT gera os


números do tipo
E Em branco P 0; L; L B y = 2x – 1

Conteúdo da fita após algumas iterações:


12
Computabilidade
 Máquinas de Turing que não imprimem uma sequência
coerente de símbolos nem “param” são chamadas de
circulares.

 Conjectura de Church-Turing: todo algoritmo na forma


como entendemos pode ser descrito por uma máquina de
Turing.

 Um passo importante para a demonstração de Turing foi


representar as próprias MT na forma de sequências de
símbolos de um alfabeto padronizado.

 A descrição completa de uma MT, portanto, pode ser


armazenada na fita ilimitada servindo como dado de
entrada de uma outra máquina de Turing.
13
Computabilidade
 Máquina universal de Turing: capaz de reproduzir ou
imitar o comportamento de qualquer outra máquina de
Turing, cuja descrição estaria armazenada em sua fita.

 Consequência: ela pode gerar o conjunto completo de


números computáveis.

 Questão: seria possível projetar uma máquina de Turing


que analisasse qualquer outra MT e decidisse se esta é
circular ou não-circular?
 Trata-se do problema da parada adaptado ao idioma de
Turing.

14
Computabilidade
 Como Turing resolveu o problema da parada?

 Vamos supor que exista um critério que nos permita identificar


se uma máquina de Turing é ou não circular.

 Toda máquina identificada como não-circular gera, portanto,


uma sequência coerente de dígitos binários.

 Vamos, então, preparar uma lista completa com os números


(binários) que cada máquina de Turing confirmada como
sendo não-circular gera.

15
Computabilidade
 Como Turing resolveu o problema da parada?
1 0 0 1 1 1 0 1 …
1 1 0 1 1 0 0 0 …
0 1 0 1 0 1 0 1 …
1 0 1 1 1 1 1 0 …
1 1 1 1 1 1 1 0 …
0 0 0 0 1 0 0 0 …
0 1 1 1 0 0 1 0 …
0 0 1 1 0 1 1 1 …

 Seguindo o espírito do argumento diagonal de Cantor, vamos


gerar uma nova sequência a partir dos elementos da diagonal.

16
Computabilidade
 Como Turing resolveu o problema da parada?
1 0 0 1 1 1 0 1 …
1 1 0 1 1 0 0 0 …
0 1 0 1 0 1 0 1 …
1 0 1 1 1 1 1 0 …
1 1 1 1 1 1 1 0 …
0 0 0 0 1 0 0 0 …
0 1 1 1 0 0 1 0 …
0 0 1 1 0 1 1 1 …

 Sequência extraída:

1 1 0 1 1 0 1 1 …

 Invertemos cada bit, obtendo:

0 0 1 0 0 1 0 0 …
17
Computabilidade
 Como Turing resolveu o problema da parada?
 O método diagonal que descrevemos é apenas um processo
algorítmico para o qual se poderia projetar uma máquina de Turing.
Afinal, ele corresponde ao processo de computar para cada dígito x o
valor (1 – x). Logo, a nova sequência de dígitos gerada obviamente é
computável.

 Contudo, por construção, ela é diferente de todas as sequências


presentes na lista.

 No entanto, por hipótese, a lista contém todas as sequências


computáveis existentes, identificadas segundo o critério que
admitimos que existia.

 Chegamos, portanto, a uma contradição: a sequência gerada, embora


seja computável, não pode estar na lista de sequências computáveis.

 Conclusão: a suposição de que o critério existe é falsa.


18
Computabilidade
 Como Turing resolveu o problema da parada?
 Turing foi além, concedendo uma demonstração alternativa de que o
problema da parada não é computável.

 Imagine que temos duas máquinas acopladas: uma máquina de


decisão D, e uma máquina universal U, dando origem a uma nova
máquina híbrida DU.

 Ao receber a descrição de uma máquina genérica M, DU começa com


as operações de D, determinando se M é ou não circular.
 Se M for circular, o processo para.

 Se M for não-circular, U pode ser utilizada para simular sua ação


algorítmica.

 Como U somente executa uma máquina M se ela garantidamente for


não-circular, DU também é uma máquina não-circular..
19
Computabilidade
 Como Turing resolveu o problema da parada?
 O que acontece se alimentarmos DU com sua própria descrição?
 D determina que DU é uma máquina não-circular.
 U passa, então, a simular a ação de DU, alimentando a descrição de DU em
D, que, por sua vez, verifica que esta máquina é não-circular e, portanto,
permite que U a simule.
 Este ciclo se repete indefinidamente.

 Logo, a máquina DU, quando alimentada com sua própria descrição,


não para. Logo, DU é circular.
 Porém, acabamos de verificar que DU é não-circular.

 Diante desta contradição, Turing conclui: a máquina D não existe.

Dica: D. Leavitt, “O homem que sabia demais: Alan Turing e a invenção do computador”,
Editora Novo Conceito, 2011.
20
Computabilidade
 Exemplos de problemas não-computáveis:

 Decidir se a resolução de um problema é livre de laços


infinitos para qualquer conjunto de dados de entrada.

 Verificar a equivalência de dois algoritmos para qualquer


conjunto de dados de entrada.

21
Computabilidade
 Exemplos de problemas não-computáveis:

 Problema do azulejo (tiling problem):


Um azulejo é um quadrado com orientação fixa no plano de
interesse. O azulejo tem 4 cores – C1 a C4 – conforme abaixo:

O desafio é cobrir uma área quadrada finita com azulejos


respeitando a restrição de que os azulejos devem se encostar
no lado de mesma cor.
A entrada para este problema é um conjunto T composto por
azulejos.
22
Computabilidade
 Exemplos de problemas não-computáveis:

 Problema do azulejo (tiling problem):


Seja T o conjunto dos seguintes azulejos:

Desejamos preencher uma área de 5 × 5 azulejos.


Solução:

23
Computabilidade
 Exemplos de problemas não-computáveis:

 Problema do azulejo (tiling problem):


Seja T o conjunto dos seguintes azulejos:

Desejamos preencher uma área de 3 × 3 azulejos.


Não é possível obter uma solução neste caso!

24
Computabilidade
 Exemplos de problemas não-computáveis:

 Problema do azulejo (tiling problem):

Não há um algoritmo para resolvê-lo – já foi demonstrado que


é um problema não-computável.
Note que este fato independe do programador e do
computador.

25
Computabilidade
 Saber que um problema é computável é suficiente?
 É importante que o algoritmo termine, isto é, execute o número
finito de passos, em um tempo razoável.

Sei que ele é


Problema computável, ou seja,
existe um algoritmo
para resolvê-lo.

Porém, sua solução é


factível?

Para respondermos esta questão,


precisamos conhecer a complexidade
do algoritmo.
26
Créditos
 Este material está baseado nas notas de aula elaboradas pelo
Prof. Léo Pini e pelo aluno de doutorado Tiago Novaes.

27

Você também pode gostar