Toda vez que acho que entendo o que o teorema de Rice significa, encontro um contra-exemplo para me confundir. Talvez alguém possa me dizer onde estou pensando errado.
Vamos usar uma propriedade não trivial do conjunto de funções computáveis, por exemplo, deixe . Obviamente, é infinito contável e há também um número infinito contável de funções computáveis não em .
Agora vamos considerar uma linguagem de programação completa sobre um conjunto finito de instruções e o conjunto de programas sintaticamente corretos , com. Se eu puder escolher a semântica da minha linguagem como quiser, também posso numerar os programas como quiser e, portanto, deve ser possível projetar uma linguagem de programação em que algum subconjunto dos programas calcule exatamente algum subconjunto arbitrário das funções computáveis, como desde que a cardinalidade corresponda. Por exemplo, deixe , e cada programa calcula uma função total. Desde, esse idioma deve existir.
No entanto, é obviamente computável em turing e, como , teríamos um programa que decide a propriedade não trivial , o que não é possível de acordo com o teorema de Rice.
Onde está o erro na minha dedução? Isso significa que não há linguagem de programação em que cada programa palindrômico (ou melhor, de qualquer estrutura computável) calcule exatamente as funções totais (ou melhor, qualquer conjunto de funções computáveis)? Isso realmente me deixa perplexo.
fonte
Respostas:
O que você esquece é que todos os mapeamentos que você usa precisam ser computáveis. Quando você declara que as cardinalidades correspondentes garantem a existência de um mapeamento, isso pode ser verdade, mas é improvável que o mapeamento seja computável, precisamente porque isso permitiria uma contradição com o teorema de Rice. Na computabilidade (pelo menos pelo que sei), tudo é finito ou infinitamente contável. Portanto, a existência de mapeamentos geralmente não é um problema. O problema é se é computável.
Em outras palavras, certamente existe um mapeamento (na verdade incontáveis muitos) que associa precisamente palavras palindrômicas às funções computáveis totais. Mas, dado esse palindromW , que o mapeamento associa a uma função fW não há como você usar esse mapeamento para obter o resultado da aplicação fW a algum argumento. Seu mapeamento não fornece nenhuma maneira de identificar a função ou computar com ela. Seu idioma possui semântica não computável.
fonte
Para alguns conjuntos de funções, isso funciona; não para os outros . Mas uma nova linguagem de programação é uma nova numeração de alguns programas, e não é sobre isso que o teorema de Rice fala.
Para o propósito do teorema de Rice, consideramos apenas as enumerações de Gödel de todas as funções recursivas parciais e, em seguida, ele afirma apenas algo sobre conjuntos de índices , ou seja, conjuntos de todos os índices nessa enumeração de funções no conjunto fornecido.
Isso não cobre todos os conjuntos de índices; e isso é bom, porque certamente existem muitas propriedades decidíveis dos programas. Veja também aqui .
fonte
Nem toda enumeração de programas é "aceitável", pois nem toda enumeração permitiria calcular efetivamente a função associada ao programa a partir do índice do programa. Em outras palavras, você não teria máquinas universais (propriedade utm). A segunda propriedade geralmente necessária para "aceitar" a enumeração é a propriedade smn: você precisa poder calcular o índice de instâncias de programa de maneira uniforme e eficaz.
É possível provar (teorema da equivalência de Roger) que qualquer par de enumerações que usufruem utm e smn é recursivamente isomórfico, ou seja, você tem uma maneira eficaz de traduzir programas entre as duas enumerações. Isso torna sua teoria independente de enumeração.
Isso já é suficiente para enfatizar a relevância de utm e smn, os dois teoremas básicos da abordagem "abstrata" da computabilidade.
O teorema de Roger é apresentado como um exercício (sic!) Em seu livro Teoria das funções recursivas e computabilidade efetiva (exercício 2-10, p. 41). Mas a prova não é muito difícil, de fato.
fonte
Encontrei este interessante artigo de Udi Boker e Nachum Dershowitz, que aborda o problema que tive, entre outras coisas. Na introdução, eles afirmam que (ênfase minha)
e mais
o que explica o que babou chama de "semântica computável". O artigo também contém esta citação de Michael Rescorla:
Portanto, de acordo com os autores, a definição formal comum de uma função computável depende da intuição informal sobre o que significa computabilidade, o que explica o que me intrigou nas numerações de gödel.
fonte