Na teoria da computação, o teorema de Rice afirma que, para qualquer propriedade não-trivial de funções parciais, não existe um método geral e eficaz para decidir se um algoritmo calcula uma função parcial com essa propriedade. Aqui, uma propriedade de funções parciais é chamada trivial se ela vale para todas as funções parciais computáveis ou nenhuma, e um método de decisão eficaz é chamado geral se este decide corretamente para cada algoritmo. O teorema tem o nome de Henry Gordon Rice, é também conhecido como Teorema de Rice-Myhill-Shapiro. No título do teorema, depois de Rice, temos os matemáticos John Myhill e Norman Shapiro.

Introdução editar

Segue uma outra forma de declarar o teorema de Rice que é mais útil em teoria da computação:

Seja S um conjunto de linguagens que são não-triviais, o que significa:

  1. existe uma máquina de Turing que reconhece uma linguagem em S (S é um conjunto de linguagens)
  2. existe uma máquina de Turing que reconhece uma linguagem que não está em S

Então, é indecidível determinar se a linguagem decidida por uma máquina de Turing arbitrária encontra-se em S. Na prática, isso significa que não existe uma máquina que sempre pode decidir se a linguagem de uma dada máquina de Turing tem uma propriedade não-trivial. Casos especiais incluem a indecidibilidade de se saber se uma máquina de Turing aceita uma cadeia(String) específica, e se a linguagem reconhecida por uma máquina de Turing pode ser reconhecida por uma máquina trivial mais simples, como um autômato finito.

É importante notar que o teorema de Rice não diz nada sobre as propriedades das máquinas ou programas que não são propriedades de funções ou linguagens. Por exemplo, se uma máquina funciona há mais de 100 passos em uma entrada é uma propriedade decidível, mesmo que ele não seja trivial. Implementar exatamente a mesma linguagem, duas máquinas diferentes podem exigir um número diferente de passos para reconhecer a mesma entrada. Da mesma forma, se uma máquina tem mais de 5 estados é uma propriedade decidível. Quando uma propriedade é do tipo que qualquer uma das duas máquinas podem ou não tê-la, enquanto ainda não for implementada exatamente a mesma língua, a propriedade é das máquinas e não da linguagem, e Teorema de Rice não se aplica.

Usando a caracterização de Rogers de sistemas de programação aceitável, o Teorema de Rice pode essencialmente ser generalizado a partir de máquinas de Turing para a maioria das linguagens de programação dos computadores: não existe um método automático que decide com generalidade perguntas não-triviais sobre o comportamento de caixa-preta de programas de computador.

Como exemplo, considere a seguinte variante do problema da parada: Pegue a propriedade uma função parcial F se F é definido para o argumento 1. Isto é, obviamente, não trivial, uma vez que existem funções parciais que são definidos para 1 e outros que estão indefinidas em 1. O problema da 1-parada é o problema de decidir de qualquer algoritmo se define uma função com essa propriedade, ou seja, se o algoritmo para na entrada 1. Pelo teorema de Rice, o problema 1-parada é indecidível.

Declaração formal editar

Temos   que é um número de Gödel de funções computáveis; uma mapara dos números naturais para a classe   de funções computáveis (parcial) unárias. Denote por   a  º (parcial) função computável.

Identificamos cada propriedade que uma função computável pode ter com o subconjunto de   consistindo das funções com essa propriedade. Assim, dado um conjunto  , uma função computável   e tem a propriedade F se e somente se  . Para cada propriedade   há um problema de decisão   associado a se determinar, dado e, se  .

Teorema de Rice afirma que o problema de decisão   é decidível (também chamado de recursivo ou computáveis) se e somente se   ou  .

Exemplos editar

De acordo com o teorema de Rice, se houver pelo menos uma função computável em uma determinada classe C das funções computáveis ​​e outra função computável que não está em C, então o problema de decidir se um determinado programa calcula uma função em C é indecidível. Por exemplo, o teorema de Rice mostra que cada um dos seguintes conjuntos de funções computáveis ​​é indecidível:

  • A classe de funções computáveis ​​que retornam 0 para cada entrada, e seu complemento.
  • A classe de funções computáveis ​​que retornam 0 para pelo menos uma entrada, e seu complemento.
  • A classe de funções computáveis ​​que são constantes, e seu complemento.

Prova pelo teorema recursivo de Kleene editar

