
- •Ф.К. Алиев, и.А. Юров
- •Введение
- •Основные способы задания двоичных функций
- •1.1. Табличный способ задания
- •1.2. Геометрический способ задания
- •1.3. Задание двоичных функций формулами
- •Основные способы задания двоичных функций (продолжение)
- •2.1. Нормальные формы двоичных функций
- •2.2. Многочлен Жегалкина и действительный многочлен двоичной функции
- •2.3. Теорема о разложении в ряд Фурье
- •Полнота и замкнутость. Критерий полноты системы. Функционально полные системы. Замкнутые классы булевых функций
- •3.1. Полнота и замкнутость. Функционально полные системы
- •3.2. Замкнутые классы булевых функций
- •3.3. Критерий полноты системы булевых функций
- •4.1. Псевдобулевы функции
- •4.2. Функции k-значной логики
- •5.1 Минимизация двоичных функции
- •5.2. Геометрическая интерпретация минимизации днф
- •6.1. Метод Квайна — Мак-Класки нахождения сокращённой днф двоичной функции
- •6.2. Метод нахождения тупиковых днф
- •6.3. Метод Петрика нахождения тупиковых днф
- •Алгебраические системы
- •7.1. Алгебраические системы. Булевы алгебры
- •7.2. Изоморфизм алгебраических систем
- •Алгебры высказываний. Предикаты и операции над ними
- •8.1. Основные логические операции и их свойства
- •8.2. Предикаты и операции над ними
- •Исчисление предикатов
- •9.1. Общее понятие о логическом исчислении
- •9.2. Формулы алгебры предикатов
- •9.3. Равносильность формул. Основные отношения равносильности
- •9.4. Использование равносильностей для упрощения формул
- •9.5. Построение исчисления предикатов
- •9.6. Выводимость и доказуемость формул
- •9.7. Семантика исчисления предикатов
- •Понятие о теории моделей
- •Элементы теории алгоритмов
- •11.1. Основные требования к алгоритмам
- •11.2. Машина Тьюринга и функции, вычислимые по Тьюрингу
- •11.3. Машины произвольного доступа и вычислимые функции
- •Частично рекурсивные функции и их вычислимость
- •Вычислимость суперпозиции
- •Вычислимость рекурсии
- •Вычислимость минимизации
- •Нумерация наборов чисел и слов
- •Нормальные алгоритмы
- •Нумерация алгоритмов
- •1. Нумерация машин Тьюринга
- •2. Нумерация мпд-программ
- •Универсальные функции
- •Алгоритмически неразрешимые проблемы
- •16.1. Алгоритмически неразрешимые проблемы
- •16.2. Примечательные алгоритмически неразрешимые проблемы
- •Характеристики сложности вычислений
- •Характеристика сложности вычислительных задач
- •18.1. Классы сложности p и np и их взаимосвязь
- •18.3. Основные np-полные задачи. Сильная np-полнота
- •Список Литературы
Нумерация алгоритмов
В данной лекции будут приведены эффективные кодирования натуральными числами множества всех алгоритмов для каждой из рассматриваемых моделей алгоритмов: машин Тьюринга, МПД-программ, частично рекурсивных функций. Данные результаты относятся к числу фундаментальных, так как они используются для получения многих важных фактов, в частности, для установления невычислимости ряда конкретных функций.
1. Нумерация машин Тьюринга
Зафиксируем счетные множества символов {a0, a1, …, ai, …} и {q0, q1, …, qj, …} и будем считать, что внешние алфавиты и алфавиты внутренних состояний всех машин Тьюринга берутся из этих множеств. При этом будем считать, что a0 принадлежит всем внешним алфавитам машин и интерпретируется как пустой символ, а буквы q0, q1 принадлежат всем внутренним алфавитам машин и всегда означают заключительное и начальное состояния соответственно. Опишем теперь единый способ представления информации о машинах с помощью кодирования. Каждому символу из множества {L, R, E, a0, a1, …, ai, …, q0, q1, …, qj, …} поставим в соответствие двоичный набор согласно табл.15.1.
Далее, команде I машины Тьюринга Т, имеющей вид qa q’a’d, ставится в соответствие двоичный набор вида
Код (I) = Код(q) Код(a) Код(q’) Код(a’) Код(d),
в котором коды букв приписаны друг к другу. Пусть машина Т имеет алфавиты A = {a0, a1, …, am} и Q = {q0, q1, …, qn}. Упорядочим команды машины Т в соответствии с лексикографическим порядком левых частей команд:
q1, a0, q1, a1, …, q1, am, q2, a0, …, q2, am, …, qn, a0, …, qn, am.
Пусть I1, …, In(m+1), — соответствующая последовательность команд. Тогда машине Т поставим в соответствие двоичный набор вида
Код(T) = Код(I1) Код(I2)… Код(In(m+1)),
полученный приписыванием друг к другу кодов команд.
Таблица 15.1
|
Символ |
Код |
Число нулей в коде |
Символы сдвига |
R L E |
10 100 1000 |
1 2 3 |
Символы алфавита ленты |
a0 a1 … ai … |
10000 1000000 … 100…00 … |
4 6 … 2i + 4 … |
Символы алфавита состояний |
q0 q1 … qi … |
100000 10000000 … 100…00 … |
5 7 … 2j + 5 … |
Пример 15.1. Пусть дана машина Тьюринга Т. A = {a0, a1} и Q = {q0, q1}:
.
Тогда имеем Код(T) = 107104105104103107106105106103.
Легко
видеть, что машина Т
переводит конфигурации
в конфигурации
,
и поэтому, представляя натуральное
числоn
как
,
получаем, что машинаТ
вычисляет функцию f(x) = x.
Ясно, что указанное кодирование является алгоритмической процедурой. Имея код машины, однозначно восстанавливается множество ее команд — для этого надо выделить подслова, начинающиеся с единицы с нулями до следующей единицы. Пятерка таких подслов образует команду. Далее, легко видеть, что имеется алгоритмическая процедура, позволяющая по произвольному слову из 0, 1 выяснять — будет ли это слово служить кодом некоторой машины Тьюринга. Будем теперь рассматривать код машины Тьюринга как двоичную запись натурального числа. Данное число назовем номером машины Тьюринга. Поскольку все коды начинаются с единицы, то разным кодам соответствуют разные числа. Упорядочим машины Тьюринга по возрастанию чисел, представляемых их кодами, и занумеруем их Т0, Т1, …, Тn, … .
Номер машины Т в этом упорядочении будем обозначать nT.
Указанное упорядочение является эффективным в том смысле, что существует алгоритм, который по n выдает Код(Tn) и существует алгоритм, который, наоборот, по Код(Tn) выдает nT.
Если обозначить через fn(x) одноместную функцию, которую вычисляет машина Тьюринга Tn, то в результате получим нумерацию всех одноместных частично рекурсивных функций:
f0(x), f1(x), …, fn(x), …
Согласно доказанному, каждая одноместная частично рекурсивная функция представлена в этой последовательности. Можно доказать, что каждая такая функция представлена в последовательности (5) бесконечное число раз. Аналогично можно определить нумерацию n-местных функций.