contact me
alsemno@ya.ru
RU
EN
Идентификаторы
PersonID 19667
Alexei Semenov
ID: semenov.alexei-l
AuthorID: 218197
Spin 2289-1720
alsemenov
0000-0002-1785-2387
S-5268-2018
AuthorID 7402499019
Alexei_Semenov
A. Semenov
AlexeySemenov
Alexei Semenov
Введение в математическую логику и теорию алгоритмов
Ступень 14. Алгоритмы и вычислимые функции
Определение 128. Алгоритм — это однозначно понятный человеку текст. Этот текст:
  • алфавит алгоритма, содержащий двоичный;
  • объектами алгоритма будут цепочки в этом алфавите
  • (описывает) понятные человеку, обязательно завершающиеся:
Проверку остановки, дающую в применение к объекту И или Л;
Действие переработки, дающее в применении к объекту другой объект.

Вычисление алгоритма — последовательность объектов:
  • первый объект последовательности — произвольная двоичная цепочка — исходное данное,
  • для всякого элемента последовательности, кроме последнего (если последовательность конечна):
– если Проверка остановки для дает значение И, то следующий элемент последовательности является последним в последовательности и называется результатом вычисления;
– следующий элемент последовательности существует и получается из Действием переработки.

Переход от объекта последовательности к следующему мы называем шагом (работы) алгоритма.
Таким образом, прежде чем действовать, мы выясняем, не нужно ли будет, сделав очередной шаг, завершить деятельность. Зная, что очередной шаг будет последним, мы можем убрать все, что не войдет в результат.

На самом первом шаге, и на последующих, мы можем добавить к аргументу дополнительные символы, заготовить несколько его копий, как частей объекта, запустить какие-то вспомогательные алгоритмы,
тоже описанные в Действии переработки, например, счетчик шагов и т. д.

Располагая двумя алгоритмами, мы можем составить третий, который будет моделировать их оба, начиная с того, что выдаст каждому из них по копии исходного данного, а потом будет чередовать их шаги на соответствующих промежуточных результатах.
Определение 129. Функция, вычисляемая алгоритмом — это отображение, ставящее в соответствие исходному данному результат вычисления алгоритма, в котором первый объект — это исходное данное, аргумент функции.

Если последовательность для какого-то исходного данного бесконечна, то результата нет и значение функции на таком аргументе не определено.
Определение 130. Вычислимая функция — функция, вычисляемая каким-либо алгоритмом.
  • Задача 246. Существует алгоритм со следующим свойством:
В последовательности, начинающейся с пустой цепочки, где каждый следующий элемент получается применением алгоритма к предыдущему, встречаются все двоичные цепочки.
Определение 131. Построенный в предыдущей задаче алгоритм назовем счислительным алгоритмом.
Бывает удобно, как мы увидим в дальнейшем, хранить в начале цепочки информацию о ее длине. Эта информация — натуральное число, само имеет длину, равную двоичному логарифму длины цепочки. Однако, если длину просто приписать в начале, то будет неясно, где это начало заканчивается.

Простейший способ преодолеть эту трудность — записать длину, повторяя каждый символ дважды, а после завершения записи длины поставить . Конечно, теперь это закодированное в начале число не будет равно длине всей цепочки, но нам удобнее оставить ситуацию именно той, как мы описали. Разумеется, нетрудно слегка изменить алгоритм, чтобы запись цепочки действительно начиналась с таким образом модифицированной записи ее длины.
Определение 132. Кодом двоичной цепочки называется цепочка, получаемая приписыванием в начале цепочки двоичной записи ее длины, в которой каждый символ повторен дважды, и затем идет .

Если в алфавите имеются и другие символы, то мы все символы в алфавите кодируем двоичными цепочками равной длины, как мы это делали в доказательстве теоремы Гёделя.
Заметим, что в главе, где речь шла о неполноте (теорема Гёделя и т. д.) мы использовали другую, более простую систему кодирования цепочек.

Через мы будем обозначать ближайшее целое сверху от двоичного логарифма числа .

Ясно, что если мы начали с цепочки длины n, то после добавления информации о длине указанным выше способом, получим цепочку длины .
  • Задача 247. Можно ли придумать более экономный (то есть, дающий более короткие коды) способ кодирования?
Мы, однако, не будем стремиться к такой экономии и ограничимся данным выше определением кода.
  • Задача 248. Докажите, что если код одной цепочки является началом кода другой, то эти цепочки совпадают.
Ясно, что кодируя пару цепочек и можно ограничиться кодированием цепочки , за которым просто выписать . Аналогично можно определять код цепочки цепочек.
14.1. Классы множеств, связанные с вычислимостью
Определение 133. Перечислимое множество: пустое, или являющееся множеством всех значений всюду определенной вычислимой функции.
В дальнейшем мы будем неоднократно использовать следующий несложный прием. Если мы имеем дело с некоторым непустым множеством, то мы используем некоторый выделенный в нем элемент.
Задача 249. Множество перечислимо оно породимо.
13.4. Грамматики. Тезис Поста

Грамматики — это исчисления специального вида.
Задача 245. Доказать, что следующие цепочки порождаемы: . Доказать, что следующие цепочки не порождаемы: .
Как мы уже отмечали, породимость определялась за пределами теории множеств: мы ссылались на человека и его деятельность.

Однако вся человеческая практика, включая применение компью-
теров, подтверждает следующее положение.

Тезис (Поста). Для всякого породимого множества существует грамматика, его порождающая.