Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
posob.doc
Скачиваний:
9
Добавлен:
06.11.2018
Размер:
6.17 Mб
Скачать

3. Теория алгоритмов и рекурсивных функций

Мы начнем с интуитивно ясного понятия алгоритма.

Алгоритм есть метод решения некоторой задачи с входными данными. Этот метод может быть разложен на отдельные единичные шаги, исполне­ние которых и порядок их следования однозначно определены. Этот метод должен иметь возможность описания с помощью текста конечной длины. При этом «решение проблемы с одним входом» есть, в сущности, вычис­ление значения функции для заданного аргумента.

Для того чтобы математически овладеть понятием алгоритма, следует заменить его формализованным понятием, а именно его экспликатом, т.е. интерпретацией. Существуют различные интерпретации понятия алго­ритма, такие, как μ-рекурсивные функции, машины Тьюринга, грамматики типа 0, грамматики Ван-Вайнгаардена и др. При этом эти интерпретации служат также для описания алгоритмов, что означает: каждая конкретная μ-рекурсивная функция, каждая конкретная машина Тьюринга, каждая конкретная грамматика типа 0, каждая конкретная грамматика Ван-Вайн­гаардена описывает определенный алгоритм; она, таким образом, репре­зентирует алгоритм. Мы в дальнейшем не будем делать строгого различия между конкретным алгоритмом и его возможными описаниями (если это не приведет к неясности). Все эти интерпретации эквивалентны в том смысле, что каждый алгоритм, который может быть описан с помощью одной из этих интерпретаций, таким же образом может быть описан и с помощью любой другой из этих интерпретаций. Также и любой формально определенный язык программирования с определенными минимальными требованиями (как, например, присваивание и структура циклов) может рассматриваться как интерпретация понятия алгоритма. В это число попа­дают все имеющиеся языки программирования (машинный код, Ассемб­лер, Бейсик, Алгол 60, Алгол 68, Фортран, Паскаль, Модула-2, Лисп, …).

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

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

Пусть М – бесконечное множество, тогда М является эффективно ну­мерованным (счетным) с помощью биективной функции F:М тогда и только тогда, когда для всех входных данных из  найдется алгоритм, с по­мощью которого для любого п может быть эффективно вычислено значе­ние обратной к F функции в точке п, т.е. F -1(п)  М. В случае, если М конеч­но, где М= п, то в этом определении  следует заменить на {0,1,..., п-1}.

Таким образом, можно говорить об n-м элементе F -1(п) множества М. Если обозначить F -1(п) через xn, то последовательность

x0, х1,…, хn,…

является эффективной нумерацией множества М. Элемент хМ имеет то­гда индекс F(х) . Также говорят, что F кодирует М, F -1 декодирует М.

Пример 3.1. (1) Пусть ={a1,...,ak алфавит. Лексикографический по­рядок над *определяется следующим образом:

Пусть w1, w2 *. Тогда w1w2

(i)  w 1   w 2, или

(ii)  w 1   w 2, w1 vai v1, w2vaj v2, ij, v, v1, v2  *, или

(iii) w 1w 2

Порядок  является полным и нётеровым и * может быть эффективно занумеровано согласно лексикографическому порядку. Иногда также сле­дующий порядок называется лексикографическим:

w 1 w 2

(i) w2 w1v, v*, или

(ii) w1 vai v1, w2vaj v2, ij, v, v1, v2  *.

Этот порядок полный, но не нётеров:

a2 > а1 а2> a1 a1 a2 >… a a2

В лексике применяется этот лексикографический порядок.

(2) Пусть М=, Мпконечно, причем n|=kn, kn>0, МiМj= для ij. Пусть Мn эффективно нумеровано посредством функции Fn Мп  {0,1,…, kn-1}, тогда последовательность

F(0),..., F (k0 – 1), F (0),..., F (k1 – 1),..., F (0),..., F (kn – 1),...

является эффективной нумерацией множества М.

(3) Множество D1×D2, где D1 и D2 являются эффективно счетными, само является эффективно счетным. Пусть Di эффективно нумеруется посредст­вом Gi: Di, i 1,2.

Определим для п  0,

Мn = {(d1,d2)| G1 (d1)+ G2(d2)  n, d1D1, d2D2}

и

Fn ((d1,d2)) = G1 (d1)  nG2(d2), (d1,d2)  Мn.

Тогда, согласно (2), последовательность

(G(0),G(0)), (G(0),G(1)), (G(1),G(0)),(G(0),G(2)),…

является эффективной нумерацией D1×D2. Oна называется диагональной нумерацией. 

В дальнейшем, пусть Е и Dэффективно счетные множества. (Боль­шей частью Е = ×…×, D = *). Тотальная функция F: ЕD называ­ется вычислимой (а также рекурсивной), тогда и только тогда, когда существует один для всех аргументов из Е завершающийся алгоритм, с помощью которого для каждого аргумента xЕ можно эффективно вычис­лить значение функции F(x) D. Частичная функция F: ЕD называется частично вычислимой (а также частично рекурсивной) тогда и только то­гда, когда существует алгоритм, который обеспечивает следующее. Если F(x), xЕ, определено, то алгоритм завершается при вводе х и возвращает F(x) D); если F(x), xЕ, не определено, то при вводе х алгоритм не за­вершается за конечное время.

Тем самым понятия «алгоритм» и «частично вычислимая функция» со­ответствуют друг другу в следующем смысле: каждый алгоритм опреде­ляет частично вычислимую функцию, которая посредством него вычисля­ется.

Полагая в предыдущих определениях E ××, D=, получают чи­словые вычислимые и соответственно частично вычислимые функции. В сущности, можно ограничиться числовыми функциями : . Именно пусть G: ЕD вычислимая (соответственно частично вычислимая) функ­ция. Тогда существуют биективные функции F1: Е и F2 D, такие, что Е посредством F1 и D посредством F2 эффективно счетные. Пусть : функция, определяемая посредством:

(n) = F2(G (F (n))), п .

Очевидно, является вычислимой (соответственно частично вычисли­мой) и выполняется: G(x)=F( (F1(x))), хЕ. Действительно, из определе­ния следует: F( (n)) = G (F (n)). Положим теперь х= F(n), тогда п = F1(x) и F( (F1(x)))=G(x).

Множество МD называется рекурсивно перечислимым тогда и только тогда, когда существует вычислимая функция F ЕD, с подходящим об­разом выбранным множеством Е, такая, что область значений функции F совпадает с М, т.е., М={F(x)  хЕ} или, короче, М = F(E). В дальнейшем пустое множество  также является рекурсивно перечислимым.

Название «перечислимое» множество отражает следующую сущность: Пусть z0, z1,…,zn, …– эффективная нумерация Е. Тогда M может быть пе­речислено посредством

