Частично-рекурсивные функции

Большинство арифметических и логических функций являются примитивно-рекурсивными. Однако класс примитивно-рекурсивных функций не охватывает всех вычислимых в интуитивном смысле функций. Для построения остальных функций используется так называемый оператор минимизации (m -оператор, оператор наименьшего корня).

Оператор минимизацииопределяет новую арифметическую функцию Частично-рекурсивные функции - student2.ru от n переменных с помощью ранее построенной арифметической функции Частично-рекурсивные функции - student2.ru от n+1 переменных. Пусть существует некоторый механизм вычисления функции Частично-рекурсивные функции - student2.ru , причем значение функции Частично-рекурсивные функции - student2.ru неопределенно, если этот механизм работает бесконечно, не выдавая никакого определенного значения.

Зафиксируем набор значений аргументов Частично-рекурсивные функции - student2.ru и рассмотрим уравнение относительно y: Частично-рекурсивные функции - student2.ru ; чтобы найти решение этого уравнения, натуральное Частично-рекурсивные функции - student2.ru , будем вычислять последовательность значений:

Частично-рекурсивные функции - student2.ru для Частично-рекурсивные функции - student2.ru ..

Наименьшее целое неотрицательное значение Частично-рекурсивные функции - student2.ru , удовлетворяющее этому уравнению: Частично-рекурсивные функции - student2.ru обозначим:

Частично-рекурсивные функции - student2.ru .

Говорят, что функция Частично-рекурсивные функции - student2.ru получена из функции Частично-рекурсивные функции - student2.ru операцией минимизации, если:

Частично-рекурсивные функции - student2.ru

Оператор минимизации работает бесконечно в одном из следующих случаев:

1) значение Частично-рекурсивные функции - student2.ru не определено;

2) значение Частично-рекурсивные функции - student2.ru для Частично-рекурсивные функции - student2.ru определены, но не равны нулю, а значение Частично-рекурсивные функции - student2.ru – не определено;

3) значение Частично-рекурсивные функции - student2.ru определены для всех Частично-рекурсивные функции - student2.ru , но не равны нулю.

Пример 13. Процесс вычисления функции с помощью оператора минимизации:

Частично-рекурсивные функции - student2.ru

Частично-рекурсивные функции - student2.ru

Частично-рекурсивные функции - student2.ru

Частично-рекурсивные функции - student2.ru

Частично-рекурсивные функции - student2.ru

Частично-рекурсивные функции - student2.ru

Пример 14. Оператор минимизации является удобным средством получения обратных функций: вычитание, деление, извлечение корня и т.д.:

Частично-рекурсивные функции - student2.ru .

Частично-рекурсивные функции - student2.ru .

Частично-рекурсивные функции - student2.ru .

Частично-рекурсивные функции - student2.ru .

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

Частично-рекурсивная функция является не всюду определенной, причем там, где она не определена, процесс ее вычисления продолжается бесконечно.

Общерекурсивная функция–всюду определенная частично-рекурсивная функция.

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

Класс частично-рекурсивных функций (ЧРФ) шире чем класс общерекурсивных функций (ОРФ), который в свою очередь шире классса примитивно-рекурсивных функций (ПРФ) (см. рис. 1).

Частично-рекурсивные функции - student2.ru

Рисунок 1 – Соотношение между классами частично-рекурсивных, общерекурсивных и примитивно-рекурсивных функций

Задание на лабораторную работу

1. Разработать алгоритм вычисления Частично-рекурсивные функции - student2.ru в виде рекурсивной функции.

2. Проверить модель алгоритма на множестве тестовых примеров.

3. Определить к какому классу рекурсивных функций принадлежит Частично-рекурсивные функции - student2.ru : примитивно-рекурсивна, частично-рекурсивна или общерекурсивна.

Варианты заданий

1. Сумма всех четных делителей числа Частично-рекурсивные функции - student2.ru .

2. Количество всех нечетных делителей числа Частично-рекурсивные функции - student2.ru .

3. Количество нулей в двоичной записи Частично-рекурсивные функции - student2.ru .

4. Сумма цифр в двоичной записи Частично-рекурсивные функции - student2.ru .

5. Количество взаимно-простых с Частично-рекурсивные функции - student2.ru чисел, Частично-рекурсивные функции - student2.ru

