Сопоставление паттернов высокого порядка - неразрешимая проблема. Это означает, что не существует алгоритма, который, учитывая уравнение a => b
, где a
и b
являются открытыми слагаемыми в простом типе лямбда-исчисления, находит замену так S
, что aS => bS
, где =>
означает «имеет такую же Bn нормальную форму». Тем не менее, люди могут эффективно решить эту проблему. Например, с учетом следующей проблемы:
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))))))
Любой человек, обладающий достаточными знаниями в области лямбда-исчисления, сможет заметить, F
что это «двойная» функция для церковных чисел, быстро пришедшая с решением, которое
F = (λ a b c . (a b (a b c)))
Мой вопрос: если эта проблема неразрешима, как люди могут быстро и без усилий решить ее?
computability
MaiaVictor
источник
источник
Ответы:
Люди могут эффективно решить некоторые случаи этой проблемы, но нет никаких оснований полагать, что люди могут эффективно решать все случаи . Показ одного примера, который человек может решить эффективно, не означает, что люди могут эффективно решать все случаи.
Неразрешимый означает, что «не существует алгоритма, который может решить все случаи и который всегда завершается». Может существовать алгоритм, который может решить некоторые случаи , даже для неразрешимой проблемы.
Так что нет никакого противоречия.
источник
F = (λ a b c . (a b (a b c)))
и остановите». Это компьютерный алгоритм, который решает проблему для некоторых случаев (в частности, для ровно одного случая). Да, все в порядке - задавать новый вопрос подобным образом, кажется правильным. Как обычно, пожалуйста, сообщите нам, какое исследование вы провели в этом вопросе (вы должны сделать некоторые, прежде чем спрашивать).Как отмечается в одном из комментариев, следует помнить, что на практике есть несколько довольно хороших алгоритмов для решения шаблонов высшего порядка (как показывает быстрый поиск в Google ).
Я не знаю ни одного, который решал бы эту конкретную проблему, но эта проблема «удвоения» чувствует себя ближе к области синтеза программ . Я верю, что существуют системы синтеза программ, которые могут решить эту проблему.
Легко создавать примеры, которые заставляют эту систему задыхаться, и кажется, что люди особенно хороши в подобных проблемах. Создание алгоритмов, которые ближе к людям в их способности решать такие проблемы, является задачей автоматического доказательства теорем и искусственного интеллекта (для более амбициозных / нереальных попыток).
источник
Люди всегда пытаются решить проблему с помощью своих собственных знаний, поэтому люди разрабатывают некоторый алгоритм для решения проблемы с некоторыми случаями проблемы. Таким образом, человек разрабатывает алгоритм, но нет уверенности в том, что конкретный алгоритм может решить каждую проблему. Таким образом, ни один алгоритм не может решить каждую проблему, но все же есть некоторая проблема, которая может быть решена человеком, хотя не существует идеального алгоритма для этого, как мы можем сказать, что мы знаем, как решить проблему, но у нас нет алгоритма ,
источник