F(z0), F(z1), …, F(zn), …

Множество М D называется рекурсивно разрешимым (или рекурсив­ным), если М и D – М рекурсивно перечислимы.

Так как оказывается, что введенные уже перечислимые и разрешимые формальные языки являются в точности рекурсивно перечислимыми и ре­курсивно разрешимыми формальными языками, то в дальнейшем мы бу­дем, если это не приведет к неясностям, слово «рекурсивный» опускать.

Пусть МD. Определим тогда характеристическую функцию M {0,1} множества М (относительно D) посредством:

M (x)  .

Тогда справедливо, что M D разрешимо тогда и только тогда, когда M вычислима. Это может быть показано следующим образом:

Для М =  или М = D, М является разрешимым ( перечислимо по оп­ределению и Dперечислимо посредством тождественной функции, кото­рая, конечно, вычислима). Далее, в этих случаях выполняется, что характе­ристическая функция M является вычислимой (так как она в случае М =  всегда принимает значение 0 и в случае М=D всегда значение 1). Теперь рассмотрим случай М и М D.

(i) Пусть M – вычислимая. Пусть М и D–М произвольные, но фиксированные элементы. Мы определим две функции F0,F1:DD как

F0(x) = ; F1(x)=

Конечно, F0 и F1 являются вычислимыми и выполняется: F0(D)=DМ и F1(D)= М. Отсюда DМ и М перечислимы и М – разрешимо.

(ii) Пусть М – разрешимо. Тогда М и DМ – перечислимы. Поскольку М   и М D, то существуют две вычислимые функции F0 и F1, которые перечисляют множества DМ и М:

D M у0, у1, …,уn,…,      

M x0, x1,…,xn,….

Мы хотим теперь для zD вычислить значение M (z). Для этого при­меним следующий алгоритм: для каждого i = 0, 1,2... вычислим с помощью F0 и F1 элементы yi и хi. А так как z должен встретиться или в последова­тельности (уn), или в последовательности (xп), то существует такое т, что выполнимо z = ут или z = xm. В первом случае мы положим M (z) = 0, а во втором случае положим M (z)=1. Тем самым характеристическая функция M – вычислимая.

Подобное выполняется и для перечислимых множеств. Пусть МD. Мы определим частичную характеристическую функцию:D{1} множе­ства М (относительно D) посредством

(x)

Тогда справедливо, что М D перечислимо тогда и только тогда, когда частично вычислимая. Это может быть показано следующим образом:

(i) Пусть частично вычислимая. В случае, если (x) является не определенной для всех x D, тогда М =  и поэтому является перечис­лимым множеством.

Пусть теперь ()=1 для D. Тогда выполняется М. Определим функцию F: ( – {0})×D D посредством

F((n,x))=

Так как ( – {0})×D, согласно примеру 3.1(3), является эффективно счетным, то функция F – вычислимая. А вследствие М={F((n,x))  п1, xD}, М является перечислимым.

(ii) Пусть М – перечислимое. Для М =  функция нигде не опреде­лена и поэтому частично вычислимая. Для М  существует вычислимая функция F:ЕD, которая перечисляет М:

M: x0, x1, …,xn, …

Мы хотим теперь для элемента zD вычислить значение (z). Для этого сравним последовательно z с хi, i  0. Если мы найдем т0, для кото­рого = xт, то положим (z)  1. В противном случае (z) не опреде­лена.

Из-за этих обстоятельств перечислимые множества называют также по­луразрешимыми множествами. Таким образом, справедливо, что множе­ство М D разрешимо тогда и только тогда, когда М и D–М полуразре­шимы.

Определим теперь важный экспликат понятия частично вычислимой функции, а именно -рекурсивные функции. Эти функции отображают (*)n, п (п-кратное декартово произведение множеств *) в *. Сначала определим три вида простых базовых функций:

(i) Для любого а отображение Na:* *, Na(w) = wa, w  *, называ­ется функцией следования.

(ii) Для любого п  0 отображение Сn:(*)n*, Сn(w1,w2,...,wn)=, wi*, 1 i n, называется п-местной нуль-функцией.

(iii) Для любого п  1 и 1jп отображение :(*)n  *, (w1,w2,...,wn)=wj, wi *, 1i n называется п-местной проекцией.

Определим далее три функционала, которые позволяют получить но­вые функции из уже ранее определенных функций.

(i) Пусть п  0, т  1 и H: (*)m*, Gj: (*)n *, 1jm. Функция F: (*)n  * образуется из Н путем подстановки функций G 1, G2,…, Gm тогда и только тогда, когда для всех wi*, 1i п, выполняется:

F (w1, w2,..., wn) = Н (G1 (w1,..., wn),...,Gm (w1,..., wn)).

(ii) Пусть n  1, G: (*)n-1* и На: (*)n+1 *, a. Функция F:(*)n* образуется из G и Ha, a, посредством рекурсии тогда и только тогда, когда для всех wi*,1 in, имеет место

F(,w2,…,wn)  G(w2,…,wn), F(w1a,…,wn)  Ha(F(w1,…,wn),w1,…,wn), a.

(iii) Пусть n  0 и G: (*)n+1*. Функция F: (*)n*образуется из G пу­тем минимизации относительно a тогда и только тогда, когда для всех wi *, 1 i п выполняется:

F(w1,,wn)  a G (w0,w1,…,wn).

При этом аG (w0,w1,…,wn)] определена следующим образом: в слу­чае, если найдется некоторое т0, такое, что G (аl, w1,..., wn), 0lm, опре­делена, причем G(аl,w1,..., wn), 0l<m и G(аm,w1,...,wn)=, то выполняется: а [G (w0, w1,..., wn)] = am. В противном случае а [G (w0, w1,..., wn)] не опре­делена.

С помощью базовых функций и функционалов определяют примитивно рекурсивные и -рекурсивные функции. Семейство примитивно рекурсив­ных (соответственно -рекурсивных) функций над  есть наименьшее се­мейство функций F:(*)n*, n, которое содержит a, а, C0, , n1, и замкнуто относительно подстановки и рекурсии (соответственно подста­новки, рекурсии и минимизации).

Ясно, что -рекурсивная функция в общем случае является частично рекурсивной, тогда как примитивно рекурсивная функция всегда вполне ‑рекурсивна.

Из приведенных выше определений получают числовые функции из n в , полагая, что  одноэлементный алфавит, ={а}, и идентифицируя am с числом т. В частности, числу 0 соответствует элемент . Семейство чи­словых примитивно рекурсивных функций (соответственно числовых - ре­курсивных функций) есть наименьшее семейство функций F: n , n  0, которое содержит N (=Na), С, , n 1 и замкнуто относительно подста­новки и рекурсии (соответственно подстановки, рекурсии и минимизации).

