Проблема калибровочной иерархии
- 1 year ago
- 0
- 0
Проблема остановки ( англ. Halting problem ) — это одна из проблем в теории алгоритмов , которая может неформально быть поставлена в виде:
Алан Тьюринг доказал в 1936 году , что проблема остановки неразрешима на машине Тьюринга . Другими словами, не существует общего алгоритма решения этой проблемы.
Проблема остановки занимает центральное место в теории вычислимости , поскольку представляет собой первый пример задачи, которую невозможно решить алгоритмическим путём.
В терминах функций проблему можно доступно описать следующим образом:
Для многих других задач [ каких? ] можно доказать их алгоритмическую неразрешимость, попытавшись свести их к проблеме остановки. Это делается по схеме "от противного": пусть есть некая задача, для которой требуется установить её неразрешимость. Тогда, предположим, что она разрешима, и попытаемся, используя этот факт, написать алгоритм решения проблемы остановки. Если это удастся, то мы придем к противоречию, ведь известно, что не существует алгоритма решения проблемы остановки. А значит, предположение было неверным и исходная задача также неразрешима.
Рассмотрим множество алгоритмов, которые принимают на вход натуральное число и на выходе тоже выдают натуральное число. Выберем какой-нибудь полный по Тьюрингу язык программирования. Каждый алгоритм можно записать в виде конечной последовательности символов на этом языке. Упорядочим множество по алфавиту. При этом каждый алгоритм получит свой порядковый номер; более того существует алгоритм, который по номеру элемента восстанавливает его код в выбранном языке программирования. Назовем Анализатором гипотетический алгоритм, который получает на вход пару натуральных чисел , и:
Проблему остановки можно переформулировать следующим образом: существует ли Анализатор?
Теорема. Анализатора не существует.
Докажем это от противного. Допустим, Анализатор существует. Напишем алгоритм Диагонализатор, который принимает на вход число , передает пару аргументов Анализатору и возвращает результат его работы. Другими словами, Диагонализатор останавливается в том и только том случае, если не останавливается алгоритм с номером , получив на вход число . Пусть — это порядковый номер Диагонализатора в множестве . Запустим Диагонализатор, передав ему это число . Диагонализатор остановится в том и только том случае, если алгоритм с номером (то есть, он сам) не останавливается, получив на вход число (какое мы ему и передали). Из этого противоречия следует, что наше предположение неверно: Анализатора не существует, что и требовалось доказать.