Россия, Москва, МГУПИ |
Вычислимые функции, тезис Тьюринга-Черча и неразрешимые проблемы
В этом лекции мы установим, что классы частично рекурсивных функций, функций, вычислимых структурированными программами, и функций, вычислимых машинами Тьюринга, совпадают. Это (вместе с эквивалентностью этого класса многим другим определениям вычислимости, не рассматриваемым в этих лекциях) позволяет считать этот класс функций точно отражающим наши интуитивные представления о вычислимости.
Напомним, что в теореме 8.1 мы уже показали, что каждая ч.р.ф. вычислима некоторой структурированной программой.
Вычислимость частично рекурсивных функций по Тьюрингу
Теорема 10.1. Для всякой ч.р.ф. f существует м.Т. , вычисляющая функцию f.
Доказательство. Доказательство проведем индукцией по определению частично рекурсивной функции f.
Базис. Вычислимость простейших функций машинами Тьюринга очевидна.
Индукционный шаг. Покажем, что операторы суперпозиции, примитивной рекурсии и минимизации сохраняют вычислимость по Тьюрингу. Все используемые м.Т. будем предполагать односторонними со стандартными заключительными конфигурациями.
Суперпозиция. Пусть Fm и fn1,..., fnm - ч.р.ф., вычислимые на м.Т. , соответственно. Пусть функция Gn получена из них с помощью суперпозиции: Gn=[Fm;fn1,..., fnm]. Тогда м.Т. , вычисляющая G, работает следующим образом:
- m раз копирует вход , отделяя одну копию от другой символом # ;
- на полученном слове вида
- запускает параллельную композицию машин и получает конфигурацию вида , где .
- заменяет все символы 0023 на * ;
- затем запускает программу м.Т. на получившемся после этапа 3) входе вида , и вычисляет требуемое значение .
Если обозначить м.Т., выполняющую копирование на этапе (1), через Копm, а м.Т., выполняющую замену # на * на этапе (3), через Зам*#, то требуемую для суперпозиции м.Т. можно представить как
Примитивная рекурсия. Пусть функция Fn+1(x1,... ,xn,y) получена с помощью оператора примитивной рекурсии из функций gn(x1,..., xn) и fn+2(x1,... ,xn, y, z), которые вычислимы на м.Т. и . Определим вспомогательные м.Т.:
- , используя , строит по входу вида конфигурацию на ленте
- , используя , строит по входу вида конфигурацию
- на входе вида выдает в качестве результата
- на входе вида проверяет условие .
Построение каждой из указанных м.Т. достаточно очевидно. Из них можно получить, используя определенные в предыдущем разделе конструкции "языка программирования" для машин Тьюринга, требуемую м.Т. :
Минимизация. Пусть и м.Т. вычисляет функцию gn+1. Определим следующие вспомогательные м.Т.:
приписывает аргумент 0 ко входу, т.е. вход вида переводит в конфигурацию на ленте (напомним, что при унарном кодировании 0 соответствует пустой символ).
копирует свой вход с разделителем #, т.е. по любому входу w выдает w # w.
Через E обозначим м.Т., которая ничего не делает.
Пусть , т.е. вход вида машина перерабатывает, используя , в , где z= g(x1,... ,xn, y)
на входе вида w # v проверяет непустоту v (т.е. условие v > 0 ).
Таким образом, при v=g(x1,...,xn,y) машина проверяет условие .
по входу вида стирает #w и прибавляет к y единицу, т.е. выдает результат: .
Наконец, по входу выдает |y, стирая ненужные блоки символов.
Ясно, что каждая из перечисленных м.Т. , , , , и легко реализуема. Построим теперь с их помощью следующую м.Т. :
Из этого определения непосредственно следует, что вычисляет функцию fn(x1,..., xn), заданную с помощью оператора минимизации.