Для того чтобы получить компактное описание -рекурсивных функ­ций над , введем -рекурсивные программы. Каждая -рекурсивная про­грамма имеет один или несколько входов в зависимости от того, на какое количество аргументов из * она рассчитана. Каждая п-местная ‑рекурсивная программа представляет п-местную -рекурсивную функ­цию (служит для вычисления этой функции). Выберем (всюду, где это возможно) следующие обозначения: -рекурсивная функция будет обозна­чаться большими буквами, -рекурсивная программа, которая ее вычис­ляет, будет обозначаться теми же самыми малыми жирными буквами. Пусть ={a 1,..., a k}.

(i) Программа n – одноместная и представляет функцию следования N, 1 i k.

(ii) Программа c нуль-местная и представляет нуль-функцию С0.

(iii) Программа u может иметь любое число входов п  1 и представляет .

(iv) Пусть -рекурсивные функции Н: (*)m * и Gj: (*n, ljn, n  0, m  1 представляются через т-местные (соответственно, п-местные) программы h и gj. Функция F, которая образуется путем подстановки G1,...,Gm в Н, представляется п-местной программой h (g1,..., gm).

(v) Пусть -рекурсивные функции G(*)n-1 * и Н:(*n+1 *, 1ik, n  1 представлены через (n – 1)-местные (соответственно (n+1)-мест­ные) программы g и h. Функция F, которая образуется путем рекур­сии из G и Н, 1 ik, представляется n-местной программой [gh,..., h].

(vi) Пусть -рекурсивная функция G: (*)n+1*, n 1 представлена (n+1)‑местной программой g. Функция F, которая образуется из G пу­тем минимизации относительно ai, 1ik, представляется n-местной программой g.

Синтаксис языка -рекурсивных программ (без учета разрядности), таким образом, задан следующими продукциями:

Pn…ncuP(L) [Pk+1  P… P, L PL  P

-рекурсивная программа, в которой не встречаются символы , , называ­ется примитивно рекурсивной программой. В случае числовых ‑рекур­сивных программ k = 1 и индексы при n и  опускаются:

PncuP(L)  [PP  P.

Пример 3.2. (1) Мы хотим функции , п  2, 2jn представить с помо­щью программ. Пусть uj программа произвольной размерности большей или равной j, такая, что примененная к (w1,...,wn), где n j, воз­вращает слово wj (u1= u). Тогда [uj uk] есть программа размерности  j+1, такая, что примененная к (w1,..., wn), где n j+1, возвращает слово wj+1. По­этому [uj uk] представляет следующую функцию F:

F (, w2, …,wn) = (w2, , wn),

F (w1a,w2,…,wn) = (F (w1,w2,…,wn), w1,w2,...,wn), a.

Тем самым выполнено:

F (w1a, w2,…, wn) =... =F (, w2,..., wn) = (w2,..., wn)= wj+1.

(2) Представим Сn,п0 с помощью п-местной программы cn. Функция Сn представляется с помощью [cn-1 uk ] (где c0 = c). Тогда cn-1uk ] представ­ляет следующую функцию F:

F (, w2,…, wn) = Cn-1(w2, …, wn),

F (w1a,w2,..., wn) = (F (w1,w2,...,wn), w1, w2,, wn), a,

при этом выполняется:

F (w1a, w2,..., wn) =... = F (, w2,..., wn) = Cn-1(w2,..., wn).

(3) Представим одноместную постоянную функцию Kv, v*, где Kv(w)v, для всех w*с помощью программы. Пусть kv – одноместная про­грамма, которая представляет Kv. Тогда uk] представляет функцию K = С1 и na (kv) представляет постоянную функцию Kva, a. Поэтому na(kv) представляет следующую функцию F:

F (w) = Na (Kv (w)) = Na (v) = va.        

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

Предложение 3.1. Пусть G*n*, H*m*, Ha**, a, – примитивно рекурсивные (соответственно -рекурсивные) функции. Тогда следующие функции F тоже являются примитивно рекурсивными (соот­ветственно -рекурсивными)

(i) F(w1,…,wn)=G(w(1),…,w(n)),где  – перестановка из …n.

(ii) F(w1,…,wl1,wl+1,…,wn,v1,..,vm)=G(w1,…,wl1,H(v1,..,vm),wl+1,..,wn).

(iii) F(w1,…,wn,)G(w1,…,wn),

F(w1,…,wn,w0a)=Ha(F(w1,…,wn,w0)),a.

Доказательство Функции G, H, Ha могут быть представлены про­граммами g, h, ha, a.

(i) F представяется программой g(u,…,un). Поэтому справедливо:

F(w1,…,wn)=G(Uw1,…,wn,…,U(w1,…,wn))=G(w(1),…,w(n)).

(ii) F представляется программой g(u1ul-1h(unun+m-1)ulun-1).

(iii) программа gh(u)…h(u)(un+1u1un) представляет функцию F1. Тогда справедливо:

F1(w1,…,wn,w0)=F2(w0,w1,…,wn),

где F2 представлятся программой gh(u)…h(u), таким образом,

F2(, w1,…,wn) = G(w1,…,wn),

F2(w0ai,w1,…,wn) (F2(w0,w1,…,wn),w0,w1,…,wn))=

= (F2(w0,w1,…,wn)), 1 i k.

Тем самым получим

F1(w1,…,wn, ) G(w1,…,wn),

F1(w1,…,wn,w0a) = (F(w1,…,wn,w0)), 1 i k

и F1 совпадает с F.

Пример 3.3. (1) Мы хотим записать программу con2 для функции CON2*×** с CON2w1,w2w1w2 Справедливо:

CON2w1,    U(w),

CON2w1,w2a  Na(CON2w1,w2), a.

Согласно предложению 3.1 (iii) CON2 является примитивно рекурсивной и con2u n(u) n(u) u2 u .

(2) Программа conn для n-местной функции CONn, n  , с CONnw1,…,wn w1,…,wn имеет вид: con2 conn-1 u1un-1un. 

Пример 3.4. Мы хотим представить теперь некоторые числовые функ­ции программами. Все x,y лежат в .

(1) Функция следования.

Пусть Nt  , t1, функция Nt(x)x+t, таким образом, N1(x)N(x) и Nt+1(x)N(Nt(x)).

n1n, nt+1n(nt), t 1.

(2) Константа.

Пусть K n – n-местная постоянная функция, причем K(x1,…,xn)i.

а) Нульместная константа.

kc, kni(c).

b) Одноместная константа. K=C0, K(x+1)=U(K(x),x).

k=c u, k=(ni k).