6. Максимальная цифра в 8-ричной записи числа Частично-рекурсивные функции - student2.ru .

7. Минимальная цифра в 8-ричной записи числа Частично-рекурсивные функции - student2.ru .

8. Количество четных цифр в 8-ричной записи числа Частично-рекурсивные функции - student2.ru .

9. Количество нечетных цифр в 8-ричной записи числа Частично-рекурсивные функции - student2.ru .

10. Сумма простых делителей числа Частично-рекурсивные функции - student2.ru .

11. Количество простых делителей числа Частично-рекурсивные функции - student2.ru .

12. Количество простых чисел, Частично-рекурсивные функции - student2.ru

13. Количество чисел, являющихся полными квадратами, Частично-рекурсивные функции - student2.ru

14. Сумма чисел, являющихся степенью двойки, Частично-рекурсивные функции - student2.ru

15. Максимальная цифра в 16-ричной записи числа Частично-рекурсивные функции - student2.ru .

16. Минимальная цифра в 16-ричной записи числа Частично-рекурсивные функции - student2.ru .

17. Ближайшее к Частично-рекурсивные функции - student2.ru простое число.

18. Произведение делителей числа Частично-рекурсивные функции - student2.ru .

19. Произведение простых делителей числа Частично-рекурсивные функции - student2.ru .

20. Произведение взаимно-простых с Частично-рекурсивные функции - student2.ru чисел, Частично-рекурсивные функции - student2.ru

21. Наименьшее общее кратное двух чисел, Частично-рекурсивные функции - student2.ru , Частично-рекурсивные функции - student2.ru

22. Наибольший общий делитель двух чисел, Частично-рекурсивные функции - student2.ru

23. Функция, отличная от нуля в конечном числе точек.

24. Номер наибольшего простого делителя числа Частично-рекурсивные функции - student2.ru

25. Функция, вычисляющая целую часть квадратного корня от аргумента, Частично-рекурсивные функции - student2.ru .

Контрольные вопросы

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

2. Определить операторы суперпозиции и примитивной рекурсии.

3. Перечислить простейшие функции теории рекурсивных функций.

4. Что такое примитивно-рекурсивные функции?

5. Показать примитивную рекурсивность известных арифметических функций.

6. Показать примитивную рекурсивность арифметизованных логических функции. Примитивная рекурсивность отношений и предикатов.

7. Определить оператор минимизации, в каких случаях он работает бесконечно?

8. Что такое частично-рекурсивная функция и общерекурсивная?

9. Сформулировать тезис Черча.

10. Определите соотношение между примитивно, частично и общерекурсивными функциями.

Лабораторная работа № 2

МАШИНЫ ТЬЮРИНГА

Цель работы: получить практические навыки в записи алгоритмов с использованием машин Тьюринга.

Теоретическая справка

Символьные конструкции

Алфавитомбудем называть любое конечное множество попарно различных знаков, называемых буквами (символами) этого алфавита. Алфавит будем обозначать заглавными буквами, например:

Частично-рекурсивные функции - student2.ru

Символом l будем обозначать пустой символ.

Словомв данном алфавите называется любая конечная (в том числе и пустая) последовательность букв этого алфавита. Слова будем обозначать малыми греческими буквами.

Например: a = алгоритм – слово в алфавите А; b = 1010100 – слово в алфавите В; Частично-рекурсивные функции - student2.ru – слово в алфавите С.

Пустое слово будем обозначать L.

Длинаслова a (обозначается Частично-рекурсивные функции - student2.ru ) – это количество букв в слове.

Определим некоторые отношения и операции над словами.

Равенство словв алфавите А определяется индуктивно:

а) пустые слова равны

б) если слово a равно слову b, то a b =bb , где b –буква в алфавите А.

Если слово a является частью слова b, то говорят, что имеет место вхождениеслова a в слово b (слово a называется подсловом слова b). Это можно записать следующим образом: Частично-рекурсивные функции - student2.ru , где Частично-рекурсивные функции - student2.ru – слова в алфавите А.

Слово a называется началом слова b, если Частично-рекурсивные функции - student2.ru ; концомслова b, если Частично-рекурсивные функции - student2.ru . Слово длины n, составленное из буквы а, повторенной n раз, будем обозначать Частично-рекурсивные функции - student2.ru , например xyxxxyyyy = Частично-рекурсивные функции - student2.ru .

