Gostaria de provar (ou refutar) a seguinte conjectura:
Conjectura : um autômato de dois contadores (2CA) não pode decidir o seguinte idioma:
as representações ternárias e binárias de têm comprimento par ou comprimento ímpar
Um 2CA pode facilmente verificar se a representação binária tem comprimento par ou ímpar (continue dividindo por dois e atualize um sinalizador "comprimento par" após cada divisão); da mesma maneira, ele pode verificar se a representação ternária tem comprimento par ou ímpar (continue dividindo por três e atualize um sinalizador "comprimento par" após cada divisão).
Mas, para calcular um deles, ele deve destruir sua entrada e não pode recuperá-lo para calcular o outro; por isso parece que não há nenhuma maneira de decidir .
Você conhece uma técnica que pode ser usada para provar a conjectura?
Ou você pode refutar a conjectura construindo um 2CA que decide ?
Tentei a mesma abordagem seguida por Ibarra para provar que um 2CA não pode decidir , mas parece não ser o caminho certo.
Nota : por simplicidade, 2CA é equivalente a um programa com uma variável que inicialmente contém a entrada e o seguinte conjunto de instruções:
- INC : adicione um à variável;
- DEC : decremento (somente se for maior que zero);
- JZ : se for zero, salte para rotular caso contrário, continue;
- MUL : multiplique pelo custo ;
- Laboratório GOTO : salto incondicional;
- HALT Aceitar | Rejeitar : parar e aceitar ou parar e rejeitar.
Por exemplo, um programa para verificar se a representação binária de tem tamanho uniforme é:
loop: JZ even // test if n = 0
DIV 2
JZ odd // test if n = 0
DIV 2
GOTO loop
even: HALT Accept
odd: HALT Reject
(podemos construir um 2CA equivalente)
fonte
Respostas:
Portanto, as pessoas continuam me incomodando a postar isso, mesmo que isso resolva apenas uma versão simplificada do problema. Está bem então :)
No final, vou colocar um pouco do que aprendi no artigo de Ibarra e Trân, e por que esse método se decompõe em nosso problema geral, mas talvez ainda dê algumas informações úteis.
Mas primeiro, veremos o problema mais simples de tentar decidir o conjunto
2 n }L={2n∣ das representações ternárias e binárias de tem comprimento par ou comprimento ímpar2n }
Observe como isso tem vez de como no problema original. Em particular, se o número de entrada não for uma potência de 2, queremos rejeitá-lo, em vez de tentar calcular seu comprimento em qualquer base. n2n n
Isso simplifica bastante as coisas: se o número original for escrito primo como , então, para todos os exceto , basta verificar que eles são todos .v i v 2 02v23v35v57v7... vi v2 0
Isso nos permite resolver esse problema simplificado usando um invólucro em torno do método antigo (de Minsky, eu presumo) de codificar o estado de um autômato de contador nos expoentes da fatoração primária da variável única de um autômato de multiplicação / divisão, que, conforme observado no OP acima, é praticamente equivalente a um autômato de 2 contadores.k
Primeiro, precisamos de um autômato -counter para quebrar. Usaremos 3 contadores, denominados , e .v 2 v 3 v 5k v2 v3 v5
O autômato aceita sse para os valores do contador iniciais, o ternário e representações binárias de têm tanto em comprimento par ou comprimento ímpar, e ambos e são zero. Quando aceita, primeiro zera todos os seus contadores. v 3 v 52v2 v3 v5
Aqui está um código para isso, em um formato de montagem semelhante ao OP (acabei de adicionar variáveis às instruções). Na verdade, eu não o testei, pois não tenho nada para executá-lo, mas considero isso uma formalidade: sabe-se que os autômatos de 3 contadores são completos para Turing e são capazes de construir qualquer função computável de um de seus componentes. valores iniciais.
O próximo passo é recodificar o código acima nos expoentes de um único autômato variável. Como o resultado é bastante longo, descreverei apenas o método geral, mas uma versão completa (ligeiramente "otimizada" em alguns pontos) está no meu site.
torna-se (basicamente divida por p e faça a limpeza para desfazer se a divisão não fosse uniforme):
INC vp
torna-seMUL p
. IndividualJZ
eDEC
pode primeiro ser alterado para o formulário combinado.GOTO label
eHALT Reject
são inalterados.HALT Accept
permaneceria inalterado, exceto que, no nosso caso, ainda temos uma verificação final a fazer: precisamos garantir que não haja fatores primos no número além de 2,3 e 5. Como nosso autômato de 3 contadores zera os contadores, usa quando aceita, isso é simples: basta testar se a variável final é 1, o que pode ser feito saltando para o códigoO código no meu site também tem uma verificação inicial de que o número não é zero, o que eu acabei de perceber que é redundante com as verificações v3 e v5 zero, tudo bem.
Como mencionei, o método acima funciona para o problema simplificado, mas realmente não tem chance de trabalhar para o geral, porque: No problema geral, o valor exato do expoente de cada primo conta para decidir seu tamanho geral e, portanto, qual o seu comprimento. tem em várias bases. Isso significa que:
Então, vamos terminar com uma explicação da essência do método geral do artigo acima, de Ibarra e Trân ( versão para download gratuito ), sobre como provar que certos problemas não são solucionáveis por um 2CA e como isso se desagrega irritantemente em nosso caso.
Em seguida, eles analisam esse autômato para concluir que podem construir certas seqüências aritméticas de números cujo comportamento está vinculado. Para ser preciso (parte disso não é declarada como teorema, mas está implícita na prova de ambos os dois exemplos principais):
Se um conjunto contém pelo menos números aceitos de tal modo que para cada número existe uma fase tal que , então podemos encontrar e números inteiros modo queX s2+1 x∈X i vxi≤s p,r∈X K1,K2
(Pensamentos:
Para seus próprios exemplos, eles também usam frequentemente o fato de que não têm fatores primos . Para provar a impossibilidade, eles derivam contradições, mostrando que tais seqüências aritméticas não podem existir.D,K1,K2 >s
Em nosso problema, obter uma contradição com isso se divide com o segundo caso. Se temos , onde é grande o suficiente para que nenhum número entre e seja divisível por ou , também não haverá potências de 2 ou 3 entre e , de modo que ambos são aceitos ou rejeitados. k p r 2 k 3 k p + 6 k n q + 6 k nK1=K2=6k k p r 2k 3k p+6kn q+6kn
O ponto 1 ainda pode ser mostrado impossível, porque as potências de 2 e 3 crescem cada vez mais distantes. E acredito que posso mostrar o segundo caso impossível se (enviei um e-mail para o argumento @MarzioDeBiasi). Então, talvez alguém possa usar essas informações para restringir ainda mais a forma do autômato e, finalmente, derivar uma contradição a partir disso.K1≠K2
fonte