c) n-местная константа, n2. K(x1,…,xn)=K((x1,…,xn)).

k0=k (u), k i=ni (k0).

(3) Сумма.

SUM(0, y) = y = U(y),

SUM(x+1,y)=SUM(x,y)+1=N(SUM(x,y))=N(U(SUM(x,y)),x,y).

sum= un(u).

(4) Произведение.

PROD(0, y)=0= K(y),

PROD(x+1,y)=SUM(PROD(x,y),y) =

=SUM(U(PROD(x,y),x,y),U(PROD(x,y),x,y)).

prod =ksum(u u3) =  cuunuu u uu)].

(5) Потенцирование.

EXP(0, y) = 1 = K(y),

EXP(x+1,y) = PROD(EXP(x,y),y)=

=PROD(U(EXP(x,y),x,y),U(EXP(x,y),x,y).

exp=kproduu3ncucuunuuuuuuuuu

(6) Функция предшествования.

V(0) = 0 = C0,

V(x+1) = x = U(V(x),x).

v = c u2   cu u .

(7) Разность.

DIFF1(0, y) = y = U(y),

DIFF1(x+1,y) =V(DIFF1(x,y)) = V(U(DIFF1(x,y),x,y)

DIFF(x, y) = DIFF1(y,x) = DIFF1(U(x,y),U(x,y).

diff1=uvu = ucuu(u), diff = ucuu uuuu.

(8) Факториал.

FAK(0) = 1 = K,

FAK(x+1) = PROD(FAK(x),N(x)) =

= PROD(U(FAK(x),x),N(U(FAK(x),x))).

fak = kprodunu2=nccuunuu[uuuunuu.

(9) Знак.

SGN(0) = 0 = C0,

SGN(x+1) = 1 =K(SGN(x),x).

sgn = c kcn(cu(u)).

Покажем теперь, что алфавит  а1,…,аk может эффективно нумеро­ваться с помощью биективной примитивно рекурсивной функции Сk. Здесь снова речь идет о лексикографическом порядке. Мы определяем Сk * ( отожествляется с а) через

Сk (   Сk(а,…,а)  ij kn-j.

Функция Сk отображает биективно n на числа между k n-1+kn-2+…+k+1 и kn +kn-1+…+k2+k, n  1. Вследствие того, что

ij kn-j = k ij k n-1-j+in,

справедливо:

Ck() = 0 = C0,

Ck(wai) = SUM(PROD(Ck(w),k) i) = Ni(Pk(U(Ck(w),w))),1ik,

где Pk(w) = PROD(U(w),K(w)).

Это дает в итоге примитивно рекурсивную программу

c k  c n1 pk u…nkpk u  p kprod u nk  cu 

Обратно, можно показать, что имеется биективная примитивно рекурсив­ная функция Dk  ** (в действительности Dk *) с Dk(Ck(w)) = w, w*. Тем самым мы доказали следующее предложение.

Предложение 3.2. * эффективно нумеруется с помощью Ck. 

Покажем теперь, что n, n  2, эффективно счетно. Докажем это сначала для n = 2.

Биективная примитивно рекурсивная функция   2 называется парной функцией тогда и только тогда, когда она является строго монотонной по каждому аргументу, т.е.: х1х2  х1+1 х2 и х1 х2  х1х2 +1 справедливо для всех х х .

Из условия монотонности следует, что хх  хх. Мы покажем сначала, что х  х1 0. Вследствие 00   справедливо 000 и из х  х1 0 следует х  х1+1 0 , таким образом, х х1+1 0 . Из х  х1 0 сразу следует х1  хх для всех х2. Аналогично проводится доказательство для второго аргумента.

Благодаря биективности  имеются две биективные функции  , х1, х2  х1 и хх   х. Из этого следует 1х), (х = х, потому что для каждого х однозначно найдутся хх, та­кие,что х = хх. Поэтому справедливо:

1х), (хх1,х2, хх) =  хх  = х.

Для данного х, 1х) и (х можно охарактеризовать следующим образом: х  1х)  х, х2  2х)  х определены однозначно тем, что справедливо: хх = х. Ограничение 1х)  х, 2х)  х (конечный поиск) дает в результате, что 1 и 2 – примитивно рекурсивные.

Следующие функции используются часто как парные функции:

(1) ху (х+у+1)(х+у)+х (диагональная нумерация):

x y

0

1

2

3

4

0

0

1

3

6

10

1

2

4

7

11

2

5

8

12

3

9

13

4

14

(z) = z ,

2(z)  – (z).

(2)   х у  = 2х (2у +1) –1.

Предложение 3.3. Парные функции существуют.  с помощью некото­рой парной функции эффективно нумеруется. 

Концепцию парной функции можно обобщить на n, n  2. Пусть  – парная функция. Определим тогда

n+1х1,…,хn+1) = nх1,…,х n-1, 2хn, хn+1)), n  2.

Конечно, n – снова биективная и примитивно рекурсивная функция. Обратные функции

i,n+1: ¥¥, с i,n+1 ( n+1 х1,…,х n+1)) = х i,

где 1in+1, можно определить через

i,n+1(z) =

1,2 = 1, 2,2 = 2.

Причем  i,n+1 требуются только для 1  i n+1 и n  2.

Предложение 3.4. n, n  2, эффективно нумеруется с помощью примитивно рекурсивной функции. 

Предложение 3.5. (*)n, n  1, эффективно нумеруется с помощью примитивно рекурсивной функции.

Доказательство. Функция С:(*)n, которая определяется через С(w1,…,wn) = n(Ck(w1),…,Ck(wn)), wi*, дает эффективную нумерацию для n  2. Случай n =1 уже рассмотрен в предложении 3.2. 

В сущности, можно ограничиться одноместными числовыми прими­тивно рекурсивными функциями и -рекурсивными функциями. Для за­данной функции F(*)n* мы определим функцию   че­рез(x) =Ck(F(Dk(1,n(x)),…,Dk(n,n(x)))). Тогда вместе с F функция тоже будет примитивно рекурсивной или - рекурсивной и справедливо:

F(w1,…,wn) = Dk ( (C(w1,…,wn))),

так как из wi = Dk (i,n (x)) следует Ck (wi)  i,n(x) и