Um corolário para o teorema recursivo de Kleene declara que para cada número de Gödel   de funções computáveis ​​e cada função computável  , há um índice   tal que   retorna  . (A seguir, diremos que   "retorna"   se qualquer  = , ou ambos   e   são indefinidos.) Intuitivamente,   e é um "quine", uma função que retorna o seu próprio código fonte (número de Gödel), exceto que ao invés de devolvê-lo diretamente,   passa seu número de Gödel para Q e retorna o resultado.

Deixe   ser um conjunto de funções computáveis ​​tal que  . Então existem funções computáveis ​​  e  . Suponha que o conjunto de índices   tal que   é decidível; então, existe uma função   que retorna   se  ,   de outra forma.

Pelo corolário do teorema recursivo, existe um índice   tal que   retorna  . Mas se  , então   é a mesma função que  , e portanto  ; e se  , então   é  , e portanto  . Em ambos os casos, temos uma contradição.

Prova por redução ao problema da parada editar

Prova (esboço) editar

Suponha, por concretude, que temos um algoritmo para analisar um programa p e que seja possível determinar infalivelmente se p é uma implementação da função quadrática, que recebe como entrada um número inteiro d e retorna d2. A prova funciona se temos um algoritmo para decidir qualquer outra propriedade não trivial de programas, e será dado, em geral, abaixo.

A alegação é que podemos converter nosso algoritmo para a identificação de programas quadráticos que identificam as funções que param. Vamos descrever um algoritmo que tem como entradas a e i e determina se o programa "a" para quando é alimentado com a entrada i.

O algoritmo é simples: vamos construir um novo programa t que (1) temporariamente ignora sua entrada, enquanto ele tenta executar o programa a sobre a entrada i, e então, se este para, (2) retorna o quadrado de sua entrada. Claramente, t é uma função para computação de números quadrados se e somente se a etapa (1) para. Desde que assumimos que podemos identificar infalivelmente programas deste tipo, podemos determinar se t é um programa desse tipo e, portanto, se o programa a para na entrada i. Note que não precisamos realmente executar t; só precisamos decidir se é um programa quadrático, e, por hipótese, sabemos como fazer isso.

 t(n) {
     a(i)
     return n×n
 }

Este método não depende especificamente de ser capaz de reconhecer as funções que computam quadrados; enquanto alguns programas podem fazer o que estamos tentando reconhecer, podemos adicionar uma chamada para a para obter o nosso t. Poderíamos ter um método para o reconhecimento de programas que computam raízes quadradas, ou programas para o cálculo da folha de pagamento mensal, ou programas que param quando é dada a entrada "Abraxas", ou programas que cometem erros de limites de matriz; em cada caso seríamos capazes para resolver o problema da parada da mesma forma.

Prova formal editar

 
Se temos um algoritmo que decide uma propriedade não-trivial, podemos construir uma máquina de Turing que decide o problema da parada.

Para a prova formal, os algoritmos são presumidos para definir funções parciais sobre strings e são representados por strings. A função parcial calculado pelo algoritmo representado por uma string a é denotada Fa. Este prova é por reductio ad absurdum (redução ao absurdo): vamos supor que existe uma propriedade não-trivial que é decidido por um algoritmo, e depois mostrar que podemos decidir o problema da parada, que não é possível, e, portanto, uma contradição.

Suponha que P(a) é um algoritmo que decide alguma propriedade não trivial de Fa. Sem perda de generalidade, podemos supor que P (não-para) = "não", com não-para pode ser a representação de um algoritmo que nunca para. Se isso não for verdade, então este irá realizar a negação da propriedade. Uma vez que P que decide uma propriedade não-trivial, segue-se que há uma string b que representa um algoritmo e P(b) = "sim". Podemos então definir um algoritmo H(a, i ) como segue:

1. construir uma string t que representa um algoritmo T(j) tal que
  • T primeiro simula o cálculo de Fa(i)
  • então T simula o cálculo de Fb(j) e retorna o seu resultado.
2. return P(t).

Agora podemos mostrar que H decide o problema da parada:

  • Suponha que o algoritmo representado por a para na entrada i. Neste caso Ft = Fb e, devido a P(b) = "sim" e a saída de P(x) depende apenas de Fx, segue-se que P(t) = "sim" e, portanto, H(a, i) = "sim".
  • Suponha que o algoritmo representado por a não para na entrada i. Ft = Fno-halt, ou seja, a função parcial que nunca é definida. Uma vez que P(não-para) = "não" e a saída de P(x) depende apenas de Fx, segue-se que P(t) = "não" e, portanto, H(a, i) = "não".

Uma vez que o problema da parada é conhecido por ser indecidível, esta é uma contradição e na suposição de que existe um algoritmo P(a) que decide uma propriedade não-trivial para a função representada por a deve ser falso.

