Seu modelo é Turing completo (ao contrário do que eu pensava anteriormente), consulte a resposta do usuário21313, um esboço da prova (a essência é que você pode simular uma fila e os autômatos de filas estão completos Turing).
Existem várias maneiras de enfraquecer o modelo para cair na equivalência com autômatos vinculados lineares ou inferiores.
Ginsburg, Greibach & Harrison [1] fornecem uma máquina chamada "Stack Automaton", que é um PDA com dois recursos adicionais: 1. O cabeçote de entrada pode se mover para a esquerda e para a direita (para digitalizar partes da entrada vistas anteriormente). 2. A cabeça de leitura / gravação na pilha pode digitalizar através da pilha no modo somente leitura, mas pressionar e saltar ainda ocorre apenas na parte superior. Observe a principal diferença aqui com o seu modelo, que me confundiu anteriormente: a pilha possui apenas uma cabeça / ponteiro que pode mover para cima e para baixo na pilha, enquanto a sua possui duas, o que é suficiente para tornar seu modelo Turing completo. Eles também fornecem outro modelo [2], onde a entrada só pode ser lida da esquerda para a direita, mas a digitalização de pilha somente leitura adicional ainda está disponível.
Na Figura 2 de [1], eles fornecem a contenção (comprovada na Seção 5 da mesma, talvez com algumas partes em [2]) e as linguagens de autômatos de pilha não determinísticos bidirecionais estão estritamente contidas em R. No entanto, eles são equivalentes a autômatos vinculados lineares não determinísticos, portanto reconhecem linguagens sensíveis ao contexto.
Autômatos de pilha bidirecional e não determinístico e autômatos de pilha bidirecional parecem equivalentes, no entanto, alterar a cabeça de entrada para unidirecional faz uma diferença significativa. O conjunto de linguagens de autômatos de pilha não determinística unidirecionais é um subconjunto estrito de linguagens sensíveis ao contexto (ainda não sei exatamente onde ainda) e o conjunto de autômatos de pilha determinística de mão única (que são equivalentes ao seu modelo ) languages é um subconjunto estrito do conjunto de idiomas unideterministas não-determinísticos de pilha de autômatos.
Um tipo mais fraco novamente, que fica abaixo desses, é o autômato da pilha que não apaga, que só pode gravar na pilha.
Hopcroft & Ullman mostram que os idiomas reconhecidos pelos autómatos de pilha determinísticos que não apagam correspondem a DS P A C E (nlogn ) autómatos não determinísticos de pilha não apagáveis correspondem a D S P A C E (n2).
Termo aditivo
Depois de mais algumas escavações, esses slides de aula sugerem que os autômatos determinísticos de pilha unidirecional e sem apagamento são estritamente mais fracos que a versão bidirecional; portanto, reconheça algo menos queD S P A C E (nlogn ).
Também encontrei outros artigos de Hopcroft e Ullman [4,5], que podem fornecer mais algumas pistas, mas parece ser tangencial neste momento. [5] pelo menos prova algumas equivalências de alguns Stack Automata com LBAs.
Referências
- Seymour Ginsburg, Sheila A. Greibach e Michael A. Harrison, "Stack Automata and Compiling". Journal of the ACM, 14 (1): 172–201, 1967.
- Seymour Ginsburg, Sheila A. Greibach e Michael A. Harrison, "Autômato de pilha unidirecional". Journal of the ACM, 14 (2): 389–418, 1967.
- John E. Hopcroft, Jeffrey D. Ullman, "Automatismos de pilha não-visualizáveis" . JCSS, 1 (2): 166-186, 1967.
- John E. Hopcroft, Jeffrey D. Ullman, "Autômatos determinísticos da pilha e o operador do quociente" , JCSS, 2: 1-12, 1968.
- John E. Hopcroft, Jeffrey D. Ullman, "Dois resultados em autômatos de pilha unidirecional" , Simpósio sobre Switching e teoria de autômatos (SWAT - mas não aquele SWAT), 1967.
pTop == 0
epRead == 0
. Um métodoReadCancel()
que definepRead = 0
também pode ser uma boa ideia, porque, caso contrário, o abortar dePop()
forpRead == pTop
pode ser irritante.