Como saber se um idioma é reconhecível, co-reconhecível ou decidível?


8

Se você tem um idioma L, sem fazer nenhuma prova, há uma maneira de saber se é reconhecível ou co-reconhecível ou decidível?

Basicamente, todas as dicas ou truques que podem ser usados ​​para contar. Ou talvez os padrões comuns a serem pesquisados ​​para saber qual é o tipo?


"sem fazer nenhuma prova", eu posso te provar algo. (:
Ran G.

1
Na matemática, um "truque" é geralmente chamado de "teorema" e, em algumas ocasiões, um "lema".
Andrej Bauer

Alguns padrões comuns são aqueles abordados pelo teorema de Rice (provando um conjunto indecidível) e pelo teorema de Rice-Shapiro (provando um conjunto irreconhecível). Isso é particularmente útil para o padrão "o conjunto de TMs (codificadas) modo que, executando , observamos esse comportamento"MM
chi

Respostas:


6

L é reconhecível

Uma linguagem é reconhecível se, e somente se, existe um verificador para , onde um verificador é uma máquina de Turing que pára em todas as entradas e para todos os , . Comumente, é pensado como um "certificado" ou "prova" de que está em eo verificador verifica se é uma prova válida de estar emLLwΣwLcΣ.V accepts w,ccwLVcwL. (Observe que essa definição é equivalente à definição de reconhecedor porque podemos construir um reconhecedor para um idioma a partir de um verificador para esse idioma). Agora, para determinar se um idioma está ou não no ER, podemos fazer a seguinte pergunta:

Dada uma string wL, você poderia provar quewL?

Por exemplo, considere HALT={M,w | M is a TM that halts on w}. HALT é reconhecível porque provar a você que M pára w, Posso apenas dizer o número de etapas que você deve executar M para e se M parar depois de tantas etapas, você estaria convencido de que M,wHALT.

L é co-reconhecível

Da mesma forma, um idioma L é co-reconhecível se e somente se seu complemento for reconhecível ou, em outras palavras, se existir um verificador para L¯. Assim, para ver se um idioma está em co-RE, podemos perguntar:

Dada uma string wL, você poderia provar quewL?

Tomando novamente o exemplo de HALT, podemos usar essa intuição para mostrar que HALTnão é co-reconhecível. Isso porque se eu lhe dissesse que alguma máquinaM não para na entrada w, não há realmente nada que eu possa lhe dizer para convencê-lo desse fato. eu poderia correrM em w mas mesmo se estivéssemos assistindo M corra e ainda não o viu parar, não sabemos que não irá parar em algum momento no futuro.

L é decidível

Finalmente, uma linguagem L é decidível se ambos L e L¯são reconhecíveis. Portanto, se a resposta para as duas perguntas acima for sim, o idioma será decidido.

Como exemplo, considere L={anbn | nN}. Dada uma stringwL, eu poderia provar para você que wL? Claro, eu poderia contar o número dease o número de bse mostrar que são iguais, então Lé reconhecível. E sewL? Eu poderia provar que uma string não está emL mostrando que não é da forma anbm ou que há uma incompatibilidade no número de aareia bs. Portanto,Lé co-reconhecível. Como é reconhecível e co-reconhecível,L também é decidível.

Referência: eu sou um AT para uma aula de introdução à teoria da computabilidade / complexidade na minha universidade e meu professor fez este guia animado realmente útil para raciocinar sobre linguagens regulares, decidíveis e reconhecíveis.


Obrigado por esse link! e obrigado ao seu professor por fazer isso! foi ótimo
anulou

2

Ideias principais

Ser reconhecível significa que você pode criar um processo automático (voltaremos a isso mais tarde) que usa uma palavra como parâmetro, de forma que

  • Se o processo automático terminar, ele retornará SIM ou NÃO.
  • Esse processo automático não precisa ser finalizado em todas as entradas, mas deve ser finalizado se a palavra de entrada estiver no idioma.

Ser co-reconhecível significa a linguagem wΣ,wL (ou, em inglês, o conjunto de todas as palavras que não estão em L, ou seja, complementar) é reconhecível.

Ser decidível significa que você pode criar um processo automático que use uma palavra como entrada, para que

  • O processo automático sempre termina
  • Responde SIM ou NÃO. Se responder SIM, a palavra está no idioma; se responder NÃO, a palavra não está no idioma.

Um resultado importante é que L é decidível se e somente se L é reconhecível e co-reconhecível.


A idéia para provar esse resultado é que você pode criar um processo automático a partir dos processos reconhecíveis e co-reconhecíveis, alternando etapas dos dois processos, até que um deles lhe dê a resposta SIM. Um deles precisa fazê-lo, pois cada palavra está ou não no idioma)


