Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДополнениеТеоремаГёделя_исправление.docx
Скачиваний:
0
Добавлен:
22.01.2020
Размер:
77.32 Кб
Скачать

Дополнение

К курсу «Дискретная математика для программистов»

Наивная теория алгоритмов

Изложение построено в форме дополнения к учебнику «Дискретная математика» издание 2013 года.

В этом Дополнении изложено доказательство первой теоремы Гёделя о неполноте, основанное на понятии алгоритма. Приводимое доказательство в своих идеях следует брошюре Успенского1 [32], и является достаточно далёким от оригинального доказательства Гёделя. Приведенное изложение далеко и от Успенского, поскольку сокращено, упрощено, «запрограммировано» и выдержано в стиле учебника.

Ты когда-нибудь видела, как рисуют множество?

Множество чего? – спросила Алиса.

Ничего, – отвечала Соня. – Просто множество!

Не знаю, – начала Алиса, – может...

А не знаешь — молчи, – оборвал ее Болванщик.

Льюис Кэрролл, Алиса в стране чудес

4.4. Наивная теория алгоритмов

Интуитивное понятие алгоритма как «набора инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное число действий» или как «точно определенного предписания, позволяющего во многих случаях из исходных данных получить результат», обладает в точности теми же достоинствами и недостатками, что и определение понятия множества в параграфе 1.1.1. Приведенные определения понятия «алгоритм» понятны всем программистам, они вызывает верные практические ассоциации с программами, и они совершенно неполны и не обладает математической строгостью.

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

Будем считать алгоритм неопределяемым понятием, постулируя те или иные его свойства по мере необходимости.

Отступление. Обычно в «строгой» теории алгоритмов вводится одно или несколько «уточнений» понятия алгоритма, например: машина Тьюринга, машина Поста, нормальный алгорифм Маркова, и многие другие. В сущности, каждое такое уточнение понятия алгоритма определяет формальный способ записи предписаний, т. е. программ и неформальный алгоритм интерпретации программ, т. е. правила применения программ к аргументам для получения результатов. Все предложенные к настоящему моменту уточнения интуитивного понятия алгоритма оказались эквивалентными (в строгом математическом смысле), что дало основание выдвинуть тезис Тьюринга–Чёрча, неформально постулирующий, что все уточнённые понятия алгоритма равнообъёмны интуитивному понятию алгоритма. Формальные уточнения понятия «алгоритм» и построенная на их основе строгая теория алгоритмов обладают несомненными достоинствами и подлежат неукоснительному изучению. Однако теория алгоритмов имеет две имманентных особенности, которые в практическом применении проявляют себя как неудобства. Во-первых, введение формального способа записи алгоритмов резко усложняет и затрудняет программирование, поскольку программировать приходится в терминах очень низкого уровня (ячейки ленты машины Тьюринга и тому подобное). Во-вторых, поскольку способ интерпретации программ все равно остается неформальным и потому допускает различные реализации, затруднительно ввести независящую от реализации меру для прямого сравнения алгоритмов, и приходится применять косвенные критерии, подобные асимптотическим оценкам трудоемкости и тому подобное.

В этом учебнике тезис Тьюринга–Чёрча принимается безоговорочно, активно используемый способ записи программ (псевдокод, см. Введение) принимается как достаточно выразительный способ записи алгоритмов, и убедительные рассуждения относительно текстов алгоритмов принимаются как достаточные обоснования свойств этих алгоритмов. В целом изложение можно назвать наивной теорией алгоритмов по аналогии с наивной теорией множеств (см. п. 1.1.1).

Не ограничивая общности, далее считается, что зафиксирован некоторый конечный алфавит символов U, достаточный для записи всех необходимых объектов. Алгоритмы записываются с помощью последовательностей символов из этого алфавита; данные, к которым применяются алгоритмы, также записываются с помощью последовательностей символов (возможно, других символов), элементы всех множеств записываются с помощью слов в этом алфавите, функции действуют из множества слов в множество слов в этом алфавите и т. д. Например, можно считать, что в алфавит U входят кириллические, латинские и греческие буквы, прописные и строчные, в различных начертаниях, арабские цифры, знаки препинания, скобки, математические знаки и т. д. При этом правила записи (кодирования) различных объектов считаются известными. В частности, считаются известными правила записи натуральных чисел (например, с помощью десятичных цифр), арифметических выражений (например, с помощью знаков операций, чисел и переменных), алгоритмов (например, с помощью псевдокода). Таким образом, принимается, что существуют алгоритмы, которые по любому слову в данном фиксированном алфавите U (п. 1.8.8) позволяют надежно определить, соответствует ли это слово правилам записи, и определить, какой именно объект записан. Доказывать существование подобных алгоритмов лексического и синтаксического анализа нет нужды — это эмпирический факт, доступный в повседневных ощущениях при работе с компьютерами.

Имена алгоритмов записываются прописными полужирными латинскими буквами в прямом начертании, чтобы легко отличать их от имен множеств и иных объектов. Сами алгоритмы записываются на псевдокоде. Если алгоритмы имеют входные данные и результаты, то они указываются отдельно и называются заголовком алгоритма, а операторы, задающие сам алгоритм, называются телом алгоритма.