Ведь алгоритм перебора можно, по-моему, для любой функции составить.
Там суть в том, что нужно проверять подряд все машины Тьюринга на предмет того, останавливаются ли они, и выбрать ту, которая запишет на ленту больше символов. Но не существует алгоритма, который подтвердит, что такие-то машины Тьюринга не останавливаются.
Мне в этом примере непонятно вот что: задача вычисления числа Busy Beaver
для произвольного
и задача подтверждения, что какие-то машины Тьюринга не останавливаются, это две разные задачи или суть одна и та же?
-- 08.04.2021, 11:26 --Первый вопрос, который у меня сразу же возникает, это, какой вычислитель имеется ввиду? Любой?
Если любой, то как вообще функция может быть невычислима.
Тут, кстати, очень простой ответ. Алгоритм это типа его запись, то есть некая конечная последовательность символов из конечного множества. Понятно, что множество таких последовательностей счетно. А множество всех функций - более, чем счетно. Поэтому невычислимые функции очень даже обязаны быть.
Это пример с диагональным составлением невычислимой функции, насколько я понимаю. Его я тоже, кстати, до конца не пойму. Когда перечисляют все вычислимые функции
, а потом вводят
. Да,
получается не совпадает ни с одной из этих выше перечисленных вычислимых функций. С другой стороны очевидно, что прибавление единицы не делает ее невычислимой для машины Тьюринга то уж точно. Т.е. она должна быть вычислимой.
Написано, что из этого противоречия следует, что предположение о том, что фукнции
определены для любого
, неверно. Но я честно говоря плохо понимаю, как неопределенность
для каких-то
помогает снять это противоречие.
И самое главное, как это на практике выглядит? Ведь на практике мы по этому диагональному рецепту невычислимую функцию никогда не составим. Потому что всегда можно будет число вычислимых функций
дополнить новым экземпляром в том же программном алфавите так, что построенная до этого
будет уже вычислима.