Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЛиТА 6 - 7.doc
Скачиваний:
55
Добавлен:
12.11.2018
Размер:
452.61 Кб
Скачать

Пример 7

Рассмотрим примитивно рекурсивную функцию: g(x,y)  =  x – Sg(y), где Sg(y)  =  0, при y  =  0, и Sg(y)  =  1, для y  >  0. Тогда значения:

f(x) =  y[x-Sg(y)=  0]

не определены при x  >  1. Наименьшее среди y    N, удовлетворяющих 0 – Sg(y)  =  0, будет равно 0, а наименьшее среди y, при которых 1 – Sg(y)  = 0, равно 1. Следовательно, f(0)  =  0, f(1)  =  1, и f(x) не определены при x  >  1. Функция x – Sg(y) примитивно рекурсивная, значит, f(x) – частично рекурсивная.

Пусть А – подмножество натуральных чисел. Частичной характеристической функцией множества А называется частичная функция CA: N  N, равная 0 в точках множества А и не определенная вне А. Множество А называется частично рекурсивным, если его частичная характеристическая функция частично рекурсивна. Множество А называется примитивно рекурсивным, если функция N  N, равная 0 на А и равная 1 вне А, является примитивно рекурсивной.

Теорема. Пусть f: N  N – примитивно рекурсивная функция, A   N – примитивно рекурсивное множество. Тогда частичная функция fA: N  N, определенная как fA(x)  =  f(x) для x   A и неопределенная при x   A, является частично рекурсивной.

Доказательство. Легко видеть, что fA(x)  =  f(x) + CA(x). Поэтому fA частично рекурсивна, как сумма частично рекурсивных функций.

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

Тезис Чёрча. Класс алгоритмически (или машинно) вычислимых частичных числовых функций совпадает с классом всех частично рекурсивных функций.

7.2. Машины Тьюринга

Рассмотрим гипотетическую «машину», имеющую конечное множество Q внутренних состояний и одну бесконечную ленту, разделенную на ячейки, по которой перемещается устройство для чтения и записи, именуемое головкой. В каждый из такт времени головка читает содержимое текущей ячейки, затем пишет в эту ячейку новый символ и перемещается влево или вправо, или остается на месте. Текущей ячейкой становится новая ячейка, она будет той, на которую указывает головка. Символы принадлежат конечному алфавиту А.

Пример 1

Алфавит состоит из цифр 0,1,…,9. На ленте написано слово:

2

0

9

3

1

и головка показывает на 9. Тогда в следующий такт времени головка может записать вместо 9 цифру 8 и переместиться влево. После этого она будет показывать на 0.

Перейдем к точным определениям.

Машиной Тьюринга T  =  (A,Q,) называется тройка, состояний из непустых конечных множеств A  =  {a0,a1,…,an}, Q  =  {q0,q1,…,qm} и частичной функции :  Q  A  Q  A  {L,S,R}.

Здесь {L,S,R} – множество, состоящее из трех элементов. Оно одинаково для всех машин Тьюринга и интерпретируется командами перемещения головки: L – влево, R – вправо, S – стоять на месте.

Множество А называется внешним алфавитом, его элементы – буквами. Буквы a0 и a1 для всех машин Тьюринга одинаковы: a0 = 0, a1 = 1. Элементы q0,…,qm называются внутренними состояниями.

Частичная функция  называется программой и записывается или с помощью прямоугольной таблицы, в которой в клетке (qi,qj) записывается тройка (qi,qj)    Q  A  {L, S, R}, или с помощью списка команд вида:

  • qiaj  qkae означающей (qk,ae,S) = (qi,aj),

  • qiaj  qkaeR означающей (qk,ae,R) = (qi,aj),

  • qiaj  qkaeL означающей (qk,ae,L) = (qi,aj).

Эти команды обозначим через T(i,j).

Машиным словом, или конфигурацией, называется слово вида: qkae, где 0    k    m, 0    e    n,  и  – слова (возможно, пустые), составленные из букв алфавита А. Для обозначения слова аа…а, в котором буква а повторяется x раз, пишем: ах.

Машинное слово: qkae интерпретируется как положение, при котором головка указывает на символ ae, машина находится во внутреннем состоянии qk, слева от текущей ячейки находятся символы, составляющие слово , а справа – слово . В примере 1 машинное слово равно: 20qi931 для некоторого i.

Пусть задана машина Тьюринга Т и машинное слово M  =  qiaj, где 0    i   m. Обозначим через MT’ слово, которое получается (за один такт) по правилам:

1) для i  =  0 положим MT’ = M;

2) для i  >  0 выполняем одно из следующих трех преобразований:

  • если T(i,j)  =  qiaj  qkae, то MT’ =  qkae;

  • в случае T(i,j)  =  qiaj qkaeR,

если  не пусто, то MT’ =  qeak, иначе MT ’=  qeaka0;

  • в случае T(i,j)  =  qiaj  qkaeL,

если  = 1as для некоторых 1 и as, то MT’ =  1qkasae,

иначе (т.е. если  пусто) MT’= qka0ae (дополнительная инструкция).

Положим: MT0 =  M, MT(n+1) =  (MT(n))’.

Будем говорить, что машина Т перерабатывает машинное слово М в слово М1, если MT(n)  =  M1 для некоторого n    0. Пишем: М  T M1, если Т перерабатывает М в М1, и при этом не используется дополнительная инструкция (из правил образования слова MT’).

Говорим, что машина Т вычисляет частичную функцию f: Nn  N, если выполнены следующие условия:

  • если (x1,…,xn)  Dom(f), то машина Т останавливается, т.е. перерабатывает слово q101x10…1xn0 в некоторое слово q0, и при этом q0 содержит f(x1,…,xn) вхождений символа 1 (здесь символы x1, … , xn обозначены через x1, ..., xn) ;

  • если (x1,…,xn) не принадлежит Dom(f), то машина, начиная со слова M  = q101x10…1xn0, работает бесконечно, т.е. q0 не входит в MT(n) ни для каких n    0.

Говорим, что машина Т правильно вычисляет частичную функцию f: Nn  N, если выполнены условия:

  • если (x1,…,xn)  Dom(f), то q101x10…1xn0 Tq001f(x1,…,xn)0…0;

  • в противном случае машина, начиная со слова q101x10…1xn0, работает бесконечно.

Частичная функция f называется (правильно) вычислимой, если существует машина Тьюринга, которая (правильно) вычисляет f.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]