Pourquoi les humains peuvent-ils résoudre certains problèmes «indécidables»?

46

La correspondance de modèle d'ordre élevé est un problème indécidable. Cela signifie qu’il n’existe aucun algorithme qui, étant donné une équation a => b, où aet bsont des termes ouverts sur le calcul lambda simplement typé, trouve une substitution Stelle que aS => bS, où =>signifie «a la même forme normale de Bn». Pourtant, les humains peuvent résoudre ce problème efficacement. Par exemple, étant donné le problème suivant:

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

Tout être humain ayant une connaissance suffisante du calcul lambda pourra remarquer Fla fonction "double" des numéros d'église, avec la solution

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

Ma question est la suivante: si ce problème est indécidable, comment l’être humain peut-il le résoudre rapidement et sans effort?

MaiaVictor
la source
25
"Les humains peuvent résoudre ce problème efficacement" - citation nécessaire. Quelle est votre preuve pour cela? Montrer un exemple où vous pouvez le résoudre efficacement ne signifie pas que vous pouvez le résoudre efficacement pour toutes les instances du problème. Vous ne pouvez pas prouver que "X est vrai pour tous les X" en montrant un exemple de X où X est vrai.
DW
34
Un problème indécidable signifie qu'aucun algorithme ne répond correctement "oui" ou "non" à chaque instance du problème. Cela ne signifie pas que l'on peut trouver un algorithme qui résout certaines (ou plusieurs) instances du problème. [Il h. Comme DW a répondu pendant que je composais cette remarque.]
Rick Decker
24
Résoudre ce problème? Je ne comprends même pas ce problème.
MikeTheLiar
2
La façon dont j'ai compris cela est la suivante: cette solution est une solution ad hoc. Chaque instance du problème en a une - dans la plupart des cas pas aussi facile à motiver que dans votre exemple, mais vous pouvez toujours dire 'si vous obtenez l'instance X, la sortie Y' car un algorithme ne peut être jugé que sur la base de l'exactitude - mais coder en dur toutes ces solutions de cette manière ne produit pas de procédure finie (qui est le seul type raisonnable et donc ce que l’on entend habituellement). Autrement dit, pour qu'un problème soit décidable, vous ne pouvez pas voir quelle instance est donnée avant de choisir la stratégie de l'algorithme.
Vandermonde
En outre, c’est aussi pourquoi seuls les problèmes avec un nombre infini d’instances sont généralement considérés ou appelés comme tels, car vous pourriez sinon énumérer toutes les solutions décrites ci-dessus.
Vandermonde

Réponses:

82

Les humains peuvent résoudre efficacement certains cas de ce problème, mais il n’ya aucune raison de croire qu’ils peuvent résoudre tous les cas de manière efficace. Montrer une instance qu'un humain peut résoudre efficacement ne signifie pas que l'homme peut résoudre toutes les instances efficacement.

Indécidable signifie "aucun algorithme ne peut résoudre toutes les instances et se termine toujours". Il pourrait toujours exister un algorithme capable de résoudre certains cas , même pour un problème indécidable.

Donc, il n'y a pas de contradiction.

DW
la source
23
@srvm, yup, ça veut dire ça. Par exemple, voici un exemple stupide d'algorithme informatique: "si l'entrée est exactement l'exemple donné dans votre question, alors affichez F = (λ a b c . (a b (a b c)))et arrêtez-vous". C'est un algorithme informatique qui résout le problème dans certains cas (en particulier, dans exactement un cas). Oui, ça va. Poser une nouvelle question comme celle-là semble être la bonne chose à faire. Comme d'habitude, dites-nous quelles recherches vous avez effectuées dans la question (vous devez en faire avant de demander).
DW
10
Là où les problèmes vraiment difficiles affirment que même dans NP problèmes complets, la plupart des cas peuvent être résolus facilement. Cela correspond à mon expérience. Habituellement, certaines caractéristiques du problème rendent (au moins une partie de) la solution évidente. Les plus difficiles sont soigneusement équilibrés entre succès et échecs, mais ils sont peu nombreux.
Ross Millikan
3
@srvm si vous pensez à ce sujet, la résolution des problèmes difficiles comme ceux - ci dans des cas particuliers est exactement ce que l'optimiseur doit faire.
Cort Ammon
2
@srvm: Le problème persistant est un excellent exemple d'un problème indécidable que nous obligeons les ordinateurs à résoudre presque tous les jours. Nous savons que le problème d'arrêt est indécidable, mais nous persistons toujours à écrire des linters, des analyseurs statiques et des compilateurs qui tentent de détecter des boucles infinies indésirables. Comment nous le faisons est par «règle générale». C'est-à-dire que nous savons par expérience humaine (et non par algorithme) que certains types de code entrent dans une boucle infinie. Nous demandons donc à l'ordinateur de rechercher les cas que nous connaissons. Nous savons que de tels programmes ne pourront jamais attraper tous les bugs. Mais c'est mieux que rien.
Slebetman
3
pour la postérité, un nouveau lien vers: Où sont les problèmes vraiment difficiles
Alex Moore-Niemi
3

Comme l’a noté l’un des commentaires, il faut savoir qu’il existe de très bons algorithmes permettant de résoudre en pratique la correspondance de modèle d’ordre élevé (comme le révélera une recherche rapide sur Google ).

Je n'en connais aucun qui résolve ce problème particulier, mais ce problème de «doublage» semble plus proche du domaine de la synthèse de programme . Je pense qu’il existe des systèmes de synthèse de programmes capables de résoudre ce type de problème.

Il est facile de créer des exemples qui étouffent ce système, et il semble que les humains sont particulièrement doués pour ce type de problèmes. Créer des algorithmes plus proches de l'homme dans sa capacité à résoudre ce type de problèmes relève de la démonstration automatique de théorèmes et de l'intelligence artificielle (pour les tentatives les plus ambitieuses / irréalistes).

Cody
la source
1

Les humains essaient toujours de résoudre le problème avec leurs propres connaissances. Ils ont donc développé un algorithme pour résoudre le problème avec quelques exemples de problèmes. Alors, un humain a développé un algorithme, mais rien ne dit que cet algorithme puisse résoudre tous les problèmes. Donc, aucun algorithme ne peut résoudre tous les problèmes, mais il y a toujours un problème qui peut être résolu par un humain même s'il n'existe pas d'algorithme parfait pour cela. Nous pouvons dire que nous savons comment résoudre un problème mais nous n'avons pas d'algorithme. .


la source
8
N'est-ce pas juste une paraphrase de la réponse existante? Je sais que j'ai critiqué la plupart de vos réponses, donc ce qui suit peut sembler peu sincère, mais ce n'est pas le cas. C’est vraiment bien que vous souhaitiez contribuer au site. Ce serait vraiment bien si vous pouviez nous aider à répondre à certaines de nos 2500 questions sans réponse , plutôt qu'à des questions pour lesquelles nous avons déjà une réponse qui dit tout ce que vous voulez dire. Merci!
David Richerby