TCS學習筆記[1] 原始遞歸函數


2 原始遞歸函數

2.1 原始遞歸函數

  1. Q: 證明合成、原始遞歸保持可計算性的思路是什么?
    A: 寫一段\(\mathscr S\)程序計算相應函數。
    合成:順序結構。
    原始遞歸:循環結構。(更具體地,用一個變量\(Z\)表示不斷增長的\(t\)\(Z\)每次+1,而\(X_{n+1}\)每次-1,當\(X_{n-1}\)減為0時跳出循環,恰好\(Z\)就是輸入的最后一個分量,這就計算出了結果)
  2. Q: 原始遞歸函數定義中的\(n+2\)元函數\(g\)的輸入分為三部分:遞歸次數\(t\),上次遞歸結果\(h(\cdots, t)\),本次輸入\(x_1,\cdots,x_n\). 那么只使用三部分中其中某些部分的原始遞歸函數退化成了什么?有哪些典型例子是對這三部分不全部使用的?
    A:
    0. 只使用\(t\)則退化成了一元函數。
    1. 只使用\(x_1,\cdots,x_n\)則退化成多元函數。
    2. 只使用\(t,x_1,\cdots,x_n\)也退化成多元函數。
      總之不使用\(h(t)\)就一定跟一般意義的“遞歸”沒有關系。
    3. 只使用\(h(\cdots,t)\):退化為“反復地復合一元函數”,即\(h(\cdots,t+1)=g(t,h(\cdots,t),\cdots)=g_1(h(\cdots,t))=g_1(g_1(h(\cdots,t-1)))\)以此類推。
      例:不斷平方,用於計算\(x^{2^n}\).
      例:驗證Collatz猜想。
    4. 只使用\(t,h\):相當於利用原始遞歸運算構造一元函數。一切原始遞歸運算構造的一元函數都可以看作此類例子。
      具體地,當\(t\)從0開始不斷增大時,連續應用了一系列\(g(t,h)\),這就可以很容易的構造某種“累積”,例如\(g(t,h)=f(t)+h(t)\),這就可以計算從1開始一串整數的函數值之和。(參見2.3迭代運算)
      特別地,回憶只使用\(h\)的情況,對於上面“計算函數值之和”的例子就退化為計算常數之和,即反復加同一個常數。
    5. 只使用\(h,x_1,\cdots,x_n\):直觀上看,遞歸的規則和遞歸了多少次無關。不需顯式出現\(t\)(即\(t\)的唯一作用就是計算出\(h(x,t)\)
      例如\(n=1\),遞歸定義加法為\(h(x,0)=x;h(x,t+1)=h(x,t)+1\). 遞歸定義乘法\(h(x,0)=0;h(x,t+1)=h(x,t)+x\). 遞歸定義乘方\(h(x,0)=1;h(x,t+1)=h(x,t)*x\). 這些例子中都不顯式出現\(t\).
      相比之下,遞歸定義階乘\(h(0)=1,h(t+1)=h(t)\cdot (t+1)\)中就顯式出現了\(t\). 可以看到關鍵點是階乘每次“操作”不是“相同”的,但是加法乘法每次操作是“相同”的。
  3. Q: 對於課本中本節列舉的10種常見的原始遞歸函數,請用樹結構表示\(p(x),x\dot -y, |x-y|, \alpha(x)\)間的依賴關系。
    A: \(p(x):\{x\dot -y:\{|x-y|,\alpha(x)\}\}\)
  4. Q: 說明在\(n\)個整數中取最大值的函數是原始遞歸的。
    A: 提示:用歸納
    \(max(x_1,\cdots, x_n)=max(max(x_1,\cdots,x_{n-1}),x_n)\)
    \(max(x,0)=x;max(x,t+1)=max(x,t)+(t\ge x)\)

2.2 原始遞歸謂詞

  1. Q: 如何表示邏輯運算、分段函數?
    A: 乘是“與”,\(\alpha\)是“非”。與、非已經是邏輯連接符的完備集了。
    \(f\cdot P+g\cdot \neg P\)

2.3 迭代運算、有界量詞和極小化

  1. Q: 迭代運算、有界量詞和有界極小化有何聯系?
    A: 界為\(y\)的有界量詞相當於\(y\)次邏輯運算,而與、或邏輯運算相當於乘法、加法,則有界量詞就是\(\prod,\sum\).
    構造有界極小化時,設“最小合題意的數”存在為\(t_0\),那么只需對小於\(t_0\)的所有數賦函數值1,大於等於\(t_0\)的賦值0,這些值全部相加就恰好得到\(t_0\). 而這個“賦值”可以通過邏輯實現(即“更小的不滿足”)。所以有界極小化是外層連加,內層連乘。
  2. Q: 由上定義,如果不存在\(t_0\),那么有界極小化結果為\(y+1\). 但本書中強行定義此時結果為(). 觀察本節內容,推測這出於什么考慮。
    A: 0
    由此,得到\(\lfloor x/0\rfloor=p_0=0\).
    本節中對於第\(n\)個質數\(p_n\)的界估計非常“慷慨”。實際上,因為有界極小化只需要有一個界就行了,我們經常給出很松的估計。
    如果將\(t_0\)不存在時有界極小化結果定義為\(y+1\),那么結果和界有關,這顯然不太理想。
  3. Q: 辨析:有界極小化,極小化
    原始遞歸函數,遞歸函數,部分遞歸函數,可計算函數,部分可計算函數
    A: 極小化相比有界極小化,去除了界的限制。故原本有界極小化找不到\(t_0\)而輸出0的情況在極小化處要不然會輸出\(>t_0\)的數,要不然\(\uparrow\).
    原始遞歸函數使用三種初始函數(零,后繼,投影)和兩種針對函數的運算(合成,原始遞歸)得到,而部分遞歸函數可額外使用極小化。故原始遞歸一定部分遞歸,也一定遞歸。部分遞歸不一定原始遞歸。
    部分遞歸的全函數即遞歸函數。遞歸也不一定原始遞歸。
    根據極小化可用\(\mathscr S\)計算,知部分遞歸、遞歸就是部分可計算、可計算。其實反過來也成立,但此章先不證明。

2.4 配對函數和Gödel數

  1. Q: 利用配對函數的構造方式,構造有序\(k\)元組到自然數的一一對應。
    A: 例如4元,\(2^x 3^y 5^zf(w)\),其中\(f(w)\)是從小到大第\(w\)個不被2,3,5整除的數。
    不過此時還有0的問題,所以最后要\(-1\)
    注:可以不寫帶點的\(\dot -1\),因為此處可以保證被減數不小於減數。
  2. Q: 配對函數和Gödel數都對解碼是全函數提出了要求,那么怎么處理邊界情況呢?
    A: 本書中,配對函數直接\(-1\),Gödel數則在對0解碼或者解碼“第0位”時始終得0.
    注:\((0)_i=(1)_i=(i)_0=0\).
    注:可以看到配對函數的解碼仍是單射,但哥德爾編碼的解碼並不是,因為規定0和1的解碼都是“空”(或稱全為0的數列)。
  3. Q: 哥德爾編碼中,求長度\(Lt(x)\)為什么可以用有界極小化表示?
    A: 平凡的界:一個自然數的因數小於等於自身。

2.5 原始遞歸運算

  1. Q: 請分別根據2.4的角度和2.1題1.的角度對比聯立遞歸、多步遞歸、多變量遞歸。
    A:
    0. 2.4
    聯立遞歸使用配對(或者更一般的,對有限長元組編碼)函數,把\(h_1,\cdots,h_m\)編碼成一個\(H\).
    多步遞歸使用Gödel數,把\(h(x,0),\cdots,h(x,t)\)編碼成一個\(H(x,t)\). 這里\(t\)是變長的,區別上面的\(m\).
    多變量遞歸使用Gödel數,把“對角線”上(\(t_1+t_2=常數\))的值編碼成一個\(H\). 注:大於2個變量時,其實也可以用某種排序編碼成Gödel數。
    1. 2.1題1.
      聯立遞歸針對\(h\)(每個\(t\)\(h\)變成多個),多步遞歸也針對\(h\)(積累之前的所有h),多變量遞歸針對\(h\)\(t\)\(t\)變成兩個,\(h\)也相應有兩個相關輸入字段\(t_1,t_2\)
  2. Q: 本節中2.21至2.24中都出現原始遞歸(可計算)字樣。原始遞歸就是可計算嗎?如果不是,那么這括號又是什么意思?
    A: 不是。原始遞歸函數是可計算函數的真子集。(參見下節)
    括號表示從使用(聯立、多步、多變量)遞歸前使用遞歸后只使用了原始遞歸函數所允許的各個運算,故使用遞歸保持原始遞歸,也保持可計算。
    簡單來說:原始遞歸,原始遞歸,得到原始遞歸
    可計算,原始遞歸,得到可計算
    括號反映的是這里的相同。不是這里的相同。
  3. Q: 多步遞歸和\(h(x,t+1)=g(t,h(x,\omega_1(x,t)),\cdots,h(x,\omega_k(x,t)),x),t\ge k-1, \omega_i(x,t)\le t\)有何聯系?
    A: 多步遞歸允許使用之前所有數,自然允許計算出\(k\)個索引值\(\omega_1,\cdots,\omega_k\),再“查表”。注意每個索引值都必須\(\le t\),否則死循環了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM