Por que os humanos podem resolver certos problemas "indecidíveis"?

45

A correspondência de padrões de alta ordem é um problema indecidível. Isso significa que não há algoritmo que, dada uma equação a => b, onde ae bsão termos abertos no cálculo lambda simplesmente digitado, encontre uma substituição Stal que aS => bS, onde =>significa "tenha a mesma forma normal de Bn". No entanto, os humanos podem resolver esse problema com eficiência. Por exemplo, dado o seguinte problema:

a = (λt . t 
    (F (λ f x . (f (f (f x))))) 
    (F (λ f x . (f (f x)))))
b = (λ t . t
    (λ f x . (f (f (f (f (f (f x)))))))
    (λ f x . (f (f (f (f x))))))

Qualquer humano com conhecimento suficiente sobre o cálculo lambda poderá perceber que Fé a função "dupla" para os números das igrejas, que vem rapidamente com a solução que

 F = (λ a b c . (a b (a b c)))

Minha pergunta é: se esse problema é indecidível, como os humanos podem resolvê-lo com rapidez e facilidade?

MaiaVictor
fonte
24
"os humanos podem resolver esse problema com eficiência" - citação necessária. Qual é a sua evidência para isso? Mostrar um exemplo em que você pode resolvê-lo com eficiência não significa que você pode resolvê-lo com eficiência para todas as instâncias do problema. Você não pode provar que "X é verdadeiro, para todos os X", mostrando um exemplo de X em que X é verdadeiro.
DW
33
Um problema é indecidível significa que não há algoritmo que responda corretamente "sim" ou "não" a todas as instâncias do problema. Não implica que se possa encontrar um algoritmo que resolva algumas (ou muitas) instâncias do problema. [Heh. Como DW respondeu enquanto eu estava compondo essa observação].
Rick Decker
23
Resolva esse problema? Eu nem entendo esse problema.
MikeTheLiar
2
Pelo que entendi, é o seguinte: Essa solução é ad hoc. Cada instância do problema possui uma - na maioria dos casos, não é tão facilmente motivada como no seu exemplo, mas você sempre pode dizer 'se você receber a instância X, saída Y', já que um algoritmo pode ser julgado apenas com base na correção - mas codificar todas essas soluções dessa maneira não produz um procedimento finito (que é o único tipo razoável e, portanto, o que geralmente se entende). Como alternativa, para que um problema seja decidido, você não tem permissão para ver qual instância é dada antes de escolher a estratégia do algoritmo.
Vandermonde
Além disso, é por isso que apenas problemas com um número infinito de instâncias são geralmente considerados ou chamados assim, pois você poderia apenas enumerar todas as soluções como acima.
Vandermonde

Respostas:

79

Os seres humanos podem resolver algumas instâncias desse problema com eficiência, mas não há razão para acreditar que eles possam resolver todas as instâncias com eficiência. Mostrar uma instância que um ser humano pode resolver com eficiência não implica que ele possa resolver todas as instâncias com eficiência.

Indecidível significa "não existe algoritmo que possa resolver todas as instâncias e que sempre termine". Ainda pode haver um algoritmo que pode resolver algumas instâncias , mesmo para um problema indecidível.

Portanto, não há contradição.

DW
fonte
23
@ SRVM, sim, isso significa. Por exemplo, aqui está um exemplo estúpido de um algoritmo de computador: "se a entrada é exatamente o exemplo dado em sua pergunta, então produza F = (λ a b c . (a b (a b c)))e interrompe". Esse é um algoritmo de computador que resolve o problema em alguns casos (em particular, exatamente em 1 caso). Sim, tudo bem - fazer uma nova pergunta como essa parece ser a coisa certa a se fazer. Como sempre, conte-nos quais pesquisas você fez na pergunta (você deve fazer algumas antes de perguntar).
DW
10
Onde os problemas realmente difíceis Existem afirmações de que mesmo em NP problemas completos, a maioria dos casos pode ser resolvida facilmente. Isso corresponde à minha experiência. Geralmente, existem características do problema que tornam (pelo menos parte da) a solução óbvia. Os difíceis são cuidadosamente equilibrados entre sucesso e fracasso, mas não existem muitos.
Ross Millikan
3
@srvm, se você pensar bem, resolver problemas difíceis como esses em casos especiais é exatamente o que um otimizador precisa fazer.
Cort Ammon
2
@srvm: Um excelente exemplo de um problema indecidível que fazemos com que os computadores resolvam quase todos os dias é o problema da parada. Sabemos que o problema da parada é indecidível, mas ainda persistem na escrita de linters, analisadores estáticos e compiladores que tentam detectar loops infinitos indesejados. Como fazemos isso é por "regra de ouro". Ou seja, sabemos pela experiência humana (não pelo algoritmo) que certos tipos de código entram no loop infinito. Por isso, pedimos ao computador que procure os casos que conhecemos. Sabemos que esses programas nunca detectam todos os erros. Mas é melhor que nada.
Slebetman
3
para a posteridade, um novo link para: Where The realmente difícil problemas são
Alex Moore-Niemi
3

Como observa um dos comentários, deve-se estar ciente de que existem alguns algoritmos muito bons para resolver a correspondência de padrões de ordem superior na prática (como uma pesquisa rápida no Google revelará).

Não conheço ninguém que resolva esse problema em particular, mas esse problema de "duplicação" parece mais próximo do campo da síntese do programa . Eu acredito que existem sistemas de síntese de programas que podem lidar com esse tipo de problema.

É fácil criar exemplos que sufocam esses sistemas, e parece que os humanos são particularmente bons nesses tipos de problemas. Criar algoritmos mais próximos dos seres humanos em sua capacidade de resolver esses tipos de problemas é o objetivo da prova automática de teoremas e da inteligência artificial (para as tentativas mais ambiciosas / irrealistas).

cody
fonte
1

Os seres humanos sempre tentam resolver o problema com seu próprio conhecimento; portanto, os humanos desenvolvem algum algoritmo para resolvê-lo com algumas instâncias do problema. Assim, os humanos desenvolvem um algoritmo, mas não há garantia de que o algoritmo específico possa resolver todos os problemas. Portanto, nenhum algoritmo pode resolver todos os problemas, mas ainda existe algum problema que pode ser resolvido por humanos, mesmo que não exista um algoritmo perfeito para isso, como podemos dizer que sabemos como resolver um problema, mas não temos um algoritmo. .


fonte
8
Não é apenas uma paráfrase da resposta existente? Sei que critiquei a maioria das suas respostas, para que o seguinte possa parecer falso, mas não é. É realmente ótimo que você queira contribuir com o site. Seria ótimo se você pudesse nos ajudar a responder algumas de nossas 2.500 perguntas não respondidas , em vez de perguntas nas quais já temos uma resposta que diz tudo o que você quer dizer. Obrigado!
precisa saber é o seguinte