Глава 4

Машины Тьюринга

[89/37%]
Показать
LaTeX
§
Пример 4.1

Пусть M1M_{1} — одноленточная ДМТ, заданная пятёркой (Q,ΣQ, \Sigma, Γ,δ,s)\Gamma , \delta , s), где Q={s,q1,q2,q3,p},Σ={a,b},Γ={a,b, B}Q=\left\{ s, q_{1}, q_{2}, q_{3}, p\right\} , \Sigma = \left\{ a, b\right\} , \Gamma =\left\{ a, b, \mathrm{~ B}\right\}, а δ\delta задана следующей таблицей:

δ\deltaaabbB
ssp,a,Rp, a, Rp,b,Rp, b, Rq1, B,Lq_{1}, \mathrm{~ B}, L
q1q_{1}q1,a,Lq_{1}, a, Lq1,b,Lq_{1}, b, Lq2, B,Rq_{2}, \mathrm{~ B}, R
q2q_{2}q2,a,Rq_{2}, a, Rq3,b,Rq_{3}, b, Rp, B,Lp, \mathrm{~ B}, L
q3q_{3}p,a,Rp, a, Rq3,b,Rq_{3}, b, Rh, B,Lh, \mathrm{~ B}, L
ppp,a,Rp, a, Rp,b,Rp, b, Rp, B,Lp, \mathrm{~ B}, L

Постройте диаграмму переходов. Каким будет вычисление на входе abbaa b b a? На входе a3ba^{3} b?

?
Задача 4.1.1

Проследите работу ДМТ M1M_{1} из примера 4.1 и покажите вычисление M1M_{1} на входах aabba и bbbab.

?
Задача 4.1.2

Рассмотрим ДМТ M2=(Q,Σ,Γ,δ,s)M_{2}=(Q, \Sigma , \Gamma , \delta , s) с Q={s,q1,q2},Σ={a,b}Q=\left\{ s, q_{1}, q_{2}\right\} , \Sigma = \left\{ a, b\right\}, Γ={a,b, B}\Gamma =\left\{ a, b, \mathrm{~ B}\right\}, и

δ\deltaaabbB
ssq1, B,Lq_{1}, \mathrm{~ B}, L
q1q_{1}q1,a,Lq_{1}, a, Lq2,b,Rq_{2}, b, Rh, B,Rh, \mathrm{~ B}, R
q2q_{2}h,a,Lh, a, L
?
(a)

Проследите работу M2M_{2} на входах aaab, abaa и aaaa.

(b)

Чему равен L(M2)L\left(M_{2}\right)?

Задача 4.1.3

Рассмотрим ДМТ M3=(Q,Σ,Γ,δ,s)M_{3}=(Q, \Sigma , \Gamma , \delta , s), с Q={s,q1,q2,q3,q4,q5}Q=\left\{ s, q_{1}, q_{2}, q_{3}, q_{4}, q_{5}\right\}, Σ={a,b},Γ={a,b, B}\Sigma = \left\{ a, b\right\} , \Gamma =\left\{ a, b, \mathrm{~ B}\right\}, и

δ\deltaaabbB
ssq1, B,Lq_{1}, \mathrm{~ B}, L
q1q_{1}q1,a,Lq_{1}, a, Lq1,b,Lq_{1}, b, Lq2, B,Rq_{2}, \mathrm{~ B}, R
q2q_{2}q3,a,Rq_{3}, a, Rq4,b,Rq_{4}, b, Rq5, B,Lq_{5}, \mathrm{~ B}, L
q3q_{3}q3,a,Rq_{3}, a, Rq4,a,Rq_{4}, a, Rq5, B,Lq_{5}, \mathrm{~ B}, L
q4q_{4}q3,a,Rq_{3}, a, Rq4,b,Rq_{4}, b, Rq5, B,Lq_{5}, \mathrm{~ B}, L
q5q_{5}h,a,Rh, a, Rh, B,Rh, \mathrm{~ B}, R
?
(a)

Проследите работу M3M_{3} на входах aaabba и bbbababbbaba.

(b)

Какую функцию вычисляет M3M_{3}?

Задача 4.1.4

Рассмотрим ДМТ M4=(Q,Σ,Γ,δ,s)M_{4}=(Q, \Sigma , \Gamma , \delta , s), в которой Q,ΣQ, \Sigma и Γ\Gamma такие же, как у M3M_{3}, а δ\delta совпадает с δ\delta машины M3M_{3}, за исключением

δ\deltaaabbB
q5q_{5}q5,a,Lq_{5}, a, Lh, B,Rh, \mathrm{~ B}, R

.

Чему равен L(M4)L\left(M_{4}\right)?

?
Задача 4.1.5

Покажите, что каждый регулярный язык тьюринг-разрешим.

?
Задача 4.1.6

Пусть L{0,1}L \subseteq \left\{ 0,1\right\}^{*} тьюринг-разрешим. Покажите, что язык {0,1}L\left\{ 0,1\right\}^{*}-L также тьюринг-разрешим. То есть для данной ДМТ MM, вычисляющей характеристическую функцию χL\chi_{L} языка LL, подробно опишите, как изменить MM, чтобы получить новую ДМТ MM^{\prime }, такую что MM^{\prime } вычисляет характеристическую функцию {0,1}L\left\{ 0,1\right\}^{*}-L. Можете ли вы сделать то же самое для тьюринг-допустимых языков?

?
§
Пример 4.3

Покажите, что A={wwRw{0,1}}A=\left\{ w w^{R} \mid w \in \left\{ 0,1\right\}^{*}\right\} является тьюринг-допустимым языком.

?
Пример 4.4

Покажите, что следующая функция является тьюринг-вычислимой:

f(x)={w если x=wwR для некоторого w{0,1} иначе  f(x)= \begin{cases} w & \text{ если } x=w w^{R} \text{ для некоторого } w \in \left\{ 0,1\right\} ^{*} \\ \uparrow & \text{ иначе }\end{cases}
?
Пример 4.5

Покажите, что {wwRw{0,1}}\left\{ w w^{R} \mid w \in \left\{ 0,1\right\}^{*}\right\} является тьюринг-разрешимым языком.

?
Пример 4.6

Покажите, что функция π22(n1,n2)=n2\pi_{2}^{2}\left(n_{1}, n_{2}\right)=n_{2} при n1,n2Nn_{1}, n_{2} \in \mathbf{N} является тьюринг-вычислимой.

?
Пример 4.7

Найдите машину Тьюринга, которая вычисляет функцию

sub(n,m)={nm если nm0,0 если m>n0. \operatorname {sub}(n, m)= \begin{cases} n-m & \text{ если } n \geq m \geq 0, \\ 0 & \text{ если } m>n \geq 0.\end{cases}
?
Пример 4.8

Покажите, что при 1ik1 \leq i \leq k функция πik(x1,x2,,xk)=xi\pi_{i}^{k}\left(x_{1}, x_{2}, \cdots , x_{k}\right)=x_{i} на натуральных числах является тьюринг-вычислимой.

?
Пример 4.9

Покажите, что при любом 1ik+11 \leq i \leq k+1 функция

insertik(x1,x2,,xk,y)=(x1,,xi1,y,xi,,xk) \operatorname {insert}_{i}^{k}\left(x_{1}, x_{2}, \cdots , x_{k}, y\right)=\left(x_{1}, \ldots , x_{i-1}, y, x_{i}, \ldots , x_{k}\right)

на строках над алфавитом {a,b}\left\{ a, b\right\} является тьюринг-вычислимой.

?
Задача 4.2.1

Для каждой из следующих ДМТ проследите работу машины и покажите вычисление на заданных входах:

?
(a)

ДМТ MAM_{A} из примера 4.3 на входах 0100 и 01010.

(b)

ДМТ из примера 4.5 на входах 0110 и 01010.

(c)

ДМТ из примера 4.6 на входах (3,0)(3,0) и (0,3)(0,3).

(d)

ДМТ MM из примера 4.9 при k=3k=3 и i=2i=2, от конфигурации (q1, BaaBBab Bbba Baba)(q_{1}, \mathrm{~ B} a a \mathrm{BB} a b \mathrm{~ B} b b a \mathrm{~ B} a b a) до (q1, Baa Ba Bab Bbba Babq_{1}, \mathrm{~ B} a a \mathrm{~ B} a \mathrm{~ B} a b \mathrm{~ B} b b a \mathrm{~ B} a \underline{b}).

Задача 4.2.2

Постройте ДМТ для процедур RR и TT из примера 4.9.

?
Задача 4.2.3

Постройте ДМТ, разрешающие следующие языки:

?
(a)

{www{0,1}}\left\{ w w \mid w \in \left\{ 0,1\right\}^{*}\right\}.

(b)

{wwRww{0,1}}\left\{ w w^{R} w \mid w \in \left\{ 0,1\right\}^{*}\right\}.

(c)

{ambnckmnk0}\left\{ a^{m} b^{n} c^{k} \mid m \geq n \geq k \geq 0\right\}.

(d)

{ambncn+mn,m0}\left\{ a^{m} b^{n} c^{n+m} \mid n, m \geq 0\right\}.

(e)

{w{a,b}#a(w)>#b(w)}\left\{ w \in \left\{ a, b\right\}^{*} \mid \#_{a}(w)>\#_{b}(w)\right\}, где #a(w)\#_{a}(w) обозначает число вхождений буквы aa в строку ww.

(f)

{an1ban2bbankni=nj для некоторых 1i<jk}\left\{ a^{n_{1}} b a^{n_{2}} b \cdots b a^{n_{k}} \mid n_{i}=n_{j}\text{ для некоторых }1 \leq i<j \leq k\right\}.

Задача 4.2.4

Постройте ДМТ, вычисляющие следующие функции:

?
(a)

f(m,n)=max{m,n}f(m, n)=\max \left\{ m, n\right\} на натуральных числах m,nm, n.

(b)

f(n1,n2,,nk)=max{n1,,nk}f\left(n_{1}, n_{2}, \ldots , n_{k}\right)=\max \left\{ n_{1}, \ldots , n_{k}\right\} на натуральных числах n1,n_{1}, \ldots, nkn_{k}, где kk — фиксированное положительное целое число.

(c)

insert k(x1,,xk,y,i)=insertik(x1,,xk,y){ }^{k}\left(x_{1}, \ldots , x_{k}, y, i\right)=\operatorname {insert}_{i}^{k}\left(x_{1}, \ldots , x_{k}, y\right), где x1,,xkx_{1}, \ldots , x_{k} и yy — строки над {0,1}\left\{ 0,1\right\}^{*}, а ii — натуральное число, представленное как 1i1^{i}.

(d)

mult(n,m)=nm\operatorname {mult}(n, m)=n m на натуральных числах n,m0n, m \geq 0.

(e)

quot(n,m)=nm\operatorname {quot}(n, m)=\left\lfloor \frac{n}{m}\right\rfloor на натуральных числах n0n \geq 0 и m1m \geq 1.

(f)

lg(n)=log2n\lg (n)=\left\lceil \log_{2} n\right\rceil на натуральном числе nn.

Задача 4.2.5

Для произвольной заданной ДМТ MM постройте новую ДМТ MM^{\prime } такую, что MM^{\prime } допускает в точности то же множество строк, что и MM (то есть L(M)=L(M)L(M)=L\left(M^{\prime }\right)), но когда MM^{\prime } останавливается, её лента всегда пуста (то есть финальная конфигурация всегда равна (h,BB)(h, \mathrm{BB})).

?
Задача 4.2.6
  • Рассмотрим регулярный язык L={0n110n2110nkk5n1,,nk0,njnj+1(mod5), где j=(kmod5)+1}L=\left\{ 0^{n_{1}} 10^{n_{2}} 1 \cdots 10^{n_{k}} \mid k \geq 5\text{, }n_{1}, \ldots , n_{k} \geq 0, n_{j} \equiv n_{j+1}(\bmod 5)\text{, где }j=(k \bmod 5)+1\right\}.
?
(a)

Найдите ДМТ MM только для чтения, допускающую LL. [Подсказка: MM выполняет два прохода по входному слову. На первом проходе она проверяет, что k5k \geq 5, и находит j=(kmod5)+1j=(k \bmod 5)+1. На втором проходе она проверяет, что njnj+1(mod5)n_{j} \equiv n_{j+1}(\bmod 5).]

(b)

Найдите все возможные последовательности пересечений MM на произвольном входе.

(c)

Для любых двух последовательностей пересечений S1,S2S_{1}, S_{2} машины MM и для любого символа a{0,1, B}a \in \left\{ 0,1, \mathrm{~ B}\right\} определите, выполняется ли S1aS2S_{1} \stackrel{a}{\rightleftharpoons } S_{2}. Основываясь на этом отношении между последовательностями пересечений, постройте НКА MM^{\prime }, допускающий LL.

(d)

Можете ли вы найти НКА с меньшим множеством состояний, чем у MM^{\prime }, допускающий LL?

Задача 4.2.7
  • В доказательстве теоремы 4.10 мы заметили, что если ДМТ MM в ходе вычисления на входе xx посещает некоторые пустые ячейки справа от входного слова, то НКА MM^{\prime } после считывания всех символов входного слова должен переходить в другие состояния с помощью ε\varepsilon-переходов, чтобы решить, допускает ли он входное слово. Покажите, что в этом нет необходимости. То есть можно исключить все ε\varepsilon-переходы в δ\delta^{\prime } и изменить множество FF финальных состояний так, чтобы оно включало все последовательности пересечений SS, содержащие h,R\langle h, R\rangle в качестве последней пары, такие что S BS1 BS2 B B(h,R)S \stackrel{\mathrm{~ B}}{\rightleftharpoons } S_{1} \stackrel{\mathrm{~ B}}{\rightleftharpoons } S_{2} \stackrel{\mathrm{~ B}}{\rightleftharpoons } \ldots \stackrel{\mathrm{~ B}}{\rightleftharpoons }(\langle h, R\rangle ). Объясните, как определить итоговое множество FF.
?
Задача 4.2.8
  • Рассмотрим расширение ДМТ только для чтения. ДМТ только для чтения с одним камешком (или, короче, ДМТ с одним камешком) — это ДМТ только для чтения MM с дополнительной возможностью помечать определённую ячейку входной ленты, помещая на неё камешек. Машина MM имеет только один камешек, поэтому в любой момент времени на ленте может быть помечен не более чем один символ. Точнее, ДМТ с одним камешком MM — это ДМТ M=(Q,Σ,Γ,δ,s)M=\left(Q, \Sigma , \Gamma , \delta , s^{*}\right), где Q=Q1{qqQ1}Q=Q_{1} \cup \left\{ q^{*} \mid q \in Q_{1}\right\} для некоторого конечного множества Q1Q_{1}, Γ=Σ{B}{aaΣ или a=B}\Gamma =\Sigma \cup \left\{ \mathrm{B}\right\} \cup \left\{ a^{*} \mid a \in \Sigma \text{ или }a=\mathrm{B}\right\}, sQ1s \in Q_{1}, и δ\delta удовлетворяет следующим свойствам: для любых qQ1q \in Q_{1} и aΣ{ B}a \in \Sigma \cup \left\{ \mathrm{~ B}\right\},
  1. δ(q,a)=(p,a,D)\delta (q, a)=(p, a, D) для некоторых pQ1p \in Q_{1} и D{L,R}D \in \left\{ L, R\right\}.

  2. δ(q,a)\delta \left(q, a^{*}\right) равно либо (p,a,D)\left(p, a^{*}, D\right), либо (p,a,D)\left(p^{*}, a, D\right) для некоторых pQ1p \in Q_{1} и D{L,R}D \in \left\{ L, R\right\}.

  3. δ(q,a)\delta \left(q^{*}, a\right) равно либо (p,a,D)\left(p^{*}, a, D\right), либо (p,a,D)\left(p, a^{*}, D\right) для некоторых pQ1p \in Q_{1} и D{L,R}D \in \left\{ L, R\right\}.

  4. δ(q,a)\delta \left(q^{*}, a^{*}\right) не определена. (Здесь верхний индекс * обозначает камешек. Таким образом, состояние qq^{*} означает, что MM держит камешек в своём конечном управлении, и все символы на ленте непомечены; а состояние qQ1q \in Q_{1} означает, что камешек находится во входной ячейке. Заметим, что свойство (i) означает, что MM не может пометить ячейку, если в данный момент она не держит камешек в своём конечном управлении.)

  5. Постройте ДМТ MM с одним камешком такую, что на каждом входе xx длины n2n \geq 2 машина MM останавливается ровно через n2n^{2} шагов.

  6. Покажите, что для каждой ДМТ MM только для чтения существуют такие константы cc и dd, что если MM останавливается на входе xx длины n1n \geq 1, то она обязательно останавливается не более чем за cn+dc n+d шагов.

  7. Покажите, что для каждой ДМТ MM с одним камешком существуют такие константы cc и dd, что если MM останавливается на входе xx длины n1n \geq 1, то она обязательно останавливается не более чем за cn2+dc n^{2}+d шагов.

  8. Покажите, что если LL — регулярный язык, то существует ДМТ MM с одним камешком, допускающая язык SQRT(L)\operatorname {SQRT}(L). (Напомним, что SQRT(L)\mathrm{SQRT}(L) определён в примере 2.44 как {x(y)y=x2,xyL}\left\{ x\left|(\exists y)\right| y\left|=|x|^{2}, x y \in \right. L\right\}.)

?
Задача 4.2.9
  • В этом упражнении мы докажем, что язык, допускаемый ДМТ с одним камешком, обязательно является регулярным. Предположим, что M=(Q,Σ,Γ,δ,s)M=\left(Q, \Sigma , \Gamma , \delta , s^{*}\right) — ДМТ с одним камешком, где Q=Q1{qqQ1}Q=Q_{1} \cup \left\{ q^{*} \mid q \in Q_{1}\right\}. Также предположим, что MM работает на входе xx и посещает ячейки C0,C1,,CnC_{0}, C_{1}, \ldots , C_{n}, причём в ячейке CiC_{i} находится символ sis_{i}, для i=0,1,,ni=0,1, \ldots , n (то есть s0s1sn=Bx B Bs_{0} s_{1} \cdots s_{n}=\mathrm{B} x \mathrm{~ B} \cdots \mathrm{~ B}). Для каждого ii, 0in0 \leq i \leq n, определим частичную функцию fi:Q1Q1f_{i}: Q_{1} \rightarrow Q_{1} следующим образом: если δ(q,si)=(p,si,D)\delta \left(q, s_{i}^{*}\right)=\left(p, s_{i}^{*}, D\right) для некоторых pQ1p \in Q_{1} и D{L,R}D \in \left\{ L, R\right\}, то fi(q)f_{i}(q) — это следующее состояние rQ1r \in Q_{1} (rh)(r \neq h), в котором MM возвращается в ячейку CiC_{i}. В противном случае fi(q)f_{i}(q) не определена. То есть функция fif_{i} кодирует состояния MM в моменты, когда она посещает ячейку CiC_{i} с камешком в ячейке CiC_{i} (аналогично последовательности пересечений ДМТ только для чтения). Заметим, что fif_{i} зависит как от машины MM, так и от входного слова xx.
?
(a)

Рассмотрим язык L1L_{1} над алфавитом (Σ{B})×F(\Sigma \cup \left\{ \mathrm{B}\right\} ) \times F, где FF — множество всех частичных функций из Q1Q_{1} в Q1Q_{1}, причём w=[s0,g0][s1,g1][sn,gn]L1w= \left[s_{0}, g_{0}\right]\left[s_{1}, g_{1}\right] \cdots \left[s_{n}, g_{n}\right] \in L_{1} тогда и только тогда, когда для всех i=0,,ni=0, \ldots , n выполняется gi=fig_{i}=f_{i} относительно машины MM и строки s0s1sns_{0} s_{1} \cdots s_{n}. (Заметим: если Q1=m\left|Q_{1}\right|=m, то в FF не более mm+1m^{m+1} символов, каждый из которых кодирует одну частичную функцию из Q1Q_{1} в Q1Q_{1}.) Покажите, что существует ДМТ M1M_{1} только для чтения, допускающая L1L_{1}; то есть покажите, что ДМТ только для чтения может проверить, корректно ли каждый символ gig_{i}, хранящийся на второй дорожке ячейки CiC_{i}, кодирует функцию fif_{i}. [Подсказка: M1M_{1} не может пошагово моделировать MM, чтобы проверить корректность значений fi(q)f_{i}(q), поскольку у M1M_{1} нет камешка, и поэтому, покинув ячейку CiC_{i}, она не может запомнить, где находилась. Вместо этого M1M_{1} нужно лишь проверить согласованность функции fif_{i} с её соседями fi1f_{i-1} и fi+1f_{i+1}, аналогично задаче проверки согласованности соседних последовательностей пересечений в теореме 4.10.]

(b)

Пусть L2L_{2} — язык над алфавитом (Σ{B})×F(\Sigma \cup \left\{ \mathrm{B}\right\} ) \times F, такой что w=[s0,g0][s1,g1][sn,gn]L2w=\left[s_{0}, g_{0}\right]\left[s_{1}, g_{1}\right] \cdots \left[s_{n}, g_{n}\right] \in L_{2}, если (1) wL1w \in L_{1}, определённый в пункте (a) выше, и (2) ДМТ MM с одним камешком допускает входное слово t0t1tnt_{0} t_{1} \cdots t_{n}, где ti=sit_{i}=s_{i}, если siBs_{i} \neq \mathrm{B}, и ti=εt_{i}=\varepsilon, если si=Bs_{i}=\mathrm{B}. Покажите, что существует ДМТ M2M_{2} только для чтения, допускающая L2L_{2}. [Подсказка: M2M_{2} использует информацию gig_{i} для моделирования MM следующим образом: если MM держит камешек в своём состоянии (то есть если MM находится в состоянии qq^{*}), то M2M_{2} моделирует MM пошагово. Если MM оставляет камешек в ячейке CiC_{i}, то M2M_{2} использует gig_{i} на второй дорожке, чтобы определить состояние, в которое она перейдёт, когда вернётся в ячейку CiC_{i}.]

(c)

Покажите, что если MM — ДМТ с одним камешком, то L(M)L(M) регулярен. [Подсказка: покажите, что язык L(M)L(M) является образом гомоморфизма ϕ\phi на L2L_{2}; см. пример 2.35.]

Задача 4.2.10

Рассмотрим ещё одно расширение ДМТ только для чтения. ДМТ MM называется ДМТ только для чтения/стирания, если на каждом шаге она может только считывать входной символ и/или стирать его (то есть заменять исходный символ на BB). То есть ДМТ M=(Q,Σ,Γ,δ,s)M=(Q, \Sigma , \Gamma , \delta , s) является ДМТ только для чтения/стирания, если Γ=Σ{B}\Gamma =\Sigma \cup \left\{ \mathrm{B}\right\}, и функция переходов δ\delta удовлетворяет следующему свойству: для любых qQq \in Q и aΣ{ B}a \in \Sigma \cup \left\{ \mathrm{~ B}\right\}, δ(q,a)\delta (q, a) равно либо (p,a,D)(p, a, D), либо (p, B,D)(p, \mathrm{~ B}, D) для некоторых pQp \in Q и D{L,R}D \in \left\{ L, R\right\}.

?
(a)

Покажите, что существует ДМТ только для чтения/стирания, допускающая язык L={anbncnn0}L=\left\{ a^{n} b^{n} c^{n} \mid n \geq 0\right\}.

(b)

Покажите, что существует тьюринг-разрешимый язык, не допускаемый никакой ДМТ только для чтения/стирания.

§
Пример 4.12

Найдите трёхленточную ДМТ MM, которая вычисляет функцию f(n,m)=nmf(n, m)=n \cdot m на натуральных числах nn и mm.

?
Пример 4.14

Докажите, что для любого языка A(0+1)A \subseteq (0+1)^{*} существует ДМТ MM с бесконечным числом лент, допускающая LL.

?
Задача 4.3.1

Опишите подробно последнюю часть одноленточной ДМТ MM^{\prime } из теоремы 4.11, моделирующей двустороннюю ДМТ MM. То есть покажите инструкции MM^{\prime }, которые восстанавливают результат из двухдорожечной формы в однодорожечную форму. Например, она должна преобразовывать конфигурацию ленты

в конфигурацию Ba Babbab B\mathrm{B} a \mathrm{~ B} a b b a b \mathrm{~ B}, а также преобразовывать конфигурацию ленты

в конфигурацию Babb B\mathrm{B} a b b \mathrm{~ B}.

?
Задача 4.3.2

Опишите подробно шаг моделирования двусторонней ДМТ M1M_{1} из теоремы 4.13, моделирующей трёхленточную ДМТ MM. То есть покажите инструкции M1M_{1}, которые сдвигают головку влево, чтобы собрать информацию о лентах MM, а затем сдвигают её вправо, чтобы на основе этой информации выполнить инструкцию MM.

?
Задача 4.3.3

Для заданной двусторонне бесконечной одноленточной ДМТ MM с Σ={1}\Sigma =\left\{ 1\right\} и Γ={0,1, B}\Gamma = \left\{ 0,1, \mathrm{~ B}\right\} постройте многоленточную ДМТ MM^{\prime }, которая на входе (1n,1k)\left(1^{n}, 1^{k}\right) моделирует MM на входе 1n1^{n} не более чем за kk шагов, так что она останавливается тогда и только тогда, когда MM останавливается на входе 1n1^{n} за не более чем kk шагов.

?
Задача 4.3.4

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

?
(a)

{w{a,b}w=wR}\left\{ w \in \left\{ a, b\right\}^{*} \mid w=w^{R}\right\}.

(b)

{(x1,x2)x1,x2{a,b},x1 является подстрокой x2}\left\{ \left(x_{1}, x_{2}\right) \mid x_{1}, x_{2} \in \left\{ a, b\right\}^{*}, x_{1}\text{ является подстрокой }x_{2}\right\}.

(c)

{anbncnn0}\left\{ a^{n} b^{n} c^{n} \mid n \geq 0\right\}.

(d)

{ambnckm,n,k0,mn или nk или km}\left\{ a^{m} b^{n} c^{k} \mid m, n, k \geq 0, m \neq n\text{ или }n \neq k\text{ или }k \neq m\right\}.

(e)

{w{a,b,c}#a(w)=#b(w)=#c(w)}\left\{ w \in \left\{ a, b, c\right\}^{*} \mid \#_{a}(w)=\#_{b}(w)=\#_{c}(w)\right\}.

Задача 4.3.5

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

?
(a)

f(x)=xRf(x)=x^{R} на строках x{a,b}x \in \left\{ a, b\right\}^{*}.

(b)

f(m,n)=nmf(m, n)=n^{m} на натуральных числах m,nm, n.

(c)

f(n1,n2,,nk)=max{n1,n2,,nk}f\left(n_{1}, n_{2}, \ldots , n_{k}\right)=\max \left\{ n_{1}, n_{2}, \ldots , n_{k}\right\} на положительных целых числах n1n_{1}, ,nk\ldots , n_{k}, где kk не фиксировано.

(d)

f(n1,n2,,nk)=f\left(n_{1}, n_{2}, \ldots , n_{k}\right)= максимальное число вхождений одного и того же положительного целого числа в (n1,,nk)\left(n_{1}, \ldots , n_{k}\right), где kk не фиксировано. (Например, f(3,5,3,6,7)=2f(3,5,3,6,7)=2 и f(3,6,3,6,6,5,6)=4f(3,6,3,6,6,5,6)=4.

(e)

sort(n1,n2,,nk)=\operatorname {sort}\left(n_{1}, n_{2}, \ldots , n_{k}\right)= список (n1,,nk)\left(n_{1}, \ldots , n_{k}\right), отсортированный по возрастанию, где n1,,nkn_{1}, \ldots , n_{k} — положительные целые числа, а kk не фиксировано.

Задача 4.3.6

Двумерная ДМТ MM — это МТ, «лента» которой представляет собой двумерную плоскость, разделённую на бесконечное число ячеек (см. рисунок 4.15). Двумерная ДМТ MM работает подобно двусторонней ДМТ, за исключением того, что на каждом шаге она может сдвигать головку вверх (U), вниз (D), влево (L), вправо (R) или оставаться на месте (S). Изначально входное слово хранится в горизонтальной строке, и головка находится над пустой ячейкой справа от него. Когда машина останавливается, результат также хранится в горизонтальной строке (но не обязательно в той же строке, что и вход), при этом головка указывает на пустую ячейку справа от него. Все остальные символы, не находящиеся в этой строке, игнорируются.

Рисунок 4.15: Двумерная ДМТ.Рисунок 4.15: Двумерная ДМТ.

Рисунок 4.16: Изменение конфигурации в упражнении 6(b).Рисунок 4.16: Изменение конфигурации в упражнении 6(b).

?
(a)

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

(b)

Разработайте двумерную ДМТ, переводящую начальную конфигурацию ленты (a) в новую конфигурацию (b), как показано на рисунке 4.16.

(c)

Покажите, что двумерная ДМТ может быть смоделирована многоленточной ДМТ. Следовательно, все функции, вычисляемые двумерными ДМТ, являются тьюринг-вычислимыми.

Задача 4.3.7

Мы говорим, что автомат с магазинной памятью является детерминированным, если для любой конфигурации применима не более чем одна инструкция. Покажите, что любой детерминированный автомат с магазинной памятью может быть смоделирован двухленточной ДМТ. (В разделе 4.7 мы покажем, что все контекстно-свободные языки являются тьюринг-допустимыми.)

?
§
Задача 4.4.1

Рассмотрим RAM более подробно. RAM задаётся списком инструкций, пронумерованных от 1 до nn. Инструкция относится к одному из типов, показанных на рисунке 4.17. (Заметим: мы приводим инструкции только в форме прямой адресации. Как обсуждалось в тексте, они также могут использовать константы или косвенную адресацию.) Изначально все регистры RAM содержат

ИнструкцияЗначение
READ(Ri)\operatorname {READ}\left(R_{i}\right)считать следующее входное целое число вRiR_{i}
write(Ri)\operatorname {write}\left(R_{i}\right)записатьc(Ri)c\left(R_{i}\right) на выходную ленту
COPY(Ri,Rj)\operatorname {COPY}\left(R_{i}, R_{j}\right)записатьc(Ri)c\left(R_{i}\right) вRjR_{j}
ADD(Ri,Rj,Rk)\mathrm{ADD}\left(R_{i}, R_{j}, R_{k}\right)записатьc(Ri)+c(Rj)c\left(R_{i}\right)+c\left(R_{j}\right) вRkR_{k}
SUB(Ri,Rj,Rk)\operatorname {SUB}\left(R_{i}, R_{j}, R_{k}\right)записатьc(Ri)c(Rj)c\left(R_{i}\right)-c\left(R_{j}\right) вRkR_{k}
mult(Ri,Rj,Rk)\operatorname {mult}\left(R_{i}, R_{j}, R_{k}\right)записатьc(Ri)c(Rj)c\left(R_{i}\right) \cdot c\left(R_{j}\right) вRkR_{k}
DIV(Ri,Rj,Rk)\operatorname {DIV}\left(R_{i}, R_{j}, R_{k}\right)записатьc(Ri)/c(Rj)\left\lfloor c\left(R_{i}\right) / c\left(R_{j}\right)\right\rfloor вRkR_{k} (записать 0, еслиc(Rj)=0c\left(R_{j}\right)=0)
goto(j)\operatorname {goto}(j)перейти к инструкцииjj
IF-THEN(Ri,j)\left(R_{i}, j\right)еслиc(Ri)0c\left(R_{i}\right) \geq 0, то перейти к инструкцииjj
: Рисунок 4.17: Инструкции RAM.

значение 0, выходная лента «пуста» (что обозначается специальным символом, например B), а входная лента содержит конечное число неотрицательных целых чисел (n1,,nk)\left(n_{1}, \ldots , n_{k}\right), хранящихся в ячейках с 1 по kk, причём ячейка k+1k+1 пуста. RAM начинает работу с инструкции 1 и после выполнения каждой инструкции ii переходит к инструкции i+1i+1, если инструкция ii относится к одному из первых семи типов, либо переходит к инструкции jj, заданной в инструкции ii, если инструкция ii относится к одному из последних двух типов. RAM останавливается, когда достигает инструкции k>nk>n.

Для произвольного RAM MM определим L(M)={(n1,,nk)M останавливается на входе (n1,,nk)}L(M)=\left\{ \left(n_{1}, \ldots , n_{k}\right) \mid M\text{ останавливается на входе }\left(n_{1}, \ldots , n_{k}\right)\right\}. Мы говорим, что MM вычисляет функцию f:k=1Nkk=1Nkf: \bigcup_{k=1}^{\infty } \mathbf{N}^{k} \rightarrow \bigcup_{k=1}^{\infty } \mathrm{N}^{k}, если на входе (n1,,nk)\left(n_{1}, \ldots , n_{k}\right) машина MM останавливается с выходом (m1,,m)=f(n1,,nk)\left(m_{1}, \ldots , m_{\ell }\right)= f\left(n_{1}, \ldots , n_{k}\right).

?
(a)

Разработайте RAM, вычисляющую функцию sort из упражнения 5(e) раздела 4.3.

(b)

Приведите подробности устройства многоленточной ДМТ, моделирующей инструкцию ADD(5,R3,R21)\operatorname {ADD}\left(5, R_{3}, R_{21}^{*}\right) RAM.

(c)

Покажите, что каждая тьюринг-вычислимая частичная функция f:NkNf: \mathbf{N}^{k} \rightarrow \mathbf{N}, как определено в разделе 4.2, вычислима с помощью RAM.

§
Пример 4.15

Найдите грамматику GG такую, что L(G)={anbncnn0}L(G)=\left\{ a^{n} b^{n} c^{n} \mid n \geq 0\right\}.

?
Пример 4.16

Найдите грамматику GG такую, что L(G)={a2nn0}L(G)=\left\{ a^{2^{n}} \mid n \geq 0\right\}.

?
Пример 4.17

Найдите грамматику GG такую, что L(G)={www{a,b}}L(G)=\left\{ w w \mid w \in \left\{ a, b\right\}^{*}\right\}.

?
Пример 4.18

Найдите грамматику GG такую, что L(G)={anbmcnmn,m0}L(G)=\left\{ a^{n} b^{m} c^{n m} \mid n, m \geq 0\right\}.

?
Задача 4.5.1

Рассмотрим грамматику G1G_{1} с нетерминалами V={S,A,B,C}V=\left\{ S, A, B, C\right\}, терминалами Σ={a,b,c}\Sigma = \left\{ a, b, c\right\} и правилами

SASBCε,ABBA,ACCA,BAAB,BCCB,CAAC,CBBC,Aa,Bb,Cc. \begin{array}{lll} S \longrightarrow A S B C \mid \varepsilon , & & \\ A B \longrightarrow B A, & A C \longrightarrow C A, & B A \longrightarrow A B, \\ B C \longrightarrow C B, & C A \longrightarrow A C, & C B \longrightarrow B C, \\ A \longrightarrow a, & B \longrightarrow b, & C \longrightarrow c. \end{array}
?
(a)

Приведите вывод строки ccbaabcba.

(b)

Чем является L(G1)L\left(G_{1}\right)? Приведите краткое обоснование вашего ответа.

Задача 4.5.2

Рассмотрим грамматику G2G_{2} с нетерминалами V={S,A,L,Lh,R,[],}V=\left\{ S, A, L, L_{h}, R,[],\right\}, терминалом Σ={a}\Sigma =\left\{ a\right\} и правилами

S[ARa]a,RAAR,RaaaR,R]L]Lh,ALLA,aLLa,[L[AR,aLhLha,ALhLha,[Lhε. \begin{array}{rlr} S \rightarrow [A R a] \mid a, & R A \rightarrow A R, & R a \rightarrow a a R, \\ R] \longrightarrow L] \mid L_{h}, & A L \rightarrow L A, & a L \rightarrow L a, \\ {[L \longrightarrow [A R,} & a L_{h} \longrightarrow L_{h} a, & A L_{h} \longrightarrow L_{h} a, \\ {\left[L_{h} \longrightarrow \varepsilon .\right.} & & \end{array}
?
(a)

Приведите вывод a6a^{6}.

(b)

Чем является L(G2)L\left(G_{2}\right)? Приведите краткое обоснование вашего ответа.

Задача 4.5.3

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

?
(a)

{an2n0},x=a9\left\{ a^{n^{2}} \mid n \geq 0\right\} , x=a^{9}. [Подсказка: следуя идее упражнения 2 выше, порождайте на kk-й итерации сентенциальную форму с kk копиями AA и k2kk^{2}-k копиями aa.]

(b)

{a2nnn0},x=a5\left\{ a^{2^{n}-n} \mid n \geq 0\right\} , x=a^{5}.

(c)

{an2+nn0},x=a11\left\{ a^{n^{2}+n} \mid n \geq 0\right\} , x=a^{11}.

(d)

{an3+2n25n+4n0},x=a34\left\{ a^{n^{3}+2 n^{2}-5 n+4} \mid n \geq 0\right\} , x=a^{34}. [Подсказка: аналогично пункту (a) выше, порождайте на kk-й итерации сентенциальную форму с kk копиями AA, k2k^{2} копиями BB и k3+k26k+4k^{3}+k^{2}-6 k+4 копиями aa.]

(e)

{anb2nann0},x=a3b8a3\left\{ a^{n} b^{2^{n}} a^{n} \mid n \geq 0\right\} , x=a^{3} b^{8} a^{3}.

(f)

{anbnanbnn0},x=a4b4a4b4\left\{ a^{n} b^{n} a^{n} b^{n} \mid n \geq 0\right\} , x=a^{4} b^{4} a^{4} b^{4}.

(g)

{wczw,z{a,b},wz},x=aabcaaba\left\{ w c z \mid w, z \in \left\{ a, b\right\}^{*}, w \neq z\right\} , x=a a b c a a b a.

(h)

{w{a,b,c}#a(w)>#b(w)>#c(w)},x=\left\{ w \in \left\{ a, b, c\right\}^{*} \mid \#_{a}(w)>\#_{b}(w)>\#_{c}(w)\right\} , x= cbaabcbaa.

(i)

{wnw{a,b},w=n},x=aabaabaab\left\{ w^{n}\left|w \in \left\{ a, b\right\}^{*},\left|w\right|=n\right\} , x=a a b a a b a a b\right..

Задача 4.5.4
?
(a)

Найдите грамматику GG такую, что wGwRw \xRightarrow [G]{*} w^{R} для всех w{a,b}w \in \left\{ a, b\right\}.

(b)

Найдите грамматику GG такую, что для всех x,y{a,b}x, y \in \left\{ a, b\right\}^{*} с x=y\left|x\right|=\left|y\right| выполняется xyGyxx y \xRightarrow [G]{*} y x.

Задача 4.5.5

Рассмотрим новую вычислительную модель, называемую маркированными алгоритмами Маркова (Labeled Markov Algorithm, LMA). LMA MM определяется как тройка (Σ,Γ,P)(\Sigma , \Gamma , P), где Σ\Sigma — входной алфавит, Γ\Gamma — рабочий алфавит с ΣΓ\Sigma \subseteq \Gamma, а PP — программа, состоящая из конечной последовательности r1,r2,,rnr_{1}, r_{2}, \ldots , r_{n} инструкций. Каждая инструкция rir_{i} в PP имеет вид

Li:αβ; goto Lj L_{i}: \alpha \rightarrow \beta ; \text{ goto } L_{j}

где α,βΓ\alpha , \beta \in \Gamma^{*}, а jj — положительное целое число (αβ\alpha \rightarrow \beta называется правилом вывода, а LjL_{j} называется меткой следующей инструкции). Инструкция (LiL_{i} : αβ\alpha \rightarrow \beta; goto LjL_{j};) может быть применена к строке wΓw \in \Gamma^{*}, если α\alpha является подстрокой ww. Применение этой инструкции к ww порождает новую строку xx путём замены самого левого вхождения α\alpha в ww на β\beta.

На входе wΣw \in \Sigma^{*} LMA MM работает следующим образом: в любой момент вычисления она хранит текущую сентенциальную форму ww и текущую метку инструкции LiL_{i}. Изначально ww — это входная строка, а текущая метка инструкции — L1L_{1}. На каждом шаге она находит наименьшее целое число kik \geq i, где LiL_{i} — текущая метка инструкции, такое что инструкция rkr_{k} применима к ww. Затем она применяет rkr_{k} к ww, чтобы получить новую сентенциальную форму xx. Она заменяет ww на xx и заменяет текущую метку инструкции LL на метку следующей инструкции rkr_{k}. Если ни одна инструкция rkr_{k} с kik \geq i не применима к текущей сентенциальной форме ww, то машина останавливается с результатом ww. (В частности, если текущая метка инструкции равна LiL_{i}, где ii больше числа nn инструкций в PP, то машина останавливается.)

Для произвольной LMA MM определим L(M)={xΣM останавливается на x}L(M)=\left\{ x \in \Sigma^{*} \mid M\text{ останавливается на }x\right\}. Мы говорим, что MM вычисляет частичную функцию f:ΣΓf: \Sigma^{*} \rightarrow \Gamma^{*}, если MM останавливается на каждом входе xDomain(f)x \in \operatorname {Domain}(f) с финальной сентенциальной формой w=f(x)w=f(x), и MM не останавливается ни на каком xDomain(f)x \notin \operatorname {Domain}(f).

?
(a)

Разработайте LMA MM, вычисляющий функцию f(x)=xRf(x)=x^{R} для x{a,b}x \in \left\{ a, b\right\}^{*}.

(b)

Покажите, что каждая тьюринг-вычислимая функция ff вычислима с помощью LMA.

(c)

Покажите, что для любого LMA MM язык L(M)L(M) является тьюринг-допустимым.

(d)

Покажите, что каждая частичная функция ff, вычисляемая LMA MM, является тьюринг-вычислимой.

§
Пример 4.21

Покажите, что add (m,n)=m+n(m, n)=m+n является примитивно рекурсивной.

?
Пример 4.22

Покажите, что mult (m,n)=mn(m, n)=m n является примитивно рекурсивной.

?
Пример 4.23

Покажите, что постоянные функции Kjk(n1,,nk)=jK_{j}^{k}\left(n_{1}, \cdots , n_{k}\right)=j, k,j1k, j \geq 1, являются примитивно рекурсивными.

?
Пример 4.24

Покажите, что функция minus: N2N\mathbf{N}^{2} \rightarrow \mathbf{N}, определённая как

minus(m,n)=mn={0 если mn,mn если m>n, \operatorname {minus}(m, n)=m-n= \begin{cases} 0 & \text{ если } m \leq n, \\ m-n & \text{ если } m>n,\end{cases}

является примитивно рекурсивной.

?
Пример 4.25

Предположим, что f:NNf: \mathbf{N} \rightarrow \mathbf{N} примитивно рекурсивна. Тогда функция g:N2Ng: \mathbf{N}^{2} \rightarrow \mathbf{N}, определённая как

g(m,n)=f(n)(m)= def f(f((f(m)))),n g(m, n)=f^{(n)}(m) \stackrel{\text{ def }}{=} \underbrace{f(f(\cdots (f(m)) \cdots )),}_{n}

также является примитивно рекурсивной.

?
Пример 4.26

Покажите, что следующие функции примитивно рекурсивны:

?
(a)

neg(x)={0 если x1,1 если x=0.\operatorname {neg}(x)= \begin{cases} 0 & \text{ если } x \geq 1, \\ 1 & \text{ если } x=0.\end{cases}

(b)

and(x,y)={1 если x1 и y1,0 иначе. \operatorname {and}(x, y)= \begin{cases} 1 & \text{ если } x \geq 1 \text{ и } y \geq 1, \\ 0 & \text{ иначе. }\end{cases}

(c)

or(x,y)={1 если x1 или y1,0 иначе. \operatorname {or}(x, y)= \begin{cases} 1 & \text{ если } x \geq 1 \text{ или } y \geq 1, \\ 0 & \text{ иначе. }\end{cases}

(d)

if-then-else(x,y,z)={y если x1,z иначе .\operatorname {if\text{-}then\text{-}else}(x, y, z)= \begin{cases} y & \text{ если } x \geq 1, \\ z & \text{ иначе }.\end{cases}

Пример 4.27

Покажите, что следующие функции примитивно рекурсивны:

?
(a)

eq(x,y)={1 если x=y,0 если xy.\operatorname {eq}(x, y)= \begin{cases} 1 & \text{ если } x=y, \\ 0 & \text{ если } x \neq y.\end{cases}

(b)

gr(x,y)={1 если x>y,0 если xy.\operatorname {gr}(x, y)= \begin{cases} 1 & \text{ если } x>y, \\ 0 & \text{ если } x \leq y.\end{cases}

(c)

geq(x,y)={1 если xy,0 если x<y.\operatorname {geq}(x, y)= \begin{cases} 1 & \text{ если } x \geq y, \\ 0 & \text{ если } x<y.\end{cases}

(d)

ls(x,y)={1 если x<y,0 если xy.\operatorname {ls}(x, y)= \begin{cases} 1 & \text{ если } x<y, \\ 0 & \text{ если } x \geq y.\end{cases}

(e)

leq(x,y)={1 если xy,0 если x>y.\operatorname {leq}(x, y)= \begin{cases} 1 & \text{ если } x \leq y, \\ 0 & \text{ если } x>y.\end{cases}

Пример 4.28

Для каждого k1k \geq 1 функция maxk(n1,n2,,nk)=max{n1,n2,,nk}\max^{k}\left(n_{1}, n_{2}, \ldots , n_{k}\right)= \max \left\{ n_{1}, n_{2}, \ldots , n_{k}\right\} примитивно рекурсивна.

?
Пример 4.30

Следующие функции примитивно рекурсивны.

?
(a)

quot(m,n)={mn если n>0,0 иначе. q u o t(m, n)= \begin{cases} \left\lfloor \frac{m}{n}\right\rfloor & \text{ если } n>0, \\ 0 & \text{ иначе. }\end{cases}

(b)

mod(m,n)={mmnn если n>0,0 иначе .\bmod (m, n)= \begin{cases} m-\left\lfloor \frac{m}{n}\right\rfloor \cdot n & \text{ если } n>0, \\ 0 & \text{ иначе }.\end{cases}

(c)

prime (n)={1 если n простое число ,0 иначе .(n)= \begin{cases} 1 & \text{ если } n \text{ простое число }, \\ 0 & \text{ иначе }.\end{cases}

Пример 4.31

Пусть f(0)=1f(0)=1 и при n1n \geq 1 f(n)=f(n)= nn-я цифра справа от десятичной точки в десятичном разложении 2\sqrt{2}. Докажите, что ff примитивно рекурсивна.

?
Задача 4.6.1

Покажите, что следующие функции примитивно рекурсивны:

?
(a)

factorial(n)=n!\operatorname {factorial}(n)=n!.

(b)

f1(n)=nnn}n\left.f_{1}(n)=n^{n^{\cdot n}}\right\} n уровней. [Подсказка: сначала рассмотрите более общую функцию g1(n,m)=nn.n}m\left.g_{1}(n, m)=n^{n^{. n}}\right\} m уровней.]

(c)

f2(n)=log2nf_{2}(n)=\left\lfloor \log_{2} n\right\rfloor.

(d)

f3(n)={1 если n является суммой двух простых чисел, 0 иначе. f_{3}(n)= \begin{cases} 1 & \text{ если } n \text{ является суммой двух простых чисел, } \\ 0 & \text{ иначе. }\end{cases}

(e)

ϕ(n)=\phi (n)= число простых чисел, не превосходящих nn.

(f)

lcm(n,m)=\operatorname {lcm}(n, m)= наименьшее общее кратное nn и mm.

(g)

s(n)=s(n)= число цифр в десятичной записи nn.

(h)

h(n,m)=h(n, m)= mm-я по значимости цифра десятичной записи nn, если 1ms(n)1 \leq m \leq s(n)h(n,m)=0h(n, m)=0, если m=0m=0 или m>s(n)m>s(n)).

Задача 4.6.2

Что не так со следующим доказательством примера 4.25?

Мы докажем это индукцией по nn, как в примере 4.28. При n=0n=0 g(m,n)=π11(n)g(m, n)=\pi_{1}^{1}(n); следовательно, g(m,0)g(m, 0) примитивно рекурсивна. При n0n \geq 0 g(m,n+1)=f(g(m,n))g(m, n+1)=f(g(m, n)). Поскольку ff примитивно рекурсивна и, по индуктивному предположению, g(m,n)g(m, n) примитивно рекурсивна, получаем, что g(m,n+1)g(m, n+1) также примитивно рекурсивна. Отсюда следует, что g(m,n)g(m, n) примитивно рекурсивна при всех n0n \geq 0, а значит, gg примитивно рекурсивна.

?
Задача 4.6.3

Предположим, что R:Nk+1NR: \mathbf{N}^{k+1} \rightarrow \mathbf{N} — примитивно рекурсивный предикат. Покажите, что следующая функция f:Nk+1Nf: \mathbf{N}^{k+1} \rightarrow \mathbf{N} также примитивно рекурсивна:

f(n1,,nk,m)={(maxi)imR(n1,,nk,i) если (i)imR(n1,,nk,i)0 иначе.  f\left(n_{1}, \ldots , n_{k}, m\right)= \begin{cases} (\max i)_{i \leq m} R\left(n_{1}, \ldots , n_{k}, i\right) \\ & \text{ если }(\exists i)_{i \leq m} R\left(n_{1}, \ldots , n_{k}, i\right) \\ 0 & \text{ иначе. }\end{cases}
?
Задача 4.6.4

Предположим, что f:Nk+1Nf: \mathbf{N}^{k+1} \rightarrow \mathbf{N} примитивно рекурсивна. Покажите, что следующие функции также примитивно рекурсивны:

?
(a)

g(n1,,nk,m)=i=0mf(n1,,nk,i)g\left(n_{1}, \ldots , n_{k}, m\right)=\sum_{i=0}^{m} f\left(n_{1}, \ldots , n_{k}, i\right).

(b)

h(n1,,nk,m)=i=0mf(n1,,nk,i)h\left(n_{1}, \ldots , n_{k}, m\right)=\prod_{i=0}^{m} f\left(n_{1}, \ldots , n_{k}, i\right).

Задача 4.6.5

Предположим, что f:NNf: \mathbf{N} \rightarrow \mathbf{N} примитивно рекурсивна и удовлетворяет f(0)=0f(0)=0 и f(n)<f(n+1)f(n)<f(n+1) при всех n0n \geq 0. Покажите, что функция h(m)=[h(m)=[ целое число nn такое, что f(n)m<f(n+1)]f(n) \leq m<f(n+1)] также примитивно рекурсивна.

?
Задача 4.6.6

Предположим, что f:NNf: \mathbf{N} \rightarrow \mathbf{N} и g:NNg: \mathbf{N} \rightarrow \mathbf{N} обе примитивно рекурсивны. Покажите, что следующая функция h:N2Nh: \mathbf{N}^{2} \rightarrow \mathbf{N} также примитивно рекурсивна:

h(n,0)=f(n)h(n,m+1)=g(h(n,m+12)). \begin{aligned} h(n, 0) & =f(n) \\ h(n, m+1) & =g\left(h\left(n,\left\lfloor \frac{m+1}{2}\right\rfloor \right)\right). \end{aligned}
?
Задача 4.6.7

Предположим, что f:NNf: \mathbf{N} \rightarrow \mathbf{N} примитивно рекурсивна. Покажите, что следующая функция g:N2Ng: \mathbf{N}^{2} \rightarrow \mathbf{N} также примитивно рекурсивна:

g(n,0)=f(n)g(n,m+1)=g(g(n,m),m) \begin{aligned} g(n, 0) & =f(n) \\ g(n, m+1) & =g(g(n, m), m) \end{aligned}
?
§
Пример 4.32

Покажите, что функция π:N2N\pi : \mathbf{N}^{2} \rightarrow \mathbf{N}, определённая как

π(i,j)=(i+j)(i+j+1)2+j, \pi (i, j)=\frac{(i+j)(i+j+1)}{2}+j,

является функцией спаривания.

?
Пример 4.33

Покажите, что функция Фибоначчи примитивно рекурсивна.

?
Пример 4.34

Покажите, что функция

τ(n1,,nk1,nk)=k1,n1,nk1,nk \tau \left(n_{1}, \ldots , n_{k-1}, n_{k}\right)=\left\langle k-1,\left\langle n_{1},\left\langle \cdots \left\langle n_{k-1}, n_{k}\right\rangle \cdots \right\rangle \right\rangle \right\rangle

является гёделевой нумерацией.

?
Пример 4.35

Покажите, что следующие функции примитивно рекурсивны:

?
(a)

list(m,0)=0\operatorname {list}(m, 0)=0 и list(m,k)=[m,m,,mk]\operatorname {list}(m, k)=[\underbrace{m, m, \ldots , m}_{k}], если k1k \geq 1.

(b)

find([n1,,nk],m)={min{i1ik,ni=m} если такое i существует ,0 иначе \operatorname {find}\left(\left[n_{1}, \ldots , n_{k}\right], m\right)= \begin{cases} \min \left\{ i \mid 1 \leq i \leq k, n_{i}=m\right\} & \text{ если такое } i \text{ существует }, \\ 0 & \text{ иначе } \end{cases}

(c)

replace([n1,,nk],m,i)={[n1,,ni1,m,ni+1,,nk] если 1ik,[n1,,nk] иначе. \operatorname {replace}\left(\left[n_{1}, \ldots , n_{k}\right], m, i\right) = \begin{cases} \left[n_{1}, \ldots , n_{i-1}, m, n_{i+1}, \ldots , n_{k}\right] & \text{ если } 1 \leq i \leq k, \\ \left[n_{1}, \ldots , n_{k}\right] & \text{ иначе. } \end{cases}

(d)

conseq([n1,,nk],[m1,,m])=[n1,,nk,m1,,m]\operatorname {conseq}\left(\left[n_{1}, \ldots , n_{k}\right],\left[m_{1}, \ldots , m_{\ell }\right]\right)=\left[n_{1}, \ldots , n_{k}, m_{1}, \ldots , m_{\ell }\right].

(e)

subseq([n1,,nk],i,)\operatorname {subseq}\left(\left[n_{1}, \ldots , n_{k}\right], i, \ell \right)

={[ni,ni+1,,ni+1] если 1ik,1ki+10 иначе.  = \begin{cases} {\left[n_{i}, n_{i+1}, \ldots , n_{i+\ell -1}\right]} & \text{ если } 1 \leq i \leq k, 1 \leq \ell \leq k-i+1 \\ 0 & \text{ иначе. }\end{cases}
Пример 4.36

Покажите, что функция f:NNf: \mathbf{N} \rightarrow \mathbf{N}, определённая как f(0)=1f(0)=1, f(n+1)=f(0)n+1+f(1)n++f(n)1f(n+1)=f(0)^{n+1}+f(1)^{n}+\ldots +f(n)^{1}, примитивно рекурсивна.

?
Пример 4.38

Функция sort : NN\mathbf{N} \rightarrow \mathbf{N} отображает число [n1,n2,,nk]\left[n_{1}, n_{2}, \ldots , n_{k}\right] в число [np1,np2,,npk]\left[n_{p_{1}}, n_{p_{2}}, \ldots , n_{p_{k}}\right], где (p1,p2,,pk)\left(p_{1}, p_{2}, \ldots , p_{k}\right) — перестановка (1,2,,k)(1,2, \ldots , k) такая, что np1np2npkn_{p_{1}} \leq n_{p_{2}} \leq \cdots \leq n_{p_{k}}. Покажите, что sort примитивно рекурсивна.

?
Задача 4.7.1

Покажите, что следующие функции являются функциями спаривания.

?
(a)

f1(n,m)=2n(2m+1)1f_{1}(n, m)=2^{n}(2 m+1)-1.

(b)

f2(n,m)=max(n,m)2+m+g(m,n)f_{2}(n, m)=\max (n, m)^{2}+m+g(m, n), где g(m,n)=ng(m, n)=n, если mnm \geq n, и g(m,n)=0g(m, n)=0, если n>mn>m.

Задача 4.7.2

Пусть τ1:k=1NkN\tau_{1}: \bigcup_{k=1}^{\infty } \mathbf{N}^{k} \rightarrow \mathbf{N} определена как f(n1,,nk)=2n13n2pknkf\left(n_{1}, \ldots , n_{k}\right)=2^{n_{1}} 3^{n_{2}} \cdots p_{k}^{n_{k}}, где pkp_{k}kk-е простое число.

?
(a)

Покажите, что τ1\tau_{1} сюръективна, примитивно рекурсивна и монотонна. Также покажите, что τ1\tau_{1} почти инъективна в том смысле, что если τ1(n1,,nk)=τ1(m1,,m)\tau_{1}\left(n_{1}, \ldots , n_{k}\right)=\tau_{1}\left(m_{1}, \ldots , m_{\ell }\right) и если kk \leq \ell, то ni=min_{i}=m_{i} при всех ii, 1ik1 \leq i \leq k, и mj=0m_{j}=0 при всех jj, k<jk<j \leq \ell.

(b)

Проверьте, что если использовать τ1\tau_{1} в качестве гёделевой нумерации, то функции size, item и функции из примера 4.35 остаются примитивно рекурсивными. (Здесь size(n)\operatorname {size}(n) — число элементов в последовательности nn, не считая завершающих нулей.)

Задача 4.7.3

Пусть n1,n2,,nkn_{1}, n_{2}, \ldots , n_{k}kk неотрицательных целых чисел. Докажите, что если 1i1<i2<<ik1 \leq i_{1}< i_{2}<\cdots <i_{\ell } \leq k, то [ni1,ni2,,ni][n1,n2,,nk]\left[n_{i_{1}}, n_{i_{2}}, \ldots , n_{i_{\ell }}\right] \leq \left[n_{1}, n_{2}, \ldots , n_{k}\right].

?
Задача 4.7.4

Предположим, что f(n,0)=g(n)f(n, 0)=g(n) и f(n,m+1)=h(n,f(n,k(m)))f(n, m+1)=h(n, f(n, k(m))) для некоторых примитивно рекурсивных g,hg, h и kk. Также предположим, что k(m)mk(m) \leq m при всех m>0m>0. Докажите, что ff также примитивно рекурсивна. (Заметим, что решение 1 примера 4.38 фактически использовало этот результат.)

?
Задача 4.7.5

Покажите, что следующие функции примитивно рекурсивны:

?
(a)

f(n,m)=f(n, m)= число вхождений целого числа mm в последовательность n=[n1,,nk]n=\left[n_{1}, \ldots , n_{k}\right].

(b)

g(n)=[dk,dk1,,d0]g(n)=\left[d_{k}, d_{k-1}, \ldots , d_{0}\right], где dkdk1d0d_{k} d_{k-1} \cdots d_{0} — десятичная запись nn (например, g(2801)=[2,8,0,1]g(2801)=[2,8,0,1]).

Задача 4.7.6

Мы можем расширить понятие примитивно рекурсивных функций на функции из Zk\mathbf{Z}^{k} в Z\mathbf{Z}, где Z\mathbf{Z} — множество целых чисел. Всё, что для этого нужно, — это рассматривать пару n1,n2\left\langle n_{1}, n_{2}\right\rangle как представление целого числа из Z\mathbf{Z}: если n1>0n_{1}>0, то она представляет n2n_{2}, иначе она представляет n2-n_{2}. Покажите, что следующие функции над целыми числами примитивно рекурсивны:

?
(a)

inner(n,m)=\operatorname {inner}(n, m)= скалярное произведение двух kk-мерных векторов nn и mm, если size(n)=size(m)=2k\operatorname {size}(n)=\operatorname {size}(m)=2 k (и равно 0 в противном случае). (Мы рассматриваем список [n1,n2,,n2k]\left[n_{1}, n_{2}, \ldots , n_{2 k}\right] как kk-мерный целочисленный вектор, ii-й элемент которого — это целое число, представленное парой n2i1,n2i\left\langle n_{2 i-1}, n_{2 i}\right\rangle; то есть оно равно n2in_{2 i}, если n2i1>0n_{2 i-1}>0, и равно n2i-n_{2 i}, если n2i1=0n_{2 i-1}=0.)

(b)

det(n)=\operatorname {det}(n)= определитель матрицы nn, если size(n)=2k2\operatorname {size}(n)=2 k^{2} для некоторого k1k \geq 1 (и равен 0 в противном случае). (Мы рассматриваем [n1,n2,,n2k2]\left[n_{1}, n_{2}, \ldots , n_{2 k^{2}}\right] как целочисленную матрицу MM размера k×kk \times k, где MijM_{i j} равно целому числу, представленному парой n2(i1)k+2j1,n2(i1)k+2j\left\langle n_{2(i-1) k+2 j-1}, n_{2(i-1) k+2 j}\right\rangle.)

Задача 4.7.7

Мы говорим, что последовательность n=[n1,,nk]n=\left[n_{1}, \ldots , n_{k}\right] сбалансирована, если существует разбиение {1,2,,k}\left\{ 1,2, \ldots , k\right\} на два подмножества BB и CC (то есть BC={1,2,,k}B \cup C=\left\{ 1,2, \ldots , k\right\} и BC=B \cap C=\emptyset) такое, что iBni=jCnj\sum_{i \in B} n_{i}=\sum_{j \in C} n_{j}. Докажите, что предикат [n[n сбалансирована]] примитивно рекурсивен.

?
Задача 4.7.8
?
(a)

Покажите, что функция merge(n,m)\operatorname {merge}(n, m), которая объединяет две отсортированные последовательности в одну отсортированную последовательность (и выдаёт 0, если хотя бы одна из двух входных последовательностей не отсортирована), примитивно рекурсивна.

(b)

Докажите, что sort примитивно рекурсивна, используя алгоритм сортировки слиянием.

Задача 4.7.9
  • Предположим, что g:NNg: \mathbf{N} \rightarrow \mathbf{N} и h:N2Nh: \mathbf{N}^{2} \rightarrow \mathbf{N} — две примитивно рекурсивные функции. Покажите, что следующая функция ff примитивно рекурсивна:
f(0,n)=g(n)f(m+1,n)=f(m,h(m,n)) \begin{aligned} f(0, n) & =g(n) \\ f(m+1, n) & =f(m, h(m, n)) \end{aligned}
?
Задача 4.7.10
  • Предположим, что g1,g2g_{1}, g_{2} и hh все примитивно рекурсивны. Покажите, что следующая функция ff примитивно рекурсивна:
f(0,n)=g1(n)f(m+1,0)=g2(m)f(m+1,n+1)=h(m,n,f(m+1,n),f(m,n+1)) \begin{aligned} f(0, n) & =g_{1}(n) \\ f(m+1,0) & =g_{2}(m) \\ f(m+1, n+1) & =h(m, n, f(m+1, n), f(m, n+1)) \end{aligned}
?
Задача 4.7.11
  • Предположим, что g1,g2g_{1}, g_{2} и hh все примитивно рекурсивны. Покажите, что следующая функция ff примитивно рекурсивна:
f(0,n)=g1(n)f(m+1,0)=g2(m)f(m+1,n+1)=h(m,n,f(m,n),f(n,m),f(m,m),f(n,n)) \begin{aligned} f(0, n) & =g_{1}(n) \\ f(m+1,0) & =g_{2}(m) \\ f(m+1, n+1) & =h(m, n, f(m, n), f(n, m), f(m, m), f(n, n)) \end{aligned}
?
Задача 4.7.12

Предположим, что g1,g2,h1g_{1}, g_{2}, h_{1} и h2h_{2} все примитивно рекурсивны. Пусть f1f_{1} и f2f_{2} — функции, определённые следующими формулами:

f1(m,0)=g1(m)f2(m,0)=g2(m)f1(m,n+1)=h1(m,n,f1(m,n),f2(m,n))f2(m,n+1)=h2(m,n,f1(m,n),f2(m,n)) \begin{aligned} f_{1}(m, 0) & =g_{1}(m) \\ f_{2}(m, 0) & =g_{2}(m) \\ f_{1}(m, n+1) & =h_{1}\left(m, n, f_{1}(m, n), f_{2}(m, n)\right) \\ f_{2}(m, n+1) & =h_{2}\left(m, n, f_{1}(m, n), f_{2}(m, n)\right) \end{aligned}

Покажите, что f1f_{1} и f2f_{2} обе примитивно рекурсивны:

?
§
Пример 4.39

Покажите, что если множество AA можно представить в виде A={n(m)R(n,m)}A=\left\{ n \mid (\exists m) R(n, m)\right\} для некоторого рекурсивного предиката RR, то AA является р.п. Как следствие,

?
(a)

F={nn2,(a,b,c1)an+bn=cn}F=\left\{ n \mid n \geq 2,(\exists a, b, c \geq 1) a^{n}+b^{n}=c^{n}\right\} является р.п. 1

Footnotes

  1. Знаменитая Великая теорема Ферма утверждает, что F={2}F=\left\{ 2\right\}, и, значит, FF на самом деле рекурсивно.

(b)

Для любой рекурсивной функции ff множество Jf={nn1,(m)f(m)(n)=1}J_{f}=\left\{ n \mid n \geq 1,(\exists m) f^{(m)}(n)=1\right\} является р.п. 1

Footnotes

  1. Пусть f(n)=3n+1f(n)=3 n+1, если nn нечётно, и f(n)=n/2f(n)=n / 2, если nn чётно. Гипотеза (3n+1)(3n+1) утверждает, что JfJ_{f} состоит из всех положительных целых чисел.

Пример 4.41

Пусть

?
(a)

Σ={1,2,,8,9,X}\Sigma =\left\{ 1,2, \ldots , 8,9, X\right\} с порядком 1289X1 \prec 2 \prec \cdots \prec 8 \prec 9 \prec X.

(b)

Σ={0,1}\Sigma =\left\{ 0,1\right\} и 010 \prec 1.

Исследуйте ι(n)\iota (n).

Пример 4.42

Пусть Σ={s1,s2,,sk}\Sigma =\left\{ s_{1}, s_{2}, \ldots , s_{k}\right\} и s1s2sks_{1} \prec s_{2} \prec \cdots \prec s_{k}. Покажите, что следующие функции примитивно рекурсивны:

?
(a)

lengΣ(x)=x\operatorname {leng}_{\Sigma }(x)=\left|x\right|.

(b)

concatΣk(x1,x2,,xk)=x1x2xk,k1\operatorname {concat}_{\Sigma }^{k}\left(x_{1}, x_{2}, \ldots , x_{k}\right)=x_{1} x_{2} \cdots x_{k}, k \geq 1.

(c)

substrΣ(x,i,)=\operatorname {substr}_{\Sigma }(x, i, \ell )= подстрока yy строки xx, начинающаяся с ii-го символа и имеющая длину \ell, если 1ix1 \leq i \leq \left|x\right| и 1xi+11 \leq \ell \leq \left|x\right|-i+1; и 0 в противном случае.

(d)

subΣ(x,y)=[x\operatorname {sub}_{\Sigma }(x, y)=[x является подстрокой y]y].

(e)

head Σ(x,y)=[x{ }_{\Sigma }(x, y)=[x является префиксом y]y].

(f)

tail Σ(x,y)=[x_{\Sigma }(x, y)=[x является суффиксом y]y].

Задача 4.8.1

Разработайте многоленточную машину Тьюринга, которая «складывает» две строки над Σ={1,2,,X}\Sigma = \left\{ 1,2, \ldots , X\right\}, то есть на входах x,yΣx, y \in \Sigma^{*} вычисляет zΣz \in \Sigma^{*} такое, что ιΣ1(z)=ιΣ1(x)+ιΣ1(y)\iota_{\Sigma }^{-1}(z)=\iota_{\Sigma }^{-1}(x)+\iota_{\Sigma }^{-1}(y).

?
Задача 4.8.2

Завершите доказательство части теоремы 4.47, касающейся примитивной рекурсии. А именно, для данных многоленточных ДМТ MgM_{g} и MhM_{h}, вычисляющих функции gg и hh, разработайте многоленточную ДМТ MM, вычисляющую функцию ff, которая определена из функций gg и hh с помощью примитивной рекурсии.

?
Задача 4.8.3

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

?
Задача 4.8.4

Покажите, что следующие функции, определённые на {a,b}\left\{ a, b\right\}^{*}, примитивно рекурсивны:

?
(a)

f1(x,y)=[xf_{1}(x, y)=[x является подпоследовательностью y]y], где x=x1x2xkx=x_{1} x_{2} \cdots x_{k} является подпоследовательностью y=y1y2ymy=y_{1} y_{2} \cdots y_{m}, если существует последовательность целых чисел 1n1<n2<<nkm1 \leq n_{1}<n_{2}<\cdots <n_{k} \leq m такая, что ynt=xiy_{n_{t}}=x_{i} для i=1,,ki=1, \ldots , k.

(b)

f2(x,y)=f_{2}(x, y)= число вхождений xx в качестве подстроки в yy.

(c)

f3(x)=f_{3}(x)= строка, полученная из xx заменой каждого вхождения bab a в xx на aba b. Например, f3(babab)=ababbf_{3}(b a b a b)=a b a b b.

(d)

f4(x)=f_{4}(x)= длина самой длинной строки ww такой, что и ww, и wRw^{R} встречаются в качестве подстрок в xx.

Задача 4.8.5

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

?
Задача 4.8.6

Пусть f(k,0)=ekf(k, 0)=\left\lfloor e^{k}\right\rfloor, а f(k,n)=f(k, n)= nn-я цифра справа от десятичной точки в десятичном разложении eke^{k}, где e=n=01/n!e=\sum_{n=0}^{\infty } 1 / n!. Покажите, что ff является рекурсивной функцией. Является ли ff примитивно рекурсивной функцией?

?
Задача 4.8.7

Пусть GG — грамматика над алфавитом Σ\Sigma. Покажите, что следующие функции g1,g2,g3g_{1}, g_{2}, g_{3} частично рекурсивны:

?
(a)

g1(x)=g_{1}(x)= минимальное число шагов в выводе xx, если xL(G)x \in L(G), и g1(x)g_{1}(x) \uparrow в противном случае.

(b)

g2(x)=g_{2}(x)= минимальная длина (число символов) вывода xx, если xL(G)x \in L(G), и g2(x)g_{2}(x) \uparrow в противном случае.

(c)

g3(x,y)=1g_{3}(x, y)=1, если существует вывод xx, более короткий, чем любой вывод yy, при условии, что оба xx и yy принадлежат L(G)L(G), и g3(x,y)g_{3}(x, y) \uparrow в противном случае.

(d)

Пусть g4(x,y)={1 если g3(x,y),0 иначе. g_{4}(x, y)=\begin{cases} 1 & \text{ если } g_{3}(x, y) \downarrow , \\ 0 & \text{ иначе. }\end{cases} Является ли g4g_{4} рекурсивной функцией?

Задача 4.8.8

(Функция Аккермана) Определим функцию A:N2NA: \mathbf{N}^{2} \rightarrow \mathbf{N} следующим образом:

A(0,n)={n+1 если n1n+2 иначе A(m+1,0)=1,A(m+1,n+1)=A(m,A(m+1,n)) \begin{aligned} A(0, n) & =\begin{cases} n+1 \quad \text{ если } n \leq 1 \\ n+2 \quad \text{ иначе } \end{cases} \\ A(m+1,0) & =1, \\ A(m+1, n+1) & =A(m, A(m+1, n)) \end{aligned}
?
(a)

Пусть Am(n)=A(m,n)A_{m}(n)=A(m, n). Чему равно A2(n)A_{2}(n)? A3(n)A_{3}(n)? Покажите, что каждая AmA_{m} примитивно рекурсивна.

(b)

Покажите, что AA является рекурсивной функцией.

(c)

Покажите, что для каждой примитивно рекурсивной функции f:NNf: \mathbf{N} \rightarrow \mathbf{N} существует целое число k0k \geq 0 такое, что f(n)Ak(n)f(n) \leq A_{k}(n) для почти всех n0n \geq 0 (т.е. для всех, кроме конечного числа, n0n \geq 0).

(d)

Покажите, что AA не является примитивно рекурсивной.