Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Дискретная математика и теория алгоритмов. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

§ 14. Формальные грамматики

81

 

 

8.Назовём -н.к.а. A = , , , 0, регулярным, если он удовлетворяет следующим четырём условиям:

(а) автомат A содержит единственное выделенное состояние , причём ̸= 0;

(б) в автомате A нет дуг, выходящих из состояния ;

(в) в автомате A нет дуг, входящих в состояние и помеченных непустым символом ;

(г) любой -переход в A имеет вид

 

 

для некоторого

 

, = .

 

○−−−−→○

 

̸

 

 

 

 

 

Доказать, что произвольный язык порождается регулярной грамматикой тогда и только тогда, когда распознается некоторым регулярным -н.к.а. (Указание: см. доказательство теоремы 30.)

9.Используя метод доказательства теоремы 30, построить регулярную грамматику, порождающую язык, распознаваемый следующим детерминированным конечным автоматом:

(а)

 

 

 

 

-

id

HH

(б)

 

 

i

 

-

di

 

 

 

 

 

HH

 

 

*

6

 

 

,

 

9

 

 

 

 

Hj

 

 

 

 

 

 

 

H

iHHH

 

 

 

 

 

H

 

 

 

 

 

 

 

H

 

 

 

i

 

 

iHHH

 

 

 

?

 

 

 

 

 

 

 

,

 

 

 

H

 

 

 

 

 

 

 

 

Hj

 

 

 

Hj

di

 

- i6,

 

 

 

 

 

 

 

i6,

 

 

 

 

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(в)

H

di@

 

s

ik

s

(г)

+

A

 

s

 

 

 

 

 

 

 

i

 

i@

id

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k

 

 

 

 

 

 

 

 

 

3 k

 

 

 

 

 

 

@

 

 

 

 

 

 

 

@

 

 

 

 

 

 

 

@

 

 

 

 

 

 

@

i6

 

 

 

 

 

 

 

 

 

 

i6

 

 

 

 

 

 

 

 

 

 

 

@

 

 

 

 

@

 

 

 

 

 

 

 

@R

 

 

 

 

R@

 

 

 

 

 

 

 

 

,

 

 

 

 

,

 

 

 

 

Глава IV

Формализации понятия вычислимой функции

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

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

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

§ 15. Определение машины Тьюринга

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

Перейдём к неформальному описанию машин Тьюринга.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Машина Тьюринга состоит из лен-

 

 

 

 

 

Программа:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ты, разбитой на одинаковые ячейки.

 

 

 

 

 

 

Команда 1

 

 

 

 

 

 

 

 

 

 

. . . . . .

 

 

 

 

 

 

 

В ячейках могут содержаться симво-

 

 

 

 

 

 

Команда

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

лы из внешнего алфавита . Содер-

 

 

 

 

 

Состояние:

 

 

 

 

 

 

 

 

 

 

 

 

 

0

3 2

 

 

 

 

 

жимое ячеек может меняться. Лен-

 

 

 

 

 

 

 

 

r

 

 

 

 

 

дов машины. Перед запуском маши-

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

та — это механизм входов и выхо-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ны входные данные записываются в

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

конечном участке ленты, и в даль-

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нейшем на каждом шаге вычислений

 

 

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

. . .

2

0

0

 

1

 

3

1

 

7

5

0

. . .

используется только конечное мно-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

жество ячеек. Однако в процессе

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

работы лента может достраиваться

новыми ячейками как слева, так и справа. Другими словами, лента является потенциально бесконечной в обе стороны.

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

§ 15. Определение машины Тьюринга

83

 

 

машине приходится перебирать одну за другой все ячейки между текущей и требуемой.

Каждая машина Тьюринга имеет конечное число состояний 0, 1, . . . , , в кото-

рых она может находиться. В процессе работы машина может несколько раз возвращаться в одно и то же состояние. Работа всегда начинается с выделенного начального состояния. Кроме этого, есть выделенное конечное состояние. Если когда-нибудь машина попадает в конечное состояние, то она останавливается, иначе работает бесконечно.