C(w1,…,wn)  n(Ck(w1),…,Ck(wn)  x.

Таким образом, справедливо: (C(w1,…,wn)) = Ck(F(w1,…,wn)), отсюда следует F(w1,…,wn) = Dk ((C(w1,…,wn))).

Функции Ck, Dk, n, 1,n,…,n,n являются примитивно рекурсивными и относительно «просто» строятся. Если функция F является «сложной», это выражается в «сложной» функции (но не в «сложном» кодировании).

Следующее предложение рассматривает применение предложения 3.4 и показывает, что «параллельная рекурсия» не выводит из класса примитивно рекурсивных (соотв. -рекурсивных) функций.

Предложение 3.6. Пусть n, m  1и Gi  n-1, Hi  m, 1im, – при­ми­­тивно рекурсивные (соотв. -рекурсивные). Тогда функции Fin, 1im,

где Fi (0, x2,…,xn) = Gi(x2,…,xn),

Fi (x1+1, x2,…,xn) = Hi (F1 (x1,x2,…,xn),…,Fm(x1,x2,…,xn)),

тоже являются примитивно рекурсивными (соотв. -рекурсивными).

Доказательство. С помощью примитивно рекурсивной (соотв. ‑ре­курсивной) функции

H(y1,…,ym) = m(H1(y1,…,ym),…,Hm(y1,…,ym))

мы определяем примитивно рекурсивную (соотв. -рекурсивную) функ­цию F  n через

F(0, x2,…,xn) = m (G1 (x2,…,xn),…,Gm(x2,…,xn)),

F(x1+1, x2,…,xn) = H(1,m(F(x1,x2,…,xn)),…,(m,m(F(x1,x2,…,xn))).

С помощью полной индукции по x1 мы покажем, что справедливо: Fi(x1,…,xn) = i,m(F(x1,…,xn)).

(i) i,m(F(0, x2,…,xn)) = i,m(m(G1(x2,…,xn),…,Gm (x2,…,xn))) =

= Gi (x2,…,xn) = Fi (0,x2,…,xn), 1 i n.

(ii) i,m(F(x1+1,x2,…,xn)) =

= i,m(H(1,m (F (x1,…,xn)),…, m,m(F(x1,…,xn)))) =

= i,m(H(F1 (x1,…,xn),…, Fm (x1,…,xn))) =

= i,m(m(…,Hi(F1(x1,…,xn),…, Fm(x1,…,xn)),…)) =

= Hi (F1(x1,..,xn),…,(Fm(x1,…,xn)) = Fi(x1+1,x2,…,xn), 1in.

Так как i,m – примитивно рекурсивная, то Fi тоже является примитивно рекурсивной (соотв. -рекурсивной). 

n-местный предикат P над  называется примитивно рекурсивным, если имеется примитивно рекурсивная функция H:n , такая, что:

Р истинно на (x1,…,xn) тогда и только тогда (обозн. Р(x1,…,xn)),

когда H (x1,…,xn) = 1;

Р ложно на (x1,…,xn) тогда и только тогда (обозн. Р(x1,…,xn)),

когда H (x1,…,xn) = 0.

Функция H называется характеристической функцией предиката Р. nместный предикат Т определяется тем, что он истинный на каждом (x1,…,xn) n.

Предложение 3.7. Пусть G1,…,Gk – примитивно рекурсивные функции и Р1,…,Рk-1 – примитивно рекурсивные предикаты. Тогда функция F:n, такая, что

F(x1,…,xn) = (Р1(x1,…,xn)G1(x1,…,xn),

Рk-1(x1,…,xn)Gk-1(x1,…,xn),

ТGk(x1,…,xn))

будет примитивно рекурсивной.

Доказательство. Пусть Hi – характеристическая функция предиката Рi, 1 i k-1. Тогда справедливо:

F(x1,…,xn) = G1(x1,…,xn)  H1(x1,…,xn) +

+ G2(x1,…,xn)  (1- H1(x1,…,xn))  H2(x1,…,xn) +

+ Gk(x1,…,xn)  (1-H1(x1,…,xn))… (1-Hk-1(x1,…,xn)). 

Пример 3.5. (1) Функция «больше»: GR(x,y) = SGN (DIFF(x,y)), gr=sgn(diff).

(2) Функция «равно»:

GL(x,y)=DIFF(K(x,y),SUM(DIFF1(x,y),DIFF(x,y))),

gl = diff (k sum (diff1 diff)).

Существуют хорошие основания предполагать, что -рекурсивные функции действительно являются интерпретацией понятия частично вы­числимых функций (в связи с алфавитом ) и тем самым понятия алго­ритма. Все предложенные интерпретации (некоторые из них мы еще обсу­дим) оказываются эквивалентными -рекурсивным функциям и все интуи­тивно описанные частично вычислимые функции могут быть точно опре­делены с помощью -рекурсивных функций. Это подводит к тезису Тью­ринга – Чёрча: «-рекурсивная функция является интерпретацией понятия частично вычислимой функции». Другими словами, что каждая частично вычислимая функция является -рекурсивной.

Мы хотим теперь эффективно нумеровать одноместные числовые ‑рекурсивные программы.

Их синтаксис имеет вид:

Pncu  P(L)  [PP  P,

LPL  P.

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

Исходный алфавит  =n, c, u       ,  содержит 9 символов. Мы эффективно нумеруем * с помощью С9. Пусть

w0, w1, w2,…,wn,…

– эффективная нумерация. Если мы хотим вычислить индекс одноместной программы w, мы ищем такой m, что w = wm. Затем мы проверяем слова wi, 0 i m, являются ли они одноместными программами. Таким способом мы получим список одноместных программ

w, w, w,…,w = wm = w.

Тем самым w получит индекс r. Если мы хотим перейти от индекса r к программе, то мы для 0ir таким же способом, что и выше, вычислим rтую одноместную программу.

Предложение 3.8. Одноместные -рекурсивные программы эффек­тивно нумеруются. 

С помощью эффективной нумерации одноместных -рекурсивных про­грамм мы строим теперь тотальную функцию H: , которая не является -рекурсивной.

Сначала сопоставим каждой -рекурсивной программе w её длину L (w); причем L (w) – число символов n, c, u     , , которые встречаются в w (круглые скобки не считают). Для каждой длины t 1 существует только конечное число программ w, таких, что L(w) = t. Мы определим функцию М:  через

М (0) = 0,

М (t) = max  w   w одноместная программа,

L (w) = t, w  определено t .

Вследствие того, что L (n t) = t и n t = t, t  1, М является тотальной функцией, для которой М (t)  t. Пусть H:  – тотальная функция

H (t) = М (2t)+1.

Предложение 3.9. Функция H не является -рекурсивной. (Согласно тезису Тьюринга – Чёрча: H не является вычислимой.)

Доказательство. Мы проведём непрямое доказательство. Пусть H ‑рекурсивная функция. Тогда существует программа h, которая представ­ляет H. Пусть L(h) = t. Тогда мы рассмотрим программу h(nt) с L(h(nt)) = 2t. Отсюда h(nt)(0)  М (2t). С другой стороны, h(nt)(0) = h(t)= H(t) =М (2t)+1 и получим противоречие. 

С помощью тезиса Тьюринга – Чёрча получают, что функция H: , которая определяется следующим образом:

H(r) =

не является вычислимой.

Предложение 3.10. Пусть R – множество всех индексов одноместных -рекурсивных программ, которые завершаются, если индексы заменяются на 0. Тогда R   является неразрешимым, однако перечислимым множеством и, таким образом, является полуразрешимым. (Тем самым  –R неперечислимо.) 

(Позднее увидим, что предложения 3.9 и 3.10 эквивалентны известной проблеме останова машины Тьюринга.)

Пример 3.6. Определим последовательность функций G0, G1,…, Gn, … через

G0 (у) = (у),

Gх+1(0) = Gх(1),

Gх+1(у+1) = Gх(Gх+1(у)).

Каждая из этих функций примитивно рекурсивна. Функцию Gn+1 можно представить через программу gn+1gnnc)gnu n, где g0=n.

Можно показать, что тотальная функция F:2, которая определяется через F(x,y) = Gх(у), -рекурсивная, но не примитивно ре­курсивная. Функция F может быть определена посредством

F (0, у) = у+1,

F (х+1, 0) = F (х, 1),

F (х+1, у+1) = F (х, F (х+1, у))

и является хорошо известной функцией Аккермана. 

Покажем теперь, что -рекурсивные функции частично вычислимы по Тьюрингу.

Предложение 3.11. Пусть H, G, G1,…,Gm функции, частично вычислимые по Тьюрингу. Тогда функция F также частично вычислима по Тьюрингу, если

(i) F получается путем замены из H и G1,,Gm,

(ii) F получается путем рекурсии из G и H,

(iii) F получается путем минимизации из G.

Доказательство. Мы покажем только (i). Пусть TH, TG…,TG – односто­ронние детерминированные машины Тьюринга, которые вычис­ляют функции H, G1,…,Gm. Мы строим машину Тьюринга Т, которая вы­числяет функцию F из (i).

Пусть H – m-местная и Gj – n-местная функция. Машина Тьюринга Т стартует при вводе данных х1еехn и изменяет их на $х1еехnZ0. Она ко­пирует х1еехn справа от Z0 и моделирует TG. Если TG останавливается (таким образом, если G1 (х1,…,хn) определена), Т копирует содержимое ленты, которое стоит справа от Z0 (причем символы пробела стираются), на место слева от $.

Пусть слева от $ уже стоит G1 (х1,…,хn)ееGj-1(х1,…,хn). Т опять копи­рует х1еехn справа от Z0 и моделирует TG. Если TG останавливается, то Т изменяет содержимое ленты слева от $ на G1(х1,…,хn)е...е Gj-1(х1,…,хn)еGj(х1,..,хn). Это выполняется для j=1,…,m. Затем $ и содержи­мое ленты справа от $ стирается, Z0 помещается перед оставшимся содер­жимым ленты и моделируется TH. Если машина Тьюринга продолжает стоять, то она вычислила H(G1(х1,…,хn),…,Gm(х1,…,хn)). 

Предложение 3.12. Каждая -рекурсивная функция частично вычис­лима по Тьюрингу.

Доказательство. Функции следования, нуль-функции и функции про­екции, очевидно, вычислимы по Тьюрингу. Тогда, согласно предложению 3.11, все -рекурсивные функции частично вычислимы по Тьюрингу. 

Согласно тезису Тьюринга – Чёрча ясно, что каждая частично вычис­лимая по Тьюрингу функция -рекурсивна. Мы хотим это показать явно для случая одноместных числовых частично вычислимых по Тьюрингу функций.

Ограничимся машинами Тьюринга с алфавитом ленты {0,1}. При этом 0 означает пустой символ. Предположим, не уменьшая общности, что ма­шины Тьюринга имеют точно одно конечное состояние, обозначим через ,,.., – множество состояний, где – начальное состояние и – конеч­ное состояние. Пусть машина Тьюринга останавливается только в конечном состоянии . (Это означает, что функция перехода  вполне опре­делена на ,…,{0, 1}.)

Каждую ситуацию BmB0SA0An можно представить четверкой чисел, а именно (i, S, M, N), где M =Bj2j и N=Aj2j.

В этом представлении прямой переход можно легко смоделировать.

Пусть ,S)  (, S1, D), D, причем 1 означает движение вправо и 0 – движение влево. Проекции обозначаются через соответствующие ин­дексы и знак черты над состояниями опускается: 1i,S) = j, 2i,S) = S1, 3i,S) = D.

