Não tive tempo de escrever isso antes, mas encontrei uma resposta. Aqui está o que eu fiz:
Deixei O seja o original PDA. Vamos construir uma novaPDA, chame-o M (M significa modificado).
Para encontrar o complemento de O, podemos transformar estados finais em estados não finais e vice-versa. É o mesmo procedimento que para autômatos finitos. No entanto, há uma sutileza. O principal problema é que no PDA originalO a entrada w pode levar a um estado S que não é um estado final, mas poderia executar um ϵ−move e chegar a um estado de aceitação S′. Inverter estados como mencionado acima, tornariaM terminar em S com a entrada w que seria um estado final (causando M aceitar aceitar a entrada), embora mais tarde faça uma ϵ−move para S′, um estado de não aceitação. Portanto, ambosO e M aceitará w. Algo semelhante acontece seS foi um estado final e S′ um estado não final alcançável a partir de S através de um ϵ−move.
Para superar esse problema, precisamos garantir que todos ϵ- acontece antes de lermos o próximo símbolo. Ou seja, entraremos em um estado de leitura somente quando um caminho deϵ-moves é seguido e chegamos a um estado que não tem ϵ-move disponível. Chamamos esses estados de leitura de estados , pois precisam de um símbolo real para realizar uma nova transição.
Definir Mestados de ser tuplas do formulário <q,n> Onde q∈Q (Q é o conjunto de estados do original PDA) e n∈{1,2,3,4}.
E se δ(q,ϵ,X)=<q′,α> no O, deixei δ(<q,3>,ϵ,X)=<<q′,2>,α> no M E se q∈FO.
E se δ(q,ϵ,X)=<q′,α> no O, deixei δ(<q,3>,ϵ,X)=<<q′,3>,α> no M E se q∉FO.
E se δ(q,ϵ,X)=<q′,α> no O, deixei δ(<q,2>,ϵ,X)=<<q′,2>,α> no M.
E se δ(q,ϵ,X) é undefined no O, δ(<q,2>,ϵ,X)=<<q,1>,X> no M
E se δ(q,ϵ,X) é undefined no O, δ(<q,3>,ϵ,X)=<<q,4>,X> no M
Nessas definições, deixamos estados da forma <q,2> e <q,3> consumir ϵ-move imitando ϵ-move de Oaté que não haja mais. Em seguida, execute umϵ-move para um estado de leitura. Agora, para os estados de leitura,
- E se δ(q,a,X)=<q′,α> no O, deixei δ(<q,1>,a,X)=δ(<q,4>,a,X)=<<q′,3>,α> no M.
Ao fazer essa definição, consumimos um símbolo da entrada e passamos para um estado do formulário <q,3> para começar uma nova série de ϵ-move.
Por fim, faça estados da forma <q,4> estar aceitando estados de M E se q∉FO. Além disso, faça<q0,3> o estado inicial de M E se q0 é o estado inicial de O.
O que fizemos é o seguinte:
Crie 4 "pisos" de estados (o segundo elemento da tupla nos estados de Mdetermina em que andar estamos). Piso 3 imitaϵ-move de O possivelmente atingindo um estado de aceitação q do O. Se for esse o caso, passamos para o segundo andar; caso contrário, permaneceremos no piso 3. Quando não houver maisϵ-move a seguir de O, definimos ϵ-move de Mpara alcançar um estado de leitura. Os pisos 1 e 4 correspondem aos estados de leitura. Se estivéssemos no andar 3, vamos para o andar 4. Se estivéssemos no andar 2, chegamos ao andar 1. Somente os estados<q,4> (estados que estão no andar 4) estão aceitando estados de M, providenciou que q não é um estado de aceitação de O.
Informe-me se cometi um erro de digitação ao escrever isso. Eu poderia facilmente ter me enganado. Além disso, meu inglês não é muito bom, então fique à vontade para editar e reformular melhor as coisas.