Deixe uma sequência de entrada ser dada como . Então, se um NFA está atualmente no estado (e leu a entrada até o alfabeto ), antes de ler o próximo símbolo de entrada, o NFA se divide em dois NFA, um no estado outro no , se houver uma transição de o tipo . Se houver um ciclo do tipo , em que são alguns estados da NFA, então não adianta lembrar de outro NFA no estado r até o ponto em que a entrada foi lida até o alfabeto w_i r w i r s r ϵ → s r ϵ → s ϵ → q 1 . . . . ϵ → q k ϵ → r q i r w i.
Se um PDA (não determinístico) estiver no estado (e a entrada for lida até ) e existir um ciclo (em que transição meio que nada após é lido da entrada, nada é exibido ou lido da pilha e o alfabeto é empurrado para a pilha) antes de ler o próximo alfabeto de entrada , haverá um PDA infinito nos estados porque, diferentemente do NFA, embora os estados sejam finitos, o conteúdo da pilha pode ser diferente (infinitas possibilidades), se não estiver errado.
Assim como na NFA e no PDA, o poder do não-determinismo vem das transições . Portanto, eu assumo que a máquina de Turing não determinística também obtém seu não-determinismo de transições como NFA e PDA (mais como PDA). Eu sei que uma máquina de Turing determinística pode simular uma máquina não determinística (eu conheço a prova que usa a busca inicial). Mas agora tenho dúvidas sobre como isso é possível. Porque se um ciclo do tipo no PDA acima existir no diagrama de estados da máquina de Turing não determinística, antes de ler o próximo símbolo ϵa máquina de Turing determinística, mesmo ao simular uma configuração em algum ramo da máquina de Turing não determinística (enquanto bfs), teria que acompanhar a máquina de Turing infinita (novamente os estados são finitos, mas os símbolos na fita têm infinitas possibilidades).
Então, como exatamente o não determinismo é definido no caso das máquinas de Turing? Estou entendendo mal algo trivial? As máquinas de Turing não determinísticas usam transições ?
Sinto muito pelas minhas dúvidas triviais. Se algo estiver incorreto, posso atualizar minha pergunta.
Respostas:
Não-determinismo é o mesmo conceito em todos os contextos - a máquina tem várias opções para prosseguir em qualquer ponto. No entanto, a semântica é um pouco diferente, pois DFAs / NFAs e PDAs sempre definem funções totais , enquanto as máquinas de Turing (determinísticas ou não determinísticas) em geral definem funções parciais .
Uma função parcial é aquela definida apenas em parte do domínio. Se não está definido em então escrevemos . (Portanto, é realmente uma função total, mas há um elemento especial no intervalo que significa que a saída é indefinida.) Uma máquina de Turing determinística define uma função parcial da seguinte maneira: se parar em então é o conteúdo da fita quando pára em ; e caso contrário, .x f ( x ) = ⊥ f M M x M ( x ) M x M ( x ) = ⊥f x f(x)=⊥ f M M x M(x) M x M(x)=⊥
Um decisor determinístico da máquina de Turing tem dois tipos de estados de parada, aceitando e rejeitando, e define uma função parcial da seguinte maneira: se parar em em um estado de aceitação, então ; se parar no estado de rejeição, então ; se não parar, então . Se sempre parar, dizemos que aceita o idioma .x M ( x ) = 1 M ( x ) = 0 M ( x ) = ⊥ M L = { x : M ( x ) = 1 }M x M(x)=1 M(x)=0 M(x)=⊥ M L={x:M(x)=1}
Uma máquina de Turing não determinística (que é sempre uma decisão) pode "ramificar" (tem várias opções possíveis a qualquer momento) e tem a seguinte semântica:
Dada essa definição, espera-se claramente como simular uma máquina de Turing não determinística usando um dispositivo determinístico de máquina de Turing: você tenta todas as ramificações, verificando se alguma delas leva a um estado de parada de aceitação. Após a interrupção de todas as ramificações, você pode decidir se deseja ir para um estado de aceitação ou para um estado de rejeição. Se a máquina de Turing não determinística não parar em algum ramo, o mesmo ocorre com a máquina determinística.
E quanto a -moves? Eles causam problemas, pois o autômato correspondente pode nunca parar. Para autômatos finitos (NFAs e PDAs), ignoramos silenciosamente os cálculos sem interrupção. Nossa razão para fazer isso é que as linguagens resultantes são sempre computáveis, mesmo que o algoritmo ingênuo para simulá-las deterministicamente (simulando todos os caminhos de computação) não funcione completamente. Isso não é tão difícil para os NFAs, que podem ser convertidos em DFAs. No entanto, os PDAs determinísticos são estritamente mais fracos que os PDAs não determinísticos. No entanto, você pode mostrar que todo PDA é equivalente a um sem transição (embora a prova possa passar por gramáticas sem contexto).ϵ ϵ
Você pode simular -moves em máquinas de Turing, mas é preciso ter cuidado para que não haja loops que causem cálculos sem interrupção. Em alguns casos, no entanto, podemos usar o mesmo truque acima. Por exemplo, suponha que sua máquina de Turing tenha restrições de espaço: conhecemos um limite superior no espaço que ela usa (dependendo do comprimento da entrada). Nesse caso, todo cálculo sem interrupção necessariamente muda (uma vez que a máquina de Turing possui muitos estados finitos, incluindo o conteúdo da fita); portanto, se "ignorarmos" os cálculos sem interrupção, como acima, o modelo resultante de computação ainda é computável. De um modo mais geral, isso funciona desde que tenhamos a garantia de que todos os cálculos sem interrupção circulam. (Esse é o caso de NFAs, mas não de PDAs.)ϵ
fonte