Для D=1 конфигурация, непосредственно следующая за конфигурацией BmB0SA0An, а именно BmB0S1A0An, представляется четверкой (j,A0,S1+2M,(N-A0)). Пусть P(n) = n mod 2 и H(n)= n div 2. Тогда следую­щая четверка может быть записана как

(1i,S), P (N), 2i,S)+2M, H(N)).

Для D = 0 роли M и N меняются.

Получим, таким образом, для ik S , M, N

(i, S, M, N) ⊢ (3i, S) = 1(1i, S), P(N), 2i, S)+2M, H(N)),

3i, S) = 0(1i, S), P(M), H(M),2i, S)+2N)).

Продолжим  до тотальной функции :23 посредством

  i, S) = (k+1,0,1) если i = 0 и S 0, либо

1 ik и S 2, либо

ik+1 и S0.

Тем самым функции

R1(i, S, M, N) = 1i, S),

R2(i, S, M, N) = (3i, S) = 1  P (N), T  P (M)),

R3(i, S, M, N) = (3i, S) = 1 2i, S)+2M, TH(M)),

R4(i, S, M, N) = (3i, S) = 1  H(N), T2i, S) +2N))

согласно предложению 3.7 – примитивно рекурсивные и моделируют пря­мой переход машины Тьюринга:

(i,S,M,N)⊢(R1(i,S,M,N), R2(i,S,M,N), R3(i,S,M,N), R4(i,S,M,N)).

Для того чтобы моделировать не только один прямой переход, но и произвольно много прямых переходов, мы введём функции Tj(t, i, S, M, N), 1j4, t0. Причем T1(t, i, S, M, N) указывает состояние, которое получается из конфигурации (i, S, M, N) после t прямых переходов. Подобным же образом T2(t, i, S, M, N) указывает символ, T3(t, i, S, M, N) указывает число M и T4(t, i, S, M, N) указывает число N, которые получаются после t прямых переходов.

Очевидно, справедливо:

T1(0,i,S,M,N)=i, T2(0,i,S,M,N)=S, T3(0,i,S,M,N)=M, T4(0,i,S,M,N)=N,

