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