Занятие 3. Вычислимые функции

advertisement
Занятие 3. Вычислимые функции
Рассмотрим понятие вычислимой функции. Для дальнейшего рассмотрения нам
понадобится ряд определений. Пусть имеются два множества X и Y. Если некоторым
элементам множества X поставлены в соответствие однозначно определенные элементы
множества Y, то говорят, что задана частичная функция из X в Y.
Совокупность тех элементов множества X, у которых есть соответствующие
элементы в Y, называется областью определения функции, а совокупность тех элементов
Y, которые соответствуют элементам X, называются совокупностью значений функции.
Если область определения функции из X в Y совпадает с множеством X, то функция
называется всюду определенной.
Исходная идея построения точного определения алгоритма состоит в том, что любые
дискретные данные можно закодировать натуральными числами в некоторой системе
счисления, и тогда всякое их преобразование сведется к последовательности
вычислительных операций, а результат обработки также будет представлять собой целое
число.
Пусть имеется класс функций типа y(x1, x2, ..., xn), особенностями которых является
то, что все аргументы функции x1,..., xn целочисленные, и значение функции y также
выражается целым числом. Другими словами, рассматриваются функции, аргументы и
значения которых дискретны. Числовые функции описанного выше класса, значения
которых можно вычислять посредством некоторого (единого для данной функции)
алгоритма, называются вычислимыми.
Элементарные вычислимые функции:
1) S(x) = x+1 - это одноместная (т.е. имеет один аргумент) функция
непосредственного следования;
2) O(x1,x2,…,xn)= Z(x1,x2,...,xn) = 0 - это n-местная функция, тождественного
равенства нулю;
3)
- n-местная функция тождественного повторения значения
одного из своих аргументов.
Перечисленные простейшие функции всюду определены и интуитивно вычислимы.
Над ними определяются операции (в дальнейшем они называются операторами),
обладающие тем свойством, что их применение к функциям, вычислимым в интуитивном
смысле, порождает новые функции, также заведомо вычислимые в интуитивном смысле.
Суперпозиция вычислимых функций
Пусть
задана
функция
и
функции
.
Говорят, что функция получена из этих функций с применением операции
суперпозиции (подстановки), если выполняется следующее равенство:
=
и обозначается
, где S означает операции суперпозиции.
Если мы умеем вычислять функции g, h1, ..., hn, то функция f также может быть
вычислена. Ясно также, что если все функции g, h1, ..., hn всюду определены, то и функция
f также всюду определена. Таким образом, если функции g, f1, ..., fn вычислимы, то будет
вычислимой и функция h.
Пусть задана функция g(x1, ...,xn) и функция h(x1, ..., xn, y, z).
Говорят, что функция f(x1, ..., xn, y) получена из функций g(x1, ...,xn) и h(x1, ..., xn, y, z)
с помощью операции примитивной рекурсии, если выполняются следующие равенства:
f(x1, ..., xn, 0) = g(x1, ..., xn)
f(x1, ..., xn, y+1) = h(x1, ..., xn, y, f(x1, ..., xn,y))
1. Показать порядок вычисления функции Add(x,y) для значений x=1 и y=3.
 Add ( x,0)  I 11 ( x)

 Add ( x, y  1)  S ( I 33 ( x, y, Add ( x, y )))
Add(1,3)=S(Add(1,2))=S(3)=4
Add(1,2)=S(Add(1,1))=S(2)=3
Add(1,1)=S(Add(1,0))=S( I 11 (1))=S(1)=2
2. Показать порядок вычисления функции Mult(x,y) для значений x=2, y=3
Mult ( x,0)  Z ( x)

