5 函数可计算性
原始递归函数
基本函数
合成方法
- 函数的复合
- 递归定义 \(f(n_1\dots n_k,0)=g(n_1\dots n_k)\) \(f(n_1\dots n_k,m+1)=h(n_1\dots n_k,f(n_1\dots n_k,m)\) (通俗解释,f(n,m+1)由f(n,m)和n决定)
原始递归函数
原始递归函数由基本函数的复合/递归得到的函数全体
\(plus(n,m)=n+m\)
- 用递归 \(plus(n,0)=n,plus(n,m+1)=succ(plus(n,m+1))\)
\(mult(n,m)=mn\) 对\(plus(n,m)\)递归
前驱函数\(succ(0)=0,succ(n+1)=n\)
- \(succ(0)=0\)
- \(pred(n+1)=n=id_{2,1}(n,pred(n))\)
\(m\sim n=\max \{m-n,0\}\)
- \(m\sim 0=m\)
- \(m\sim(n+1)=succ(m\sim n)\) 利用succ(0)=0
\(iszero(n): iszero(0)=1,iszero(n)=0\)
分段函数 \(p,q\)只能取0或1
- \(f=p \cdot g+(1\sim p)\cdot h\)
\(digit(m,n,p)=div(rem(n,p^m),p^{m\sim 1}))\)
Warning
原始递归函数都是可计算的
Warning
存在不是原始递归函数 但可计算的函数

Warning
\(PR\)={"f",f is primitive recursive function} is decidable
\(C\)={"f",f is computable} is undecidable
\(PR\subset C\)
证明: 假设C可判定, 那么C'=一元可计算函数也是可判定的
C' is lexicographically Turing enumerable (根据recursive language 的性质)
构造一台TM M:
- 给定自然数n, 枚举\(g_1,g_2\dots g_n\)
- 得到了函数\(g_n\)之后, 计算\(g_n(n)\)
- 返回\(g_n(n)+1\) 设这个图灵机计算的函数为\(g*\). 那么\(g^*(n)\) 跟C‘中任意一个函数都不同
本质还是diagonization argument n= 1 2 3 g1 a b a g2 a c a g3 c a b g* a+1 c+1 b+1 跟每一行比, 都至少有一个元素不同。
μ-递归
判断一个可计算函数 g 是否是 minimalizable 的是不可判定的(停机问题)
μ-递归函数:原始递归函数+ 复合/递归定义/最小化
数值函数是μ-递归的当且仅当它可计算