Занятие 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(yz=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=08 z=1? 2*1=28 z=2? 2*2=48 z=3? 2*3=68 z=4? 2*4=8 Возьмём x=5, y=2 z=0? 2*0=05 z=1? 2*1=25 z=2? 2*2=45 z=3? 2*3=65 z=4? 2*4=85 и т.д. Процесс будет продолжаться бесконечно, значит Delen(5,2) не определена.