3
3
Mult ( x, y  1)  Add ( I1 ( x, y, Mult ( x, y)), I 3 ( x, y, Mult ( x, y)))
Mult(2,3)=Add(2,Mult(2,2))=Add(2,4)=6
Mult(2,2)=Add(2,Mult(2,1))=Add(2,2)=4
Mult(2,1)=Add(2,Mult(2,0))=Add(2,0)=2
Mult(2,0)=Z(2)=0
3. Найти представление функции Double(x)=2x с помощью операций суперпозиции
и примитивной рекурсии, пользуясь только базовым набором функций. Вычислить
значение функции при x=3.
Double(x+1)=2*(x+1)=2*x+2=2*x+1+1=Double(x)+1+1=S(S(Double(x)))
 Double (0)  Z ( x)

 Double ( x  1)  S ( S ( Double ( x)))
Double(3)=S(S(Double(2)))=S(S(4))=S(5)=6
Double(2)=S(S(Double(1)))=S(S(2))=S(3)=4
Double(1)=S(S(Double(0)))=S(S(Z(x)))=S(S(0))=S(1)=2
4. Найти представление функции
0, если x  0
sg ( x)  
1, если x  0
используя операции суперпозиции и примитивной рекурсии.
sg (0)  Z ( x)  0

sg ( x  1)  1  S ( Z ( x))
5. Доказать, что приведённая ниже функция Div(x) примитивно-рекурсивна:

0, если x  0
x 1  
 x  1, если x  0
Div (0)  Z ( x)

1
Div ( x  1)  ( x  1)  1  x  I 1( x)
6. Используя операции суперпозиции и примитивной рекурсии, а также функцию
Div, доказать, что функция усечённой разности Sub(x,y) является вычислимой.
0, если x  y
x y 
 x  y, если x  y
Вычислить функцию для x=5, y=3, а также для x=3 и y=5.
Воспользуемся тем свойством, что при уменьшении уменьшаемого и вычитаемого на
одно и то же значение (в нашем случае на 1) разность не меняется. Будем уменьшать оба
операнда, пока один из них не обратится в 0.
Sub( x,0)  x  I 11 ( x)

Sub(0, y )  Z ( y )  0
Sub( x, y  1)  ( I 3 ( x, y, Sub( Div ( x), y )))
1

Sub(5,3)=Sub(Div(5),2)=Sub(4,2)=2
Sub(4,2)=Sub(Div(4),1)=Sub(3,1)=2
Sub(3,1)=Sub(Div(3),0)=Sub(2,0)=2
При рекурсивном возврате никаких действий выполняться не будет, так как они
были выполнены на рекурсивном спуске, то есть значение 2 будет передано на все уровни
рекурсии.
Sub(3,5)=Sub(Div(3),4)=Sub(2,4)=0
Sub(2,4)=Sub(Div(2),3)=Sub(1,3)=0
Sub(1,3)=Sub(Div(1),2)=Sub(0,2)=0
Операция минимизации. Пусть имеется n-местная частичная функция g(x1,…xn-1,y).
Фиксируем некоторый набор (x1,…xn) и рассмотрим уравнение относительно y:
g(x1,…xn,y)=xn.
Будем решать это уравнение, последовательно вычисляя g(x1,…xn-1,0), g(x1,…xn-1,1),
g(x1,…xn-1,2)…Наименьшее y, для которого окажется g(x1,…xn,y)=xn обозначим через (
g(x1,…xn,y)=xn). Будем говорит, что функция f получена из функции g путем операции
минимизации.
7. Записать, используя операцию минимизации, следующую функцию:
Delen(x,y)=x/y и показать на конкретном примере правильность её работы, а также то, что
данная функция не всюду определена. При записи функции допускается использование
выведенных ранее примитивно-рекурсивных функций.
Delen(x,y)=x/y=z(yz=x)= z[Mul( I 23 (x,y,z), I 33 (x,y,z))= I 13 (x,y,z)]
Пусть x=8, y=2
Будем придавать переменной z последовательно значения 0,1,2,3…
z=0? 2*0=08
z=1? 2*1=28
z=2? 2*2=48
z=3? 2*3=68
z=4? 2*4=8
Возьмём x=5, y=2
z=0? 2*0=05
z=1? 2*1=25
z=2? 2*2=45
z=3? 2*3=65
z=4? 2*4=85 и т.д.
Процесс будет продолжаться бесконечно, значит Delen(5,2) не определена.
Download