Tj(t+1,i,S,M,N)=Rj(T1(t,i,S,M,N),T2(t,i,S,M,N),T3(t,i,S,M,N),T4(t,i,S,M,N)), потому что t+1 прямых переходов из конфигурации (i, S, M, N) дают в результате то же самое, что и прямой переход из t-ой конфигурации.

Согласно предложению 3.6, функции Tj, 1j4, являются примитивно рекурсивными.

Теперь пусть начальная конфигурация машины Тьюринга есть , n  0. Этому соответствует четверка (1, SGN(n), 0, H(2n-1)). Тогда функции Tj(t, 1, SGN(n), 0, H(2n-1)), 1 j 4, дают конфигурацию машины Тьюринга после t прямых переходов. Если машина Тьюринга останавливается, то ей требуется в точности T1(t, 1, SGN(n), 0, H(2n-1)) прямых переходов до остановки. Если она не останавливается, то T1(t,1,SGN(n), 0, H(2n-1)) не определена. Не уменьшая общности, допустим, что машина Тьюринга ос­танавливается только в конфигурации вида 01m. Тогда, если

T4 ( T1 (t, 1,SGN(n), 0, H(2n-1)), 1, SGN(n), 0, H(2n-1)) = 2m-1,

m указывает значение функции F, вычисляемой машиной Тьюринга в точке n. Так как T1, T4 и «логарифмическая функция» примитивно рекурсивны, то F – -рекурсивная.

Таким образом, мы без использования тезиса Тьюринга – Чёрча пока­зали следующую эквивалентность.

Предложение 3.13. Семейство -рекурсивных функций совпадает с семейством функций, частично вычислимых поТьюрингу.

Тем самым -рекурсивные функции, машины Тьюринга и, согласно предложению 2.4, грамматики типа 0 и грамматики Ван-Вайнгаардена являются интерпретациями понятия алгоритма. Теперь рассмотрим вопрос разрешимости для машин Тьюринга и для контекстно-свободных языков.

Следующую проблему назовем «проблемой останова» машины Тьюринга. Пусть дана машина Тьюринга Т и слово w над своим входным алфавитом. Пусть указан алгоритм, который завершается для каждой пары Т, w и решает, останавливается или нет Т с входным словом w. «Проблема остановки машины Тьюринга с пустой лентой» является специальным случаем проблемы останова машины Тьюринга, а именно для случая w = . Так же, как и в доказательстве предложения 3.12, мы рассматриваем машины Тьюринга.

T = (…    ). 

Через такие машины Тьюринга можно представить все одноместные числовые -рекурсивные функции. Очевидно, что множество этих машин Тьюринга эффективно счетное. Таким образом, возможно каждой такой машине Тьюринга сопоставить некоторый индекс.

Предложение 3.14. Пусть S – множество всех индексов машин Тью­ринга вида , которые завершают работу при начальной конфигурации . Тогда S   неразрешимо.

Доказательство. Через доказательство предложения 3.11 и замечание к предложению 3.12 можно каждой -рекурсивной программе сопоставить машину Тьюринга вида , которая вычисляет ту же самую функцию, что и программа. Если бы S было разрешимым, то R по предложению 3.10 было бы разрешимым по следующему алгоритму. Для выбранного индекса r -рекурсивной программы строится индекс s соответствующей машины Тьюринга. И далее решают, то ли sS, то ли s–S. В первом случае выполняется rR, во втором случае – r–R.

Это рассуждение показывает, что разрешимость S влечет разрешимость R. Тем самым разрешимость S ведёт к противоречию с предложением 3.10. 

Предложение 3.15. Проблема остановки машины Тьюринга с пустой лентой и проблема остановки машины Тьюринга неразрешимы. 

Предложение 3.15 показывает более глубокую причину, почему функция H из предложения 3.9 невычислима: не существует алгоритма, который может установить, завершается или нет одноместная ‑рекур­сивная программа со входом 0. (Таким образом, также не существует алгоритма, который решает, определена или нет конкретная -рекурсивная функция для данного аргумента.)

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

Для каждой односторонней детерминированной машины Тьюринга T = (Q,   , q0,F) мы строим две контекстно-свободные грамматики G1,G2 (которые зависят от T), такие, что

L(G1) = $R$   – конфигурации, ⊢* – конечная конфигурация 

L(G2) = q0 Z0 $ R$*Q**

Контекстно-свободная грамматика G1 определяется посредством

G1 =(S1, T1, U1, V1, W1, X1  Q $, P1, S1),

причем следующие продукции лежат в P1:

(i) S1T1$S1V1, отсюда S1*T1$…$T1$V1.

(ii) T1zT1z, z,

T1qaU1pb для (q,a) = (p,b,R), T1cqaU1bcp, для (q,a)=(p,b,L),

T1q$pb, для (q,e) = (p,b,R), T1c q $ b c p, для (q,e)=(p,b,L),

U1z U1 z, z,

U1$;

эти правила позволяют производить выводы: T1*$R, где   – конфигурации, ⊢.

(iii) V1qZ0X1, qF, W1 zW1, z,

V1 Z0W1, W1 q X1, q F,

X1 z X1, z,

X1 ;

эти правила позволяют производить выводы V1*, где  – конечная конфигурация.

Контекстно-свободная грамматика G2 определяется посредством G2=(S2,T2,U2,V2 Q$, P2, S2), причем следующие продукции лежат в P2:

(i) S2 q0Z0 S2 $T2, следовательно, S2*q0 Z0$T2$T2.

(ii) T2 zT2z, z,

T2 U2,

U2 qV2q, qQ

V2 zV2z, z,

V2$;

эти правила позволяют производить выводы:T2*1q2$q, то есть T2*R $ , где  – конфигурация.

Предложение 3.16. L(G1)L(G2) тогда и только тогда, когда T оста­навливается с пустой лентой.

Доказательство. (i) пусть T останавливается с пустой лентой, таким образом: q0Z0⊢1⊢2⊢…⊢n⊢n+1, причем n+1 – конечная конфигурация. Тогда в G1 и G2 найдутся следующие выводы:

S1* q0 Z0 $  $ 1$  $ … $ n $ $ n+1,

S2*q0 Z0 $ $ 1$ … $  $ n $ $ n+1.

Тем самым справедливо: L(G1)L(G2)  .

(ii) Пусть L(G1)L(G2)  . «Типичные» слова в L(G1) и L(G2) есть

0 $ $ 1$  $ … $ n $ $ n+1,

где i, i – конфигурации, причем i ⊢i+1 и n+1 – конечная конфигурация;

q0 Z0 $ $ 1$  $ 2 … $ $ m $ $ m+1,

где i – конфигурации.