Teorema de Rice e conjunto de índices editar

Teorema de Rice pode ser sucintamente expressos em termos de conjuntos de índices:

Temos que   seja uma classe das funções recursivas parciais com índice de conjunto  . Então   é recursivo se e somente se   ou  .

onde   é o conjunto dos números naturais, incluindo o zero.

Uma analogia do Teorema de Rice para conjuntos recursivos editar

Podemos considerar o teorema de Rice como a afirmação da impossibilidade de efetivamente decidir para qualquer conjunto recursivamente enumerável se ele tem uma determinada propriedade não trivial[1]. Nesta seção, damos um análogo ao teorema de Rice para conjuntos recursivos, em vez de conjuntos recursivamente enumeráveis[2]. Em termos gerais, o análogo diz que se podemos efetivamente determinar para qualquer conjunto recursivo se ele tem uma certa propriedade, então, finitamente, muitos inteiros podem determinar se um conjunto recursivo tem a propriedade. Este resultado é análogo ao teorema original de Rice, pois ambos afirmam que a propriedade é "decidível" só se for possível determinar se um conjunto tem essa propriedade através da análise para no máximo um número finito i (para qualquer i, para o teorema original), se i pertence ao conjunto.

Suponha   ser uma classe (chamada de jogo simples e pensado como uma propriedade) de conjuntos recursivos. Se   é um conjunto recursivo, então para algum  , uma função computável   é a função característica de  . Chamamos   como um índice de característica de  . (Há um número infinito de tais  .) Vamos dizer que a classe   é computável se existe um algoritmo (função computável) que decide para qualquer inteiro não negativo   (não necessariamente um índice de característica),

  • se   é um índice característico de um conjunto recursivo pertencente a  , então o algoritmo dá "sim";
  • se   é um índice característico de um conjunto recursivo não pertencente a  , então o algoritmo dá "não";

Um conjunto   estende uma string   de 0's e 1's, se para qualquer   (o comprimento de  ), o  th elemento de   é 1 se ; é 0 caso contrário. Por exemplo,   estende a string 01011001. Uma string   é vencedor na determinação se qualquer conjunto recursivo estendendo   pertence a  . Uma seqüência   é perdedor na determinação se nenhum conjunto recursivo estendendo   pertence a  .

Nós podemos agora enunciar o seguinte teorema análogo de Rice (Kreisel, Lacombe e Shoenfield de 1959[3], Kumabe e Mihara, 2008[4])):

Uma classe   de conjuntos recursivos é computável se e somente se houver um conjunto recursivamente enumerável   de perdedores na determinação de strings e um conjunto recursivamente enumerável   de vencedores na determinação de strings, de tal forma que qualquer conjunto recursivo estende uma string em  .

Este resultado tem sido aplicado a problemas fundamentais na escolha social computacional (de forma mais ampla, a teoria algorítmica dos jogos). Por exemplo, Kumabe e Mihara (2008[4], 2008[5]) aplicam este resultado em uma investigação aos números Nakamura para jogos simples na teoria dos jogos cooperativos e teoria da escolha social.

Notas editar

  1. Um conjunto   é recursivamente enumerável se   para algum  , onde   é o domínio   (o conjunto de entradas   tais que   é definido) de  . O resultado para conjuntos recursivamente enumeráveis ​​pode ser obtido a partir de funções computáveis​​, considerando a classe  , onde   é a classe dos conjuntos recursivamente enumeráveis.
  2. Um conjunto recursivamente enumerável   é um conjunto recursivo se o seu complemento é recursivamente enumerável. Equivalentemente,   é recursivo se sua função característica é computável.
  3. Kreisel, G., Lacombe, D., Shoenfield, J.R., 1959. Partial recursive functionals and effective operations. In: Heyting, A. (Ed.), Constructivity in Mathematics. Studies in Logic and the Foundations of Mathematics. North-Holland, Amsterdam, pp. 290–297.
  4. a b Kumabe, Masahiro; H. Reiju (1 de fevereiro de 2008). «Computability of simple games: A characterization and application to the core». Journal of Mathematical Economics. 44 (3–4): 348-366. doi:10.1016/j.jmateco.2007.05.012 
  5. Kumabe, Masahiro; H. Reiju (11 de março de 2008). «The Nakamura numbers for computable simple games». Social Choice and Welfare (em inglês). 31 (4): 621-640. ISSN 0176-1714. doi:10.1007/s00355-008-0300-5 

Ver também editar

Referências editar

  • Rogers, Hartley (1967). Theory of recursive functions and effective computability. New York: McGraw-Hill.

Ligações externas editar