Licenciatura em Engenharia Informática e de Computadores - LEIC Licenciatura em Engenharia de Redes de Computadores -LERC Exercícios de Teoria da Computação Computabilidade Secção de Lógica e Computação Departamento de Matemática Instituto Superior Técnico 2007/2008
1 Programação Mathematica 1. Defina em Mathematica as seguintes funções/predicados (a) somanat que recebe um natural n e devolve a soma de todos os naturais até n (b) somalista que recebe uma lista de naturais e devolve a soma dos seus elementos (c) prodlista que recebe uma lista de naturais e devolve o produto dos seus elementos (d) retiraneg que recebe uma lista de inteiros w e devolve a lista resultante de retirar de w todos os números negativos (e) escolhepares que recebe uma lista de inteiros w e devolve a lista dos elementos pares de w (f) conta que recebe uma lista de inteiros w e um inteiro k e devolve o número de vezes que k ocorre em w (g) contemprimoq que recebe uma lista de naturais w e devolve True se e só se w contém pelo menos um número primo (h) apaga que recebe uma lista w e um número inteiro k e devolve a lista que resulta de se apagar de w todas as ocorrências de k (i) permutacao que recebe duas listas w1 e w2 e devolve True se w2 for uma permutação de w1 e False caso contrário (j) intercala que recebe duas listas w1 e w2 e devolve a lista resultante de intercalar os elementos de w1 e w2 (k) repete que recebe uma lista w e devolve uma lista em que o primeiro elemento de w aparece uma vez, o segundo elemento duas vezes e assim por diante (l) primalg que recebe um inteiro k e devolve o primeiro algarismo de k (m) prodcart que recebe duas listas w = {a 1, a 2,..., a m } e v = {b 1, b 2,..., b n } e devolve a lista {{a 1, b 1 },..., {a 1, b n },..., {a m, b 1 },..., {a m, b n }} (n) prodmatriz que recebe uma matriz de inteiros e devolve o produto de todos os seus elementos (o) mediacpares que recebe uma matriz de inteiros e devolve a média dos elementos das colunas pares (p) contaprimosepares que recebe uma matriz de naturais e devolve um par {x, y} em que x é o número de posições da matriz que têm um elemento primo e y é o número de posições da matriz que têm um elemento par 2
(q) conta que recebe uma matriz de naturais e devolve um par {x, y} em que x é o número de colunas da matriz que não contêm primos e y é o maior número primo que ocorre na matriz (y deve ser 0 caso não existam primos) (r) mediascolunas que recebe uma matriz de inteiros e devolve uma lista com tantos elementos quantos as colunas da matriz em que cada posição k contém a média dos elementos da coluna k (s) contaparescolunas que recebe uma matriz de inteiros e devolve uma lista com tantos elementos quantos as linhas da matriz em que cada posição k contém o número de elementos pares que existem na coluna k (t) listasprimos que recebe uma lista de listas de naturais e devolve uma lista com todas as listas que tenham pelo menos um número primo (u) triangularsuperiorq que recebe uma matriz quadrada de números inteiros e determina se a matriz é triangular superior (isto é, todos os elementos abaixo da diagonal principal são nulos) (v) triangularinferiorq que recebe uma matriz quadrada de números inteiros e determina se a matriz é triangular superior (isto é, todos os elementos acima da diagonal principal são nulos) (w) diagonalq que recebe uma matriz quadrada de números inteiros e determina se é uma matriz diagonal (x) sufixoq que recebe como argumento uma lista w de listas de números inteiros e determina se cada lista em w é sufixo de todas as listas anteriores (recorde que se diz que w1 é prefixo de w2 se existe w3 tal que Join[w1,w3]==w2) (y) decrescenteq que recebe como argumento uma lista w de listas de números inteiros e determina se cada lista está ordenada por ordem decrescente (z) prodmatrizes que recebe duas matrizes de inteiros e devolve o respectivo produto, caso exista. 2. Assuma a seguinte representação de afd s em Mathematica: em que {lista1,lista2,lista3,e,lista4} lista1, lista2 e lista4 são listas de strings representando, respectivamente, o conjunto dos estados, o alfabeto e o conjunto dos estados finais e é uma string que representa o estado inicial lista3 é uma lista de listas de strings do tipo {e1,s,e2}; cada uma destas listas representa uma transição (e1 é o estado de partida, e2 é o estado de chegada e s é o símbolo do alfabeto). 3
Defina em Mathematica as seguintes funções/predicados: (a) delta que dado um afd calcula a sua função transição (b) deltatotalq que dado um afd devolve True se a sua função de transição é total e False caso contrário (pode usar a função delta e a função prodcart do exercício 1m) (c) deltatotalq usando agora apenas a função delta (d) deltastar que dado um afd calcula a sua função transição estendida (pode usar a função delta) (e) aceitaq que dado um afd e uma palavra sobre o alfabeto (string) devolve True se a palavra é aceite pelo afd e False caso contrário (f) prodq que dado um afd e um estado devolve True se o estado é produtivo e False caso contrário (g) acessq que dado um afd e um estado devolve True se o estado é acessível e False caso contrário (h) utq que dado um afd e um estado devolve True se o estado é útil e False caso contrário (i) cjeprods, cjeacess, cjeuts e cjeinuts que dado um afd e um estado devolvem, respectivamente, o conjunto dos estados produtivos, acessíveis, úteis e inúteis (j) afdcomplementar que dado um afd constrói o afd complementar (k) afdproduto que dados dois afd s constrói o respectivo afd produto. 3. Assuma a seguinte representação de afnd ɛ s em Mathematica: {lista1,lista2,lista3,e,lista4} em que os diferentes elementos são semelhantes aos da representação de afd s acima referida, mas neste caso lista3 é uma lista de listas de strings do tipo {e1,s,cje} em que e1 é um estado, s é um símbolo do alfabeto ou ɛ e cje é uma lista de estados. Defina em Mathematica as seguintes funções/predicados: (a) delta que dado um afnd ɛ calcula a sua função transição (b) fechoeps que dado um afnd ɛ e um estado calcula o fecho-ɛ do estado (c) deltastarnd que dado um afnd (sem movimentos-ɛ) calcula a sua função de transição estendida (pode usar a função delta) (d) deltastarnde que dado um afnd ɛ calcula a sua função de transição estendida (pode usar as funções delta e fechoeps) (e) aceitaq que dado um afnd ɛ e uma palavra sobre o alfabeto (string) devolve True se a palavra é aceite pelo afd e False caso contrário (f) afndtoafd que dado um afnd (sem movimentos-ɛ) constrói um afd equivalente 4
(g) afdsoma que dados dois afnd ɛ A 1 e A 2 constrói um afnd ɛ A tal que L A = L A1 L A2 (h) afdconc que dados dois afnd ɛ A 1 e A 2 constrói um afnd ɛ A tal que L A = L A1 L A2 (i) afdfechokleene que dados um afnd ɛ A 1 constrói um afnd ɛ A tal que L A = (L A1 ). 4. Assuma a representação de afnd ɛ s em Mathematica apresentada anteriormente e a seguinte representação de gramáticas regulares em Mathematica: em que {lista1,lista2,lista3,s} lista1 e lista2 são listas de strings representando, respectivamente, o conjunto dos símbolos auxiliares e o alfabeto s é uma string que representa o símbolo inicial lista3 é uma lista de listas de strings do tipo {le,ld}; cada uma destas listas representa uma produção (le é lado esquerdo e ld é o lado direito). Defina em Mathematica a função afndtogr que dado um afnd ɛ A constrói uma gramática regular G tal que L A = L G. 5. Defina em Mathematica as funções seguintes usando apenas atribuições do tipo x=y, x=0, x=x+1, composição sequencial (;), composições alternativas do tipo If[x==y,prog] e composições iterativas do tipo While[x==y,prog] em que x e y são nomes, e prog volta a ser construído apenas com expressões do tipo indicado: (a) menorq, que dados dois inteiros não negativos x e y devolve True se x é menor que y e False caso contrário. (b) menorigualq, que dados dois inteiros não negativos x e y devolve True se x é menor ou igual que y e False caso contrário. (c) parq, que dado um inteiro não negativo x devolve True se x é par e False caso contrário. (d) imparq, que dado um inteiro não negativo x devolve True se x é impar e False caso contrário. (e) soma, que dados dois inteiros não negativos x e y devolve a sua soma. (f) diferenca, que dados dois inteiros não negativos x e y devolve x y se x y e 0 caso contrário. (g) produto, que dados dois inteiros não negativos x e y devolve o seu produto. (h) quociente, que dados dois inteiros não negativos x e y devolve o quociente da divisão inteira de x por y. 5
(i) potencia, que dados dois inteiros não negativos x e y devolve x y, usando também atribuições do tipo x=y+z. (j) raiz, que dados dois inteiros não negativos x e y devolve a raiz de índice y inteira de x, usando também atribuiçõesdo tipo x=y+z e condições do tipo x<y. (k) expoentefact, que dados dois inteiros positivos x e y devolve o expoente do y-ésimo primo na factorização prima de x se x e y, usando também atribuições do tipo x=y*z, condições do tipo x<y e as funções Mod e PrimeQ. (l) log, que dados dois inteiros positivos x e y devolve o logaritmo inteiro de x na base y se y é maior que 1 e 0 caso contrário, usando também atribuições do tipo x=y*z e condições do tipo x<y. (m) multiploq, que dados dois inteiros não negativos x e y devolve True se x é múltiplo de y e False caso contrário, usando também atribuições do tipo x=y+z. (n) divisorq, que dados dois inteiros positivos x e y devolve True se x é divisor de y e False caso contrário: i. usando também atribuições do tipo x=y-z ii. usando também atribuições do tipo x=y+z e condições do tipo x<y iii. usando também atribuições do tipo x=y*z e condições do tipo x<y (o) qperfeitoq, que dado um natural devolve True se é quadrado perfeito e False caso contrário; neste caso pode usar a função Mod. (p) primoq, que dado um inteiro positivo devolve True se é primo e False caso contrário; neste caso pode usar a função Mod. (q) primentresiq, que dados dois inteiros positivos devolve True se são primos entre si e False caso contrário, usando também atribuições do tipo x=y+z e condições do tipo x<y. (r) mdc, que dados dois inteiros positivos devolve o seu máximo divisor comum, usando também atribuições x=y-z e condições x<y. (s) mmc, que dados dois inteiros positivos devolve o seu menor múltiplo comum, usando também atribuições x=y*z e condições x<y. 6. Mostre que são computáveis as seguintes funções (recorde que I é o conjunto das expressões Mathematica irredutíveis) (a) g : I 2 I tal que se x e y são inteiros positivos g(x, y) é o expoente do x-ésimo primo na decomposição de y em números primos e, caso contrário, é a string argumentos inválidos (b) f : I I tal que se x é um inteiro positivo então f(x) é uma lista (sem repetições) de listas {p, e}, com p primo e e 0 o expoente de p na decomposição de x em números primos, e caso contrário é a string argumento inválido 6
(c) f : I I tal que se m é uma lista inteiros então f(m) é o número de primos que ocorre nessa lista e, caso contrário, é a string argumento inválido (d) f : I I tal que se m é uma lista então f(m) é a lista que resulta de eliminar os elementos repetidos de m e, caso contrário, é a string argumento inválido (e) f : I I tal que se m é uma matriz de inteiros então f(m) é o produto de todos os seus elementos e, caso contrário, é a string argumento inválido (f) f : I I tal que se m é uma matriz de inteiros então f(m) é número de zeros que ocorrem em m e, caso contrário, é a string argumento inválido (g) f : I I tal que se m é uma matriz então f(m) é número de strings que ocorrem em m e, caso contrário, é a string argumento inválido (h) g : I 2 I tal que se x e y são listas x = {a 1, a 2,..., a m } e y = {b 1, b 2,..., b n } g(x, y) é a lista {{a 1, b 1 },..., {a 1, b n },..., {a m, b 1 },..., {a m, b n }} e, caso contrário, é a string argumentos inválidos (i) g : I 2 I tal que se x é uma lista de listas de inteiros e k é um inteiro então g(x, k) é a lista que contém todas as listas em x nas quais ocorre k e, caso contrário, é a string argumentos inválidos (j) f : I I tal que se x é um afd (representado com no exercício 2) então f(x) é a lista dos estados produtivos de x e, caso contrário, é a string argumento inválido. 7. Mostre que são computáveis as seguintes funções (recorde que I é o conjunto das expressões Mathematica irredutíveis) (a) c : I 2 I tal que c(x, y) = 1 se x e y são inteiros não negativos e x é múltiplo de y e c(x, y) = 0 nos outros casos (b) c : I 2 I tal que c(x, y) = 1 se x e y são inteiros positivos e x é divisor de y e c(x, y) = 0 nos outros casos (c) c : I 3 I tal que c(x, y, z) = 1 se x, y e z são inteiros positivos e z é o maior divisor comum a x e a y e c(x, y, z) = 0 nos outros casos (d) c : I 3 I tal que c(x, y, z) = 1 se x, y e z são inteiros positivos e z é o menor múltiplo comum a x e a y e c(x, y, z) = 0 nos outros casos. (e) c : I I tal que c(x) = 1 se x é uma lista de inteiros pares e c(x) = 0 nos outros casos (f) c : I I tal que c(s) = 1 se s é uma string e c(s) = 0 nos outros casos (g) c : I I tal que c(s) = 1 se s é uma string de letras c(s) = 0 nos outros casos 7
(h) c : I I tal que c(x) = 1 se x é um natural e é capicua e c(x) = 0 nos outros casos (i) c : I I tal que c(m) = 1 se m é uma matriz diagonal de inteiros e c(m) = 0 nos outros casos (j) c : I I tal que c(m) = 1 se m é uma matriz identidade e c(m) = 0 nos outros casos (k) c : I I tal que c(m) = 1 se m é uma matriz triangular superior de inteiros e c(m) = 0 nos outros casos (l) c : I 2 I tal que c(s, I) = 1 se I é um alfabeto (lista em que cada elemento é uma letra ou um dígito) e s é uma palavra sobre I e c(x, y) = 0 nos outros casos (m) c : I 2 I tal que c(x, y) = 1 se x e y são listas e todos os elementos de x ocorrem em y e c(x, y) = 0 nos outros casos. (n) c : I 2 I tal que c(x, y) = 1 se x e y são listas e x é uma permutação y e c(x, y) = 0 nos outros casos. 2 Decidibilidade e semidecidibilidade 1. Mostre que são decidíveis os conjuntos seguintes: (a) o conjunto NatP ar I dos naturais pares (b) o conjunto NatImp I dos naturais ímpares (c) o conjunto NatP rim I dos naturais primos (d) o conjunto NatQP I dos naturais que são quadrados perfeitos (e) o conjunto Mult I 2 em que Mult = {(x, y) I 2 : x e y são naturais e x é múltiplo de y} (f) o conjunto Div I 2 em que Div = {(x, y) I 2 : x e y são naturais e x é divisor de y} (g) o conjunto MDC I 3 em que MDC = {(x, y, z) I 3 : x, y e z são naturais e z é o maior divisor comum a x e a y} (h) o conjunto MMC I 3 em que MMC = {(x, y, z) I 3 : x, y e z são naturais e z é o menor múltiplo comum a x e a y} (i) o conjunto CP rim I 2 em que CP rim = {(x, y) I 2 : x e y são naturais e x, y são coprimos} (recorde-se que x e y são coprimos, ou primos entre si, se o maior divisor comum a x e y é 1) (j) o conjunto ListCP ar I das listas de inteiros de comprimento par (k) o conjunto StringI I 2 em que StringI = {(s, I) I 2 : s é uma string sobre o alfabeto I} 8
(l) o conjunto SubList I 2 em que SubList = {(x, y) I 2 : x e y são listas e todos os elementos de x ocorrem em y} (m) o conjunto MQ I das matrizes quadradas de inteiros (n) o conjunto MT S I das matrizes triangulares superiores de inteiros (o) o conjunto MT I I das matrizes triangulares inferiores de inteiros (p) o conjunto MD I das matrizes diagonais de inteiros (q) o conjunto Cap I em que Cap = {x I : x é natural x é capicua} (r) o conjunto I das expressões Mathematica irredutíveis. 2. Assuma a representação de afd s em Mathematica referida no exercício 2 da secção 1. (a) Mostre que é decidível o conjunto Afd I das listas que constituem uma representação de um afd (b) Seja D I um afd. Mostre que são decidíveis os seguintes conjuntos: i. o conjunto L(D) I em que L(D) = {x I : x é uma String e x é aceite por D} ii. o conjunto EstP rd(d) I dos estados produtivos de D iii. o conjunto EstAc(D) I dos estados acessíveis de D iv. o conjunto EstInt(D) I dos estados inúteis de D v. o conjunto EstDst(D) I 2 dos pares de estados distinguíveis de D vi. o conjunto Eqv(D) I dos afd s equivalentes a D (c) o conjunto {(w, D) I 2 : w é uma String, D é um afd e w é aceite por D} 3. Mostre que todo o conjunto finito é decidível. 4. Mostre que a classe dos conjuntos decidíveis (dum mesmo tipo) é fechada para as seguintes operações: (a) intersecção (b) reunião (c) complementação. 5. Mostre que a classe dos conjuntos decidíveis é fechada para a operação binária de produto cartesiano. 6. Mostre que todos os conjuntos referidos no exercício 1 são semidecidíveis. 7. Mostre que todos os conjuntos referidos no exercício 1 são co-semidecidíveis. 8. Mostre que todo o conjunto decidível é semidecidível. 9. Mostre que todo o conjunto decidível é co-semidecidível. 9
10. Mostre que um conjunto A I n é decidível se e só se é semidecidível e é co-semidecidível. 11. Mostre que se A I 2 é decidível então o conjunto {x I : existe y I tal que (x, y) A} é semidecidível. 12. Considere o conjunto {E I : avalia(e[0]) }. Mostre que este conjunto é semidecidível. 13. Considere o conjunto {E I : φ E (0) }. Mostre que este conjunto é semidecidível. 14. Considere o conjunto {E I : avalia(e[0]) }. Mostre que este conjunto é co-semidecidível. 15. Seja E I. Mostre que é semidecidível o conjunto {F I : avalia(f[e]) }. 16. Seja E I. Mostre que é co-semidecidível o conjunto {F I : avalia(f[e]) }. 17. Considere o conjunto {E I : avalia(e[e]) }. Mostre que este conjunto é semidecidível. 18. Considere o conjunto {E I : existe F I tal que avalia(e[f]) }. Mostre que este conjunto é semidecidível. 19. Considere o conjunto {E I : existe F I tal que avalia(e[f]) }. Mostre que este conjunto é co-semidecidível. 20. Considere o conjunto {(E, F) I 2 : avalia(e[f]) }. Mostre que este conjunto é semidecidível. 21. Considere o conjunto {(E, F) I 2 : φ E (F) }. Mostre que este conjunto é semidecidível. 22. Considere o conjunto {(E, F) I 2 : φ E (F) }. Mostre que este conjunto é co-semidecidível. 23. Considere o conjunto {E I : existe F I tal que avalia(e[f])=0}. Mostre que este conjunto é semidecidível. 24. Considere o conjunto {E I : existe F I tal que φ E (F) = 0}. Mostre que este conjunto é semidecidível. 25. Seja F I. Mostre que é semidecidível o conjunto {E I : existe X I tal que avalia(e[x])=f}. 26. Considere o conjunto {(E1, E2, E3) I 3 : avalia(e1[e2])=e3}. Mostre que este conjunto é semidecidível. 27. Mostre que o conjunto A I n é semidecidível se e só se o seu complementar é cosemidecidível. 10
28. Mostre que o conjunto A I é semidecidível se e só se é vazio ou admite uma enumeração (aplicação sobrejectiva de IN para A) computável. 29. Mostre que um conjunto A I n é semidecidível se e só se é domínio de alguma função computável. 30. Mostre que um conjunto A I é semidecidível se e só se é contradomínio de alguma função computável. 31. Mostre que um conjunto X I é semidecidível se e só se existe um conjunto R I 2 decidível tal que X = {x I : existe y I tal que (x, y) R}. 32. Mostre que todo o conjunto A I n semidecidível infinito tem um subconjunto infinito decidível. 33. Mostre que a classe dos conjuntos semidecidíveis (dum mesmo tipo) é fechada para as seguintes operações: (a) intersecção (b) reunião. 34. Mostre que a classe dos conjuntos semidecidíveis é fechada para a operação binária de produto cartesiano. 35. Seja C I n. Mostre que C e I n \C são ambos decidíveis se e só se forem ambos semidecidíveis. 36. Seja D I n um conjunto decidível e C D. Mostre que C e D\C são ambos decidíveis se e só se forem ambos semidecidíveis. 37. Prove que os seguintes predicados sobre os naturais são decidíveis relativamente aos naturais: (a) P (x) = x é par (b) P (x) = x é ímpar (c) P (x) = x é quadrado perfeito (d) P (x) = x é número primo (e) P (x, y) = x é menor que y (f) P (x, y) = x é múltiplo de y (g) P (x, y) = x é divisor de y (h) P (x, y) = x e y são primos entre si (i) P (x, y, z) = z é o maior divisor comum a x e a y (j) P (x, y, z) = z é o menor múltiplo comum a x e a y. 38. Prove que os seguintes predicados sobre matrizes de inteiros são decidíveis relativamente às matrizes de inteiros: 11
(a) P (m) = m é uma matriz quadrada (b) P (m) = m é uma matriz triangular superior (c) P (m) = m é uma matriz diagonal (d) P (m) = m é uma matriz identidade (e) P (m 1, m 2 ) = a matriz m 2 é inversa de m 1 (f) P (m 1, m 2 ) = a matriz m 2 é a transposta de m 1. 39. Prove que os seguintes predicados sobre I são decidíveis: (a) P (E) = E é um inteiro (b) P (E) = E é uma lista (c) P (F, X) = X é um ponto fixo de F. 40. Sejam P 1 e P 2 predicados sobre C I com a mesma aridade e decidíveis. Mostre que (a) P 1 P 2 é um predicado decidível. (b) P 1 P 2 é um predicado decidível. (c) P 1 é um predicado decidível. 3 Indecidibilidade 1. Mostre que existe um conjunto semidecidível que não é decidível. 2. Considere o conjunto das expressões Mathematica irredutíveis E tal que avalia(e[0]). Mostre que este conjunto não é decidível. 3. Seja E uma expressão Mathematica irredutível. Considere o conjunto das expressões Mathematica irredutíveis F tais que avalia(f[e]). Mostre que este conjunto não é decidível. 4. Considere o conjunto das expressões Mathematica irredutíveis E para as quais existe uma expressão Mathematica irredutível F tal que avalia(e[f]). Mostre que este conjunto não é decidível. 5. Considere o conjunto dos pares de expressões Mathematica irredutíveis (E1,E2) tais que avalia(e1[e2]). Mostre que este conjunto não é decidível. 6. Considere o conjunto das expressões Mathematica irredutíveis E para as quais existe uma expressão Mathematica irredutível F tal que avalia(e[f])=0. Mostre que este conjunto não é decidível. 7. Considere o conjunto dos triplos de expressões Mathematica irredutíveis (F,X,E) tais que avalia(f[x])=e. Mostre que este conjunto não é decidível. 8. Use o teorema de Rice para mostrar que não são decidíveis os seguintes conjuntos: 12
(a) {F I : φ 1 F (0) } (b) {E I : φ 1 E (E) } (c) {F I : φ 1 F (E) } em que E I (d) {F I : existe X I tal que φ 1 F (X) } (e) {(F, E) I 2 : φ 1 F (E) } (f) {F I : existe X I tal que φ 1 F (X) = 0} (g) {F I : existe X I tal que φ 1 F (X) = E} em que E I (h) {(F, E) I 2 : existe X I tal que φ 1 F (X) = E} (i) {F I : φ 1 F = φ1 E } em que E I (j) {(F, E) I 2 : φ 1 F = φ1 E } 9. Mostre que não é semidecidível o complementar do conjunto das expressões Mathematica irredutíveis E tais que avalia(e[0]). 10. Mostre que não é semidecidível o complementar do conjunto dos pares de expressões Mathematica irredutíveis (E1,E2) tais que avalia(e1[e2]). 11. Mostre que não é semidecidível o complementar do conjunto das expressões Mathematica irredutíveis E para as quais existe uma expressão Mathematica irredutível X tal que avalia(e[x])=0. 12. Prove que os seguintes predicados sobre expressões Mathematica irredutíveis são semidecidíveis mas não são decidíveis. (a) P (F) = avalia(f[0]) (b) P (E1, E2) = avalia(e1[e2]) (c) P (E) = existe uma expressão Mathematica irredutível X tal que avalia(e[x])=0. 13