Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Оператор примитивной рекурсии




Пусть заданы частичные функции g: Nn ® N и h: Nn+2 ® N. Оператором примитивной рекурсии называется оператор, сопоставляющий паре (g, h) такую частичную функцию f: Nn+1 ® N, что для всех x1,…,xn,у Î N имеют место равенства:

f(x1,…,xn,0) = g(x1,…,xn);

f(x1,…,xn,y+1) = h(x1,…,xn,y, f(x1,…,xn,y)).

Поскольку область определения и значения дополняются отмеченной точкой, то равенство частичных функций означает, что для каждого значения аргумента либо левая, либо правая части равенства определены и равны между собой, либо обе его части не определены. Значение оператора примитивной рекурсии обозначается: f = R(g,h). Если g и h определены всюду, то f = R(g,h) определена всюду.

Если n = 0, то для любых числа g Î N и частичной функции h: N2 ® N частичная функция f = R(g,h) определяется с помощью равенств:

f(0) = g, f(y + 1) = h(y,f(y)).

 

Функция f называется примитивно рекурсивной, если ее можно получить из простейших функций s, 0 и Inm с помощью операторов композиции и примитивной рекурсии (таким образом, примитивно рекурсивная функция всюду определена.)

Пример 2

Функция o: N ® N, принимающая постоянные значения o(x)=0, будет примитивно рекурсивной в силу

o(0) = 0;

o(y+1)= I22(y, o(y)).

Функция оn: Nn ® N, все значения которой равны нулю, примитивно рекурсивна, ибо она является композицией о ° In1 простейших функций In1: Nn ® N и о: N ® N. Рассмотрим при k ³ 1 функцию ck: Nn ® N, все значения которой равны k. Функция ck равна композиции функций оn: Nn ® N и k функций N ® N ®…® N, каждая из которых равна s, ck = sk °on. Стало быть, ck примитивно рекурсивна.

Пример 3

Функция f: N2 ® N, заданная как f(x,y) = x + y, удовлетворяет соотношениям:

f(x,0) = x;

f(x,y + 1) = (x + y) +1 = f(x,y) + 1 = s(f(x,y)).

Положим: g(x) = I11(x) = x, h(x,y,z) = s(z). Так как f(x,0) = g(x) и
f(x,y + 1) = h(x,y,f(x,y)), то f = R(g,h) = R(I11,s ° I33). Значит, f – примитивно рекурсивна.

Предложение 1 Для любых примитивно рекурсивных функций f(x1, …, xn) и g(x1, …, xn) их сумма примитивно рекурсивна.

Доказательство. Вытекает из равенства

f(x1, …, xn)+g(x1, …, xn)= S(+,f,g) (x1, …, xn).

Пример 4

Функция f: N2 ® N, заданная как f(x,y) = x×y, удовлетворяет соотношениям:

f(x,0) = 0;

f(x,y + 1) = x (y + 1) = f(x,y) + x.

