
82. Дядя(X, y) род(z, y) брат(X, z).
Добавим в множество предложений отрицание проверяемого утверждения
дядя(cергей, Y)
и будем применять к предложениям множества правило резолюции.
род(иван, Z)
|
X=сергей (82) R (83, 84) X=сергей, Y=Z, Z=W (80) R (86, 4) X=иван, Y=сергей (76) R (88, 38) W=иван (87) R (89, 90) X=иван, Y=ольга (76) R (92, 37) Z=ольга (91) R (93, 94) Z=ольга (87) R (95, 96) X=ольга, Y=павел (77) R (98, 68) Y=павел (97) R (99, 100) |
Таким образом, предложение дядя(cергей, Y) выводимо из заданного множества предложений при Y=павел.
4. Формальные определения алгоритма
Первый вид формальной модели алгоритма основан на представлении об алгоритме, как о программе для некоторого детерминированного устройства. Одним из таких устройств является одноленточная детерминированная машина Тьюринга (ДМТ), которая представляет собой логическое устройство, состоящее из:
неограниченной в обе стороны ленты, разделенной на одинаковые пронумерованные ячейки;
читающей/пишущей головки;
управляющего устройства с конечным числом состояний.
Программу
для ДМТ определяют следующие компоненты:
– конечное множество символов, записываемых на ленте,
– множество входных символов,
– выделенный пустой символ;
Q – конечное множество состояний, в котором выделено начальное состояние
и два конечных –
;
функция переходов
.
Т.е.
.
Задание 1. Построить ДМТ-программу, которая копирует на ленте заданное натуральное число.
Решение. Как задача распознавания эта задача звучит следующим образом: существует ли копия заданного натурального числа.
Для
представления натурального числа будем
использовать символ 1, при такой схеме
кодирования число n
записывается в виде последовательности
из n
единиц. Для разделения исходного числа
и копии используем символ *, в качестве
вспомогательного символа выберем 0.
Таким образом,
,
.
Отрицательный ответ в данной задаче при такой схеме кодирования будет только в случае, когда лента пуста или в записи исходного числа присутствуют символы, отличные от 1.
Копирование числа n будем выполнять за n проходов с возвратом. На каждом проходе заменим первую нескопированную единицу на вспомогательный символ 0, затем, двигаясь вправо, дойдём до конца записи, повторяя все символы, стоящие перед пустым, и запишем 1 в конец записи. Во время первого прохода перед записью 1 нужно вставить разделительный символ *. Затем будем двигаться влево, также повторяя символы, до тех пор, пока не достигнем 0, после чего действия повторяются. Когда все единицы будут скопированы (после символа 0 стоит *), нужно восстановить исходное число, заменив все 0 на 1, двигаясь влево.
Построим
вначале ориентированный граф,
соответствующий функции переходов,
которая реализует последовательность
действий, описанных выше. Затем выпишем
множество состояний и табличное задание
функции переходов. Вершинами графа
будут являться состояния управляющего
устройства, дуги графа означают переход
из одного состояния в другое, причём,
над каждой дугой будем писать символ(ы),
по которому выполняется переход, а после
знака
– замещающий символ(ы) и направление
движения головки.
Следовательно,
.
Функцию
переходов представим в виде таблицы,
содержащей значения
.–
q |
s | |||
0 |
1 |
* |
b | |
q0 |
(qN, b, 1) |
(q1, 0, 1) |
(qN, b, 1) |
(qN, b, 1) |
q1 |
(qN, b, 1) |
(q1, 1, 1) |
(qN, b, 1) |
(q2, *, 1) |
q2 |
– |
– |
– |
(q3, 1, -1) |
q3 |
(q4, 0, 1) |
(q3, 1, -1) |
(q3, *, -1) |
– |
q4 |
– |
(q5, 0, 1) |
(q6, *, -1) |
– |
q5 |
– |
(q5, 1, 1) |
(q5, *, 1) |
(q3, 1, -1) |
q6 |
(q6, 1, -1) |
– |
– |
(qY, b, 1) |
Второй подход основан на понятии вычисления и числовой функции, основная теоретическая модель этого вида – рекурсивные функции.
Работу
ДМТ-программы
можно рассматривать, как вычисление
некоторой функции
.
Если слово
и программа
останавливается на любом входе из*,
то результатом вычисления
будет слово, составленное из символов,
записанных на ленте после остановки
машины в ячейках с 1-ой по последнюю
непустую ячейку.
Классом функций, для которых вычисляющий их алгоритм существует, являются частично-рекурсивные функции.
Функция
называется частично рекурсивной, если
она может быть построена из 0, функций
и
с помощью конечного числа применений
операторов суперпозиции, примитивной
рекурсии и-оператора.
Задание 2. Доказать примитивную рекурсивность следующих функций:
;
;
;
;
.
Решение.