Modelos de Computação Folha de trabalho n. 10 Nota: Os exercícios obrigatórios marcados de A a D constituem os problemas que devem ser resolvidos individualmente. A resolução em papel deverá ser depositada nas caixas da disciplina (P5-P8 e P1- P4,P9,P10) até ao dia 19.05.2005 às 8h30m e apresentada na aula prática respectiva.na resolução em papel por favor indicar no cimo da 1a folha o nome e a turma prática. Para saber quais dos exercícios que deverás apresentar, consultar http://www.ncc.up.pt/ nam/aulas/0405/mc/dist.pdf. Variantes de Máquinas de Turing 10.1 Seja M = (S, Σ, Γ, δ, s 0,, F ) uma máquina de Turing. Mostra que se todas as transições em δ movem a cabeça para a direita então L(M) é regular. Sugestão: constrói um autómato finito que reconhece L(M). 10.2 Mostra que as seguintes variantes de Máquinas de Turing são equivalentes ao modelo básico. Para cada uma: define formalmente a uma máquina M dessa variante indicando a função de transição, a relação mudança de configuração e linguagem aceite por M constrói MT s que simulem o funcionamento destas variantes (a) Máquinas de Turing com movimento de paragem. A cabeça da MT pode, para além dos movimentos normais de esquerda ( ) e direita ( ), ficar no mesmo sítio (h). A função de transição passa a ser da forma δ : S Γ S Γ {, h, }. (b) Máquinas de Turing com k-fitas. Cada fita tem a sua cabeça para leitura e escrita. Inicialmente a palavra de entrada está na fita 1 e as restantes fitas estão em branco. A função de transição passa a ser da forma δ : S Γ k S Γ k {, } k. 10.3 (a) Descreve formalmente uma MT com k fitas e define as noções de configuração, relação de mudança de configuração e linguagem aceite por uma MT de k fitas. (b) Descreve uma máquina de Turing com 2 fitas que reconheça a seguinte linguagem {w 1 #w 2 #...#w n w i {a, b} e w i = w j i, j} (c) Descreve uma MT com 2 fitas que aceite a seguinte linguagem: L = {wcw r w {0, 1} } e compare-a com uma para o modelo básico. Sugestão: Copiar os dados para a segunda fita e comparar os símbolos, em cada fita movimentando as cabeças em direções opostas. (d) Descreve uma máquina de Turing com 2 fitas que reconheça a linguagem de todas as palavras de {0, 1} com igual número de 0 s e de 1 s.sugestão: A primeira fita contém os dados e é percorrida da esquerda para a direita; e a segunda guarda o excesso de 0 s (ou de 1 s) em cada momento. 10.4 Uma máquina de Turing é não determinística se dado um estado e um símbolo lido, existirem várias hipóteses para o movimento (passo) seguinte, isto é, δ : S Γ P(S Γ {, }) Uma máquina de Turing não determinística aceita a sequência de entrada se existe uma sequência de escolhas de movimentos que conduza a um estado de final. Descreve máquinas de Turing não determinísticas que aceitem cada uma das seguintes linguagens: (a) As palavras de {0, 1} que contêm uma subpalavra de tamanho 100 que se repete, i.e, são da forma wxzxy, x = 100. Dep. Ciência de Computadores/FCUP 2004 2005 1
(b) L = {ww w {0, 1} } (c) as palavras da forma w 1 #w 2 #...#w n para qualquer n, tal que cada w i {a, b} e para algum j, w j é o inteiro j em binário. 10.5 Seja um k-apd um autómato de pilha determinístico com k pilhas. Um 0-APD é um autómato finito determinístico e um 1-APD é um autómato de pilha determinístico. Sabemos que 1-APDs são mais poderosos de 0-APDs. (a) Define formalmente um k-apd que aceite por estados finais. Nota: para facilitar podemos supor que os dados são sempre da forma x$ em que $ não pertence ao alfabeto, apenas permite indicar que os dados terminaram. (b) Mostra que 2-APDs são mais poderosos que 1-APDs. (c) Mostra que 2-APDs são equivalentes a máquinas de Turing. (d) Mostra que 3-APDs não são mais poderosos que 2-APDs. 10.6 Formaliza de um modo preciso a simulação da execução de autómato de pilha por uma máquina de Turing. Conclui que as linguagens independentes de contexto são recursivas. Decidibilidade e indecidibilidade: linguagens recursivas, recursivamente enumeráveis (r.e) e não-r.e 10.7 Considerando a codificação dada no curso, de máquinas de Turing em palavras de {0, 1} obtém a palavra correspondente à seguinte MT: onde a função de transição δ é dada por M = ({s 0, s 1, s 2 }, {0, 1}, {0, 1, }, δ, s 0,, {s 2 }) 0 1 s 0 (s 1, 0, ) (s 1, 1, ) (s 2,, ) s 1 (s 0, 0, ) (s 0, 1, ) 10.8 Para cada uma das operações sobre linguagens: reunião ( ), concatenação, intersecção ( ) e fecho de Kleene ( ), averigua, justificando, se as seguintes linguagens são fechadas para essa operação: (a) recursivas (b) recursivamente enumeráveis (r.e.) 10.9 Mostra que os seguintes problemas sobre máquinas de Turing são indecidíveis (por redução a um problema indecidível já conhecido): (a) Determinar, dada uma máquina M e palavra x, se M aceita x. (b) Determinar, dado uma máquina M, um estado s e uma palavra x, se M entra no estado s quando inicializada com a palavra x na fita. 10.10 Mostra que os seguintes problemas sobre máquinas de Turing são decidíveis: (a) Determinar, dado uma máquina M se para algum x, M com dados x executa pelo menos 45 passos. (b) Determinar, dado uma máquina M, se M alguma vez escreve um símbolo não branco, quando inicializada com a fita vazia. (c) Determinar, dado uma máquina M e uma palavra x, se M alguma vez move a cabeça para a esquerda quando inicializada com x na fita. Dep. Ciência de Computadores/FCUP 2004 2005 2
10.11 Verdade ou Falsidade? Para cada uma das seguintes questões justifica a sua resposta encontrando uma prova ou um contra-exemplo. (a) se L é recursiva e R é regular, então L R é recursiva (b) se L é r.e. e R é regular, então L R é r.e. (c) se L é r.e. e R é regular, então R \ L é r.e. (d) se L é r.e. e L é r.e. então L é recursiva (e) se A m B e B é regular, então A é regular (f) se A é r.e. e A m B, então B é r.e. (g) se A é recursiva então A é recursiva 10.12 10.13 (a) Averigua, justificando, se as linguagens recursivas são fechadas para a concatenação. (b) Mostra que o seguinte problema é indecidível: Dada uma máquina de Turing determinar se L(M) é infinita. Será r.e ou não r.e? (a) Averigua, justificando, se as linguagens recursivamente enumeráveis são fechadas para a concatenação. (b) Mostra que o seguinte problema é indecidível: dada uma máquina de Turing determinar se L(M) tem pelo menos duas palavras. Será r.e ou não r.e? Soluções de problemas escolhidos 10.6 Seja um autómato de pilha P = (S, Σ, Γ, δ, s p, Z, F ). Podemos supor que em cada transição o número de símbolos da pilha aumenta no máximo de uma unidade (Verifica!). Para simplificar consideremos uma Máquina de Turing (não-determinística) com duas fitas, com instruções de movimento R, L, H (mover a fita para a direita, esquerda e não mover, respectivamente) e supomos que a palavra a reconhecer está escrita na fita 1. Começamos por escrever o símbolo inicial da pilha, Z, na fita 2 (s i, a,, s p, a, Z, H, R), a Σ A segunda fita pode desempenhar o papel da pilha do autómato, e podemos traduzir para transições da MT, directamente, as diversas entradas da função de transições δ do autómato: δ(s 0, a, A) = (s 1, B) (s 0, a, A, s 1, a, B, R, H) δ(s 0, ɛ, A) = (s 1, B) (s 0, a, A, s 1, a, B, H, H), a Σ δ(s 0, a, A) = (s 1, ɛ) (s 0, a, A, s 1, a,, R, L) δ(s 0, ɛ, A) = (s 1, ɛ) (s 0, a, A, s 1, a,, H, L), a Σ δ(s 0, a, A) = (s 1, BA) (s 0, a, A, s 0, a, A, H, R) (s 0, a,, s 1, a, B, R, H) δ(s 0, ɛ, A) = (s 1, BA) (s 0, a, A, s 0, a, A, H, R), a Σ (s 0, a,, s 1, a, B, H, H), a Σ Em que cada s 0 é um novo estado para cada transição δ. Se o autómato for não determinístico, as k 1 alternativas δ(s 0, x, A), devem ainda ser identificadas no estado intermédio de actualização da pilha, que deverá ser da forma (s 0, j) com j = 1... k. Se o autómato depois de ler os dados, entrar num estado final, a máquina também deve entrar no estado final s f : (s,, X, s f,, X, H, H), s F, X Γ { } Caso o autómato não entre num estado final, quando terminar os dados ele pára, e máquina também pára, mas não entra num estado final. Dep. Ciência de Computadores/FCUP 2004 2005 3
Como este modelo de MT é equivalente ao das MT com uma só fita e dois movimentos (visto nas aulas) concluímos que seja qual for a linguagem independente de contexto, esta por definição tem um autómato de pilha que a aceita (por estado final), e foi possível encontrar uma MT que também reconhece esta linguagem por estado final. Portanto todas as linguagens independentes de contexto são recursivas. Utilizando uma MT (não determinística) com uma só pilha e duas instruções não é muito difícil fazer o mesmo tipo de tradução que foi feita acima... mas esta tradução é bastante mais trabalhosa... 10.12 (a) Sejam L e L duas linguagens recursivas. Então, por definição existem máquinas de Turing M e M que para qualquer input na fita, param num estado final (definidor de sucesso) caso a palavra pertença a L e L, respectivamente, e param num outro estado, caso contrário. Para cada palavra w com tamanho n existem n + 1 maneiras de se ter w = w w. Basta escrever uma máquina de Turing que execute o seguinte algoritmo: toma-se a primeira divisão de w = w w ; executam-se M com w e M com w ; se ambas as máquinas M e M terminarem aceitando as respectivas palavras, a máquina M deve terminar aceitando a palavra w; se alguma das máquinas rejeitar o seu input, toma-se a divisão de w = w w seguinte e repete-se o processo; se não restarem mais divisões de w = w w a máquina M deve rejeitar w. Esta m.t. M dado um input w pára (sempre), encontrado-se no estado de aceitação somente se w L L. Conclui-se assim que as concatenação de duas linguagens recursivas é uma linguagem recursiva. (b) Consideremos a seguinte redução: uma m.t. M que dado um input y termina aceitando y se uma determinada m.t. M com input x parar. A linguagem L(M ) ou é Σ ou é. Se existisse uma máquina Y que respondesse à pergunta se L(M ) é infinito, estaria a responder ao problema da paragem para a máquina M com input x, que é, como sabemos, um problema indecidível. Portanto tal máquina Y não existe, pelo que o problema é indecidível. A questão de provar que o problema não é semi-decidível, é bastante mais delicada... Consideremos uma m.t. M que dado um input y termina com sucesso se uma determinada m.t. M com input x não parar ao fim de y passos, e rejeita y caso contrário. A linguagem L(M ) é infinita caso M com input x não pare, e vazia caso contrário. Portanto se existisse uma solução semi-decidível para o problema de responder se a linguagem aceite por uma máquina de Turing é infinita, então tal resposta para a máquina M corresponderia a obter uma resposta semi-decidível para o problema complementar da paragem que sabemos não ser semi-decidível (senão o problema da paragem seria decidível pois seria semi-decidível com complementar semi-decidível). 10.13 (a) Sejam L e L duas linguagens recursivamente enumeráveis, quer isto dizer que existem máquinas de Turing M e M que quando executadas tendo por input uma palavra, sempre que essa palavra pertence à linguagem (respectivamente L e L ) terminam num estado final (definidor de sucesso) não se garantindo que parem caso contrário. Queremos mostrar que é possível encontrar uma máquina de Turing M que quando executada com input w pára num estado final (definidor de sucesso) caso w = w w com w L e w L, nada necessitando garantir no caso contrário. Para cada palavra w com tamanho n existem n + 1 maneiras de se ter w = w w. Sejam w 0w 0, w 1w 1,..., w nw n essas n+1 divisões de w. Basta então que a máquina M vá executando (por diagonalização) sucessivamente um passo de cada uma das 2(n + 1) máquinas (M, w 0), (M, w 0 ),..., (M, w n), (M, w n), até que um par de máquinas (M, w i ), (M, w i ) termine aceitando os respectivos input, altura em que a máquina M deve parar, aceitando w. Concluí-se assim que as concatenação de duas linguagens recursivamente enumeráveis é uma linguagem recursivamente enumerável. Dep. Ciência de Computadores/FCUP 2004 2005 4
(b) A primeira redução dada no alínea do problema 6 serve para mostrar que este problema não pode ser decidível (Porquê?). O problema é trivialmente semi-decidível. Dada uma máquina de Turing M geramos ordenadamente (por ordem crescente) todos os possíveis inputs para M. Sejam esses inputs x i, i N. Então executamos (por diagonalização) todos os pares (máquina, input). Ou seja vamos executando estágios sucessivos (começendo no estágio 0), tal que no estágio k executamos um passo de cada par (M, x i ), i {0,..., k}. Quando tivermos obtido dois x i aceites pela máquina M paramos no estado de sucesso. Problemas obrigatórios A Define linguagem recursivamente enumerável e averigua, justificando, se as linguagens recursivamente enumeráveis são fechadas para a intersecção finita. B Define linguagem recursivamente enumerável e averigua, justificando, se as linguagens recursivamente enumeráveis são fechadas para o fecho de Kleene. C D (a) Mostra que o seguinte problema é decidível: Determinar, dado uma máquina M e uma palavra x, se M alguma vez move a cabeça para a direita quando inicializada com x na fita. (b) Mostra que o seguinte problema é indecidível: Determinar, dado uma máquina M, se L(M) aceita a palavra aaaa. (a) Mostra que o seguinte problema é decidível: Determinar, dado uma máquina M e uma palavra x, se M com dados x executa mais de 100 passos (b) Mostra que o seguinte problema é indecidível: Determinar, dado uma máquina M, um estado s e uma palavra x, se M entra no estado s quando inicializada com a palavra x na fita. Dep. Ciência de Computadores/FCUP 2004 2005 5