Любая машина Тьюринга имеет свою уникальную программу. Программа — это конечный список команд, каждая из которых есть директива вида , где, — состояния, , — символы внешнего алфавита, { , , }, причём для каждого неконечного состояния и любого символа в программе имеется ровно одна команда, начинающаяся с символов → . . . Если же — конечное состояние,

то команда вида → . . . отсутствует в программе.

Опишем один шаг работы машины Тьюринга. Пусть машина находится в некотором состоянии , а головка в текущий момент обозревает ячейку с символом . Если — конечное состояние, то машина останавливается. В противном случае в программе находится единственная команда вида , которая затем исполняется следующим образом: в обозреваемую ячейку записывается символ , затем головка сдвигается по ленте на одну ячейку вправо (если = ) или влево (если

= ) или вообще не двигается (если — пустое слово), и затем машина переходит

в состояние .

Если при исполнении некоторой команды головке необходимо сдвинуться за левый край ленты, то в этот момент происходит автоматическое достраивание новой

ячейки слева, в неё записывается выделенный символ (как правило, это символ 0)

и головка передвигается на достроенную ячейку. Аналогичным образом происходит достраивание ячеек справа.

Теперь мы введём строгие, формальные определения.

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

(а)= { 0, 1, . . . , } — конечный внешний алфавит (мы будем всегда предполагать, что > 1 и 0 = 0, 1 = 1);

(б) = { 0, 1, . . . , }

конечный алфавит внутренних состояний, > 1;

(в)

= { ( , ) | 1 6

6 , 0 6 6

} — программа, состоящая из команд

 

( , ), каждая из которых есть слово вида: , или , или

 

, где 0 6 6 , 0 6 6 ;

 

(г)

1

— начальное состояние ;

 

(д)

0

— конечное состояние.

 

Определение. Машинным словом (конфигурацией) называется любое слово вида

, где , , и — слова в алфавите (возможно, пустые).

Машинное слово — это формальное представление текущего положения всех деталей машины: — текущее состояние, — содержимое ячейки, обозревае- мой головкой в данный момент, слово состоит из всех символов, содержащихся в

84

Глава IV. Формализации понятия вычислимой функции

 

 

ячейках слева от обозреваемой, а слово — из всех символов, записанных в ячейках

справа от обозреваемой. Исходя из такого интуитивного смысла, несложно определить формально, как преобразуются машинные слова за один шаг работы машины.

A

A

 

3

2

0

0

1

 

 

4

0

 

1

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Определение. Пусть = — машинное слово. Говорят, что машинное слово

получается из за один шаг работы машины Тьюринга , если выполняется одно из условий:

(1)= 0, = .

(2)> 0 и выполняется один из случаев:

(а)

( , ) имеет вид

 

 

 

 

 

, и

=

 

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(б)

( , ) имеет вид

 

 

 

 

 

, =

,

и

=

 

 

 

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(в) ( , ) имеет вид

 

 

 

 

,

= ,

и

=

 

 

0

(достраивается

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

новая ячейка справа);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(г)

( , ) имеет вид

 

 

 

 

 

, =

, и

=

 

 

 

 

 

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(д)

( , ) имеет вид

 

 

 

 

, = ,

и

=

 

 

 

(достраивается

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

новая ячейка слева).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(

)

для всех .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

= ,

 

=

Определение. Пусть

 

— машинное слово. Положим

 

(0)

 

 

 

 

 

 

 

 

 

( +1)

 

( )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Говорят, что машина перерабатывает слово в слово 1 без достраивания

ячеек слева, и пишут = 1, если существует такое, что ( ) = 1 и при

этом не используется пункт (д).

Говорят, что машина перерабатывает слово в слово 1 без достраивания

ячеек слева и справа, и пишут |= 1, если существует такое, что ( ) = 1

и при этом не используются пункты (в) и (д).

Определение. Частичная функция : dom( ) −→ называется вычислимой по Тьюрингу, если существует машина Тьюринга над алфавитом {0, 1} такая, что для любых 1, . . . , выполняются условия:

(а) если 1, . . . , dom( ), то 101 1 0 . . . 01 0 = 001 ( 1,..., )00 для некото-

рого > 0;

(б)если 1, . . . , / dom( ), то машина , начав свою работу с машинного слова

