cap 7 indecidibilidade
DESCRIPTION
Aula do Prof.: Edson HolandaTeoria da computaçãoTRANSCRIPT
Programa Hello, World
main( ){ printf( "Hello, World \n"); getch( );}
?????
“O programa P com a entrada E, imprime a string ‘Hello, world’?”
Programa Hello 2main(){ int n, total, x, y, z; scanf("%d", &n); total = 3; while(1) {for (x = 1; x <= total - 2; x++)
for ( y = 1; y <= total -1; y++) { z = total - x - y;
if (exp(x,n) + exp(y,n) == exp (z,n)) { printf("Hello, World");} }
total++; }}
Programa Hello 2
int exp(int i, int n){ int res, j; res = 1; for ( j = 1 ; j <= n ; j++ )
{ res = res * i; } return(res);}
Último teorema de Fermat “Não existem soluções
inteiras para a equação
xn + yn = zn ,
se n > 2”.
Testador hipotético
Testador de Hello, world
H
P
E
Sim
Não
Testador hipotético
H1
P
E
Sim
Hello, World
Testador hipotético
H2P
Sim
Hello, World
O que acontece quando…. ?
H2H2
Sim
Hello, World
Vamos chamar esse problema de ‘Hello, world’
Princípio da Redução
Problema Hello, world
Redução de
Hello, world
Problema Chamar F1
Reduzindo um problema a outro
ConstruirInstância de P1
Sim
Não
Instância de P2
Decidir
Um exemplo de redução Vamos mostrar que o
problema: “ O programa P, dada a entrada E,chamará a função f1?” é indecidível.
Obs.: Vamos supor que o programa possui uma função chamada f1
Prova: Usaremos uma demonstração
por absurdo; Como só conhecemos um
problema indecidível, Hello, world fará o papel de P1 no diagrama mostrado anteriormente.
Prova: (cont.)
Precisamos projetar um algoritmo que converta o problema Hello, world no problema de chamar F1.
Prova: (cont.)
Ou seja, dado o programa P e sua entrada E, devemos contruir uma programa R e uma entrada Z tais que R, com a entrada Z, chame F1 SSE P com a entrada E imprimir Hello, world.
Prova: (cont.) A construção
1. Se P tem uma função F1, renomeie essa função e todas as chamadas a ela. ( vamos chamar esse novo programa de P1)
Prova: (cont.) A construção
2. Adicione a P1 uma função F1. Essa função não faz nada e não é chamada. ( vamos chamar esse novo programa de P2)
Prova: (cont.) A construção
3. Modifique P2 para memorizar os 12 primeiros caracteres que ele imprime (armazenando em um vetor global V. ( vamos chamar esse novo programa de P3)
Prova: (cont.) A construção
4. Modifique P3 de forma que, sempre que executar qualquer instrução de saída, ele verifique em seguida no vetor V se escreveu 12 caracteres ou mais e, se for o caso, se Hello, world são esses 12 primeiros caracteres. Nesse caso, chame a nova função F1. O programa resultade é R e a entrada Z é igual a E.
Prova: (cont.) conclusão
Dessa forma transformamos um problema Hello, world em um caso do problema chamar F1.
Logo, se o problema chamar F1 fosse decidível, então o problema Hello, world também seria. O que é um absurdo poís sabemos que Hello, world é indecidível.
Portanto, o problema chamar F1 também é indecidível.
Importante:
Sobre a prova através de redução:
Observe a importância do raciocínio recursivo na implementação do programa H2.
Importante:
A tese de Church estabelece uma correspondência entre as noções de Algoritmo e Máquina de Turing.
Ou seja, podemos pensar num algoritmo como uma máquina de turing que sempre pára, para qualquer entrada, aceitando ou rejeitando.
Importante:
Lembre que L é uma linguagem recursivamente enumerável (RE) SSE L = L1(M) para alguma Máquina de Turing M.
Ling. Recursivas Decidíveis MT sempre pára.
Uma modificação na MT Seja M = (Q ,, , q0, ß, F) uma
Máquina de Turing.
Assumiremos que a fita é infinita, tanto do lado direito quanto do lado esquerdo.
A palavra de entrada w será formado por todos os símbolos diferentes do branco, desde o mais a esquerda até o mais o direita.
Outro problema indecidível Vamos provar que é indecidível a
linguagem que consiste em pares (M,w) tais que:1. M é uma máquina de turing (codificada em binário), com alfabeto de entrada { 0, 1 }2. w é um string de 0´s e 1´s.3. M aceita a entrada w.
Enumeração dos strings binários Ordene todos os strings de acordo com o
comprimento e os de mesmo comprimento por ordem lexicográfica.
Ex: , 0, 1, 00, 01, ...
Dessa maneira podemos falar do primeiro string (w1), do segundo string (w2), etc.
Codificação para máquinas de Turing
Seja M = (Q ,, , q0, ß, F), precisamos atribuir números naturais aos estados, aos símbolos e aos sentidos (E e D).
1. Sejam q1,q2,...,qr para algum r. Vamos admitir que q1 sempre será o estado inicial e que q2 será o único estado de aceitação (final).
Codificação para máquinas de Turing
2. Sejam X1, X2, ..., Xs para algum s. Vamos admitir que X1 sempre será 0, X2 será 1 e que X3 será ß. Os demais símbolos são atribuídos de maneira aleatória aos próximos naturais.
3. Atribuiremos D1 ao sentido E e D2 ao sentido D.
Codificação para máquinas de Turing
Agora podemos codificar o função de
transição (qi, Xj) = (qk, Xl, Dm), para alguns naturais i, j, k, l e m.
Codificaremos essa regra pelo string
0i10j10k10l10m
Obs.: Como todos os valores i, j, k, l e m são, pelo menos, iguais a 1, não temos dois, ou mais, 1´s consecutivos.
Codificação para máquinas de Turing
Um código para a MT M inteira consiste em todos os códigos para as transições, em alguma ordem, separados por pares de 1´s:
C111C211...Cn-111Cn
Codificação para máquinas de Turing
Exercício: Codifica a MT M abaixo,
M = ({q1,q2,q3},{0,1}, , q1, ß, {q2})
na qual consiste nas regras:
(q1, 1) = (q3, 0, E),
(q3, 0) = (q1, 1, E),
(q3, 1) = (q2, 0, D),
Codificação para máquinas de Turing Lembrem que precisamos codificar pares
que consistem em uma MT e uma string, (M, w).
Para esse par usamos a codificação anterior para M, seguida de 111 e por w.
Obs.: Em um código para uma MT não contém três 1´s consecutivos.
Enumeração de MT´s Agora podemos ordenar todas as MT´s de
acordo com o comprimento e as de mesmo comprimento por ordem lexicográfica.
Assim, podemos falar da Mi(i-ésima máquina de Turing).
Obs.: Se o string não for uma representação bem formada de alguma MT, então ela representa um MT sem movimentos. L(M)={ }
A linguagem da diagonalização A linguagem Ld, a linguagem da
diagonalização, é o conjunto de strings wi tais que wi não está em L(Mi).
Vetor caracteristico: Formado por todas as strings que são aceitas pela MT Mi.
O complementa da diagonal não é o vetor característico de nenhuma MT.
Teorema: Ld não é RE Ou seja, não existe nenhuma MT que
aceite Ld. Prova: Vamos supor que Ld é L(M) para
alguma TM M. Como Ld é uma linguagem sobre o alfabeto {0,1}, M está na lista de MT que construímos, ou seja, existe um código para M, digamos que seja i ( M = Mi).
Teorema: Ld não é RE Wi está em Ld ?
Se wi está em Ld, então Mi aceita wi. Entretanto, por definição de Ld, wi não está em Ld, porque contém somente os valores wj tais que Mj não aceita Mj.
Teorema: Ld não é RE Wi está em Ld ?
Se wi não está em Ld, então Mi não aceita wi. Portanto, por definição de Ld, wi está em Ld.
O que é uma contradição (absurdo) !!