Como mostrar que uma função não é computável?


Respostas:


57

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 ]fLf={(x,y)∣y=f(x)}Lff


Linguagens indecidíveis fazer exist

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:(ℵ0)(ℵ)ℵ0

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, .ℵ>ℵ0

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.

ε0100⋯M110101M201000M300010⋮⋱

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 iDDii

Seguindo a tabela acima, pois aceita . Da mesma forma, , mas pois não aceita .M 1 ε 0 ∉ D 1 ∈ D M 3 1ε∉DM1ε0∉D1∈DM31

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 DMkDk1kMkD0DMkMkD

Agora, para sua pergunta. Existem várias maneiras de provar que um idioma é indecidível. Vou tentar tocar os mais comuns.

1. Prova direta

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.

LD¯={⟨M⟩∣⟨M⟩∉L(M)}

Prova.
Suponha que seja decidível e deixe . Existem dois casos: HDLD¯MD

  1. ⟨ M D ⟩MD aceita⟨MD⟩ : mas, em seguida, para que . Portanto, isso não pode acontecer se decidir .⟨M⟩∉ ¯ G D H D ¯ G D⟨MD⟩∈L(MD)⟨M⟩∉LD¯MDLD¯
  2. ⟨ M D ⟩MD não aceita⟨MD⟩ : então e, portanto, . Mas se estiver em , deveria ter aceitado e chegamos à contradição novamente.⟨M⟩∈ ¯ G D G D H D⟨MD⟩∉L(MD)⟨M⟩∈LD¯LDMD

2. Propriedades de fechamento

À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 MLL∉RL¯ML¯LMM

Conclusão: A língua diagonal é indecidible, . G D ∉RLD={⟨M⟩∣⟨M⟩∈L(M)}LD∉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.¯ LLL¯

3. Reduzir de um problema indecidível

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.

HP={⟨M,x⟩∣M halts on x}

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 DLDLDHPLD≤HPHPLD

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 DwLDLDw′HPw∈LDw′∈HPw′w∈LDLD

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 'w=⟨M⟩w′=⟨M′,⟨M⟩⟩M′MMM′

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 Pw,w′
w∈LDM ⟨M⟩M′⟨M⟩⟨M′,⟨M⟩⟩∈HP
w∉LDM⟨M⟩M′⟨M⟩⟨M′,⟨M⟩⟩∉HPE nós somos feitos mostrando que se e somente se , e, assim, demonstrado que a .w∈LDw′∈HPHP∉R

Leitura adicional: muitos exemplos de reduções e comprovação de indecisão de idiomas podem ser encontrados na etiqueta de .


  1. 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.

  2. 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 MHP⟨M,x⟩MxxM


4. Teorema de Rice

"Então, toda vez que desejamos provar que é indecidível, precisamos reduzir (ou ) a ele? Não existe nenhum atalho?"L D H PLLDHP

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:

∅⊊S⊊RELS

LS={⟨M⟩∣L(M)∈S}

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 SSREL(M)LS

Por exemplo, pode ser a propriedade em que o idioma aceito contém exatamente duas palavras:L ( M )SL(M)

G S 2 G S 2 = { ⟨ M ⟩ | G ( M ) ∈ S } = { ⟨ M ⟩ | | L ( M ) | = 2 } .

S2={L∣|L|=2,L∈RE}.
Nesse caso, é o conjunto de todas as TMs cujo idioma consiste exatamente em duas palavras: LS2
LS2={⟨M⟩∣L(M)∈S}={⟨M⟩∣|L(M)|=2}.

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 eS=∅S=RELSSScomplete={Σ∗}SMΣ∗LScompete


O teorema é muito poderoso para provar indecidibilidade de muitas línguas.

Exemplo.

O idioma , é indecidívelL∅={⟨M⟩∣M never reaches the accepting state}

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.L∅{⟨M⟩∣L(M)=0}L∅=LSS={L∈RE,|L|=0}L=∅L={1,11,111,…}L∅


Agora provamos o teorema. Como mencionado acima, mostraremos uma redução da para (para qualquer arbitrário e não trivial ).HPLSS

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). DesdeS∅⊊S⊊REHP≤LSHPLSLSHPLS∅ ∉ S S ¯ S = R E ∖ S S G 0 M 0 L 0 SS∅∉SSS¯=RE∖SSnã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).L0M0L0S

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 PwHPw′LS

w∈HP if and only if w′∈LS

Seja , nós a convertemos em onde a descrição da máquina (em uma entrada ) é a seguinte:w ' = ⟨ M ' ⟩ H ' x 'w=(⟨M⟩,x)w′=⟨M′⟩M′x′

  1. Execute em .xMx
  2. Se a etapa 1 acima , execute em e aceite / rejeite de acordo.M0x′

Vemos que essa conversão é válida. Primeiro note que é simples construir a descrição de dada .M′w=(⟨M⟩,x)

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, .w∈HPMxM′M0L(M′)=M0∈Sw′=⟨M′⟩∈LS
w∉HPMxM′x′M′L(M′)=∅∉Sw′=⟨M′⟩∉LS