Операция (и результат) приписывания слов a и b друг к другу называется конкатенацией(обозначается a||b). Например, если Частично-рекурсивные функции - student2.ru .

Определение машины Тьюринга (МТ)

Под машиной Тьюринга понимается некоторая гипотетическая (абстрактная) машина, состоящая из следующих частей:

1) бесконечной в обе стороны ленты, разбитой на ячейки, в каждой из ячеек может быть записан только один символ из алфавита Частично-рекурсивные функции - student2.ru , а также пустой символ l;

2) рабочей головки или управляющего устройства (УУ), которое в каждый момент времени может находиться в одном из состояний множества Частично-рекурсивные функции - student2.ru . В каждом из состояний головка размещается напротив ячейки и может считывать (обозревать) или записывать в нее букву из алфавита А.

Частично-рекурсивные функции - student2.ru

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

Функционирование МТ состоит из последовательности элементарных шагов (тактов). На каждом шаге выполняются следующие действия:

1) управляющее устройство считывает (обозревает) символ Частично-рекурсивные функции - student2.ru ;

2) в зависимости от своего состояния Частично-рекурсивные функции - student2.ru и обозреваемого символа Частично-рекурсивные функции - student2.ru

УУ вырабатывает символ Частично-рекурсивные функции - student2.ru и записывает его в обозреваемую ячейку (возможно Частично-рекурсивные функции - student2.ru );

3) головка перемещается на одну ячейку вправо (R), влево (L) или остается на месте (E);

4) головка переходит в другое внутреннее состояние Частично-рекурсивные функции - student2.ru (возможно Частично-рекурсивные функции - student2.ru ).

Состояние Частично-рекурсивные функции - student2.ru называется начальным, Частично-рекурсивные функции - student2.ru – заключительным. При переходе в заключительное состояние машина останавливается.

Полное состояние МТ называется конфигурацией. Это распределение букв по ячейкам ленты, состояние рабочей головки и обозреваемая ячейка. Конфигурация в такте t записывается в виде: Частично-рекурсивные функции - student2.ru , где Частично-рекурсивные функции - student2.ru – подслово слева от обозреваемой ячейки, Частично-рекурсивные функции - student2.ru – буква в обозреваемой ячейке, Частично-рекурсивные функции - student2.ru – подслово справа. Начальная конфигурация Частично-рекурсивные функции - student2.ru и конечная Частично-рекурсивные функции - student2.ru называются стандартными.

Для описания работы МТ существует 3 способа:

1) система команд вида Частично-рекурсивные функции - student2.ru

2) функциональная таблица;

3) граф (диаграмма) переходов.

С помощью МТ можно описывать выполнение арифметических операций над числами. При этом числа представляются на ленте, как слова в алфавите, состоящем из цифр какой-нибудь системы счисления, и разделяющихся специальным знаком, не входящем данный алфавит, например, Частично-рекурсивные функции - student2.ru .

Наиболее употребительной является унарная система, состоящая из одного символа – Частично-рекурсивные функции - student2.ru . Число Х в унарной системе счисления на ленте записывается словом Частично-рекурсивные функции - student2.ru , ( сокращенно Частично-рекурсивные функции - student2.ru ) в алфавите А={ Частично-рекурсивные функции - student2.ru }.

Пример 1. Операция сложения двух чисел в унарном коде.

Начальная конфигурация: Частично-рекурсивные функции - student2.ru . Конечная конфигурация: Частично-рекурсивные функции - student2.ru , т.е. сложение фактически сводится к приписыванию числа b к числу a . Для этого первый символ Частично-рекурсивные функции - student2.ru стирается, а * заменяется на Частично-рекурсивные функции - student2.ru .

Система команд при Частично-рекурсивные функции - student2.ru и Частично-рекурсивные функции - student2.ru .

Частично-рекурсивные функции - student2.ru

Комментарий к системе команд

1. Частично-рекурсивные функции - student2.ru – стирание первого символа Частично-рекурсивные функции - student2.ru .

Если в обозреваемой ячейке записан символ Частично-рекурсивные функции - student2.ru Частично-рекурсивные функции - student2.ru и МТ находится в состоянии Частично-рекурсивные функции - student2.ru , тогда состояние изменяется на Частично-рекурсивные функции - student2.ru , обозреваемый символ заменяется на пустой, УУ сдвигается вправо.