Processos automáticos

Sem ser muito formal, muitos tipos de máquinas foram projetados, e basicamente todos eles foram vinculados a tipos de linguagens (esses tipos dependem das ferramentas necessárias para definir tais linguagens. Para obter mais informações, Chomsky Hierarchy pode ajudar).

O significado usual do processo automático, em relação à decidibilidade, é uma Máquina de Turing. Você pode definir uma máquina de Turing para que ela possa:

  • Receber valores da entrada
  • Armazenar valores
  • Leia os valores armazenados
  • Computar operações matemáticas básicas em valores
  • Teste propriedades matemáticas básicas sobre esses valores e aja de acordo, eventualmente fazendo um loop.

Basicamente, uma máquina de Turing pode fazer tudo o que você pode definir em um programa, exceto que é um objeto matemático, com memória infinita e tempo para gastar em um cálculo. Nem sempre termina.

Outra propriedade importante das Máquinas de Turing é que você pode descrever uma máquina de Turing como uma única palavra (isso é codificação), e existe uma máquina de Turing que, dada como entrada, a codificação de uma máquina Me uma palavra w, pode simular o cálculo de M na entrada w. Isso será importante daqui a pouco.


Vamos apenas salientar que as linguagens regulares - que são (quase) o tipo mais simples de linguagem que você pode pensar do ponto de vista da matemática - têm a propriedade peculiar de serem fechadas sob complemento. Isso significa basicamente que nessas línguas as noções de reconhecibilidade e decidibilidade são equivalentes. Isso não se aplica à medida que você avança na hierarquia de Chomsky.


Exemplo de um idioma indecidível

Estudaremos o problema da parada . A questão é: podemos construir uma máquina de Turing que, dada a codificação de outra máquina de TuringM e uma palavra w, Decide wetherM termina na entrada w ?

Obviamente, isso é reconhecível , pois precisamos simularM em waté que termine e, quando terminar, diga SIM. No entanto, seMnunca termina, não diremos NÃO, por isso reconhecemos esse idioma, mas não o decidimos. Está provado que esse idioma não pode ser decidido por uma máquina de Turing. Isso envolve um esquema matemático usual: um argumento diagonal, que eu não chamaria de intuitivo. Você pode verificar este esboço de prova para se acostumar.

Resumindo

Você não poderá, em um idioma, apenas declarar se é decidível ou não. Não existe nenhum algoritmo que possa fazer isso, e provar que uma linguagem não é decidida requer algum pensamento e pode exigir algum conhecimento sobre Máquinas de Turing, argumentos diagonais, etc.

No entanto, aqui está minha maneira pessoal de lidar com essa questão. Normalmente, ao estudar um idioma, presumo que seja decidível, a menos que mostre alguma forma de referência à maneira como a Turing Machine funciona. Nesse caso, começo a desconfiar e tento definir um algoritmo que decide a linguagem. Se isso não parecer fácil, às vezes ajuda a dividir o trabalho em algoritmos de reconhecimento e co-reconhecimento. Se eu ainda não conseguir, tentarei estabelecer uma conexão entre esse idioma e outro indecidível, como "Se eu posso decidir esse idioma, posso decidir o problema da interrupção". Esta é uma redução de Turing a um problema indecidível, portanto o primeiro problema não pode ser decidido. Se tudo isso falhar, posso tentar usar argumentos diagonais, mas isso pode ser um pouco complicado.


1

Um truque é que, se o idioma é finito, você tem certeza de que é decidível - pois pode "codificar" uma máquina para aceitar qualquer coisa nesse idioma. No entanto, acho que a maneira mais fácil é simplesmente reduzir de outro idioma


O mesmo funciona para idiomas co-finitos.
Raphael

Além disso, uma linguagem com um espaço de solução finito, dada a sua entrada, será decidida, pois você pode executar a pesquisa de força bruta.
Jmite 23/04

1

Como mencionei no meu comentário acima, acho útil pensar no espaço da solução do problema.