4.1 O Teorema do Arroz Estendido

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.LL∉RL∉REL

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 aguardeS⊆RE

LS={⟨M⟩∣L(M)∈S}
LS∈RE
  1. Para quaisquer dois , se e também em seguida, também .L1,L2∈REL1∈SL1⊆L2L2∈S
  2. Se seguida, existe um subconjunto finito modo que .L1∈SL2⊆L1L2∈S
  3. O conjunto de todos os idiomas finitos em é enumerável (em outras palavras: existe uma TM que enumera todos os idiomas finitos ).SL∈S

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, .LS∉RELS∈RE

Se (1,2) mantém, mas (3) não,LS∉RE .
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 aceitaLS∈RESLSLMLLLSMLLS∈RELS!). Se então e desde , sua máquina dirá sim na entrada , e pronto.L∈S⟨ML⟩∈LSLS∈RE⟨ML⟩

Se (2,3) aguentar, mas (1) não ,LS∉RE . Assumimos que e mostraremos que temos uma maneira de decidir a , levando a uma contradição.L S ∈REHP
LS∈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 PL1∈SL2⊇L1L2∉SHP(⟨M⟩,x)HPM′L1(⟨M⟩,x)∉HPL2HPMxLSM′; 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 ):M′x′

  1. Faça o seguinte em paralelo:
    1.1 execute em . 1.2 execute a máquina de emMx
    L1x′
  2. Se 1,2 parar e aceitar - aceite.
  3. Se 1.1 parar: execute a máquina de em .L2x′

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.(⟨M⟩,x)∉HPM′L(M′)=L1(⟨M⟩,x)∈HPM′L21.2L1⊆L2M′

Se (1,3) aguentar, mas (2) não,LS∉RE .
Novamente, assumiremos e mostraremos que a se torna decidível, o que é uma contradição.LS∈REHP

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.L1∈SL2⊆L1L2∉SL1L1⊆L1HP(⟨M⟩,x)M′L1(⟨M⟩,x)∉HPL2

A construção desta máquina é bastante semelhante ao anterior que construímos. A máquina (na entrada ) faz:M′M′x′

  1. Executa em parapassos.Mx|x′|
  2. Se parar durante o passo 1 - rejeiteM
  3. Caso contrário, execute a máquina de em .L1x′

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 .(⟨M⟩,x)∈HPMxx′>1000L(M′)L(M′)⊆L1L(M)∉S

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, .(⟨M⟩,x)∉HPL(M)=L1L(M)∈S


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, .LSLS∈REMS⟨M⟩L(M)∈SMS(⟨M⟩)→accept

Aqui está como a máquina se comporta (na entrada ):MS⟨M⟩

  1. Seja a máquina que enumera todos os idiomas finitos em , garantida pela condição (3).Menum SS
  2. Execute o seguinte em paralelo (combinando, veja, por exemplo, isto e isto ) para 2.1 Execute até que ele o idioma 2.2. Verifique se aceita todas as palavras de (execute nessas palavras, novamente em paralelo). 2.3 Se para alguns , aceita todas as palavras de - aceite.i=1,2,...
    Menum SLi
    MLiM
    iMLi

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.L(M)∈SLj∈SMenum SM

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.L(M)∉SLii=1,2,...L′⊇LiSMLiiL(M)⊇LiL(M)∈S


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 ES⊊RE∅∈S

LS={⟨M⟩∣L(M)∈S}
LS∉RE

Obrigado por adicionar a versão estendida do teorema de Rice! Eu conheço uma versão diferente; Vou ter que desenterrar isso. De qualquer forma, não acho muito importante ou útil ter as provas aqui. Talvez você possa referenciá-los ou carregá-los em outro lugar, se não existir uma boa referência?
— Raphael

13

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∅⊊P⊊PφPP

IP={i∈N∣φi∈P}

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.IP={⟨M⟩∣M TM,fM∈P}⟨.⟩

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 ).SS

Observe que há uma extensão que pode ser usada para mostrar que determinados conjuntos de índices não são recursivamente enumeráveis.

Exemplo

Vamos uma numeração Gödel. Considere o conjunto de naturaisφ

A={i∈N∣φi(j)=1 for all j∈2N} .

Agora, já que paraP={f∈P∣f(j)=1 for all j∈2N}

  • A=IP ,
  • (n↦1)∈P e
  • (n↦2)∉P ,

O teorema de Rice pode ser aplicado e não é decidível.A

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 .A={⟨M⟩∣fM(x)=1 for all x∈2N}

Unexample

Considere o conjunto de naturais

A={i∈N∣φi(j)=i for all j∈2N}

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 .APf=φii∈Aφj≠iφj=fj∉Af(2)=i≠j

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.smn

Veja aqui e aqui os posts relacionados ao teorema de Rice.

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.