= 101 1 0 . . . 01 0, работает бесконечно, т.е. 0 не входит в ( )

ни для какого

.

При этом говорят, что машина вычисляет частичную функцию .

§ 16. Базовые машины Тьюринга

85

 

 

Определение. Если — программа, то через ( ) будем обозначать множество команд, полученных из заменой всех вхождений на .

Определение. Пусть 1 = , 1, 1, 1, 0 , 2 = , 2, 2, 1, 0 — машины Тьюринга над алфавитом с множествами внутренних состояний

1 = { 0, 1, . . . , }, 2 = { 0, 1, . . . , }.

Композицией машин 1 и 2 называется машина 1

 

2

=

, , ,

, 0 с мно-

 

 

 

0

1

1,...,

жеством состояний = { 0, 1, . . . , + } и программой =

( 1) +1

( 2) +1,..., + .

Композиция 1 2 работает следующим образом. На входных данных сначала запускается машина 1, а затем на выходных данных 1 — машина 2. Выходные данные 2 считаются выходом для композиции 1 2. Конечное состояние машины1 отождествляется с начальным состоянием машины 2.

Определение. Пусть 1= , 1, 1, 1, 0 , 2= , 2, 2, 1, 0 , 3= , 3, 3, 1, 0

— машины Тьюринга над алфавитом с множествами внутренних состояний

1 = { 0, 1, . . . , }, 2 = { 0, 1, . . . , }, 3 = { 0, 1, . . . , }.

Разветвлением машины 1 на ( 2, 3) по ( , ), где , 1, называется машина

1[ → 2| → 3] = , , , 1, 0 , где = { 0, 1, . . . , + + −2}, а программа

получается следующим образом: из 1

исключаются все команды вида → . . . и

вида

 

. . .; полученное множество

обозначим через . Тогда

 

 

 

1

 

 

 

1, 2,...,

1, 2,...,

 

 

 

= 1( 2) , +1,..., + −1 ( 3) , + ,..., + + −2 .

Разветвление работает следующим образом. На входных данных запускается машина 1. Если 1 попадает в состояние 0, то происходит остановка. Если 1 попадает в состояние , то на текущих данных запускается машина 2, при этом начальное состояние машины 2 заменяется на . Если 1 попадает в состояние , то на те- кущих данных запускается машина 3, при этом начальное состояние машины 3 заменяется на . Конечные состояния машин 1, 2 и 3 отождествляются.

Замечание. Существует несколько модернизаций и обобщений машин Тьюринга. Наиболее известной и естественной модернизацией является многоленточная маши-

на Тьюринга, т.е. машина, которая имеет ( > 1) лент и такое же число считываю-

щих головок. Однако вычислительные возможности таких машин не отличаются от возможностей обычных машин Тьюринга.

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

→ . . . Машины такого типа используюся в качестве традиционной модели вычислений в теории сложности алгоритмов [5,6,15].

§ 16. Базовые машины Тьюринга

Для доказательства основных результатов данной главы нам потребуются следующий набор так называемых базовых машин Тьюринга. Внешний алфавит всех машин

в данном параграфе состоит из двух символов: 0 и 1.

Заметим, что если машина Тьюринга в некотором состоянии

86

Глава IV. Формализации понятия вычислимой функции

 

 

никогда не обоз-

ревает символ , то команду вида → . . . можно не писать в программе. Ниже мы будем использовать данное соглашение для упрощения записи программ.

Перенос нуля А: 1001 0|= 001 00, где > 0.

А

Машина А имеет следующую программу:

10 → 20

41 → 50

20 → 31

51 → 51

31 → 31

50 → 00

30 → 40

 

Машина А работает следующим образом. Сначала второй 0 заменяется на 1 (ко-

манды 10 → 20 и 20 → 31 ), затем машина сдвигается на 0, стоящий после массива 1 (команда 31 → 31 ), и заменяет последний символ 1 из этого массива на 0 (команды 30 → 40 и 41 → 50 ), после чего машина возвращается влево на

самое начало (команды 51 → 51 и 50 → 00). Заметим, что новые ячейки справа и слева не достраиваются.

Обнуление О: 101 0|= 000 0, где > 0.

О

Машина О имеет следующую программу:

10 → 20

31 → 30

21 → 21

30 → 00

20 → 30

 

Правый сдвиг Б+: 101 0|= 01 00, где > 0.

Б+

Программа для машины Б+ состоит из трёх команд:

10 → 2021 → 2120 → 00

Левый сдвиг Б: 01 10|= 001 0, где > 0.

Б

Программа для машины Бсостоит из трёх команд:

10 → 2021 → 2120 → 00

Транспозиция В: 01 101 0|= 01 001 0, где , > 0.

В

Машина В работает следующим образом. Сначала преобразуем слово 01 101 0 в слово 01 51 00, равное слову 01 51 01 0 при = 0. Затем для произвольного слово 01 51 01 0 преобразуем в слово 01 −( +1) 51 01 +10, если − > 0, и в слово

01 001 0, если − = 0.

Программа для В имеет следующий вид:

§ 16. Базовые машины Тьюринга

87

 

 

10 → 2021 → 21

20 → 30 Преобразуем входное машинное31 → 40 слово следующим образом:

30 → 50 01 101 0|= 01 51 00.

41 → 4140 → 51

 

 

 

 

 

 

В состоянии 5, в котором начинается цикл,

 

51 → 61

сдвигаемся на одну ячейку влево и проверяем,,

 

50 → 60

есть ли ещё единицы в массиве 1

 

 

 

 

 

 

т.е. верно ли, что − = 0.

 

 

 

60 → 70

Если

 

 

, то выходим из цикла:

 

71 → 71

= 0

 

 

 

 

 

70 → 00

601 01 0|= 01 001 0.

 

 

 

61 → 80

Если − > 1 и > 1, то преобразуем

 

81 → 81

 

 

0

 

1

01 −( +1)

 

11 01 0=

 

01 −( +1)

1 01 +10.

8

 

9

 

6

 

|

 

5

 

 

91 → 100

Если − > 1 и = 0, то преобразуем

 

 

0

 

0

01 −( +1)

 

101 0=

01 −( +1)

01 +10.

9

 

5

 

6

 

|

 

5

 

 

 

101 → 101

После этого переходим к следующей

 

100 → 51

итерации в цикле.

 

 

 

 

Удвоение Г: 101 0 =

001 01 0,

где > 0.

 

 

 

 

 

 

 

 

 

Г

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Машина Г работает следующим образом. Сначала преобразуем слово 101 0 в

слово 0 21 0, которое совпадает со словом

01 21 01

при = 0. Затем для произ-

вольного преобразуем слово

01

1 01 в слово

01 +1

1 −( +1)

01 +1, если

> 0,

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

2

 

 

 

 

 

 

и в слово 001

 

01 0, если − = 0.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Программа для Г имеет следующий вид:

 

 

 

 

 

 

 

 

 

 

 

 

1

0

2

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

1

3

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

1

3

1

 

 

 

 

> 0, то 01

1 01 =

 

 

 

 

 

 

 

 

0

 

0

Если

 

 

 

 

 

 

3

 

 

4

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

1

 

1

=

01 0

 

1 −( +1)

01 =

 

01 01 −( +1)01

0 =

 

 

 

4

 

 

4

 

 

01

3

 

 

 

01 +1

 

4

,

 

 

 

 

0

 

1

=

01 −( +1)

01 +1 =

 

1 −( +1)01 +1

 

 

4

 

 

5

 

 

 

6

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

5

1

5

1 и переходим к следующей итерации.

 

 

 

 

 

 

5

0

6

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

1

6

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

0

2

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

20 → 70

71 → 71

70 → 80 Если − = 0, то 01 201 =81 → 81 = 01 01 70 = 001 01 0.

80 → 9091 → 9190 → 00

Циклический сдвиг Цn: 101 1 01 2 0 . . . 01 0|= 001 2 0 . . . 01 01 1 0, где > 1

Ц

фиксированное натуральное число.

88

Глава IV. Формализации понятия вычислимой функции

 

 

+,

Машина Ц работает по следующей схеме с использованием базовых машин Б Би В:

101 1 01 2 0 . . . 01 0|= 01 2 1 01 1 01 3 0 . . . 01 0|= |= 01 2 01 3 2 01 1 01 4 0 . . . 01 0|= . . . |= 01 2 . . . 01 −1 01 1 0|=

