f(x
1
,..., x
k
, y) последовательно для y = 0, 1, 2,... до тех пор, пока не найдется y, обращающее
f(x
1
,..., x
k
, y) в 0. Этот алгоритм не остановится, если f(x
1
,..., x
k
, y) нигде не обращается в 0.
Все функции, которые можно получить из базисных функций за конечное число
шагов только с помощью трех указанных механизмов, называются частично-
рекурсивными. Если функция получается всюду определенная, то тогда она называется
общерекурсивной. Если функция получена без механизма минимизации, то в этом случае
она называется примитивно-рекурсивной.
После того как Чёрч ввел λ–исчисление, Клини доказал, что любую частично–
рекурсивную функцию можно представить в виде λ–терма.
Говорят, что частичная функция ϕ с k аргументами
λ
–определима термом M, когда
M<n
1
><n
2
>...<n
k
> = <ϕ(n
1
,n
2
,...,n
k
)>, если значение ϕ(n
1
,n
2
,...,n
k
) определено, и
•
• M<n
1
><n
2
>...<n
k
> не имеет нормальной формы, если ϕ(n
1
,n
2
,...,n
k
) не определено.
Теорема 17 (Теорема Клини) [1, с. 189]. Частичная функция является частично–
рекурсивной тогда и только тогда, когда она λ–определима.
Для доказательства этой теоремы необходимо, в частности, представление функ-
ции предшествования n → n–1 в виде комбинатора pre.
Таким образом, мы получаем, что множество λ–определимых функций также явля-
ется формализацией интуитивного понятия алгоритма. Это утверждение является содер-
жанием известного тезиса Черча (в узком смысле) [5].
9.2.7 Расширение ламбда–исчисления
Хотя возможно представлять структуры данных в виде λ–выражений, но этот спо-
соб является неэффективным. Например, большинство компьютеров аппаратно поддер-
живают арифметику и разумно использовать такие возможности вместо β–конверсии при
работе с числами. Математически строгий способ взаимодействия исчисления с компью-
терными вычислениями осуществляется с помощью так называемых δ–правил. Идея со-
стоит в том, чтобы добавить некоторое множество новых констант и определить правила,
называемые δ–правилами, для редуцирования аппликаций, содержащих эти константы.
Например, можно добавить натуральные числа и новую константу «+» вместе с δ–
правилом:
+ m n →
δ
m+n
При добавлении новых констант и правил надо быть уверенным, что остается справедли-
вой теорема Чёрча–Россера [1, стр. 84].
9.2.8 Типовое ламбда–исчисление
Типовое ламбда–исчисление необходимо потому, что, во-первых, функция не явля-
ется полностью определенной, пока не указаны ее область определения (множество всех
допустимых входных данных) и область значений (множество всех возможных выходов)
и, во-вторых, структура терма, представляющего функцию, должна нести информацию о
ее области определения и области значений.
Чтобы реализовать это на практике, надо определить некоторые выражения, кото-
рые называются типами и предназначены для обозначения множеств. Сначала выберем
некоторые символы для обозначения элементарных типов. Например, пусть Integer обо-
значает множество всех целых чисел, а Bool обозначает множество истинностных значе-
ний. Из любых двух типов a и b можно построить новый тип
a → b,
обозначающий множество функций, которые определены на a и принимают значения из b.
При обозначении сложных функциональных типов скобки опускаются таким образом,
что, например,
a → (b → с) ≡ a → b → с.
68