Так как в L(G1)L(G2) лежит хотя бы одно слово, то должно сущест­вовать «типичное» слово в L(G1) и «типичное» слово в L(G2), которые совпадают. Отсюда следует n = m, 0 = q 0 Z0, 1= 1,1= 1,2 = 2,2 = 2,…,n= m,n = m,n+1 = m+1,n+1= m+1.Таким образом: 0=q0Z0,1=1,2=2,…,n=n, n+1=n+1, i⊢i+1 и n+1 – конечная конфигурация. Поэтому мы получаем q0Z0 ⊢ 1⊢ 2⊢…⊢ n⊢ n+1, причем n+1 – конечная конфигурация и Т останавливается с пустой лентой. 

Предложение 3.17. Проблема, является ли пустым пересечение двух контекстно-свободных языков, неразрешима.

Доказательство. Так как для каждой машины Тьюринга Т мы можем эффективно построить грамматики G1 и G2, то разрешимость проблемы L(G1)L(G2)   влекла бы разрешимость проблемы остановки для машины Тьюринга с пустой лентой, что противоречит предложению 3.15. 

Можно показать, что G1 и G2 – однозначные грамматики. С помощью обычных методов можно построить контекстно-свободную грамматику G для L(G1)  L(G2). Тогда G будет однозначной тогда и только тогда, если L(G1)L(G2) = . Тем самым мы получим следующее предложение.

Предложение 3.18. Проблема, является ли контекстно-свободная грамматика однозначной, неразрешима. 

Рассмотрим далее язык

L = (L(G1) L(G2)) = (L(G1))((L(G1)), где   Q$. Можно показать, что L – контекстно-свободный и существует некоторая эффек­тивно конструируемая из G1 и G2 контекстно-свободная грамматика G1,2, такая, что L(G1,2) = L.

Предложение 3.19. Проблема, порождает ли контекстно-свободная грамматика все слова над своим терминальным алфавитом, неразрешима.

Доказательство. Мы рассмотрим контекстно-свободную грамматику G1,2 и алфавит . Равенство L = справедливо тогда и только тогда, если L(G1)L(G2) = . 

Предложение 3.20. Пусть LR регулярный язык. Проблема, порождает ли контекстно-свободная грамматика G регулярный язык LR, неразрешима.

Доказательство. Мы снова рассмотрим контекстно-свободную грам­матику G1,2. Примем за LR регулярный язык . 

Можно показать, что справедливо следующее обобщение предложений 3.17 и 3.20:

  1. Проблема, является ли пересечение двух контекстно-свободных язы­ков снова контекстно-свободным, неразрешима.

  2. Проблема, является ли контекстно-свободный язык регулярным, не­разрешима.

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

Предложение 3.21. Для каждой числовой -рекурсивной функции F m существует грамматика Ван-Вайнгаардена, которая порождает язык

{b… b b F(n1,…,nm) определена }.

Доказательство. Для простоты проведем доказательство только для при­митивно рекурсивных функций и для m  . Пусть w n, c, u,        *m-местная примитивно рекурсивная программа, m  , которая представля­ет функцию F. Мы определяем грамматику Ван-Вайнгаардена через мно­жество метапродукций R и множество схем продукций P.

Следующие метапродукции находятся в R:

(i) P   ncuPL  PP, Q   PL   PLP/

Из P выводимы примитивно рекурсивные программы.

(ii) N   aN b, A   NA M   Nm.

Справедливо: N *anb, A * ab… ab, k 0, и M * ab… ab.

(iii) X   LA Y   AY (L) AY .

Из X и Y выводимы необходимые контексты. Пусть X*x и Y*y и v n‑местная программа, которая представляет функцию V  n . Тогда справедливо:

x v b…by  *  x b y.

Здесь символ  означает, что слово, которое может выводиться из РА (с правильным числом аргументов), должно «оцениваться».

Последующие схемы продукций лежат в Р:

(0)  start   M w M ,

 a A   a A , b A   b A , b   b.

Эти схемы продукций позволяют производить выводы

start * ab… ab w ab… ab

* ab… ab w ab… ab ,

n1,…,nm, m   (начало вывода) и

b * b

(конец вывода).

(1)  X n N Y     X a N Y  вычисляется функция следования,

(2)  X c Y     X b Y   вычисляется нулевая функция,

(3) X uNAYXNY  вычисляется функция проекции ,

(4) (а)  X (P) A Y     XPA Y  

(b) X (PL) A Y    XPA (L) AY  проводится замена,

(5) (а)  X PQ b A Y     XPAY  

(b) X PQаAY  XQ PQAAY; проводится рекурсия. 

Пример 3.7. Пусть w = sum, то есть w = un(u). Мы хотим вычислить sum (1,3).

start аbаааb   un (u)  аbаааb   

аbаааb  un (u)  аbаааb    (5) (b)

аbаааb  n (u) un (u)  bаааb  bаааb    (5)(а)

аbаааb  n (u) u аааb  bаааb    (3)

аbаааb  n (u) аааbbаааb    (4)(а)

аbаааb  n u аааbbаааb    (3)

аbаааb  n аааb   (1)

аbаааb  ааааb  *

аbаааbааааb. 

Конечно, подобное моделирование может быть проведено с по­мощью грамматик Ван-Вайнгаардена для -рекурсивных функций над алфавитом .

В заключение мы хотим построить грамматику Ван-Вайнгаардена с «библиотекой программ». В дополнение к программам n, c, u задаются следующие базовые программы k, k, ki, ni, ui, sum, prod, exp,…,1 in, и их определения включаются в грамматику Ван-Вайнгаардена.

R расширяется следующими метапродукциями:

P:: = kkkiniuisumprodexp,…,1 in,

P расширяется следующими схемами продукции:

X n1NYXnNY, Xni NYXn(ni-1)NY, 2in,

X kY XcY, XkYXni(c)Y, 1i n,

X kNYX[cu]NY, XkNYXni(k)NY , 1in,

X k0AYXk(u)AY, XkiAYXni(k0)AY, 1i n,

X u1AYXuAY, Xu1 AYX[ui-1u]AY, 2  in,

X sum A Y    X un (u) AY ,

X prod A Y    X ksum (u u3) AY ,

X exp A Y     X n(k) prod (u u3) AY ,…

Пример 3.8. Мы хотим вычислить prod (1, 3).

start аbаааb  prod аbаааb   

 аbаааb  k sum (u u3) аbаааb   

 аbаааb sum (uu3)k sum (u u3) bаааb bаааb   

 аbаааb  sum (u u3) k аааb  bаааb   *

 аbаааb  sum (u u3) bbаааb   

 аbаааb  sum u bbаааb  (u3) bbаааb   

 аbаааb  sum b (u3) bbаааb   

 аbаааb  sum b u3 bbаааb  *

 аbаааb  sum bаааb  *

 аbаааbаааb. 

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