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

4.4.5. Алгоритмы и программы

Алгоритмы могут быть записаны как слова в универсальном алфавите U, причем такая запись заведомо не является единственной. Возникает естественный вопрос: если даны две записи, причем обе синтаксически распознаются как записи алгоритмов, то что можно сказать о свойствах алгоритмов по их записям? Например, это две записи одного алгоритма или разных алгоритмов? Ясно, что ответить на эти вопросы не так просто. Необходимо внести уточнения в описание способа записи алгоритмов.

Введем обозначения. Напомним, что мы рассматриваем алгоритмы над словами в алфавите U, т.е. алгоритмы принимают в качестве аргументов слова (возможно, не принимают аргументов) и вырабатывают в качестве результата также слова (возможно много слов). Алгоритмы, в том числе вычислимые функции, не обязательно тотальны. Если аргументы принадлежат области определения алгоритма, то говорят, что алгоритм применим.

Говорят, что два алгоритма A и B условно равны для аргумента x, обозначение A(x)B(x), если либо оба алгоритма применимы к аргументу x и тогда их результаты совпадают, либо оба алгоритма неприменимы к x.

Замечание. Алгоритмы в этом определении являются не только алгоритмами вычислимых функций, но любыми алгоритмами. Поэтому результатами работы может быть не только возвращаемое значение, но и перечислимое множество, или последовательность действий в случае итераторов, или изменение состояния объекта в случае трансформаций и т.д. Совпадение результатов для каждого типа алгоритмов определяется специфических образом. Для вычислимых функций это равенство слов, для перечислимых множеств — равенство множеств слов.

Два алгоритма A и B называются равносильными, если у них совпадают области применимости, и для любого слова из этой области, взятого в качестве аргумента, совпадают результаты работы алгоритмов, то есть x (A(x)  B(x)). Равносильность обычно обозначается следующим образом: AB. Ясно, что равносильность алгоритмов является эквивалентностью.

Замечание. Все эти определения применимы к любым алгоритмам, в частности, к вычислимым функциям. Поэтому равносильность и функциональная эквивалентность — это равнообъемные понятия.

Говорят, что два алгоритма A и B всюду отличаются, если x (A(x)  B(x)). Другими словами, алгоритмы всюду отличаются, если дают разные результаты там, где применимы, и нет таких аргументов, при которых они оба неприменимы.

Пусть имеется алгоритм с двумя параметрами А: XYZ. Проекцией этого алгоритма на первый (второй) параметр, или остаточной программой по первому (второму) аргументу, называется алгоритм Аx: YZ (Аy: XZ) такой, что yY (Ax(y)  A(x, y)) (соответственно x (Ay(x)  A(x, y))).

Замечание. Термин остаточная программа заимствован из теории смешанных вычислений. Концепцию смешанных вычислений предложил А.П.Ершов2.

Пусть есть некоторый класс алгоритмов . Класс алгоритмов  называется представительным для класса , если для любого алгоритма A существует равносильный алгоритм B, AB.

Замечание. Отношение представительности между классами алгоритмов не является эквивалентностью, но является рефлексивным и транзитивным, то есть является отношением предпорядка.

Идея состоит в том, чтобы для любого класса алгоритмов  подобрать более четко очерченный (но, возможно, более широкий!) класс алгоритмов , который будет представительным по отношению к исходному классу. Элементы класса  называются программами, которые представляют (или реализуют) элементы класса .

Осталось определить, в каком смысле класс программ должен быть четко очерчен. Во-первых, класс программ должен быть разрешимым — требуется надежно отличать программы от не программ. Во-вторых, должен быть задан алгоритм интерпретации I, позволяющей по программе B и исходным данным x определить результаты представляемого алгоритма A(x) — программы необходимо уметь выполнять.

Замечание 1. Этой же схеме следуют все упоминавшиеся выше теоретические уточнения понятия алгоритма. Каждое такое уточнение описывает свой класс «программ» (более или менее формально), неформально описывает алгоритм I и в качестве недоказываемой догмы постулирует представительность выбранного класса программ.

Замечание 2. Но этой же схеме следуют все практические системы программирования! Каждая такая система описывает свой класс программ (задает синтаксис языка программирования), полуформально описывает алгоритм I (операционная семантика языка программирования), а «выразительная сила» языка программирования рассматривается как предмет веры. В том, что класс программ шире класса алгоритмов (если программа синтаксически правильна, это еще не значит, что она сработает и даст результат) программисты очень быстро убеждаются на собственном печальном опыте.

Все сказанное приводит к следующей аксиоме.

Аксиома [программы]. Существует представительное разрешимое множество программ  такое, что для любого алгоритма A: T1T2 существует равносильная программа B, и существует алгоритм интерпретации I:  T1 T2, причем AIB.

Замечание. Алгоритм I, как и все алгоритмы, может быть запрограммирован, то есть для него может быть предъявлена равносильная программа. Полученная программа является самоприменимой. В этом нет ничего парадоксального.