• 递归集与递归可枚举集


    递归函数(一):开篇
    递归函数(二):编写递归函数的思路和技巧
    递归函数(三):归纳原理
    递归函数(四):全函数与计算的可终止性
    递归函数(五):递归集与递归可枚举集
    递归函数(六):最多有多少个程序
    递归函数(七):不动点算子
    递归函数(八):偏序结构
    递归函数(九):最小不动点定理


    回顾

    上文中我们讨论了全函数和部分函数,以及计算的可终止性。
    本文我们从数论函数开始,给原始递归函数集增加一种新的运算,得到了一个更大的集合。
    然后根据递归函数,我们可以定义递归集和递归可枚举集,
    为以后讨论可计算性与可判定性打好基础。

    数论函数

    自然数集一般记为N={0,1,2,}N={0,1,2,⋯},那么nn个自然数集的笛卡尔积记为NnNn,
    于是,我们称集合NnNn到NN的部分函数为nn元部分数论函数。
    作为数论函数,2x2x是一个全函数,而x/2x/2,xyx−y,x√x只是部分函数,
    它们的计算结果,3/23/2,464−6,5√5都不在NN中,于是相应定义域中的点可视为没有定义。

    为什么讨论数论函数呢,其一是因为它是一个典型数学的问题,
    另外一点,则是因为我们经常把其他数学问题转换成数论问题,例如,哥德尔编码
    本文中,使用数论函数,可以简化我们的描述方式。

    一个谓词,指的是返回布尔值的函数,
    我们还可以将谓词看做值域为{0,1}{0,1}的一个数论函数。
    00代表True11代表False

    极小化算子

    前一篇中,我们从三个初始函数出发,
    通过合成运算和原始递归运算,得到了原始递归函数集,
    递归函数集是相对于这两种运算封闭的。

    然而,这样定义的原始递归函数,并不能包括所有的数论函数,
    一个典型的例子就是,阿克曼函数

    ackermann :: Int -> Int -> Int
    ackermann 0 x = x+1
    ackermann k 0 = ackermann (k-1) 1
    ackermann k x = ackermann (k-1) $ ackermann k x-1
    

    它并不是一个原始递归函数,(证略
    因此原始递归函数集并不足以表示计算机程序中的所有函数。

    为此,我们需要对原始递归函数集进行扩充,我们定义一个新的运算,称为极小化运算,
    P(x1,,xn,t)P(x1,⋯,xn,t)是一个谓词,令
    f(x1,,xn)=min P(x1,,xn,t)f(x1,⋯,xn)=min P(x1,⋯,xn,t)

    f(x1,,xn)f(x1,⋯,xn)的值,或者是使P(x1,,xn,t)P(x1,⋯,xn,t)为真的最小tt值,
    或者无定义,此时不存在tt使得P(x1,,xn,t)P(x1,⋯,xn,t)为真。
    这样通过minmin得到f(x1,,xn)f(x1,⋯,xn)的过程称为极小化运算,
    也称部分函数f(x1,,xn)f(x1,⋯,xn)是由谓词经过极小化运算得到的。

    以上我们给谓词定义了极小化运算,现在我们将极小化运算推广到一般的函数上面,
    g(x1,,xn,t)g(x1,⋯,xn,t)是一个n+1n+1元函数,令
    f(x1,,xn)=min{g(x1,,xn,t)=0}f(x1,⋯,xn)=min{g(x1,⋯,xn,t)=0}
    则称部分函数f(x1,,xn)f(x1,⋯,xn)是由函数g(x1,,xn,t)g(x1,⋯,xn,t)经过极小化运算得到的。

    递归函数集

    和定义原始递归函数集一样,我们从以下三个初始函数出发,
    (1)零函数n(x)=0n(x)=0
    (2)后继函数s(x)=x+1s(x)=x+1
    (3)投影函数uni(x1,,xn)=xiuin(x1,⋯,xn)=xi,iini⩽i⩽n
    由初始函数,经过有限次合成运算,原始递归运算,以及极小化运算,得到的函数称为递归函数。

    递归函数并不一定是全函数,因为极小化运算可能会导致结果函数在某些点无定义,
    递归的部分函数称为部分递归函数。

    可以证明阿克曼函数是递归函数,但不是原始递归函数,
    因此,原始递归函数集是递归函数集的真子集。

    递归可枚举集

    在具体实践中,我们经常会遇到这样的问题,
    给定一个元素,我们需要判断这个元素是否属于某个集合。
    这种问题,称为集合的成员资格问题。

    沿用这一思路,我们可以使用一个谓词χBχB来定义相应的集合BNB⊆N,
    B={xN|χB(x)}B={x∈N|χB(x)}
    谓词χB(x)χB(x)为真,则xBx∈B。
    这个谓词χB(x)χB(x),通常称为集合BB的特征函数。

    如果特征函数χBχB是第一个递归的全函数,
    则我们总是可以判断χB(x)χB(x)等于00还是11,
    这样的集合BB称为递归集。

    如果存在部分递归函数gg,使得B={xN|g(x)}B={x∈N|g(x)↓},
    即,xBx∈B当且仅当gg在xx处有定义,
    则称集合BB是一个递归可枚举集。

    因此,对于每一个自然数xNx∈N,
    我们总是可以通过递归集BB的特征函数χBχB,来判断xx是否BB的成员。
    而对于递归可枚举集,就不容乐观了,
    如果某个自然数xNx∈N是BB的成员,那么我们可以断定这件事,因为g(x)g(x)有定义,
    但是如果某个自然数yNy∈N不是BB的成员,我们就不能确定,因为这时候g(x)g(x)无定义。
    g(x)g(x)无定义,则它对应的图灵机不停机,后文我们详细讨论

    因此,集合BB是递归的当且仅当BB和B¯B¯是递归可枚举的,
    其中B¯B¯为BB的补集。

    阅读全文:http://click.aliyun.com/m/15284/  

  • 相关阅读:
    Babel的安装和使用
    ECMAScript 6 和数组的新功能
    网站首页被降权后怎么快速处理
    赫然:怎样学习seo优化技术
    浅谈互联网页面价值
    ZERO:从搜索用户来看SEO
    李彦宏:论搜索引擎三个定律
    焦大:seo该研究用户需求还是搜索算法
    GA教程:使用自定义变量来扩展高级细分
    焦大:做SEO应该研究的用户需求的方向
  • 原文地址:https://www.cnblogs.com/iyulang/p/6642048.html
Copyright © 2020-2023  润新知