
- •Основы теории алгоритмов и нумераций
- •Оглавление
- •Введение*
- •Глава 1. Рекурсивные и примитивно-рекурсивные функции
- •Обозначения
- •Примитивно рекурсивные функции
- •Примеры
- •Функции Аккермана
- •Примеры
- •Общерекурсивные и частично рекурсивные функции
- •Глава 2. Машины тьюринга
- •Определения
- •Табличноеиграфическоезадания машинТьюринга
- •Графическое представление
- •Табличное значение машины
- •Некоторые операции над машинами Тьюринга
- •Композиция машин Тьюринга
- •Разветвление машин Тьюринга
- •Универсальная машина Тьюринга
- •Тезис Черча. Связь рекурсивных функций с машинами Тьюринга
- •Примеры
- •Глава 3. Вычислимость и разрешимость
- •Обсуждение
- •Нумерации алгоритмов
- •Некоторые теоремы в теории алгоритмов.
- •Глава 4. Рекурсивные и рекурсивно перечислимые множества.
- •Характеристические функции множеств.
- •Рекурсивные и примитивно рекурсивные множества.
- •Рекурсивно перечислимые множества.
- •Основная теорема.
- •Примеры.
- •Глава 5. Основные нумерации в теории алгоритмов
- •Нумерация пар и-ок чисел.
- •Кодирование всех-ок.
- •Нумерация конечных множеств.
- •Нумерации Клини и Поста.
- •Нумерация семейства всех двухэлементных множеств.
- •Глава 6. Степени неразрешимости.
- •- Сводимость.
- •- Степени.
- •Теорема о редукции.
- •Примеры.
- •Глава 7. Нумерованные совокупности.
- •Нумерации множества.
- •Некоторые теоремы о нумерациях множеств
- •Глава 8. Приложения теории алгоритмов к разрешимости некоторых проблем.
- •Теорема Райса.
- •Разрешимость проблем распознавания и классификации.
- •Литература
- •Основы теории алгоритмов и нумераций.
Графическое представление
Диаграмма
имеет вид графа:
Табличное значение машины
Таблица 1
А Q |
* |
λ |
l |
q1 |
q0 λR |
— |
q2 λR |
q2 |
q3 1R |
— |
q2 1R |
q3 |
— |
q0 λR |
q3 1L |
Некоторые операции над машинами Тьюринга
Работа машины Тьюринга полностью
определяется исходными данными и
системой команд. Однако для того, чтобы
понять, как конкретная машина решает
задачу, как правило, возникает необходимость
в содержательных пояснениях типа тех,
которые приводились для машины
.
Эти пояснения часто можно сделать более
формальными и точными, если использовать
блок-схемы и некоторые операции над
машинами Тьюринга. Напомним, что
композицией функций
и
называется функция
,
которая получается при применении
к результату вычисления
.
Для того, чтобы
была определена при данном
,
необходимо и достаточно, чтобы
была определена на
,
а
была определена на
.
Теорема 1. Еслии
вычислимы по Тьюрингу, то их композиция
также вычислима по Тьюрингу.
Пусть
- машина, вычисляющая
,
а
- машина, вычисляющая
,
и множество их состояний соответственно
и
.
Построим диаграмму переходов машины
из диаграмм
и
следующим образом: отождествим начальную
вершину
диаграммы машины
с конечной вершиной
диаграммы машины
(для
систем команд это равносильно тому, что
систему команд
приписываем к системе команд
и для этого
в командах
заменяем на
).
Получим диаграмму с (
)
состояниями. Начальным состоянием
объявим
и заключительным
.
Для простоты обозначений будем считать
и
числовыми функциями от одной переменной.
Пусть
определена. Тогда
и
.
Машина
пройдет ту же последовательность
конфигураций с той разницей, что вместо
она пройдет в
.
Эта конфигурация является стандартной
начальной конфигурацией для машины
,
поэтому
.
Но так как все команды
содержатся в
,
то
и, следовательно,
.
Если же
не определена, то
или
не останавливается и, следовательно,
машина
не остановится. Итак, машина
вычисляет
.
Построенную таким образом машину
будем называть композицией машин
и
и обозначать
(или
(
)),
а также изображать блок-схемой:
Композиция машин Тьюринга
Пусть
,
,
- три машины Тьюринга с одним и тем же
внешним алфавитом
,
с алфавитами внутренних состояний
,
,
и программами
,
,
соответственно.
Композициеймашин
и
называетсямашина Т, программа
которой есть объединение множеств
и
,
где
обозначает множество команд, полученных
из
заменой всех
на
.
Разветвление машин Тьюринга
Разветвлением машин ,
,
по
,
символически
называетсямашина T,
программа которой получается следующим
образом: из
исключаются команды
и
для
,
полученное множество назовем
;
тогда
.
Универсальная машина Тьюринга
Систему команд машины Тьюринга можно
интерпретировать и как описание работы
конкретного устройства и как программу,
т.е. совокупность предписаний, однозначно
приводящих к результату. При разборе
примеров невольно принимается вторая
интерпретация, т.е. мы выступаем в роли
механизма, который способен воспроизвести
работу любой машины Тьюринга. Уверенность
в том, что все это будут делать одинаково
(если не наделают ошибок, что, кстати,
предполагается и при работе машины
Тьюринга) - это по существу уверенность
в существовании алгоритма воспроизведения
работы машины Тьюринга по заданной
программе, т.е. системе команд.
Действительно, словесное описание
такого алгоритма дать нетрудно. Его
основное действие циклически повторяется
и состоит в следующем: "Для текущей
конфигурации
найти
в системе команд команду с левой частью
.
Если правая часть этой команды имеет
вид
,
то заменить в текущей конфигурации
на
(получается конфигурация
);
если же правая часть имеет вид
,
то заменить
на
.
Словесное описание алгоритма может
быть неточным и нуждается в формализации.
Поскольку в качестве такой формализации
понятия алгоритма сейчас обсуждается
машина Тьюринга, то естественно поставить
задачу построения машины Тьюринга,
реализующей описанный алгоритм
воспроизведения. Для машин Тьюринга,
вычисляющих функции от одной переменной,
формулировка этой задачи такова:
построить машину Тьюринга
,
вычисляющую функцию от двух переменных
и такую, что для любой машины
с системой команд
,
если
определена
(т.е. если машина
останавливается
при исходных данных
)
и
не останавливается, если
не останавливается. Любую машину,
обладающую указанным свойством, будем
называтьуниверсальной машиной
Тьюринга. Нетрудно обобщить эту
формулировку на любое число переменных.
Первая проблема, возникающая при
построении универсальной машины
,
связана с тем, что
как и любая другая машина Тьюринга,
должна иметь фиксированный алфавит
и фиксированное множество состояний
.
Поэтому систему команд
и
исходные данные произвольной машины
нельзя просто переносить на ленту машины
(всегда найдется машина
,
алфавиты
и
которой превосходят по мощности
и
или
просто не совпадают с ним).
Выход заключается в том, чтобы символы
из
и
кодировались символами в алфавите
.
Пусть
,
.
Будем всегда считать, что
и
(эти два символа всегда есть в алфавите
любой машины, работающей с числами).
Обозначим коды
и
через
и
и определим их как
;
для любого другого
;
для заключительного состояния
,
если
.
Код
для данной машины
всегда имеет длину (формат)
,
а код
- формат
.
Символы
,
введем в
,
т.е.
,
,
.
Код символа
,
образованный кодами символов, составляющих
это слово, обозначим
.
Таким образом, окончательное уточнение
постановки задачи об универсальной
машине
сводится к тому, что для любой машины
и слова
алфавита
.
Существование универсальной машины
Тьюринга означает, что систему команд
любой
машины
можно интерпретировать двояким образом:
либо как описание работы исходного
устройства
,
либо как программу для универсальной
машины
.
Для современного инженера, проектирующего
систему управления, это обстоятельство
естественно. Он хорошо знает, что любой
алгоритм управления может быть реализован
либо аппаратурно - построением
соответствующей схемы, либо программно
- написанием программы универсальной
управляющей ЭВМ.
Однако важно сознавать, что идея универсального алгоритмического устройства совершенно не связана с развитием современных технических средств его реализации (электроники, физики твердого тела и т.д.) и является не техническим, а математическим фактом, описывающим в абстрактных математических терминах, не зависящих от технических средств, и к тому же опирающемся на крайне малое количество весьма элементарных исходных понятий. Характерно, что основополагающие работы по теории алгоритмов (в частности, работы Тьюринга) появились в 30-х годах, до создания современных ЭВМ.
Указанная двоякая интерпретация
сохраняет на абстрактном уровне основные
плюсы и минусы двух вариантов инженерной
реализации. Конкретная машина
работает гораздо быстрее; кроме того
управляющее устройство машины
довольно громоздко (т.е. велико число
состояний и команд). Однако его величина
постоянна и будучи раз построена она
годится для реализации сколь угодно
больших алгоритмов. Необходим лишь
большой объем ленты, которую естественно
считать более дешевой и более просто
устроенной, чем управляющее устройство.
Кроме того, при смене алгоритма не
понадобится строить новых устройств,
нужно лишь написать новую программу.