Respostas:
Antes de responder à sua pergunta geral, deixe-me dar um passo atrás, apresentar alguns antecedentes históricos e responder a uma pergunta preliminar: Existem funções não computáveis?
[nota notacional: podemos relacionar qualquer função com uma linguagem e depois discutir a decidibilidade de em vez da computabilidade de ]
Existem alguns idiomas que nenhuma máquina de Turing pode decidir. O argumento é simples: existem "apenas" inúmeras TMs diferentes, mas inúmeras línguas diferentes. Portanto, existem no máximo idiomas decidíveis, e o restante (infinitamente muitos) é indecidível. Leitura adicional:
Para colocar uma mão em uma linguagem indecidível específica, a idéia é usar uma técnica chamada diagonalização (Georg Cantor, 1873) que foi originalmente usada para mostrar que há mais números reais do que números inteiros, ou seja, .
A idéia de construir a primeira linguagem indecidível é simples: listamos todas as máquinas de Turing (o que é possível, pois são recusativamente enumeráveis!) E criamos uma linguagem que discorda de cada TM em pelo menos uma entrada.
Acima, cada linha é uma TM e cada coluna é uma entrada. O valor da célula é 0 se a TM rejeitar ou nunca parar, e 1 se a TM aceitar essa entrada. Definimos o idioma para que contenha a ésima entrada se e somente se a ésima TM não aceitar essa entrada.D i i
Seguindo a tabela acima, pois aceita . Da mesma forma, , mas pois não aceita .M 1 ε 0 ∉ D 1 ∈ D M 3 1
Agora, suponha que decida e procure a linha na tabela: se houver na ésima coluna, então aceita essa entrada, mas não está em , e se houver um , a entrada está em mas não o aceita. Portanto, não decide e chegamos à contradição. D k 1 k M k D 0 D M k M k D
Agora, para sua pergunta. Existem várias maneiras de provar que um idioma é indecidível. Vou tentar tocar os mais comuns.
O primeiro método é mostrar diretamente que um idioma é indecidível, mostrando que nenhuma TM pode decidi-lo. Isso geralmente segue o método de diagonalização mostrado acima.
Exemplo.
Mostre que o (complemento do) idioma diagonal é indecidível.
Prova.
Suponha que seja decidível e deixe . Existem dois casos: HD
Às vezes, podemos usar as propriedades de fechamento para mostrar que algum idioma não é decidível, com base em outros idiomas que já sabemos que não são decidíveis.
Especificamente, se não for decidível (escrevemos ), também o seu complemento é indecidível: se houver para , poderíamos usá-lo para decidir aceitando sempre rejeita e vice-versa. Como sempre pára com uma resposta (é uma decisão), sempre podemos inverter sua resposta.L ∉ R ¯ L M ¯ L L M M
Conclusão: A língua diagonal é indecidible, . G D ∉R
Um argumento semelhante pode ser aplicado observando que, se e seu complemento forem recursivamente enumeráveis, ambos serão decididos. Isso é particularmente útil se quisermos provar que uma linguagem não é recursivamente enumerável, uma propriedade forte que a indecidibilidade.¯ L
Geralmente, é bastante difícil provar diretamente que um idioma é indecidível (a menos que já esteja construído de maneira "diagonal"). O último e mais comum método para provar indecidibilidade é usar outro idioma que já sabemos ser indecidível. A idéia é reduzir um idioma para outro: mostrar que, se um é decidível, o outro também deve ser decidido, mas um deles já é indecidível, o que leva à conclusão de que o primeiro também é indecidível. Leia mais sobre reduções em "Quais são as técnicas comuns para reduzir problemas entre si?" .
Exemplo.
Mostre que o idioma diagonal é indecidível.
Prova.
Sabemos que é indecidível. Nós reduzir a (isto é denotada ), ou seja, mostramos que se foi decidable poderíamos usar sua decisivo para decidir , o que é uma contradição.L D H P L D ≤ H P H P L D
A redução funciona convertendo um candidato para (ou seja, uma entrada para qualquer potencial candidato / aceitador para ) em um candidato para modo que se e somente se . Garantimos que essa conversão seja computável. Assim, decidir nos diz se , se pudermos decidir HP, também poderemos decidir .¹G D G D W ' H P w ∈ G D W ' ∈ H P W ' w ∈ G D G D
A conversão é a seguinte. Pegue e produza , ² onde é uma TM que se comporta exatamente como , mas se rejeitar, será em um loop infinito.w ' = ⟨ M ' , ⟨ M ⟩ ⟩ M ' M M M '
Vamos ver que satisfazem os requisitos.
Se , significa que interrompe e aceita a entrada . Portanto, também interrompe e aceita a entrada . Assim, .
Por outro lado, se estiver em então rejeita ou nunca pára em . Nos dois casos, entrará em um loop infinito em . Assim, w ∈ G D H ⟨ M ⟩ M ' ⟨ M ⟩ ⟨ M ' , ⟨ M ⟩ ⟩ ∈ H P w ∉ G D H ⟨ M ⟩ M ' ⟨ M ⟩ ⟨ M ' , ⟨ M ⟩ ⟩ ∉ H P w ∈ G D W ' ∈ H P
E nós somos feitos mostrando que se e somente se , e, assim, demonstrado que a .
Leitura adicional: muitos exemplos de reduções e comprovação de indecisão de idiomas podem ser encontrados na etiqueta de reduções .
Há mais restrições quanto à redução para ser válida. A conversão em si deve ser computável e bem definida para qualquer entrada.
Uma entrada da parece com , onde é uma TM e é alguma string. Então, aqui escolhemos a string para ser uma codificação da máquina , que é apenas uma string.⟨ H , x ⟩ M x x M
"Então, toda vez que desejamos provar que é indecidível, precisamos reduzir (ou ) a ele? Não existe nenhum atalho?"L D H P
Bem, de fato, existe. Este é o teorema de Rice .
O teorema diz que muitas línguas que possuem uma certa estrutura são indecidíveis. Como todos esses idiomas têm essa estrutura certa, podemos fazer a redução uma vez e aplicá-la a qualquer idioma que admita uma estrutura semelhante.
O teorema é formalmente declarado da seguinte maneira:
O conjunto é um subconjunto de idiomas no ; chamamos de propriedade porque descreve uma propriedade do idioma aceito . Todas as TMs cujo idioma satisfaz essa propriedade pertencem a .R E L ( M ) L S
Por exemplo, pode ser a propriedade em que o idioma aceito contém exatamente duas palavras:L ( M )
G S 2 G S 2 = { ⟨ M ⟩ | G ( M ) ∈ S } = { ⟨ M ⟩ | | L ( M ) | = 2 } .
Nesse caso, é o conjunto de todas as TMs cujo idioma consiste exatamente em duas palavras:
A propriedade pode ser muito simples, mas não pode ser todos os idiomas RE, ou nenhum dos idiomas RE. Se ou , a propriedade é considerada trivial e o induzido é computável. Um exemplo para um simples é aquele que contém apenas um idioma, digamos . Observe que, embora contenha apenas um único idioma, existem infinitas máquinas cujo idioma é , portanto é infinito e indecidível.S = R E L S S S c o m p L e T E = { Σ * } S M Σ * G S c o m p e t e
O teorema é muito poderoso para provar indecidibilidade de muitas línguas.
Exemplo.
O idioma , é indecidível
Prova.
Podemos escrever como , ou seja, para a propriedade . Essa é uma propriedade não trivial (inclui o idioma , mas não inclui, por exemplo, o idioma . Portanto, pelo Teorema de Rice, é indecidível.
Agora provamos o teorema. Como mencionado acima, mostraremos uma redução da para (para qualquer arbitrário e não trivial ).
Prova.
Seja uma propriedade não trivial, . Mostramos , ou seja, reduzimos para para que, se pudermos decidir , poderemos decidir (que sabemos que é impossível, portanto, não pode ser ). Na prova abaixo assumimos que a linguagem vazia não faz parte do , que é . (se o idioma vazio estiver em , uma prova equivalente funcionará na propriedade do complemento , omitirei os detalhes). Desde∅ ∉ S S ¯ S = R E ∖ S S G 0 M 0 L 0 Snão é trivial, inclui pelo menos um idioma; vamos chamar esse idioma de e supor que é uma máquina que aceita (essa máquina existe, pois inclui apenas idiomas no RE).
Lembre-se de que em tal redução (consulte a seção 3 acima), precisamos mostrar como converter uma entrada para em uma entrada para para que H P w ′ L S w ∈ H P
Seja , nós a convertemos em onde a descrição da máquina (em uma entrada ) é a seguinte:w ' = ⟨ M ' ⟩ H ' x '
Vemos que essa conversão é válida. Primeiro note que é simples construir a descrição de dada .
Se , então pára em . Nesse caso, segue para a etapa 2 e se comporta exatamente como . Portanto, sua língua aceite é . Portanto, .
Se , loop em . Neste caso, voltas sobre qualquer entrada - ele fica preso na etapa 1. A linguagem aceita por'neste caso, está vazia, . Portanto, .
Teorema de Rice nos dá uma maneira fácil de mostrar que uma certa linguagem que satisfaz certas propriedades é indecidível, isto é, . A versão estendida do teorema de Rice permite determinar se a linguagem é recursivamente enumerável ou não, ou seja, determina se , verificando se satisfaz algumas propriedades adicionais.
Teorema (Arroz, estendido). Dada uma propriedade , o idioma é recursivamente enumerável ( ) se e somente se todas as três instruções a seguir em conjunto aguarde
- Para quaisquer dois , se e também em seguida, também .
- Se seguida, existe um subconjunto finito modo que .
- O conjunto de todos os idiomas finitos em é enumerável (em outras palavras: existe uma TM que enumera todos os idiomas finitos ).
Prova.
Este é um teorema "se e somente se", e devemos provar ambas as direções. Primeiro, mostramos que, se uma das condições (1,2,3) não se mantiver, . Depois disso, mostraremos que, se todas as três condições se mantiverem simultaneamente, .
Se (1,2) mantém, mas (3) não, .
Vamos assumir que , e veremos que temos uma maneira de aceitar qualquer linguagem finita em (e, portanto, o conjunto de todas essas linguagens é RE), assim a condição (3) se mantém e chegamos a uma contradição . Como decidir se um finito pertence a ou não? Facilmente - usamos a descrição de para construir uma máquina que aceita apenas as palavras em , e agora executamos a máquina de em (lembre-se - assumimos , portanto há uma máquina que aceita!). Se então e desde , sua máquina dirá sim na entrada , e pronto.
Se (2,3) aguentar, mas (1) não , .
Assumimos que e mostraremos que temos uma maneira de decidir a , levando a uma contradição.L S ∈REHP
Porque a condição (1) não se sustenta, há uma linguagem e um super-lo, para que . Agora, repetiremos o argumento usado na Seção 4 para decidir a : dada uma entrada para a , construímos uma máquina cuja linguagem é se ou não, seu idioma é . Em seguida, podemos decidir pela : pára em ou a máquina RE para aceitaL 2 ⊇ L 1 L 2 ∉ S H P; podemos executar os dois em paralelo e temos a garantia de que pelo menos um deles será interrompido.
Vamos dar os detalhes da construção de (na entrada ):
Por que isso funciona? Se então 1.1 nunca pára, e aceita exatamente todas as entradas que estão sendo aceitas na etapa 1.2, então . Por outro lado, se , em algum momento a etapa 1.1 pára e aceita exatamente . Pode acontecer que o aceite de antemão, mas desde , isso não altera o idioma de nesse caso.
Se (1,3) aguentar, mas (2) não, .
Novamente, assumiremos e mostraremos que a se torna decidível, o que é uma contradição.
Se a condição (2) não se mantiver, então para qualquer , todos os seus subconjuntos finitos satisfazem (observe que deve ser infinito, já que ). Como acima, para decidir a para uma determinada entrada , construímos uma máquina cuja linguagem é se e em alguns finitos caso contrário. A contradição segue de maneira semelhante à anterior.
A construção desta máquina é bastante semelhante ao anterior que construímos. A máquina (na entrada ) faz:
Ele afirma que, se , em algum momento, digamos, após 1000 etapas, pára em . Portanto, a etapa 1 interromperá (e rejeitará) qualquer entrada de comprimento . Portanto, neste caso, é finito . Além disso, note que , e em particular, por nossas suposições sobre a invalidade de condição (2), temos que .
Por outro lado, se , a etapa 1 nunca para e nunca rejeitamos na etapa 2. Nesse caso, é fácil ver que e em em particular, .
Nos resta mostrar a outra direção do teorema estendido. Ou seja, precisamos mostrar que, se todas as condições (1,2,3) se mantiverem, temos uma TM que aceita , ou seja, . Em outras palavras, precisamos mostrar uma máquina para que, para qualquer entrada para a qual , a máquina aceite essa entrada, .
Aqui está como a máquina se comporta (na entrada ):
Por que isso funciona? Se , ele possui um subconjunto finito , e uma vez que gera esse subconjunto, a etapa 2.2 / 2.3 descobrirá que aceita todas as palavras nesse idioma e aceitar.
Por outro lado, se não pode ser aceitar todas as palavras para qualquer . De fato, pela condição (1), qualquer também está em , portanto, se aceita todas as palavras em para alguns , então e, portanto, , em contradição.
Por fim, observe que o seguinte é um corolário simples (e muito útil) do acima exposto:
Corolário (arroz estendido). Dada uma propriedade não trivial , de modo que , o idioma não é recursivamente enumerável, ou seja, .∅ ∈ S G S = { ⟨ M ⟩ | G ( M ) ∈ S } L S ∉ R E
Uma ferramenta útil é o teorema de Rice . Aqui está o que diz:
Deixe um conjunto não trivial de funções unárias parcialmente computáveis e uma numeração Gödel de . Em seguida, o conjunto de índices de
não é recursivo.
Você também acha isso expresso em termos de codificações de máquinas de Turing (ou qualquer outra linguagem de programação completa de Turing), ou seja, ; aqui define uma numeração de Gödel.
Ou seja, você pode usar o teorema de Rice para provar que esses conjuntos não são recursivos, que são conjuntos de índices de conjuntos de funções não triviais (ou são redutíveis a ).
Observe que há uma extensão que pode ser usada para mostrar que determinados conjuntos de índices não são recursivamente enumeráveis.
Vamos uma numeração Gödel. Considere o conjunto de naturais
.
Agora, já que para
O teorema de Rice pode ser aplicado e não é decidível.
Como muitos não estão familiarizados com as numerações de Gödel, observe que o exemplo também funciona em termos de máquinas de Turing (ou seja, programas) usando .
Considere o conjunto de naturais
o que certamente não é computável. No entanto, não é um índice definido para nenhum ! Vamos por algum . Como é uma numeração de Gödel , existem (infinitamente) com mas para todos os porque .
Desconfie disso! Como regra geral, se o índice da função for usado no "lado direito" ou como parâmetro da função na definição do conjunto, é provável que não seja um conjunto de índices. Você pode precisar da propriedade das numerações de Gödel e do teorema do ponto de correção para mostrar que um conjunto não é um conjunto de índices.