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 a
e b
são termos abertos no cálculo lambda simplesmente digitado, encontre uma substituição S
tal 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?
computability
MaiaVictor
fonte
fonte
Respostas:
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.
fonte
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).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).
fonte
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