Теория алгоритмов 179 3.2. Нормальные алгоритмы Пусть A — алфавит, не содержащий символов “.” и “→”. Обыкновенной формулой подстановок называется запись вида P → Q, где P и Q — некоторые слова в алфавите A. Заключительной формулой подстановок называется запись вида P → .Q, где P и Q — некоторые слова в алфавите A. Нормальной схемой подстановок над алфавитом A называет⎧ P1 → d1Q1 ⎪ ⎪ P2 → d 2Q2 ся запись вида ⎨ , где Pi , Qi — слова в алфавите A, ⎪ ... ⎪⎩ Pk → d k Qk di — либо пустое место, либо символ “.” . Нормальным алгоритмом над алфавитом B называется пара ( A, S ) такая, что B ⊆ A, S — нормальная схема над алфавитом B. Работа нормального алгоритма над словом R состоит из отдельных шагов, в результате которых получаются слова R = R1 , R2 ,..., Ri ,... Слово Ri +1 получается из слова Ri так: просматривается нормальная схема подстановок и из неё выбирается самая верхняя формула, левая часть которой входит в слово Ri . Пусть, например, это будет формула Pj → d j Q j . Затем первое вхождение Pj в слово Ri заменяется на Q j , что и даёт слово Ri +1 . Работа нормального алгоритма над словом R заканчивается в двух случаях: 1) существует i такое, что слово Ri получено с помощью заключительной формулы подстановки; 2) существует i такое, что ни одна из левых частей нормальной схемы подстановок не входит в слово Ri . И в том, и в другом случаях слово Ri объявляется результатом работы нормального алгоритма над словом R и говорят, что нормальный алгоритм применим к слову R. 180 Глава 3 Изображением набора аргументов ( x1 , x2 ,..., xk ) называется запись вида 1x1 +1 ∗1x2 +1 ∗1x3 +1 ∗ ... ∗ 1xk +1 , (*) где 1z = 11 {...1 . z Числовая функция f ( x1 , x2 ,..., xk ) называется вычислимой по Маркову, если существует нормальный алгоритм, применимый к любому слову вида (*), переводящий его в слово 1 y +1 , где y = f ( x1 , x2 ,..., xk ). Задание 3.2.1 1. Построить нормальный алгоритм, применимый ко всем словам x1 x2 ...xn в алфавите {a ,b} и переводящий их в слово α. 2. Проверить работу построенного нормального алгоритма над некоторыми словами. Таблица 3.2.1 № α 1 ab, если n ≤ 3, ax1 x2 ...xn , если n > 3 2 aa, если в данном слове число букв b нечётно, x1 x2 ...xn −1 , если чётно 3 x1 x2 ...xn −1 xn xn , если x2 = a , x1 x2 ...xnb , если x2 = b 4 abb, если слово начинается на ab, x1 x2 в остальных случаях 5 x1 ...xn b , если n — чётно, bx1 ...xn , если n — нечётно 6 ab, если x2 = a , x1 ...xn −1 , если x2 = b 7 a ∗ a , если n — нечётно, x1 ...xn −1 xn xn , если n — чётно 8 a n , если x1 = a , x2 , если x1 = b 9 x1 ...xn a n 10 ax2 ∗ x1 ∗ x3 ∗ ... ∗ xn Теория алгоритмов 181 Таблица 3.2.1 (окончание) № α 11 x1 xn x2 x3 ...xn −1 xn 12 b n x1 ...xn 13 (ab) n 14 x1 x2 ...xn ∗ xn−1 ∗ xn − 2 15 x1 ∗ ∗ x3 ...xn −1 , если x2 = a , x3 x4 ...xn , если x2 = b 16 x1 ...xn , если в исходном слове количество букв a нечётно, aba , если чётно 17 x1 ∗ x3 ∗ x5 ∗ ... ∗ xn , если n нечётно, x1 x2 ...xn , если n чётно 18 x1ax2bx3ax4b...xn 19 x1 x2 x3 ...xn −1 xn xn −1 ...x1 20 baba , если слово начинается на ba , x1 x2 ...xn a в других случаях 21 bx1 x2 ...xn , если xn = a , bbb , если xn = b 22 ab , если n — нечётно, xn −1 xn , если n — чётно 23 a n , если xn −1 = a , x1 x2 ...xn − 2 ab , если xn −1 = b 24 x1 x3 x2 x4 x5 ...xn − 2 xn xn −1 25 ax1 x1 x2 x2 ...xn − 2 xn − 2b 26 bb, если n ≤ 3, x1 ...xn −1 , если n > 3 27 x1 x2 ...xn a , если n — нечётно, bx1 ...xn , если n — чётно 28 b n x1 ...xn 29 x2 ∗ x1 ∗ x2 ∗ x1 182 30 Глава 3 xn xn −1 ...x2 x1 x2 x3 ...xn −1 xn Пример решения задания 3.2.1 Решить задание 3.2.1 для α = {xn , если xn −1 = a; b n −1 xn , если xn −1 = b}, (n > 1). 1. Опишем работу нормального алгоритма, решающего эту задачу. Последней в схеме подстановок запишем формулу → α , тогда слово x1 x2 ...xn перейдёт в αx1 x2 ...xn . Затем с помощью формул подстановок αa → aα, αb → bα символ α прейдёт на конец слова: x1 x2 ...xn α. Для разбора варианта xn −1 = a введём формулы подстановок abα → βb, aaα → βa, aβ → β, β → . Для разбора случая xn−1 = b введём формулы подстановок bbα → γbb, baα → γba, aγ → γb, bγ → γb, γ → . Запишем нормальную схему подстановок: ⎧αa → aα ⎪αb → bα ⎪ ⎪abα → βb ⎪ ⎪aaα → βa ⎪aβ → β ⎪ ⎪β → . ⎨ ⎪bbα → γbb ⎪baα → γba ⎪ ⎪aγ → γb ⎪bγ → γb ⎪ ⎪γ → . ⎪→ α ⎩ 2. Проверим работу построенного нормального алгоритма над словами abba и bbaaa : abba, αabba , aαbba , abαba , abbαa , abbaα , Теория алгоритмов 183 abγba , aγbba , γbbba , bbba. bbaaa, αbbaaa, bαbaaa , bbαaaa , bbaαaa , bbaaαa , bbaaaα , bbaβa , bbβa , bβa , βa , a. Видим, что нормальный алгоритм работает так, как и требовалось. Задание 3.2.2 1. Построить нормальный алгоритм, вычисляющий данную числовую функцию f . 2. Проверить работу построенного нормального алгоритма над некоторыми наборами значений переменных. Таблица 3.2.2 f № 1 f ( x, y , z) = 2 x + z 2 f ( x , y ) = { y − x , если y ≥ x; 0, если y < x} 3 f ( x , y , z , w) = {4, если x — чётно; x , если x нечётно } 4 f ( x , y ) = {1, если x > y; 0, если x ≤ y} 5 f ( x , y , z ) = { z - 3, если z ≥ 3; 0, если z < 3} 6 f ( x , y , z , w) = x + 3 y + 3 w 7 f ( x , y , z ) = {0 , если x = 0; y , если x ≠ 0} 8 f ( x , y ) = { x − y , если x ≥ y; 1, если x < y} 9 f ( x , y , z ) = {3, если y > 1; x , если y ≤ 1} 10 f (x, y , z) = y + z + 4 11 f ( x , y , z ) = {0 , если x ≠ 0; y + 1, если x = 0} 12 f ( x , y ) = { x, если x — чётно; 2 y , если x — нечётно} 184 13 Глава 3 f ( x , y , z ) = { x + y , если x ≥ y; 0, если x < y} Таблица 3.2.2 (окончание) f № 14 f ( x , y , z ) = { z + 1, если z ≠ 0; 0, если z = 0} 15 f ( x , y ) = {0, если x — чётно; 2, если x — нечётно} 16 f ( x, y , z) = 3 y + z 17 f ( x , y , z , w) = {w , если x = 0; 2, если x ≠ 0} 18 f (x, y ) = {x − 2, если x ≥ 2; 0, если x < 2} 19 f ( x, y) = 4 x + 1 20 f ( x , y ) = { x, если x — чётно; 0, если x — нечётно} 21 f ( x , y ) = {0 , если xy = 0; x + y , если xy ≠ 0} 22 f ( x , y , z ) = { y + 2 , если y > 1; 0, если y ≤ 1} 23 f ( x , y ) = {1, х = 1; 0, если x ≠ 1} 24 f ( x , y , z , w) = 2 y + w 25 f ( x , y , z ) = min { x, y } 26 f ( x , y , z ) = { z − 2 , если z ≥ 2; 0, если z < 2} 27 f ( x , y ) = { y − x , если y > x; 2, если y ≤ x} 28 f ( x , y , z , w) = x + y + [ w / 2 ] 29 f ( x , y , z ) = {1, если z — чётно; 2 x + y , если z — нечётно} 30 f ( x , y , z , w) = x + 2 y + 3 z + 4 Пример решения задания 3.2.2 Решить задание 3.2.2 для f ( x , y ) = x + 2 y . Теория алгоритмов 185 Вначале мы имеем запись изображения набора аргументов 1 ∗ 1 y +1. Последней формулой подстановки мы введём символ α: → α. Получим слово α1x +1 ∗ 1 y +1. Затем с помощью подстановки α1→1α оно преобразуется в слово 1x +1 α ∗ 1 y +1. Сотрём α и разделительную звёздочку: α*→β. Удвоим количество единиц в блоке, изображающем второй аргумент: β1→11β. После выполнения всех перечисленных выше подстановок окажется запись, содержащая x + 1 + 2( y + 1) = x + 2 y + 3 единицы. Сотрём лишние две единицы и закончим работу подстановкой 11β→. ⎧α1 → 1α ⎪α∗ → β ⎪⎪ Запишем нормальную схему подстановок: ⎨β1 → 11β ⎪11β → . ⎪ ⎪⎩→ α x +1 2. Проверим работу алгоритма над изображением набора переменных (0,1), т. е. над словом 1*11: 1*11, α1*11, 1α*11, 1β11, 111β1, 11111β, 111. Итак, осталось три единицы, которые являются изображением числа 2, что и ожидалось, т. к. f (0,1) = 0 + 2 ⋅1 = 2. Задание 3.2.3 1. Написать формулу для функции y = f ( x1 , x2 ,..., xn ), вычисляемой нормальным алгоритмом. 2. Проверить работу алгоритма над некоторым набором значений аргументов. Таблица 3.2.3 № n f № n f 186 1 Глава 3 ⎧∗ → 11 ⎪α 11 → 1α ⎪ ⎨α 1 → α ⎪α → . ⎪⎩ → α 3 2 2 ⎧ α1 →1α ⎪α∗ →β ⎪ β1 → γ ⎨ γ1→ γ ⎪ ⎪ γ →. ⎩→α Таблица 3.2.3 (продолжение) № 3 5 7 9 n f 2 ⎧⎪ 1∗ 1→ ∗∗ ⎨ 1∗∗→∗∗ ⎪⎩ ∗∗→. 1111 3 ⎧ α1 → α ⎪α∗→β ⎪ β1 →11β ⎨ β ∗→ α ⎪ ⎪ α → . 111 ⎩→α 2 ⎧ 1∗ 1 →∗ ⎪ ∗1 → β ⎪ ⎨ ∗ → .1 ⎪ β1 → β ⎪⎩ β → .1 3 ⎧⎪ ∗ 1 → 1 ∗ ⎨ ∗ ∗1→ ∗∗ ⎪⎩ ∗∗ → . 111 № 4 6 8 10 n f 2 ⎧ α1 → 11α ⎪ α ∗ → 1β ⎪ ⎨ β11 → . ⎪ β1 → . 1111 ⎪⎩ → α 3 ⎧1∗ 1→ 1∗ ⎪1∗ ∗ → α ⎨ α1 → 11 α ⎪ ⎩ α →. 2 ⎧ ∗ 1 → ∗∗ ⎪ ∗∗ → ⎪1 ∗→ β ⎨1 β → β111 ⎪ ⎪ β → .1 ⎩1 → . 1 3 ⎧1∗ ∗1→∗ ∗ ⎪∗ ∗ ∗1→∗ ∗ ∗ ⎪⎪∗ ∗ ∗→.1 ⎨∗ ∗1→α ⎪ α1→α ⎪ α∗→. ⎩⎪∗→∗ ∗ Теория алгоритмов 11 4 187 ⎧ α1→α ⎪ α∗→β ⎪β1→1β ⎪β∗→γ ⎨ γ∗→γ ⎪ γ1→γ ⎪ γ→. ⎪ →α ⎩ 12 3 ⎧ α11→β ⎪ α1→γ ⎪β1→β ⎪⎪β∗→β ⎨β→.1 ⎪ γ1→1γ ⎪ γ∗→γ ⎪ γ→.11 ⎪⎩ →α Таблица 3.2.3 (продолжение) № 13 15 n f 3 ⎧1∗ 1→ 1∗ ⎪ ∗∗ → α ⎪ ⎨ α11 → 1 α ⎪ α 1 →. ⎪⎩ α → . 3 ⎧ α 1 →1 α ⎪α∗ →β ⎪ β1 →111β ⎪ ⎨ β ∗→ γ ⎪ γ 1→ γ ⎪ γ →. ⎪⎩ → α № 14 16 n f 3 ⎧ 11 α → 1 α ⎪1α1→1 γ ⎪ γ 1→1 γ ⎪⎪ γ ∗ → . ⎨ α1→ β ⎪ ⎪ β1→ β ⎪ β ∗ → . 11 ⎪⎩ 1 ∗ → α 2 ⎧α1→1α ⎪α ∗11→β ⎪ ⎪α ∗1→γ ⎪ ⎨γ →. ⎪1β →β ⎪ ⎪ β →. ⎪→α ⎩ 188 Глава 3 17 19 3 ⎧ α 11 → 11 β ⎪ β1→1β ⎪β∗→β ⎪β→. ⎪ ⎨ α1→ γ ⎪ γ 1→ γ ⎪ γ ∗→ γ ⎪ γ → . 11 ⎪ →α ⎩ 3 ⎧ α1→ α ⎪ α ∗1 → β ⎪ β 111 → 1 β ⎪ ⎨ β 11 ∗ → . 11 ⎪ β1∗ → .1 ⎪β∗→. ⎪ →α ⎩ 18 20 2 ⎧ α 1→ 111 α ⎪ α ∗→ β ⎪ ⎨ β 1→ 11 β ⎪ β → . 111 ⎪⎩ → α 2 ⎧ α1 → 1 α ⎪ α ∗→ β ⎪ ⎨ β1 →111β ⎪ β → . 11 ⎪⎩ → α Таблица 3.2.3 (окончание) № 21 23 n f 2 ⎧ αα 1 → αα ⎪ αα ∗ → αα ⎪ αα → . 11 ⎪⎪ α 11 → β ⎨ β1→ β ⎪ ⎪ β ∗ → . 11 ⎪1α → α1 ⎪⎩ 1 ∗ → α 1 ∗ 3 ⎧ 1 ∗→ ∗ 1 ⎪ ∗∗1→ α ⎪ ⎨ α11 → 1 α ⎪ α 1 →. ⎩⎪ α → . № 22 24 n f 2 ⎧ α1→1β ⎪ β1→1 α ⎪ α∗→ γ ⎪ γ 1 → 11 γ ⎪ ⎨ γ →. ⎪β∗→ δ ⎪ δ 11 → δ 1 ⎪ δ →. ⎪ →α ⎩ 2 ⎧ α 1 → 1β ⎪ β1 →1 α ⎪α∗→γ ⎪ ⎨ β ∗1 →. ⎪ γ 1→ γ ⎪ γ →. ⎪→α ⎩ Теория алгоритмов 25 27 29 3 ⎧ α 1 → 11 α ⎪ α ∗1 → β ⎪ ⎨ β1→ β ⎪ β ∗ → . 111 ⎪⎩ → α 2 ⎧ α 1→ 1 α ⎪ α ∗→ β ⎪ ⎨ β 1→ β ⎪ β → . 11 ⎪⎩ → α 2 ⎧ α1 → 1β1α ⎪ α ∗1→ ⎪ ⎨ β→ γ ⎪ γ →. ⎪⎩ → α 189 26 28 30 3 ⎧1∗ 1→ 1∗ ⎪ ∗ ∗1→ α ⎨ α1 → 111 α ⎪ ⎩ α →. 2 ⎧ 11 ∗ 11 → . 11 ⎪ ∗→ β ⎨ β 1 → 11 β ⎪ ⎩1β → . 3 ⎧ α 1→ α ⎪ α ∗→β ⎪ ⎨ β 1→ 11 β ⎪ β∗→. ⎪⎩ → α Пример решения задания 3.2.3 Решить задание 3.2.3 для f ( x , y , z ) , вычисляемой нормальным ⎧∗1 → α ⎪ алгоритмом c данной. схемой подстановок: ⎪⎨αα1 → 11αα ⎪αα → . ⎪⎩α1 → α 1. Вначале мы имеем запись изображения набора аргументов 1 ∗ 1 y +1 ∗ 1z +1. Запишем последовательность слов, получающихся при работе данного нормального алгоритма над словом 1x +1 ∗ 1 y +1 ∗ 1z +1 : x +1 1x +1 ∗11 y ∗1z +1 , 1x +1 α 1 y ∗11z , 1x +1 α11y −1 α1z , 1x +1 α11y −2 α1z , ...,1x +1 αα11z −1 , 1x +3 αα11z − 2 , 1x +5 αα11z −3 ,..., 1x + 2 z +1 αα , 1x + 2 z +1. Итак, в результате работы нормального алгоритма над изображением набора аргументов получилось слово из x + 2 z + 1 единиц, которое служит изображением числа x + 2 z . Значит, искомая функция имеет вид f ( x , y , z ) = x + 2 z. 190 Глава 3 2. Проверим работу алгоритма над изображением набора аргументов (2,0,1): 111 ∗ 1 ∗ 11 , 111 α ∗ 11, 111 αα 1 , 11111 αα , 11111 . В результате получено изображение числа 4. Но f (2,0,1) = 2 + 2 ⋅ 1 = 4. Так что нормальный алгоритм получил то, что и должен был получить. 3.3. Рекурсивные функции Числовой функцией называется функция вида f : N 0n → N 0 , где N 0 = {0,1,2,3,...}. Исходными функциями называются числовые функции следующих видов: 1) o( x) ≡ 0 — нулевая функция; 2) s ( x) ≡ x + 1 — функция следования; 3) I kn ( x1 , x2 ,..., xn ) = xk — функция выбора аргумента.