Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Dm3_lekcija5.doc
Скачиваний:
7
Добавлен:
18.11.2019
Размер:
80 Кб
Скачать
☆

§ 1.5.4. Геделева нумерация и кодовые числа алгоритмов Маркова

Т.1.5.(3) Теорема

Множество алгоритмов Маркова эффективно перечислимо.

Доказательство

Идея: описать произвольный алгоритм некоторым числом, которое эффективно распознаётся среди натуральных чисел. Тогда применив алгоритм распознавания к натуральному ряду, удастся перенумеровать все нормальные алгоритмы. А это означает, что они эффективно перечислимы.

Произведём кодировку:

Нормальный алгоритм представляет собой набор строк, например:

ab → c

Λ  d •

Пронумеруем символы алфавита. Первые три символа служебные, для них зарезервируем числа 1,2,3.

→ ”1”

Λ ”2”

• ”3”

Остальные символы получают следующие вакантные номера:

a (x1) ”4”

b (x2) ”5”

c (x3) ”6”

. . . .

. . . .

(xk) “k+3”

Отступление (из области свойств простых чисел). Если мы возьмем ряд простых чисел и каждое из них возведём в какую-нибудь степень, а затем их перемножим, то по полученному числу мы сможем сказать, в какой именно степени были соответствующие простые числа. Это делается путем деления получившегося числа поочередно на простые числа, начиная с двойки, до тех пор, пока возможно деление без остатка. Потом производится деление на 3, потом на 5 и т.д. до тех пор, пока не получится единица.

2x • 3y • 5z •…=N

Например, мы можем рассчитать степени, в которые были возведены простые числа, произведение которых образует 540:

540=2x • 3y • 5z

540/2=270; 270/2=135; 135/3=45; 45/3=15; 15/3=5; 5/5=1

Двойка участвовала в делении 2 раза, тройка - 3 раза, пятерка – 1 раз. Проверим: 22 • 33 • 51 =4 • 27 • 5=540

Возьмём первую строчку алгоритма Маркова и представим её следующим образом:

a b → c

24 • 35 • 51 • 76 =A

Полученное натуральное число A является кодом данной строчки (такая нумерация называется Гёделевой).

Аналогично поступаем со второй строчкой алгоритма:

Λ → d •

22 • 31 • 57 • 73 =B

B является кодом второй строчки.

Далее формируем кодовое число всего алгоритма. Для этого выпишем ряд простых чисел и возведем каждое число в соответствующую этой строчке степень.

2A, 3B,…

Перемножив эти числа, получим кодовый номер алгоритма.

2A•3B…= К

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

Теперь возьмем ряд натуральных чисел и применим к нему алгоритм распознавания, определяющий является ли данное число кодом какого либо алгоритма Маркова. Такой алгоритм распознавания будет состоять из двух процедур: сначала по данному числу К вычисляются числа А, B, C… (коды строк), а затем из этих чисел извлекаются соответствующие x, y, z,… (коды символов в рамках каждой строки). Полученные значения проверяются на предмет соответствия формату строк алгоритмов Маркова. Если ответ положительный, то соответствующему числу К присваивается очередной свободный номер. Т.о. каждый алгоритм Маркова получит свой собственный номер, следовательно, нормальные алгоритмы эффективно перечислимы, Q.E.D.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]