4.7

Функции сопряжения и гёделевская нумерация

[18/33%]
Показать
LaTeX
Пример 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} обе примитивно рекурсивны:

?