Decidibilidade de idiomas

7

L1é uma linguagem recursivamente enumerável sobre algum alfabeto . Um algoritmo enumera eficazmente as suas palavras como . é outro idioma sobre como Considere as seguintes afirmações.Σw1,w2,...
L2Σ{#}{wi#wj:wi,wjL1,i<j}

  1. L1 é recursivo implica é recursivoL2
  2. L2 é recursivo implica L1 é recursivo

Quais afirmações são / são verdadeiras?

Eu pensei que ambas as afirmações eram verdadeiras.

A afirmação 1 é verdadeira. é recursivo significa que pode enumerar lexicograficamente suas seqüências de caracteres. A questão da associação para pode ser facilmente resolvida usando o decider e o enumerador lexicográfico de .L1L2L1

A afirmação 2 é verdadeira. O algoritmo que decide pode ser modificado para aceitar se a sequência de entrada corresponde a ou . Isso resolve a questão da associação para .L2wiwjL1

A solução dada para esta pergunta, no entanto, diz que a afirmação 2 é falsa. Você poderia me informar se meu raciocínio deu errado em algum lugar?

Abhijith Madhav
fonte
11
"corresponde a wi ou wj" -- para qual i resp. j?
Raphael
@Raphael, quero dizer que o algoritmo que decide L2 pode ser modificado para aceitar se a sequência de entrada corresponde ao wi ou wj do wi#wj, a forma da sequência de L2.
Abhijith Madhav
Mas onde é que começa awi#wj? Você não pode simplesmente procurar por um, que só lhe daria a enumerabilidade, não a decidibilidade. (Você tem que ser muito preciso aqui!)
Raphael
11
Você não tem permissão para alterar a enumeração de L1 na etapa 1, seu raciocínio para a etapa 1 está com defeito quando você alterna da enumeração wipara a enumeração lexicográfica.
Andrej Bauer
11
Você não tem permissão para fazer isso. A declaração do problema fornece um algoritmo para enumerarL1 e você tem que usar esse na definição de L2. Você não entendeu a declaração do problema.
27412 Andrej Bauer

Respostas:

7

Você parece estar certo. Mas como Raphael diz, tenha cuidado.

Instrução 1. Observe que o L2 é definido usando o algoritmo de enumeração E para L1, nao por L1em si. Para decidir seu#vL2, decida se ambos u,v no Le, se confirmado, execute o enumerador E e veja se u é emitido antes v. Como sabemos, ambas as cordas estão emL1 isso terminará.

Instrução 2. Se L1 é finito, é recursivo, então assumimos L1é infinito. CorreE e aguarde a primeira palavra w1. Agora, uma decisão paraL2 pode ser transformado em um para L1do seguinte modo. TestaruL1 primeiro verifique se u=w1e depois verifique w1#uL2. Isso é equivalente auL1 como não precisamos nos preocupar com o i<j requisito, que agora é verdadeiro por construção.

Eu nem tenho certeza de que precisamos saber w1 Correndo E: queremos apenas verificar se existe uma decisão, não se uma pode ser efetivamente construída. Isso parece impossível.

( editar ) Apenas para observar que Raphael postou uma "implementação" mais explícita dessas sugestões, o que evita possíveis ambiguidades.

Hendrik Jan
fonte
Relativamente à declaração 2: w1 pode ser codificado e, em seguida, podemos abandonar a suposição de que L1é recursivamente enumerável.
Yuval Filmus
11
Depende; nós não sabemos issoEnão se repete. Se sim,w1#w1L2depois de tudo. Não podemos decidir quew1nunca se repete. Claro, há é sempre um recenseador não-repetição, mas desdeL2 depende especificamente de Enão é justo supor que temos um.
Raphael
Aqui nunca verificamos w1#w1para evitar problemas. Entradau está marcado "manualmente" para w1. Além disso, a formulação sugere enumeração sem repetição, justamente por causa do seu comentário.
Hendrik Jan
@HendrikJan Expliquei por que verificar u=w1 não é suficiente para rejeitar o uem geral. A formulação não sugere enumeração sem repetição; de fato, o OP diz que a solução fornecida contradiz sua resposta, o que apontaria para outra interpretação.
Raphael
Eu acho que posso ter me confundido parcialmente. Eu mesmo postei uma resposta, que agora acho que é equivalente ao que você pretendia. No processo, acho que encontrei um problema com a prova da primeira declaração.
Raphael
1

Anúncio 1: a afirmação é verdadeira, mas seu raciocínio não é: você não pode alterar a enumeração; a definição deL2está intimamente ligado à ordem dos elementos. Aqui está o algoritmo simples que decideL2:

decide2(w) = {
  (u,v) = split (w,#) // w = u#v

  if ( decide1(u) && decide1(v) ) {
    i = 1
    while ( true ) {
      if ( enumerate1(i) == u ) {
        return true
      }
      else if ( enumerate1(i) == v ) {
        return false
      }
      i += 1
    }   
  }

  return  false
}

Aqui, decide1é a decisão deL1e enumerate1é o enumerador paraL1, que ambos existem por suposição. Observe que o whileloop sempre termina; nesse ponto, sabemos queu,vL1 então o loop os encontrará (de fato, o que ocorrer primeiro) eventualmente.

Anúncio 2: Essa afirmação é realmente verdadeira, mas novamente por razões diferentes das que você afirma.

E se L2 é recursivo, o programa a seguir é computável e decide L1:

decide1(w) = {
  w1 = enumerate1(1)
  if ( w == w1 ) }
    return true
  }
  else {
    return decider2(w1#w)
  }
}

E se w=w1, nós claramente temos wL1e o programa decide corretamente. E sewL1{w1}, existe um i>1 de tal modo que wi=we, portanto, w1#wL2; por outro lado, sewL1, não existe i e assim w1#wL2. O programa decide corretamente em todos os casos.

Rafael
fonte
Vamos pensar nisso, o primeiro algoritmo é falho: se a enumeração tiver repetições, não podemos rejeitar a entrada apenas porque as primeiras ocorrências deu,vestão na ordem errada.
Raphael
Nenhuma esperança para remendar eu acho. Não há como decidir se haverá uma segunda ocorrência da palavrau (para verificar se ocorre também após v) No entanto a questão disse que havia dificuldades com Problema 2. Não Problema 1 :)
Hendrik Jan
@ Rafael, eu não entendo o que você quer dizer com "você não pode alterar a enumeração". Que enumeração eu mudei? Meu raciocínio para a afirmação 1 ser verdadeira é exatamente o que você escreveu na sua resposta acima. Depois de usar a decisão deL1 decidir u e v, você usa o enumerador para verificar se u é enumerado antes v. Não é isso porque você espera que o enumerador deL1 enumerar lexicograficamente, agora que a hipótese da afirmação 1 diz que L1é recursivo?
Abhijith Madhav
@Raphael, Your following comment has me more confused. Why do you now think that first occurrences of u,v might be in the wrong order if the enumeration has repetitions. As L1 is recursive, the enumeration cannot have u,v in the wrong order. I just referenced a text book (sipser)to make sure that my "recursive implies lexicographically enumerable" is correct.
Abhijith Madhav
@Abhijith From what you write in your question it is not clear exactly how you exploit that there is a lexicographic enumeration; you may not assume the enumeration defining L2 is lexicographic, and it seems as if you did that.
Raphael