|= 001 2 0 . . . 01 01 1 0.

Таким образом, Ц = (Б+ В) . . . (Б+ В) Б. . . Б= (Б+ В) −1 (Б) −1.

−1 −1

Копирование Кn: 101 1 0 . . . 01 0 = 001 1 0 . . . 01 01 1 0 . . . 01 0, где > 1

К

фиксированное натуральное число. Построим машину К индукцией по > 1.

10. При = 1 машина К1 совпадает с машиной Г.

20. Пусть > 1 и машина К −1 уже определена. Тогда машина К работает по следующей схеме:

101 1 0 . . . 01 0 = 01 1 0 . . . 01 −1 1 01 0 = 01 1 0 . . . 01 −1 2 01 01 0 = = 3 01 1 0 . . . 01 −1 01 01 0 = 4 01 01 01 1 0 . . . 01 −1 0 =

= 01 01 5 01 1 0 . . . 01 −1 0 = 01 01 6 01 1 0 . . . 01 −1 01 1 0 . . . 01 −1 0 =

К −1

= 7 01 01 01 1 0 . . . 01 −1 01 1 0 . . . 01 −1 0 = = 8 01 01 1 0 . . . 01 −1 01 1 0 . . . 01 −1 01 0 = 001 1 0 . . . 01 01 1 0 . . . 01 0.

Таким образом, К = (Б+) −1 Г (Б) −1 (Ц +1) −1 (Б+)2 К −1 (Б)2 Ц2 Ц .

Упражнения

1.

Построить машину Тьюринга такую, что 1

012 0=

00(10) 0, где > 0.

 

 

 

 

 

 

 

 

 

 

 

 

|

 

 

 

 

 

 

 

 

 

 

 

 

 

 

01 012 0, где > 0.

2.

Построить машину Тьюринга такую, что 1

013 0=

 

 

 

 

 

 

 

 

 

 

 

 

|

 

 

 

 

 

 

 

 

 

 

 

 

 

 

001 0 1 0, где > 0.

3.

Построить машину Тьюринга такую, что 1

013 0=

 

 

 

 

 

 

 

 

 

 

 

 

|

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.

Построить машину Тьюринга 1

такую, что для справедливо

 

 

 

 

01

10 |

1