Положим: g(x) = o(x), h(x,y,z) = x+z. Так как f(x,0) = o(x) и
f(x,y + 1) = h(x,y,f(x,y)), то f = R(g,h) = R(o, S(+, I31,, I33). Значит, f – примитивно рекурсивна.

Предложение 2 Для любых примитивно рекурсивных функций f(x1, …, xn) и g(x1, …, xn) их произведение примитивно рекурсивно.

Пример 5

Рассмотрим функцию: f(x,y) = xy. Поскольку f(x,0) = 1, и
f(x,y + 1) = x×f(x,y) = g(x,y,f(x,y)), где g(x,y,z) = x×z – примитивно рекурсивная функция (как композиция операции умножения и функции (I31, I33): N3 ® N2), то f(x,y) примитивно рекурсивна.

Пример 6

Пусть d(x) = max(0,x – 1). Имеют место равенства d(0) = 0 и
d(y + 1) = y = g(y,d(y)), где g(y,z) = I21(y,z) = y. Следовательно, d(x) – примитивно рекурсивна.

Пример 7

Пусть r(x,y) = max(0,x – y). Верны соотношения r(x,0) = x и
r(x,y + 1) = d(r(x,y)) = g(x,y,r(x,y)), где g(x,y,z) = d(z) – функция из примера 5. Значит, r(x,y) – примитивно рекурсивна.

Пример 6 показывает, что функция f(x,y) =ôx-yô= r(x,y) + r(y,x) примитивно рекурсивна, как композиция функций x1 + x2 и пары функций (r(x,y),r(y,x)): N2 ® N2 (примитивная рекурсивность функции r(y,x) получается из разложимости r(y,x) = S3(r, I22, I21)).

Оператор минимизации

Пусть g: Nn+1 ® N – частичная функция. Будем говорить, что частичная функция f: Nn ® N получается из неё с помощью оператора минимизации,и писать:

f(x1,…,xn) = m y [g(x1,…,xn,y) = 0],

если выполнено следующее условие: f(x1,…,xn) определено и равно y Î N тогда и только тогда, когда значение g(x1,…,xn,0),…,g(x1,…,xn,y -1) определены и не равны 0, а g(x1,…,xn,y) = 0.

Частичная функция f: Nn ® N называется частично рекурсивной, если она может быть получена из простейших функций 0, s, Inm за конечное число применений операторов композиции, примитивной рекурсии и минимизации.

Пример 8

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

f(x) = m 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 частично рекурсивна, как сумма частично рекурсивных функций.

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

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

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

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

Пример 1

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

             

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

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

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

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

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

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

· qiaj ® qkae означающей (qk,ae,S) = p(qi,aj),

· qiaj ® qkaeR означающей (qk,ae,R) = p(qi,aj),

· qiaj ® qkaeL означающей (qk,ae,L) = p(qi,aj).

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

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

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

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

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

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

· если T(i,j) = qiaj ® qkae, то MT’ = aqkaeb;

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

если b не пусто, то MT’ = aqeakb, иначе MT ’= aqeaka0;

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

если a = a1as для некоторых a1 и as, то MT’ = a1qkasaeb,

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

Положим: 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 в некоторое слово aq0b, и при этом aq0b содержит 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.

Пример 2

Пусть машина Тьюринга T = {A, Q, p}, A = {0,1}, Q = {q0,q1,q2} задана с помощью таблицы:

  q0 q1 q2
    q20R q01S
      q21R

Рассмотрим слово: M = q1011…10. На первом шаге выполняется команда q10®q20R. Получаем: MT’ = 0q211…10. Затем, до тех пор, пока слово не превратится в слово 011…1q20, будет выполняться команда q21 ® q21R. После этого будет выполнена команда q20 ® q01, и машина остановится, ибо q0 соответствует состоянию остановки. Входное слово, состоящее из x единиц, означает, что аргументом вычисляемой функции является число x. Поскольку на выходе получается x + 1 подряд идущих единиц, то машина вычисляет функцию: s(x) = x + 1.

Пример 3

Вычисление функции: s(x) = x+1 в примере 2 не является правильным. Построим машину Тьюринга для правильного вычисления:

  q0 q1 q2 q3 q4
    q20R q31R q40L q00L
      q21R q41L q41L

Упражнение

Построить машину Тьюринга, правильно вычисляющую функцию: o(x) = 0.

Можно построить машины Тьюринга для правильного вычисления функций:

Imn(x1,…,xn), 1 £ m £ n.

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

Теорема 1. Частичная функция правильно вычислима тогда и только тогда, когда она частично рекурсивна.

Тезис Чёрча и алгоритмически неразрешимые проблемы

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

Применим это для доказательства алгоритмической неразрешимости проблемы остановки машины Тьюринга, которая заключается в нахождении алгоритма, определяющего по машине Тьюринга и начальным данным, остановится ли машина через конечное число шагов. Так как машина Тьюринга задается с помощью конечного набора символов и слов, то число машин Тьюринга счетно и может быть выписано в последовательность: T0, T1, ….

Теорема (о проблеме остановки). Пусть T0,T1, T2,… последовательность, перечисляющая все машины Тьюринга, h(n,k) – функция, принимающая значение 1, если машина Tn останавливается, начиная работу с машинного слова q101k0, и принимающая значения h(n,k) = 0 в других случаях. Тогда функция h: N2 ® N не является частично рекурсивной. Иными словами, нет алгоритма, определяющего, остановится ли машина Тьюринга, если на вход ей подать число k.

Доказательство. От противного. Пусть функция h(n,k) частично рекурсивна. Тогда частичная функция:

f(n) = My[h(n,n) + y = 0]

тоже частично рекурсивна. Существует номер m такой, что f правильно вычисляется с помощью машины Tm. Тогда f(m) = 0, если и только если h(m,m) = 0. Согласно определению функции h равенство h(m,m) = 0 имеет место тогда и только тогда, когда машина Tm не останавливается, начиная со слова q101m0. Но f правильно вычисляется с момощью Tm, значит, Tm не остановится, начиная с m, если и только если f(m) не определено. Получаем противоречие: f(m) = 0, если и только если f(m) не определено, Следовательно, h – не частично рекурсивна.

Вычислительная сложность

Возможны различные подходы к оценке качества алгоритма, например, оценивается число команд (инструкции), из которых он состоит, число операций, объем используемой памяти. Будем считать, что алгоритм отождествляется с программой, работающей на идеальной ЭВМ, состоящей из процессора, памяти, входной и выходной лент. Ленты и память состоят из ячеек, каждая из которых может хранить двоичную запись одного числа.

Имеется два подхода к оценке времени и памяти, необходимых для выполнения программы: при равномерном весовом критерии считается, что каждая команда программы затрагивает один такт времени, и каждое число занимает одну ячейку памяти. Логарифмический весовой критерий учитывает ограниченность размера реальной ячейки памяти и основывается на предложении, что объем памяти для хранения числа n равен длине его двоичного представления l(n) = [log2n] + 1, а время исполнения команды пропорционально длине его операндов.

Временная сложность программы – это функция fmax(n), равная наибольшей из сумм времен, затраченных на каждую выполненную команду при обработке входных данных, состоящих из n чисел. Таким образом, для каждой n-ки (x1,…,xn) Î D из области допустимых значений начальных данных (например, области определения частично рекурсивной функции) надо вычислить время t(x1,…,xn), затраченное на выполнение программы. Тогда временная сложность будет равна max{t(x1,…,xn):(x1,…,xn) Î D}. Временная сложность в среднем при равномерном критерии равна: , где ôDô – число элементов области D Í Nn, а x = (x1,…,xn) – элементы из D. Временная сложность в лучшем случае равна: fmin(n) = min{t(x):x Î D}. Такие же понятия определяются для объема памяти. Вместо времени t(x1,…,xn) рассматривается количество u(x1,…,xn) ячеек памяти, к которым обращалась программа, имеющая на выходе x1,…,xn.

Для описания асимптотического поведения сложностных функций используется следующий формализм: Говорят, что функция f(n) не больше по порядку, чем g(n), и пишут: f(n) = O(g(n)), если существует такая константа C > 0, что почти для всех n (т.е. для всех, кроме конечного множества значений n) справедливо f(n) £ Cg(n). Функции одного и того же порядка, если f(n) = O(g(n)) и g(n) = O(f(n)).





Поделиться с друзьями:


Дата добавления: 2016-11-12; Мы поможем в написании ваших работ!; просмотров: 727 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Самообман может довести до саморазрушения. © Неизвестно
==> читать все изречения...

3093 - | 2896 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.