Pense em algo como SAT. Sabemos que é decidível, pois para testá-lo, há um número finito de soluções que precisamos tentar. Se houver algum conjunto finito de condições a serem verificadas, em que uma dessas opções garante sim e nenhuma delas garante um não, então o problema é decidível, pois apenas verificamos as condições em sucessão. Observe que esse conjunto de condições pode ser muito grande (como no caso de problemas NP-complete).

Considere agora quando o espaço da solução é infinitamente contável, e podemos gerar cada solução possível em sequência, e testar cada solução é decidível. Nesse caso, sabemos que o problema é reconhecível. Por exemplo, um problema ao perguntar "existe um número natural tal que ..." é reconhecível, porque podemos começar em 0 e continuar tentando todos os números em sequência. Se houver uma solução, estamos garantidos em encontrá-la, mas não há necessariamente um limite no tempo que levará para encontrá-la. Além disso, esse algoritmo nunca seria interrompido se esse número inteiro não existisse, portanto, não prova que um problema seja decidível.

Você pode aplicar a mesma técnica ao conjunto de todas as strings, todos os números inteiros, todos os gráficos ou qualquer estrutura finita que possamos enumerar. Isso não funcionaria para encontrar um número real ou um conjunto (possivelmente infinito) de cadeias.

Observe, no entanto, que alguns problemas podem ter espaços de solução infinitos e ainda podem ser decididos.


"Se o espaço da solução é infinitamente contável, sabemos que o problema é reconhecível." -- Não necessariamente. Primeiro, o espaço da solução pode não ser efetivamente enumerável (exemplo: "Existe uma TM que calcula uma função total e, portanto, [predicado não trivial]?"). Segundo, a decisão de determinar se o objeto considerado é uma solução pode ser indecidível (exemplo: "Encontre uma TM que não pare em 77.").
Raphael

Ah, isso acende uma ideia. Nós sabemos issoNP{L| L Decidable}, o que implicaria que, se pudermos mostrar que um problema está no NP (ou P, nesse caso), isso simplesmente resulta disso. Isso poderia ajudar a reduzi-lo.
23413 Steven

Além disso: "Qualquer coisa com um" conjunto de possibilidades "finito para tentar será decidida" - não. O problema da parada tem duas respostas possíveis, mas é indecidível.
Raphael

@ Steven Sim, mas essa é uma prova ainda mais difícil. (O conjunto você está se referindo é normalmente indicadas com R, o conjunto de linguagens recursivas (ly decidable).)
Raphael

Acho que devo esclarecer. A idéia é que você não pode forçar brutalmente o problema de parada da maneira que você pode, digamos, 3-SAT. Ou como, quando você executa algo em um PDA, pode tentar todos os caminhos possíveis, mesmo que não seja determinístico. Mas para uma TM, você não pode, porque ela pode durar infinitamente, de modo que o conjunto de "coisas para tentar", ou seja, os possíveis caminhos através do programa, não é finito.
Jmite 23/04

0

O truque para ver se uma linguagem é indecidível é fazer a si mesmo a pergunta "posso codificar um cálculo da máquina de Turing usando essa linguagem"? Ou, de maneira mais geral, "fica tão complicado quanto o que acontece em uma computação?". É claro que algumas vezes essa codificação é difícil e ajuda a conhecer uma lista de problemas indecidíveis a serem reduzidos (como o problema de pós-correspondência). Se você não encontrar essa redução, tente pensar em algoritmos para decidir seu idioma. Por exemplo, o idioma das listas de números inteiros em ordens crescentes não é finito, mas é fácil projetar um algoritmo testando se uma lista é classificada em ordem crescente, portanto esse idioma é decidível. E para muitos idiomas, não sabemos sobre a sua decidibilidade, portanto, essa é uma pergunta difícil.


Esta resposta está promovendo intuição errada, veja aqui .
Raphael

Não concordo que seja intuição errada. É claro que não mencionei todas as questões, por exemplo, a linguagem pode ser apresentada de uma maneira excessivamente complicada, como no seu exemplo, e, portanto, é preciso primeiro simplificá-la para chegar à sua "essência". Também não mencionei o fato de que existem linguagens indecidíveis "acima" de parar e "abaixo de" parar, porque não acho que isso ajude a intuição nesse nível.
Denis
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.