Computabilidade e Linguagens Formais Máquinas de Turing Gabriel David / Cristina Ribeiro 1 Hello, world main() { printf(″hello, world\n″); } Qual a saída deste programa? Máquinas de Turing -2 Hello, world de novo int exp(int i, n) /* calcula i^n */ { int ans, j; ans = 1; for (j=1; j<=n; j++) ans *= i; return(ans); } 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-x-1; y++){ z = total-x-y; if (exp(x,n) + exp(y,n) == exp(z,n)) printf(″hello, world\n″); } total++; } n n n } – Último teorema x +y =z Qual a saída deste programa? Para entrada 2? E 3? de Fermat Levou 300 anos a provar que é impossível para n3 Máquinas de Turing -3 Devem existir problemas indecidíveis Problema é decidir se uma cadeia pertence a uma linguagem O número de linguagens diferentes sobre um alfabeto com mais do que um símbolo não é numerável – Os programas são numeráveis – – – Não é possível estabelecer uma correspondência biunívoca com Cadeias finitas sobre alfabetos finitos Ordenar por comprimento e por ordem lexicográfica Podem ser contados, embora em número infinito Há infinitamente menos programas do que problemas – – Linguagem ao acaso dá provavelmente um problema indecidível A maioria dos problemas parecem decidíveis porque são escolhidos Máquinas de Turing -4 Teste do “Hello, world” Hipótese – P I H yes no Um problema que tenha um algoritmo como H é decidível – Existe um programa H que recebe como entrada um programa P e uma entrada I e imprime yes se P com entrada I imprimir hello, world e no no caso contrário; e faz sempre uma coisa ou outra Senão é indecidível Vamos provar que H não existe – Seria estranho que um programa resolvesse o último teorema de Fermat Máquinas de Turing -5 Prova por contradição Simplificação na classe de programas P – Só programas em C com saída em caracteres e que só usam printf() Modificar H – – – As modificações não põem em causa a existência de H Modificar printf() de forma a que quando devesse imprimir no, passe a imprimir hello, world Obtém-se H1 P I H1 yes hello, world Máquinas de Turing -6 Prova por contradição Interesse em programas que processam programas Restringir H1 – – Só tem entrada P Pergunta o que faz P quando recebe P como entrada H2 H2 yes hello, world H2 é modificação de H1 – – P yes hello, world H2 começa por ler P para um array com H2 malloc() H2 simula H1 substituindo leituras de P e de I por leituras do array O que faz H2 quando é dado como entrada a ele próprio? Máquinas de Turing -7 H2 não pode existir H2, dado P – – Imprime yes se P imprimir hello, world com entrada P Imprime hello, world se P, com entrada P, não imprimir hello, world Dando H2 a H2 – Se imprimir yes diz que H2 com entrada H2 imprime hello, world – Se imprimir hello, world (tem que ser uma ou outra das possibilidades) então a saída da caixa tem que ser yes Mas acaba-se de assumir que H2 com entrada H2 imprime yes Contradição também Portanto H2 não pode existir nem H1 nem H – O problema do hello, world é indecidível Máquinas de Turing -8 Redução de problemas Outros problemas – – Para testar a indecidibilidade pode-se construir um programa paradoxal, semelhante a H2 Alternativa: reduzir o problema indecidível ao novo problema; se conseguisse decidir o novo, também decidia o antigo; como o antigo é indecidível, o novo também é Questão: saber se se consegue reduzir o antigo ao novo Nota: reduzir o novo ao antigo não resolve porque daria Decidível(antigo) Decidível(novo), mas o antecedente é falso Decide yes ou no conforme a sua entrada instância do problema P2 está ou não na linguagem do problema P1 Constrói P2 Decide yes no Máquinas de Turing -9 Fase de construção A construção tem que reduzir cada instância de P1 (cadeia w) a uma instância de P2 (cadeia x) com a mesma resposta – – Qualquer cadeia no alfabeto de P1 que não pertence à linguagem de P1 tem que ser convertida para uma cadeia que não está na linguagem de P2 Assim, se w está em P1, x está em P2 e Decide diz yes; se w não está em P1, x não está em P2 e Decide diz no; fala verdade sobre w Máquinas de Turing -10 Exemplo de redução Problema – – – – Construção – – – – – Programa Q, com entrada y, chama a função foo? Se Q não tiver a função foo é fácil P1 é o problema hello, world e P2 é o problema chama-foo Dado um programa Q com entrada y construir um programa R com entrada z que chame foo se e só se Q com entrada y imprimir hello, world Se Q tiver foo, renomeá-la e a todas as suas chamadas Adicionar uma função foo vazia e que não é chamada Memorizar no array A os primeiros 12 caracteres da saída Sempre que o programa escrever para a saída, verifica em A se está lá hello, world e, nesse caso, chama foo O programa modificado é R; a entrada z é igual a y Se fosse possível decidir R também seria possível decidir Q Máquinas de Turing -11 Motivação Problemas indecidíveis – Problemas intratáveis – – Não existe algoritmo Os algoritmos conhecidos são demasiado dispendiosos Simplificação; heurísticas Necessidade de um modelo simples de computador para estudar a computabilidade – – Máquinas de Turing Modelo de computador, mais do que de linguagem Máquinas de Turing -12 Contexto David Hilbert (início do séc. XX) – Kurt Gödel (1931) – – Teorema da incompletude: construiu uma fórmula que não pode ser provada nem refutada Técnica semelhante ao programa contraditório H2 Alan Turing (1936) – – Há alguma maneira de determinar se qualquer fórmula da lógica de predicados de primeira ordem, aplicada aos inteiros, é verdadeira? Máquina de Turing: modelo de qualquer computação possível Veio a estar envolvido, durante a 2ª Guerra, no esforço de construção de máquinas de que emergiram os computadores Hipótese de Church (tese de Church-Turing, não demonstrável) – Todos os modelos gerais de computação são equivalentes às funções parciais recursivas e às máquinas de Turing (mesmo os computadores actuais) Máquinas de Turing -13 Máquina de Turing Controlo … B Xn B B … Número finito de estados Cada célula pode conter um símbolo (alfabeto finito) Entrada – – Xi Fita de comprimento infinito dividida em células – X1 X2 Controlo finito – B Cadeia finita constituída por símbolos do alfabeto de entrada Colocada na fita no início; resto da fita preenchido com brancos (B) Símbolos da fita – Alfabeto de entrada + branco + possivelmente outros símbolos Máquinas de Turing -14 Máquina de Turing Cabeça da fita – – Sempre posicionada numa célula No início, está na célula mais à esquerda da entrada Movimento ou passo da máquina – – função do estado do controlo e do símbolo a ser varrido pela cabeça 1. Mudança de estado – 2. Escrita de um símbolo na célula onde está a cabeça – Pode ser o mesmo Pode ser o mesmo 3. Deslocação da cabeça de uma célula à esquerda ou à direita Não restringe: sequência de passos com a cabeça parada seguida de um com movimento pode ser resumida neste Máquinas de Turing -15 Formalização Semelhante a autómatos de pilha Máquina de Turing (TM) M= (Q, , , , q0, B, F) – – – – Q: conjunto finito de estados do controlo : conjunto finito de símbolos de entrada : conjunto finito de símbolos da fita : função de transição (q, X) = (p,Y,D) – – – q é um estado, X um símbolo da fita p é o novo estado, em Q; Y é o símbolo em que substitui X; D é L ou R, esquerda ou direita, direcção em que a cabeça se move depois da substituição q0: estado inicial B: branco, símbolo que preenche a fita, excepto as células com a entrada F: conjunto de estados de aceitação ou finais Máquinas de Turing -16 Computação Descrição instantânea – – X1X2…Xi-1qXiXi+1…Xn Células desde a primeira à última não brancas (nº finito) – Mais um prefixo ou sufixo finito com brancas até à cabeça O estado (q) e a célula (i) onde a cabeça está Passo da máquina de Turing M (├M;├*M – 0 ou mais passos) – – Supondo (q,Xi) = (p,Y,L) X1X2…Xi-1qXiXi+1…Xn ├M X1X2…Xi-2pXi-1YXi+1…Xn Estado q passa a p; célula Xi passa a Y; cabeça anda para a esquerda Se i=1: qX1X2…Xn ├ pBYX2…Xn Se i=n e Y=B: X1X2…Xn-1qXn ├ X1X2…Xn-2pXn-1 Simétrico para (q,Xi) = (p,Y,R) Máquinas de Turing -17 Exemplo 0n1n TM para aceitar a linguagem {0n1n | n1} Ideia – – – Fita no início contém 0’s e 1’s Mudar o primeiro 0 para X; deslocar para a direita até ao primeiro 1 e mudá-lo para Y; deslocar para a esquerda até ao primeiro X; deslocar um para a direita; recomeçar Se num estado aparecer algum símbolo não previsto, a TM morre – Se a entrada não for 0*1* Se na iteração em que marca o último 0 também marca o último 1 então aceita Máquinas de Turing -18 Exemplo 0n1n Estado 0 q0 (q1,X,R) (q3,Y,R) q1 (q1,0,R) (q2,Y,L) (q1,Y,R) q2 (q2,0,L) q3 1 X Y B (q0,X,R) (q2,Y,L) (q3,Y,R) (q4,B,R) q4 – M = ({q0,q1,q2,q3,q4), {0,1}, {0,1,X,Y,B}, , q0, B, {q4}) q0: muda 0 para X q1: desloca-se para a direita até ao primeiro 1 que muda para Y q2: desloca-se para a esquerda até encontrar um X e volta a q0 Se tiver um 0 reinicia o ciclo; se tiver um Y vai para a direita; se encontrar um branco vai para q4 e aceita; senão morre sem aceitar Máquinas de Turing -19 Computações no exemplo Entrada 0011 – q00011 ├ Xq1011 ├ X0q111 ├ Xq20Y1 ├ q2X0Y1 ├ Xq00Y1 ├ XXq1Y1 ├ XXYq11 ├ XXq2YY ├ Xq2XYY ├ XXq0YY ├ XXYq3Y ├ XXYYq3B ├ XXYYBq4B – Descrição instantânea inicial q00011 aceita Entrada 0010 q00010 ├ Xq1010 ├ X0q110 ├ Xq20Y0 ├ q2X0Y0 ├ Xq00Y0 ├ XXq1Y0 ├ XXYq10 ├ XXY0q1B – morre Máquinas de Turing -20 Diagramas de transição Semelhante a autómato de pilha – – Nós são estados da TM Arco do estado q para o estado p com etiquetas X/YD – (q,X) = (p,Y,D), X e Y são símbolos da fita e D é L ou R Start é estado inicial; circunferência dupla, estados finais; B, branco Y/Y 0/0 Start q0 0/X q2 X/X Y/Y q3 1/Y q1 Y/Y 0/0 B/B Y/Y q4 Máquinas de Turing -21 Exemplo Diagrama de transição para uma TM que aceite a linguagem das cadeias com número igual de 0 e 1. Y/Y Start q0 0/X 1/X B/B q1 1/1 Y/Y 0/Y q2 Y/Y 0/0 1/Y X/X q4 q3 0/0 1/1 Y/Y • q00110 ├ Xq2110 ├ q3XY10 ├ Xq0Y10 ├ XYq010 ├ XYXq10 ├ XYq3XY ├ XYXq0Y ├ XYXYq0B ├ XYXYBq4B • q0110 ├ Xq110 ├ X1q10 ├ Xq31Y ├ q3X1Y ├ Xq01Y ├ XXq1Y ├ XXYq1B Máquinas de Turing -22 Linguagem de uma TM Cadeia de entrada colocada na fita – Cabeça no símbolo mais à esquerda Se a máquina entrar num estado de aceitação, a cadeia é aceite Linguagem da TM M= (Q, , , , q0, B, F) – – Conjunto das cadeias w em * tais que q0w ├* p e p F Linguagens recursivamente enumeráveis Linguagens TM PDA, CFG DFA (NFA, -NFA), RE Linguagens recursivamente enumeráveis Linguagens sem contexto (CFL) Linguagens regulares (RL) Máquinas de Turing -23 Paragem Uma TM pára se entrar num estado q a ler um símbolo X e (q,X) não estiver definida – Permite encarar a máquina de Turing como executando uma computação, com princípio e fim – exemplo: calcular a diferença de dois inteiros q00m10n ├* 0m-nqf TM que param sempre, aceitem ou não a entrada, constituem modelos de algoritmos (linguagens recursivas) Pode-se assumir que uma TM pára sempre que aceita Infelizmente não é sempre possível exigir que uma TM pare quando não aceita – – Indecidibilidade (linguagens recursivamente enumeráveis) Possibilidade de uma TM se referir a si própria (poder para ser indecidível) Máquinas de Turing -24 Técnicas de programação de TM Uma TM tem o mesmo poder computacional que os computadores actuais Memória no estado – – Pistas múltiplas – – Estado = controlo + memória de dados Ver o estado como um tuplo Fita composta por várias pistas; um símbolo em cada pista Alfabeto da fita constituída por tuplos Poder das TM permanece inalterado Máquinas de Turing -25 Subrotinas Uma TM é um conjunto de estados que executa um processo – Tem uma entrada e estados finais Encarada como subrotina de uma TM principal – – – Chamada vai para estado principal Não existe noção de endereço de retorno Se uma subrotina for chamada de vários estados diferentes, faz-se cópias (macro) para retornar ao estado que chamou Máquinas de Turing -26 Extensões TM com várias fitas – – – – Cada qual tem a sua cabeça Entrada só na primeira fita Movimento: esquerda, direita e estacionário Equivalente a uma fita Complexidade temporal quadrática TM não deterministas – – Função de transição dá conjunto de tuplos (q,Y,D) Equivalente a determinista Codificar na fita uma fila com as descrições instantâneas a processar Simular o não determinista percorrendo-as em largura Máquinas de Turing -27 Restrições TM com fitas semi-infinitas Máquinas com várias pilhas Máquinas com contadores Comparação com computadores Máquinas de Turing -28