Тверской государственный университет
Опубликован: 21.08.2007 | Доступ: свободный | Студентов: 1683 / 243 | Оценка: 5.00 / 5.00 | Длительность: 14:18:00
ISBN: 978-5-94774-714-0
Специальности: Программист, Математик
Лекция 10:

Вычислимые функции, тезис Тьюринга-Черча и неразрешимые проблемы

< Лекция 9 || Лекция 10: 12345

Проблема самоприменимости заключается в проверке для каждой программы \Pi с входной переменной x и выходной переменной y того, остановится ли \Pi на собственном номере n_{\Pi }, т.е в вычислении всюду определенной функции

F_s(x)=\left \{ \aligned
     1,\qquad \textit{если } \Phi_{\Pi_x,y}(n_{\Pi_x}) < \infty\\
     0\qquad \textit{в противном случае}\endaligned \right .

Теорема 10.4. Проблема самоприменимости алгоритмически неразрешима, т.е. не существует структурированной программы, вычисляющей функцию Fs(x).

Доказательство от противного. Предположим, что существует программа P, вычисляющая функцию Fs(x). Без ограничения общности, можно считать, что ее выходная переменная есть y (почему?) и поэтому \Phi _{P,y}(x)=F_{s}(x) для всех x. Пусть переменная z не входит в P. Рассмотрим следующую программу P’:

P;  z:=0; \textbf{ если } z < y \textbf{ то  } \Pi_5(1) \textbf{ иначе } y:= z \textbf{ конец}

Легко проверить, что если P на входе x выдает результат y=1, то P’ на этом входе не останавливается, а если P выдает результат y=0, то P’ останавливается ( и тоже выдает 0). Пусть n’=nP’ - номер программы P’. Чему тогда равно значение \Phi _{P,y}(n’)? Если оно равно 1, то на входе x=n’ программа P’ не остановится, т.е. \Phi _{P’,y}(n’)= \infty, но тогда F_{s}(n’)=0 \ne   \Phi _{P,y }(n’). Если же \Phi _{P,y }(n')=0, то P’ на входе x=n’ останавливается с результатом 0, т.е. \Phi _{P’,y}(n') < \infty. Но тогда F_{s}(n’)=1 \ne   \Phi _{P,y }(n')=0. Во всех случаях получили, что F_{s} \ne   \Phi _{P,y } и, следовательно, предположение о существовании программы для вычисления функции Fs неверно.

Заметим, что на самом деле мы доказали отсутствие структурированной программы для вычисления функции Fs. Но тезис Тьюринга-Черча и эквивалентность структурированных программ машинам Тьюринга и ч.р.ф. позволяют сделать вывод об алгоритмической неразрешимости рассматриваемой проблемы.

Проблема самоприменимости может показаться не очень интересной с практической ("программистской") точки зрения. Но оказывается, что ее можно использовать для доказательства алгоритмической неразрешимости многих других алгоритмических проблем, более тесно связанных с практикой программирования.

  1. Проблема останова: по произвольной структурированной программе \Pi определить завершится ли вычисление \Pi на входе 0, т.е вычислить всюду определенную функцию

    F_{h0}(n)=\left\{\begin{array}{ll}
     1,&\qquad \textit{если } \Phi_{\Pi_n,y}(0) < \infty\\
     0& \qquad \textit{в противном случае}
\end{array}
\right.

    В более общем виде проблема останова состоит в вычислении следующей функции:

    F_h(n,a)=\left\{\begin{array}{ll}
     1,&\qquad \textit{если } \Phi_{\Pi_n,y}(a) < \infty\\
     0& \qquad \textit{в противном случае}
\end{array}
\right.

    Из этого определения следует, что программа \Pi _{n} останавливается на входе a тогда и только тогда, когда Fh(n,a)=1.

  2. Проблема тотальности: по произвольной структурированной программе \Pi определить, завершает ли она работу при всех значениях входной переменной, т.е вычислить всюду определенную функцию

    F_t(n)= \left\{\begin{array}{ll}
   1, & \qquad \textit{если для всех } a\ \Phi_{\Pi_n,y}(a) < \infty\\
  0   &\qquad \textit{в противном случае}
\end{array}
\right.
  3. Проблема эквивалентности: по произвольным двум структурированным программам \Pi и \Pi ' определить, эквивалентны ли они, т.е вычисляют ли они одну и ту же функцию:
    F_{eq}(n,m)= \left\{\begin{array}{ll}
   1, & \qquad \textit{если для всех } a\ \Phi_{\Pi_n,y}(a) =\Phi_{\Pi_m,y}(a)\\
  0   &\qquad \textit{в противном случае}
\end{array}
\right.
  4. Проблемы оптимизации текста программы. Одна из возможных оптимизаций (текста) программы состоит в удалении из нее операторов присваивания, которые никогда не работают, а другая - в замене условных операторов вида

    \textbf{ если } \varphi \textbf{ то  } \Pi_1 \textbf{ иначе } \Pi_2 \textbf{ конец},

    на \Pi _{1} в случае, когда условие \phi истинно на любых входных данных, и - на \Pi _{2}, если оно на любом входе ложно. Определим соответствующие этим оптимизациям функции:

    F_{opt1}(n,m)= \left\{\begin{array}{ll}
   1, & \qquad \textit{если существует вход } a, \textit{при работе на котором}\\
     & \qquad\textit{ в программе } \Pi_n \textit{срабатывает } m\textit{-ый по счету}\\
      & \qquad  \textit{оператор присваивания}\\
  0   &\qquad \textit{в противном случае}
\end{array}
\right.

    Из этого определения следует, что при Fopt1(n,m)=0 программу \Pi _{n} можно оптимизировать, удалив из нее m -ый оператор присваивания. Назовем задачу вычисления функции Fopt1(n,m) проблемой лишнего присваивания

    F_{opt2}(n,m)= \left\{\begin{array}{ll}
   1, &  \textit{если существует  вход } a, \textit{  на котором при некотором}\\
   &  \textit{срабатывании } m\textit{-го по счету условного оператора из}\\
   &   \textit{программы } \Pi_n   \textit{его условие истинно}\\
     0   & \textit{в противном случае}
\end{array}
\right.

    Ясно, что при Fopt2(n,m)=0 программу \Pi _{n} можно оптимизировать, заменив ее m -ый условный оператор его второй альтернативой. Назовем задачу вычисления функции Fopt2 (n,m) проблемой лишнего условия

    Заметим, что проблема самоприменимости и все проблемы, перечисленные в пп. 1-4 выше, связаны с вычислением функций, принимающих два значения 0 и 1. Эти функции являются характеристическими функциями соответствующих множеств. Например, Fh0(n) является характеристической функцией множества номеров программ, останавливающихся на входе 0. Напомним, что для множества A \subseteq  N^{k} его характеристическая функция cAk определяется следующим образом:

    c_A^k(x_1,\ldots,x_k)= \left\{\begin{array}{ll}
   1, & \qquad \textit{если } (x_1,\ldots,x_k)\in A\\
    0   &\qquad \textit{в противном случае}
\end{array}
\right.

    На множества переносится понятия разрешимости и неразрешимости.

Определение 10.1. Множество A \subseteq  N^{k} назовем разрешимым (или рекурсивным ), если его характеристическая функция cAk вычислима, т.е. является общерекурсивной функцией, в противном случае, оно (и связанная с ним проблема) неразрешимо.

Используя это определение, теорему 10.4 можно переформулировать так:

Множество номеров программ, остановливающихся на собственном номере,

M_s=\{ n | \Phi_{\Pi_n}, y (n) < \infty\} неразрешимо.}

Обычно доказательства неразрешимости проблем используют метод сведения. Неформально его идею можно сформулировать следующим образом: "Если решение некоторой неразрешимой проблемы A можно эффективно получить, используя решение проблемы B, то тогда проблема B тоже неразрешима."

Определим отношение сводимости более формально. Напомним, что нумерационные функции позволяют вместо наборов (векторов, n -ок) целых чисел рассматривать их номера. Для множества B \subseteq   N^{r} обозначим через cr(B) множество номеров входящих в B наборов: c_{r}(B)=\{  c_{r}(a_{1},\dots , a_{r}) | (a_{1},\dots , a_{r})\in  B\} (при r=1, разумеется, c1(B)=B ).

Лемма 10.1. Множество (проблема) A \subseteq   N^{k} сводится к множеству (проблеме) B \subseteq   N^{r}, если существует общерекурсивная функция f: Nk -> N такая, что (x_{1},\dots ,x_{k}) \in  A \Leftrightarrow  f (x_{1},\dots ,x_{k}) \in  c_{r}(B). В этом случае будем писать A <=m B посредством f.

Содержательно, " A сводится к B посредством f " означает, что для выяснения, входит ли x в A, можно эффективно преобразовать x в такие входные данные y=f(x) проблемы B, что при y \in  B имеем x \in  A, а если y \notin  B, то и x \notin  A.

Разрешимые множества сводятся к любым нетривиальным множествам.

Лемма 10.2. Если A разрешимо, а B не совпадает с \varnothing и N, то A <=m B.

Доказательство. По условию имеются такие b и d, что b \in  B, а d \notin  B. Положим f(x) = b , cA(x) + d ,(1 - cA(x)). Тогда при x \in  A имеем f(x) = b , 1 + d ,(1-1)= b \in  B, а при x \notin  A - f(x) = b , 0 + d ,(1-0)= d \notin  B. Таким образом, A <=m B посредством f.

Как мы уже отмечали, доказательство неразрешимости можно основывать на следующем утверждении.

Лемма 10.3. Если A сводится к B и проблема A неразрешима, то и проблема B неразрешима.

Доказательство. Пусть A <=m B посредством f. Тогда из определения сводимости следует, что для всех x имеет место равенство cA(x)=cB(f(x)). Поэтому, если бы B была разрешима, то ее характеристическая функция cB была бы общерекурсивна и cA также была бы общерекурсивна. Но это противоречит неразрешимости проблемы A.

< Лекция 9 || Лекция 10: 12345