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

4.4.3. Разрешимые множества

Подмножество слов S перечислимого множества M называется разрешимым, если существует такой алгоритм SMbool, что S(m)=T тогда и только тогда, когда mS. Другими словами, множество разрешимо, если существует алгоритм, который распознает принадлежность элементов этому множеству. Ясно, что если множество S разрешимо относительно M, то множество M S также разрешимо — достаточно в теле алгоритма S заменить оператор return T оператором return F и наоборот.

Лемма 1. Каково бы ни было множество X,  и X разрешимы относительно X.

Доказательство. Для пустого множества искомый алгоритм – константа F, а для множества X — константа T. чтд

Лемма 2. Разрешимое подмножество S перечислимого множества M перечислимо.

Доказательство. Пусть S – разрешающий алгоритм для S, а M – перечисляющий алгоритм для M. Построим перечисляющий алгоритм S для S. Если S=, то S := F, если же S, то существует элемент sS. Тогда

S := for mM do if S(m) then yield m else yield s end if end for. чтд

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

Лемма 3. Подмножество S перечислимого множества M разрешимо тогда и только тогда, когда перечислимо как S, так и его дополнение M \ S.

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

[] Если множество S разрешимо относительно M, то множество M S также разрешимо, и остается применить лемму 2.

[] Если S или M S пусто, то по лемме 1 S разрешимо. Пусть теперь S и M S оба не пусты и перечислимы перечисляющими алгоритмами S и S соответственно, а вычислимые функции F и F: M доставляют элементы этих множеств по номерам. Тогда следующий алгоритм разрешает множество S:

proc SS (s: M) : bool

n:=0; 

while true do n:= n + 1;

x:=F (n);

y:= F (n);

if x = s then return T end if;

if y = s then return F end if;

end while. чтд

Лемма 4. Если функция вычислима, то образ перечислимого множества перечислим.

Доказательство. Пусть функция F : Dom F  Im F вычислима, а множество A  Dom F перечислимо, тогда множество F(A)  Im F перечисляется следующим алгоритмом: for xA do yield F(x) end for. чтд

Лемма 5. Если функция вычислима и определена на перечислимом множестве, то прообраз перечислимого множества перечислим.

Доказательство. Пусть функция F : Dom F  Im F вычислима, а множество B перечислимо вычислимой функцией h, и множество Dom F  перечислимо вычислимой функцией g. Если F–1(B)=, то прообраз перечислим, иначе существует элемент sF–1(B). Тогда множество F–1(B) перечисляется следующим алгоритмом:

for <a, b>N2 do if f(h(a))=g(b) then yield h(a) else yield s end if end for чтд

4.4.4. Протокол выполнения алгоритма

Программистская практика свидетельствует, что программы иногда удаётся отладить, то есть найти и устранить ошибки, содержащиеся в алгоритмах. Процесс отладки основан на том, что за работой алгоритма возможно наблюдение, в частности, для любого алгоритма и для любого случая выполнения этого алгоритма можно составить протокол выполнения, в котором исчерпывающим образом отражается история выполнения алгоритма (для заданных входных данных). Другими словами, в самих алгоритмах и в их выполнении нет ничего чудесного, ничего такого, чего нельзя записать словами в алфавите U.

Следующий факт мы принимаем без доказательства, как априорное свойство интуитивного понятия алгоритма.

Аксиома [протокола]. Для каждого алгоритма A существует разрешимое множество H и существуют вычислимые функции a: HU* и z: HU*, такие что A(x)=y тогда и только тогда, когда существует такое hH, что a(h)=x и z(h)=y.

Множество H — это множество всех возможных протоколов выполнения алгоритма A, h — это протокол выполнения с входом x и выходом y, а функции a и z — это функции определения входов и выходов, соответственно.

Отступление. Если для каждой пары <x, y>, для которой A(x)=y слово hH, такое что a(h)=x и z(h)=y не только существует, но и единственно, то алгоритм называется детерминированным. В протоколе детерминированного алгоритма порядок действий строгий линейный (п. 1.8.1). В сформулированной аксиоме протокола единственность не требуется, тем самым допускается, что выполнение алгоритма может быть недетерминированным. В протоколе недетерминированного алгоритма порядок действий нестрогий частичный (п. 1.8.1). В недетерминированности нет ничего страшного, более того, это путь к параллельному программированию и другим современным подходам в информационных технологиях. Поэтому накладывать требование детерминированности без необходимости не следует.

Следствие 1. Область применимости и множество результатов любого алгоритма перечислимы.

Доказательство. Область применимости — это a(H), а множество результатов — это z(H). Оба эти множества перечислимы по лемме 4. чтд

Следствие 2. Область определения и множество значений любой вычислимой функции перечислимы.

Доказательство. Частный случай Следствия 1. чтд

Следствие 3. График любой вычислимой функции перечислим.

Доказательство. По аксиоме протокола для функции существует множество протоколов H и вычислимые функции входа/выхода a(h) и z(h). Тогда следующий алгоритм перечисляет график функции: for hH do yield <a(h), z(h)> end for чтд

Следствие 4. Функция с перечислимым графиком вычислима.

Доказательство. По аксиоме протокола для функции существует множество протоколов H и вычислимые функции входа/выхода a(h) и z(h). Тогда следующий алгоритм перечисляет график функции: for hH do yield <a(h), z(h)> end for чтд