2. Частично-рекурсивные функции - student2.ru – стирание символа Частично-рекурсивные функции - student2.ru , первый аргумент равняется 0.

Если в обозреваемой ячейке записан символ Частично-рекурсивные функции - student2.ru и МТ в состоянии Частично-рекурсивные функции - student2.ru (первый аргумент равняется 0), тогда состояние изменяется на Частично-рекурсивные функции - student2.ru , обозреваемый символ заменяется на пустой, УУ сдвигается вправо.

3. Частично-рекурсивные функции - student2.ru – сдвиг вправо.

Если в обозреваемой ячейке записан символ, записан символ Частично-рекурсивные функции - student2.ru и МТ находится в состоянии Частично-рекурсивные функции - student2.ru , тогда состояние и обозреваемый символ не изменяются, УУ сдвигается вправо.

4. Частично-рекурсивные функции - student2.ru – стирание символа Частично-рекурсивные функции - student2.ru .

Если в обозреваемой ячейке записан символ Частично-рекурсивные функции - student2.ru и МТ находится в состоянии Частично-рекурсивные функции - student2.ru , тогда состояние изменяется на Частично-рекурсивные функции - student2.ru , и обозреваемый символ заменяется на Частично-рекурсивные функции - student2.ru , УУ сдвигается влево (конец первого аргумента).

5. Частично-рекурсивные функции - student2.ru – сдвиг влево.

Если в обозреваемой ячейке записан символ Частично-рекурсивные функции - student2.ru и МТ находится в состоянии Частично-рекурсивные функции - student2.ru , тогда состояние и обозреваемый символ не изменяются, УУ сдвигается влево.

6. Частично-рекурсивные функции - student2.ru – конец алгоритма, останов.

Если в обозреваемой ячейке записан символ Частично-рекурсивные функции - student2.ru и МТ находится в состоянии Частично-рекурсивные функции - student2.ru , тогда состояние изменяется на Частично-рекурсивные функции - student2.ru , обозреваемый символ не изменяется, УУ сдвигается вправо (конец алгоритма, УУ расположено в начале рабочей зоны ).

Описание МТ в виде функциональной таблицы:

Частично-рекурсивные функции - student2.ru | * l
Частично-рекурсивные функции - student2.ru Частично-рекурсивные функции - student2.ru Частично-рекурсивные функции - student2.ru -
Частично-рекурсивные функции - student2.ru Частично-рекурсивные функции - student2.ru Частично-рекурсивные функции - student2.ru -
Частично-рекурсивные функции - student2.ru Частично-рекурсивные функции - student2.ru - Частично-рекурсивные функции - student2.ru

Описание МТ в виде диаграммы переходов

Частично-рекурсивные функции - student2.ru

Вычисление на МТ словарной функции Частично-рекурсивные функции - student2.ru будем понимать следующим образом. Пусть в начальной конфигурации на ленте записано слово Частично-рекурсивные функции - student2.ru . Если значение Частично-рекурсивные функции - student2.ru определено, то конечного числа шагов (тактов) машина должна перейти в заключительную конфигурацию, в которой на ленте записано слово Частично-рекурсивные функции - student2.ru . В противном случае МТ должна работать бесконечно.

Числовая функция Частично-рекурсивные функции - student2.ru правильно вычислима (или просто вычислима) по Тьюрингу, если существует МТ, которая переводит конфигурацию Частично-рекурсивные функции - student2.ru в конфигурацию Частично-рекурсивные функции - student2.ru , когда Частично-рекурсивные функции - student2.ru =y , или работает бесконечно, когда Частично-рекурсивные функции - student2.ru не определена.

Задание на лабораторную работу

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

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

Варианты заданий

1. Реализовать функцию арифметическое вычитание Частично-рекурсивные функции - student2.ru в унарном коде.

2. Реализовать функцию выбор максимального из двух чисел Частично-рекурсивные функции - student2.ru над числами в унарном коде.

3. Реализовать функцию Частично-рекурсивные функции - student2.ru над числами в унарном коде.

4. Реализовать функцию Частично-рекурсивные функции - student2.ru над числами в унарном коде.

