Escolar Documentos
Profissional Documentos
Cultura Documentos
?????
O programa P com a entrada E, imprime a string Hello, world?
Programa Hello 2
main() { 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); }
xn + y n = z n ,
se n > 2.
Testador hipottico
P
Sim
H
No
Testador hipottico
P H1 E Hello, World
Sim
Testador hipottico
Sim
P H2 Hello, World
Sim
H2 H2 Hello, World
Princpio da Reduo
Problema Hello, world
Reduo de
Hello, world
Problema Chamar F1
Instncia de P1
Construir
Instncia de P2
Decidir
No
Um exemplo de reduo
Vamos mostrar que o problema: O programa P, dada a entrada E,chamar a funo f1? indecidvel. Obs.: Vamos supor que o programa possui uma funo chamada f1
Prova:
Usaremos uma demonstrao por absurdo; Como s conhecemos um problema indecidvel, 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.
Se P tem uma funo F1, renomeie essa funo e todas as chamadas a ela. ( vamos chamar esse novo programa de P1)
Adicione a P1 uma funo F1. Essa funo no faz nada e no chamada. ( vamos chamar esse novo programa de P2)
Modifique P2 para memorizar os 12 primeiros caracteres que ele imprime (armazenando em um vetor global V. ( vamos chamar esse novo programa de P3)
Modifique P3 de forma que, sempre que executar qualquer instruo de sada, ele verifique em seguida no vetor V se escreveu 12 caracteres ou mais e, se for o caso, se Hello, world so esses 12 primeiros caracteres. Nesse caso, chame a nova funo F1. O programa resultade R e a entrada Z igual a E.
Importante:
Sobre a prova atravs de reduo: Observe a importncia do raciocnio recursivo na implementao do programa H 2.
Importante:
A tese de Church estabelece uma correspondncia entre as noes de Algoritmo e Mquina de Turing.
Ou seja, podemos pensar num algoritmo como uma mquina de turing que sempre pra, para qualquer entrada, aceitando ou rejeitando.
Importante:
Lembre que L uma linguagem recursivamente enumervel (RE) SSE L = L1(M) para alguma Mquina de Turing M. Ling. Recursivas Decidveis MT sempre pra.
Uma modificao na MT
Seja M = (Q ,, , q0, , F) uma Mquina 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 smbolos diferentes do branco, desde o mais a esquerda at o mais o direita.
Dessa maneira podemos falar do primeiro string (w1), do segundo string (w2), etc.
Obs.: Como todos os valores i, j, k, l e m so, pelo menos, iguais a 1, no temos dois, ou mais, 1s consecutivos.
C111C211...Cn-111Cn
Lembrem que precisamos codificar pares que consistem em uma MT e uma string, (M, w). Para esse par usamos a codificao anterior para M, seguida de 111 e por w.
Enumerao de MTs
Agora podemos ordenar todas as MTs de acordo com o comprimento e as de mesmo comprimento por ordem lexicogrfica.
Assim, podemos falar da Mi(i-sima mquina de Turing).
Obs.: Se o string no for uma representao bem formada de alguma MT, ento ela representa um MT sem movimentos. L(M)={ }
A linguagem da diagonalizao
A linguagem Ld, a linguagem da diagonalizao, o conjunto de strings wi tais que wi no est em L(Mi).
Vetor caracteristico: Formado por todas as strings que so aceitas pela MT Mi. O complementa da diagonal no o vetor caracterstico de nenhuma MT.
Teorema: Ld no RE
Ou seja, no 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 construmos, ou seja, existe um cdigo para M, digamos que seja i ( M = Mi).
Teorema: Ld no RE
Wi est em Ld ?
Se wi est em Ld, ento Mi aceita wi. Entretanto, por definio de Ld, wi no est em Ld, porque contm somente os valores wj tais que Mj no aceita Mj.
Teorema: Ld no RE
Wi est em Ld ?
Se wi no est em Ld, ento Mi no aceita wi. Portanto, por definio de Ld, wi est em Ld. O que uma contradio (absurdo) !!