Conteúdos da cadeira

Autómatos de pilha

PDA com um exemplo completo para 0n1n e a equivalência com gramáticas.

Markdown

Perguntar sobre esta página

ChatGPTClaudePerplexityGeminiCopiar e abrir

Envia o link e pede à IA para ler a página. No Gemini, cola a pergunta copiada.

Ver pergunta para copiar
Nesta página

Um autómato de pilha (PDA, de pushdown automaton) é um NFA com uma pilha: a cada passo, além de ler (ou não) um símbolo, pode empilhar ou desempilhar símbolos. A pilha é memória ilimitada mas só com acesso ao topo, e é exatamente o que faltava para reconhecer {0n1n}\{0^n 1^n\}. Esta página constrói esse autómato e enuncia a equivalência com gramáticas livres de contexto.

O modelo

Um PDA tem estados finitos, alfabeto de entrada Σ\Sigma e alfabeto de pilha Γ\Gamma (que pode incluir um marcador de fundo como undefined\varepsilon$ se não lê), símbolo no topo da pilha, estado destino e o que empilhar (ou desempilhar). Aceita por estado final (terminar num estado de aceitação após ler tudo, com qualquer conteúdo na pilha) ou por pilha vazia; os dois critérios são equivalentes.

A intuição: a parte finita (estados) trata o que os DFA já tratavam, e a pilha guarda contagens e chamadas por fechar. É o mesmo salto dos parênteses bem formados: empilha ao abrir, desempilha ao fechar.

Exemplo resolvido: PDA para {0n1n}\{0^n 1^n\}

Linguagem sobre {0,1}\{0, 1\}: nn zeros seguidos de nn uns, incluindo ε\varepsilon (n=0n = 0). Estratégia: empilha um marcador por cada 00 lido, depois desempilha um por cada 11. Aceita se a pilha esvaziar exatamente no fim.

Estados: q0q_0 (inicial, a ler zeros), q1q_1 (a ler uns), qfq_f (aceitação). Alfabeto de pilha: \{0, \},com, com $$ no fundo.

Inicialização:
  q0 --(ε, topo nada: empilha $)--> q0     (põe o marcador de fundo)
Leitura de zeros (fica em q0):
  q0 --(0, topo x: empilha 0 por cima)--> q0   para qualquer x
Transição para os uns:
  q0 --(1, topo 0: desempilha)--> q1
Aceitação (inclui a palavra vazia, com n = 0):
  q0 --(ε, topo $: desempilha)--> qf
Leitura de uns (fica em q1):
  q1 --(1, topo 0: desempilha)--> q1
Aceitação (cont.):
  q1 --(ε, topo $: desempilha)--> qf

Corre w=0011w = 0011: empilha \$$, empilha 0,empilha, empilha 0(pilha:(pilha:0,0,$dotopoparaofundo).Le^do topo para o fundo). Lê1:desempilhaum: desempilha um 0,vaipara, vai para q_1.Le^. Lê 1:desempilhaooutro: desempilha o outro 0(pilha:(pilha:$).Fimdapalavraem). Fim da palavra em q_1comtopocom topo$:transic\ca~o: transição \varepsilonparaparaq_f$. Aceite.

E porque é que 010010 é rejeitada? Lê 00 (empilha), lê 11 (desempilha, vai para q1q_1 com pilha \$$), lê 0:na~ohaˊtransic\ca~ode: não há transição de q_1alera ler0$. O caminho morre, e não há outro. Rejeitada, como devia.

PDA equivale a CFG

Teorema. Uma linguagem é reconhecida por algum PDA se e só se é gerada por alguma CFG. As linguagens desta família chamam-se livres de contexto.

A prova tem dois sentidos, e cada um é uma construção:

  • De CFG para PDA: o autómato simula derivações mais à esquerda, mantendo a forma sentencial na pilha e expandindo variáveis no topo. Se a palavra esvaziar a pilha, aceita.
  • De PDA para CFG: a gramática ganha uma variável [pAq][pAq] para cada par de estados (p,q)(p, q) e símbolo AA, significando “de pp com AA no topo até qq com AA removido”. As regras copiam as transições do autómato.

Não decores as construções símbolo a símbolo; fixa o que elas implicam: tudo o que provaste para gramáticas (como a árvore sintática) vale para autómatos de pilha, e vice-versa. Em particular, há um lema da repetição para linguagens livres de contexto (com duas partes repetíveis), que exclui linguagens como {0n1n2n}\{0^n 1^n 2^n\}. O padrão é o mesmo da página sobre limites das linguagens regulares: conta finita contra crescimento ilimitado.

Para levar para a próxima página

A pilha resolve a contagem, mas há linguagens que nem ela alcança, como {0n1n2n}\{0^n 1^n 2^n\}, e há perguntas que nenhuma máquina responde. O modelo sem restrições é a máquina de Turing.

Ver o ficheiro no GitHub

À tua maneira

Escolhe como preferes ler.

Aparência
Ajustar cores e largura
Cor de destaque do tema FEUP
Tipo de letra

Álgebra, lógica e uma ideia de cada vez.

As tuas escolhas ficam guardadas neste navegador.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.