{01 4

0,

если = 0.

 

 

 

 

 

 

=

01 3

0,

если > 0,

 

 

Используя машину 1, базовые машины, а также композицию и разветвление

 

машин, определить машину Тьюринга 2 такую, что для , , справедливо

 

 

1

01 01 01 0 | 2 { 0

01 0 . . . 0,

если = 0.

 

 

 

 

 

 

=

0

01 0 . . . 0,

если > 0,

5.Построить машину Тьюринга, вычисляющую следующую частичную функцию:

(а)( , ) = + ;

(б) ( , ) = − (при < значение функции не определено);

(в) ( ) = /2 (при нечётном значение функции не определено);

(г) ( ) = [ /2];

иначе.

 

{не определено,

(д) ( , ) =

+ − 2,

если > 1 и > 1,

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

89

 

 

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

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

Врамках данного параграфа рассматриваются только частичные функции на, т. е. всевозможные функции вида : → , где множество является

областью определения функции, а число — её местностью. Любую 0-местную всюду определённую функцию = мы отождествляем с константой . Нигде не определённая функция единственна и имеет вид = ?, причем любое натуральное число является местностью нигде не определённой функции.

Если — -местная, а — -местная частичная функция, то для любых значений

1, . . . , , 1, . . . , мы пишем ( 1, . . . , ) = ( 1, . . . , ) тогда и только тогда,

когда либо эти значения одновременно не определены, либо они оба определены и совпадают.

Определение. Простейшими функциями называются нульместная функция 0, всюду определённая одноместная функция ( ) = + 1 и всюду определённые - местные функции ( 1, . . . , ) = для всех , таких, что 1 6 6 .

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

( 1, . . . , ) = ( 1( 1, . . . , ), . . . , ( 1, . . . , )).

Замечание. С неформальной точки зрения оператор суперпозиции соответствует принципу последовательного запуска вычислительных устройств, когда результаты

вычислений одних устройств служат входными данными для других. Если полу-

чена с помощью суперпозиции из , 1, . . . , , то вычисление значения ( 1, . . . , ) происходит следующим образом. Сначала на входных данных = 1, . . . , вычисляются значения 1 = 1( ), . . . , = ( ). Если хотя бы одно из этих значений не определено, то значение ( ) тоже не определено. Если же все 1, . . . , определены, то затем они подаются на вход функции . Если выходное значение ( 1, . . . , ) не

определено, то ( ) считается неопределённым, иначе ( ) = ( 1, . . . , ) определено и является окончательным выходным значением.

Пример. Функция ( , , ) = + 1 получается с помощью оператора суперпозиции из простейших функций ( ) и 33( , , ), поскольку + 1 = ( 33( , , )).

Определение. Говорят, что функция ( 1, . . . , , ) получается с помощью оператора примитивной рекурсии из функций ( 1, . . . , ) и ( 1, . . . , , , ), если для любых 1, . . . , , выполняется схема примитивной рекурсии:

{

( 1, . . . , , 0) = ( 1, . . . , )

( 1, . . . , , + 1) = ( 1, . . . , , , ( 1, . . . , , )).

90

Глава IV. Формализации понятия вычислимой функции

 

 

Замечание. Оператор примитивной рекурсии формализует циклическую структуру, вычисляющую функции, заданные рекуррентными соотношениями (или по ин-

дукции). Если получена с помощью примитивной рекурсии из и , то вычисление значения ( , ) происходит следующим образом. Сначала на входных данных вычисляется значение ( ), которое совпадает с ( , 0). Если это значение не определено, то ( , ) тоже не определено, иначе, подав , 0 и ( , 0) на вход функции , мы вычисляем ( , 0, ( , 0)), которое совпадает с ( , 1). Если последнее значение не определено, то ( , ) не определено, иначе мы подаем , 1 и ( , 1) на вход функции и т.д. Данные вычисления продолжаются до тех пор, пока мы не достигнем значения ( , ). Если при этом на промежуточных шагах хотя бы одно вычисляемое значение функции не определено, то ( , ) считается неопределённым.

Пример. Запишем схему примитивной рекурсии для функции ( , ) = + :

{

( , 0) = ,

( , + 1) = ( + ) + 1 = ( ( , )) = ( 33( , , ( , ))).

Таким образом, функция ( , ) = + получается с помощью оператора примитивной рекурсии из функций ( ) = и ( , , ) = ( 33( , , )).

Пример. Определим одноместную функцию усечённой разности :

{

−1 = 0, если = 0;

− 1, если > 0.

Запишем для функции ( ) = −1 схему примитивной рекурсии:

{

(0) = 0,

( + 1) = ( + 1) − 1 = = 12( , ( )).

Таким образом, функция ( ) = −1 получается с помощью оператора примитивной рекурсии из константы 0 и функции ( , ) = 12( , ).

Определение. Говорят, что функция ( 1, . . . , ) получается с помощью опера-

тора минимизации

из функции ( 1, . . . , , ) и обозначается

( 1, . . . , ) =

= [ ( 1, . . . , , ) = 0], если для любых 1, . . . , выполняется

 

 

 

 

 

 

 

определены и не равны 0, а значение

 

 

,

 

если ( 1, . . . , , 0), . . . , ( 1, . . . , ,

 

1)

( 1, . . . , ) =

 

 

( 1, . . . , , )

определено и равно

0,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

не определено

в противном случае.

 

 

 

 

Замечание. Оператор минимизации последовательно перебирает числа из натурального ряда и проверяет, удовлетворяет ли текущее число фиксированному эффек-

тивному условию. Эффективное условие записывается в виде уравнения ( , ) = 0. Вычисление значения ( ) происходит следующим образом. Сначала на входных данных , 0 вычисляется значение ( , 0). Если это значение не определено, то ( ) тоже не определено. Иначе если ( , 0) = 0, то вычисления заканчиваются — число 0 будет подано на выход. Если же ( , 0) ̸= 0, то на входных данных , 1 вычисляется

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]