5. Реализовать функцию Частично-рекурсивные функции - student2.ru над числами в унарном коде.

6. Реализовать функцию Частично-рекурсивные функции - student2.ru над числами в унарном коде.

7. Реализовать функцию выбор аргумента Частично-рекурсивные функции - student2.ru над числами в унарном коде.

8. Реализовать вычисление предиката X>Y в унарном коде с сохранением (восстановлением) исходных данных.

9. Реализовать вычисление предиката X=Y в унарном коде с сохранением (восстановлением) исходных данных.

10. Реализовать вычисление предиката “x - четное число” в двоичном коде.

11. Реализовать алгоритм в алфавите Частично-рекурсивные функции - student2.ru , меняющий местами первую и последнюю буквы слова.

12. Реализовать алгоритм над алфавитом Частично-рекурсивные функции - student2.ru , меняющий местами первый ноль и последнюю единицу.

13. Реализовать операцию копирование в алфавите Частично-рекурсивные функции - student2.ru , то есть получить из слова Частично-рекурсивные функции - student2.ru слово Частично-рекурсивные функции - student2.ru .

14. Реализовать алгоритм над алфавитом Частично-рекурсивные функции - student2.ru , который выдает единицу, если в исходном слове только парные нули и ноль в противном случае.

15. Реализовать алгоритм в алфавите Частично-рекурсивные функции - student2.ru , который переставляет буквы в слове Частично-рекурсивные функции - student2.ru так, чтобы сначала шли все нули, потом – единицы.

16. Реализовать алгоритм, конструирующий в алфавите Частично-рекурсивные функции - student2.ru слова вида Частично-рекурсивные функции - student2.ru , где Частично-рекурсивные функции - student2.ru - произвольное натуральное число.

17. Реализовать алгоритм, реализующий функцию циклический сдвиг двоичного числа на одну ячейку.

18. Реализовать алгоритм в алфавите Частично-рекурсивные функции - student2.ru , анализирующий последовательность цифр в слове и выдающий «+», если цифры образуют неубывающую последовательность, и «–» в противном случае.

19. Реализовать выделение подстроки, заключенной между двумя символами Частично-рекурсивные функции - student2.ru (первая пара) в алфавите Частично-рекурсивные функции - student2.ru . Если последовательность Частично-рекурсивные функции - student2.ru отсутствует на ленте, стереть все.

20. В слове Частично-рекурсивные функции - student2.ru в алфавите Частично-рекурсивные функции - student2.ru стереть все, кроме Частично-рекурсивные функции - student2.ru . Если такой последовательности нет, все стереть.

21. Реализовать алгоритм над алфавитом Частично-рекурсивные функции - student2.ru , переставляющий буквы в обратном порядке.

22. Реализовать предиката «в слове a в алфавите Частично-рекурсивные функции - student2.ru есть пара букв ‘yy’ » .

23. Реализовать алгоритм в алфавите Частично-рекурсивные функции - student2.ru , производящий в слове a алфавита замену всех вхождений буквы а на букву б.

24. Реализовать алгоритм в алфавите Частично-рекурсивные функции - student2.ru для вычисления логической функции Частично-рекурсивные функции - student2.ru , где x,y,z принимают значение 0 или 1.

25. Реализовать алгоритм в алфавите Частично-рекурсивные функции - student2.ru для вычисления логической функции Частично-рекурсивные функции - student2.ru , где x,y,z принимают значение 0 или 1.

Контрольные вопросы

11. Дать определение машины Тьюринга и ее составляющим.

12. Перечислить и определить способы описания МТ.

13. Какие операции выполняются в каждом такте работы МТ?

14. Дать определение конфигурации МТ.

15. Какие начальные и конечные конфигурации называют стандартными и как они обозначаются?

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

17. Какие способы композиции МТ существуют, как они применяются и обозначаются?

18. Формулировка тезиса Тьюринга; можно ли его доказать строго?

Лабораторная работа № 3

КОМПОЗИЦИЯ МАШИН ТЬЮРИНГА

Цель работы: получить практические навыки в записи алгоритмов с использованием композиции машин Тьюринга.

Теоретическая справка

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

Опишем 4 основных способа композиции МТ:

- последовательная композиция ( суперпозиция );

- параллельная композиция;

- разветвление

- цикл

Наши рекомендации