Sipser, Capítulo 3 Noção formal de algoritmo, história Modelos de computação: máquina de Turing, máquina URM, linguagens de programação Alfabeto finito e linguagem, números naturais Noção de função (parcial) computável Postulado de Church-Turing, pseudo-código Estudo da computabilidade Enumeração de programas Existência de funções não-computáveis Linguagens reconhecíveis e decidíveis Limites? %%%% bijecção entre números e pares de números f(N,N)->N 0 2 5 9 14 20 ... 1 4 8 13 19 ... 3 7 12 18 ... 6 11 17 ... 10 16 ... 15 ... %%%% representação de números em diversas bases decimal 0,1,2,3,4,5,6,7,8,9 245 = 2 x 10 x 10 + 4 x 10 + 5 binário 0,1 101 = 1 x 2 x 2 + 0 x 2 + 1 = 5 outras bases ... unário? %%%% simulador de máquina de Turing http://morphett.info/turing/turing.html 00xR2 01xR3 0##R8 200R2 211R2 2##R4 40xL6 4 1 1 L reject 4 _ _ L reject 4xxR4 300R3 311R3 3##R5 5xxR5 51xL6 5 0 0 L reject 5 _ _ L reject 600L6 611L6 6xxL6 6##L7 700L7 711L7 7xxR0 8xxR8 8 0 0 L reject 8 1 1 L reject 8 _ _ R accept %%%% simulador de máquina URM http://faculty.oxy.edu/rnaimi/home/URMsim.htm 1: J(2,3,5) 2: S(1) 3: S(3) 4: J(1,1,1) 5: Z(2) 6: Z(3) %%%% programa na linguagem Mathematica euclides = Function[{m, n}, Module[{x, y, z}, x = Min[m, n]; y = Max[m, n]; While[x != 0, Print[x, " ", y]; x = Min[y - x, x]; y=y-x ]; y ]]; euclides[2*5*2*3, 2*7*3*5] 60 210 60 150 60 90 30 60 30 30 30 %%%%% função total não-computável f(n) = x+1 se Pn(n) = x = 0 se Pn(n) não termina %%%%%% L reconhecível existe P tal que P(n) = 1 se e só se n está em L L decidível existe P tal que P(n) = 1 se n está em L = 0 se n não está em L %%%%%% exercícios (a) Mostre que é computável a função que determina se uma sequência de 0s e 1s é alternante, i.e. se tem sempre 0 antes de 1, e 1 antes de 0. (b) Mostre que é computável a função que determina se numa sequência de 0s e 1s o número de 0s é igual ao número de 1s. (c) Mostre que a linguagem dos números pares (pode considerar a representação decimal e/ou a representação binária) é decidível. (d) Mostre que se uma linguagem é decidível então é reconhecível. (e) Mostre que existe uma linguagem reconhecível que não é decidível. (f) Mostre que uma linguagem L é decidível se e só se L e comp(L) são ambas reconhecíveis, onde comp(L) é a linguagem complementar de L, i.e. a linguagem formada por todas as palavras sobre o mesmo alfabeto que não estão em L. (g) Mostre que se L é uma linguagem infinita reconhecível então L contém uma sublinguagem infinita decidível. (h) Mostre que é reconhecível a linguagem formada pelos programas P para os quais existe n tal que P(n) termina. (i) Em 1962, Tibor Radó apresentou a função do 'castor atarefado' (busy beaver). Supondo que o alfabeto das máquinas de Turing é unário, a função busy beaver (BB) atribui a cada número n o maior número de símbolos que uma máquina de Turing com n estados consegue deixar na fita ao terminar uma computação iniciada com uma fita completamente em branco. A função BB não é computável, pois prova-se que para qualquer função computável f existe n tal que BB(n+c) > f(n+c). Ainda assim são conhecidos alguns dos seus valores, nomeadamente, sabe-se que BB(1) = 1, BB(2) = 4, BB(3) = 6 e BB(4) = 13. Sabe-se ainda que BB(5) > 4097 e é também conhecido um limite inferior (gigantesco) para BB(6). (i.1) Obtenha máquinas que comprovem que BB(1) = 1, BB(2) = 4, BB(3) = 6 e BB(4) = 13. (i.2) Mostre que se BB fosse computável então seria também computável, dado n, encontrar uma máquina que determine BB(n). Nível 1 - (a-e) Nível 2 - (f-h) Nível 3 - (i)