ESIN/UCPel 058814 Linguagens Formais e Autômatos TEXTO 5 Máquina de Turing Linguagens Sensíveis ao Contexto e Enumeráveis Recursivamente Prof. Luiz A M Palazzo Maio de 2007 0. Introdução A Ciência da Computação é o estudo sistematizado relativo à Computação. Originou-se na Grécia com os algoritmos de Euclides (século III A.C.) e na Babilônia, com estudos sobre complexidade e redutibilidade de problemas. Em 1936 Alan Mathieson Turing, matemático inglês, propôs um modelo que ficou conhecido como Máquina de Turing, atualmente aceito como uma formalização do conceito de procedimento, isto é, uma seqüência finita de instruções que podem ser realizadas mecanicamente em um tempo finito. Ainda em 1936, Alonzo Church apresentou uma hipótese que ficou conhecida como a Hipótese de Church, segundo a qual qualquer função computável pode ser representada por uma Máquina de Turing. Como o conceito de procedimento é matematicamente impreciso, não é possível provar que a Máquina de Turing é realmente o dispositivo computacional mais genérico possível. Entretanto nenhum modelo computacional desenvolvido até o presente conseguiu apresentar capacidade computacional superior ao modelo de Turing, o que reforça a Hipótese de Church. As Linguagens Enumeráveis Recursivamente (LER), ou do Tipo Zero, são as linguagens que podem ser reconhecidas por uma Máquina de Turing e portanto esta classe de linguagem representa o conjunto de todas as linguagens que podem ser reconhecidas mecanicamente e em um tempo finito. Para gerar as LER emprega-se um formalismo axiomático ou gerador na forma de uma gramática denominada Gramática Irrestrita (não possui qualquer restrição quanto ao formato das produções). As Linguagens Sensíveis ao Contexto (LSC), ou do Tipo 1, estão contidas propriamente no conjunto das LER. Gramáticas Sensíveis ao Contexto (GSC): É o formalismo gerador das LSC. O lado esquerdo das produções pode ser uma palavra de variáveis ou terminais definindo um contexto de derivação. Máquina de Turing com Fita Limitada: É o mecanismo reconhecedor das LSC. Sua fita é limitada e portanto finita.. Não se sabe se o não-determinismo aumenta ou não o poder computacional das Máquinas de Turing com Fita Limitada.
1. Máquina de Turing A Máquina de Turing, para ser considerada um modelo de um procedimento deve apresentar, entre outras, as seguintes propriedades: a) A execução do algoritmo deve ser finita. b) Deve consistir de passos (1) discretos, (2) executáveis mecanicamente, (3) num tempo finito. O modelo proposto por Alan Turing em 1936 consistia de 3 partes: a) Fita: usada simultaneamente como dispositivo de entrada, saída e memória de trabalho, b) Unidade de Controle: reflete o estado corrente da máquina. Possui uma unidade de leitura e gravação (cabeça da fita) que acessa uma célula da fita de cada vez, movendo-se para a esquerda e para a direita, e c) Programa ou Função de Transição: comanda as leituras e gravações, o sentido do movimento da cabeça e define o estado da máquina. A fita é finita à esquerda e infinita à direita, sendo dividida em células onde cada uma armazena um símbolo, que podem pertencer ao alfabeto de entrada, ao alfabeto auxiliar ou ser "branco". Inicialmente a palavra a ser processada ocupa as células mais à esquerda da fita, ficando as demais em "branco". A unidade de controle possui um número finito e pré-definido de estados A cabeça de leitura/gravação lê o símbolo contido em uma célula da fita de cada vez e grava um novo símbolo. Após a leitura/gravação a cabeça se move uma célula para a direita ou para a esquerda. O símbolo gravado e o sentido do movimento são definidos pelo programa. Inicialmente a cabeça está posicionada na célula mais à esquerda da fita como pode ser visto na figura, onde representa "branco". a b b c a... Controle O programa é uma função que, dependendo do estado corrente da máquina e do símbolo lido, determina o símbolo a ser gravado, o sentido do movimento da cabeça e o novo estado da máquina.
p (a1, a2, m) q ESTADO ANTERIOR NOVO ESTADO Símbolo lido Símbolo gravado Sentido do movimento Isto é: δ (p, a1) = (q, a2, m) 2. Definição Formal da Máquina de Turing Uma máquina de Turing é uma heptupla: M = (Σ, Q, δ, q 0, F, V, ), onde: Σ é um alfabeto de entrada Q é um conjunto finito de estados possíveis de M δ é um programa ou função de transição parcial: δ:qx(σ V {}) Qx(Σ V {})x{e,d} q 0 é um estado inicial da máquina, q 0 Q F é um conjunto de estados finais da máquina tal que F está contido em Q V é um alfabeto auxiliar (que pode ser vazio) é o símbolo especial "branco" A função de transição considera o estado corrente e o símbolo lido da fita para determinar o novo estado, o símbolo a ser gravado e o sentido do movimento da cabeça, onde esquerda e direita são representadas por E e D respectivamente. O processamento de uma Máquina de Turing, M = (Σ, Q, δ, q 0, F, V, ), para uma palavra de entrada w consiste na sucessiva aplicação da função programa a partir do estado inicial q 0 e da cabeça posicionada na célula mais à esquerda da fita até ocorrer uma condição de parada. O processamento de M para a entrada w pode parar ou ficar em loop infinito. A parada pode ser de duas maneiras: aceitando ou rejeitando a entrada w. As condições de parada são as seguintes: a) A máquina assume um estado final: a máquina pára e a palavra de entrada é aceita. b) A função programa é indefinida para o argumento (símbolo lido e estado corrente): a máquina pára e a palavra de entrada é rejeitada. c) O argumento da função programa determina um movimento para a esquerda e a cabeça já está na posição mais à esquerda da fita: a máquina pára e a palavra de entrada é rejeitada.
Para definir formalmente o comportamento da Máquina de Turing é necessário estender a função programa para usar como argumento um estado e uma palavra. Se M é uma Máquina de Turing: a) ACEITA(M) ou L(M) é o conjunto de todas as palavras de Σ* aceitas por M. b) REJEITA(M) é o conjunto de todas as palavras de Σ* rejeitadas por M. c) LOOP(M) é o conjunto de todas as palavras de Σ* para as quais M entra em loop infinito. 3. Exemplo: Máquina de Turing Seja a linguagem L 1 = { a n b n n 0}. A Máquina de Turing M = ({a, b}, {q 0, q 1, q 2, q 3, q 4 }, δ 1, q 0, {q 4 }, {A, B}, ), onde δ 1 é como na tabela a seguir é tal que: (1) ACEITA(M) = L 1, (2) REJEITA(M) = Σ* - L 1 e (3) LOOP(M) = δ 1 a b A B (, A, D) (, B, D) (,, D) (, a, D) (, B, E) (, B, D) (, a, E) (, A, D) (, B, E) (, B, D) (,, D) (A, A, D) (a, A, D) (b, B, E) (,, D) (a, a, D) (a, a, E) (B, B, E) (,, D)
a a b b A a b b A a b b A a B b A a B b A a B b A A B B A A B b A A B B A A B b A A B B A A B B A A B B A A B B