4.7

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

[18/33%]
Показать
LaTeX
Пример 4.32

Покажите, что функция π:N2→N\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,…,nk−1,nk)=⟨k−1,⟨n1,⟨⋯⟨nk−1,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,…,m⏟k]\operatorname {list}(m, k)=[\underbrace{m, m, \ldots , m}_{k}], если k≥1k \geq 1.

(b)

find⁡([n1,…,nk],m)={min⁡{i∣1≤i≤k,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,…,ni−1,m,ni+1,…,nk] если 1≤i≤k,[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] если 1≤i≤k,1≤ℓ≤k−i+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:N→Nf: \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 : N→N\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) такая, что np1≤np2≤⋯≤npkn_{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, если m≥nm \geq n, и g(m,n)=0g(m, n)=0, если n>mn>m.

Задача 4.7.2

Пусть τ1:⋃k=1∞Nk→N\tau_{1}: \bigcup_{k=1}^{\infty } \mathbf{N}^{k} \rightarrow \mathbf{N} определена как f(n1,…,nk)=2n13n2⋯pknkf\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) и если k≤ℓk \leq \ell, то ni=min_{i}=m_{i} при всех ii, 1≤i≤k1 \leq i \leq k, и mj=0m_{j}=0 при всех jj, k<j≤ℓk<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 неотрицательных целых чисел. Докажите, что если 1≤i1<i2<⋯<iℓ≤k1 \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,dk−1,…,d0]g(n)=\left[d_{k}, d_{k-1}, \ldots , d_{0}\right], где dkdk−1⋯d0d_{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-й элемент которого — это целое число, представленное парой ⟨n2i−1,n2i⟩\left\langle n_{2 i-1}, n_{2 i}\right\rangle; то есть оно равно n2in_{2 i}, если n2i−1>0n_{2 i-1}>0, и равно −n2i-n_{2 i}, если n2i−1=0n_{2 i-1}=0.)

(b)

det⁡(n)=\operatorname {det}(n)= определитель матрицы nn, если size⁡(n)=2k2\operatorname {size}(n)=2 k^{2} для некоторого k≥1k \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(i−1)k+2j−1,n2(i−1)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 (то есть B∪C={1,2,…,k}B \cup C=\left\{ 1,2, \ldots , k\right\} и B∩C=∅B \cap C=\emptyset) такое, что ∑i∈Bni=∑j∈Cnj\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:N→Ng: \mathbf{N} \rightarrow \mathbf{N} и h:N2→Nh: \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} обе примитивно рекурсивны:

?