é 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.
- é recursivo implica é recursivo
- é recursivo implica é 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 .
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 .
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?
fonte
Respostas:
Você parece estar certo. Mas como Raphael diz, tenha cuidado.
Instrução 1. Observe que oL2 é definido usando o algoritmo de enumeração E para L1 , nao por L1 em si. Para decidir seu#v∈L2 , decida se ambos u,v no L e, 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. SeL1 é 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 L1 do seguinte modo. Testaru∈L1 primeiro verifique se u=w1 e depois verifique w1#u∈L2 . Isso é equivalente au∈L1 como não precisamos nos preocupar com o i<j requisito, que agora é verdadeiro por construção.
Eu nem tenho certeza de que precisamos saberw1 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.
fonte
Anúncio 1: a afirmação é verdadeira, mas seu raciocínio não é: você não pode alterar a enumeração; a definição deL2 está intimamente ligado à ordem dos elementos. Aqui está o algoritmo simples que decideL2 :
Aqui,L1 e L1 , que ambos existem por suposição. Observe que o u,v∈L1 então o loop os encontrará (de fato, o que ocorrer primeiro) eventualmente.
decide1
é a decisão deenumerate1
é o enumerador parawhile
loop sempre termina; nesse ponto, sabemos queAnúncio 2: Essa afirmação é realmente verdadeira, mas novamente por razões diferentes das que você afirma.
E seL2 é recursivo, o programa a seguir é computável e decide L1 :
E sew=w1 , nós claramente temos w∈L1 e o programa decide corretamente. E sew∈L1∖{w1} , existe um i>1 de tal modo que wi=w e, portanto, w1#w∈L2 ; por outro lado, sew∉L1 , não existe i e assim w1#w∉L2 . O programa decide corretamente em todos os casos.
fonte