递归函数(九):最小不动点定理

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

    • -

回顾

上文我们讨论了集合上的偏序结构,之所以谈论它们是因为,
完全偏序集上的连续函数具有最小不动点,这称之为最小不动点定理,
除了集合论的一些知识之外,我们还要讨论到底什么是连续函数,以及什么是完全偏序集。

有向子集与完全偏序

偏序集\((D,leqslant )\)的非空子集\(Ssubseteq D\)叫做有向子集(directed subset),
当且仅当,对于\(S\)中的任意元素\(a,bin S\),
存在\(S\)中的一个元素\(c\),有\(aleqslant c\)且\(bleqslant c\)。

如果一个偏序集\((D,leqslant )\)的每个有向子集\(Ssubseteq D\)都有上确界(记为\(bigvee S\))
就称它是一个有向完全偏序集,
此外,如果它还有最小元,就称它是一个完全偏序集。

注意,完全偏序集并不是每一个子集都有上确界,
而是它的每一个有向子集都有上确界。

连续函数

假设\((D,leqslant )\)与\((E,leqslant )\)是完全偏序集,
\(f:Drightarrow E\)是集合上定义的一个函数,
如果,\(Ssubseteq D\),则\(f(S)\)为\(E\)的子集,
其中\(f(S)=lbrace f(d)| din S rbrace\)。

对于任意的\(d,d'in D\),如果\(dleqslant d'\)就有\(f(d)leqslant f(d')\),
我们就说\(f\)是单调的。
可以看出,如果\(f\)是单调的,且\(S\)是\(D\)的有向子集,那么\(f(S)\)也是\(E\)的有向子集。

如果\(f\)是单调的,且对于任意有向子集\(Ssubseteq D\),
有\(f(bigvee S)=bigvee f(S)\),就称\(f\)是连续的。

连续函数集上的偏序结构

完全偏序集\((D,leqslant )\)和\((E,leqslant )\)上的连续也可以定义偏序结构,
我们称\(fleqslant g\),当且仅当对于每一个\(din D\),我们有\(f(d)leqslant g(d)\)。
这样我们就得到了一个元素为连续函数的偏序集,\((Drightarrow E,leqslant )\)。
可以证明,\((Drightarrow E,leqslant )\)也是一个完全偏序集。(证略

最小不动点定理

如果\((D,leqslant )\)是一个完全偏序集,且\(f:Drightarrow D\)是连续的,
则\(f\)有最小不动点,\(fix_D f=bigvee lbrace f^n(perp )| ngeqslant 0 rbrace \)。

因为\(perp \)是\(D\)中的最小元,且\(f(perp )in D\),所以,\(perp leqslant f(perp )\),
因为\(f\)是连续的,所以\(f\)也一定是单调的,所以,\(f(perp )leqslant f^2(perp )\),
继而,\(f^n(perp )leqslant f^{n+1}(perp )\),对于任意的\(ngeqslant 0\)都成立。

\(lbrace f^n(perp )| ngeqslant 0 rbrace\)构成了一个全序集,
所以,它是完全偏序集\((Drightarrow E,leqslant)\)的一个有向子集,必有上确界。

设\(a\)是上确界,\(a=bigvee lbrace f^n(perp )| ngeqslant 0 rbrace \),
首先\(a\)是\(f\)的不动点,因为,由\(f\)的连续性,
\(f(a)=f(bigvee lbrace f^n(perp )| ngeqslant 0 rbrace )\)
\(f(a)=bigvee lbrace f^{(n+1)}(perp )| ngeqslant 0 rbrace \),
但是由于\(lbrace f^n(perp ) rbrace\)与\(lbrace f^{(n+1)}(perp ) rbrace\),有同样的上确界,
所以,\(f(a)=a\)。

其次,\(a\)是\(f\)的最小不动点,
假设\(b=f(b)\)是\(f\)的任意不动点,因为\(perp leqslant b\),所以\(f(perp )leqslant f(b)\),
类似的,对于任意的\(ngeqslant 0\),\(f^n(perp )leqslant f^n(b)\)。
但是,由于\(b\)是\(f\)的不动点,所以\(f^n(b)=b\),
因此\(b\)是集合\(lbrace f^n(perp )| ngeqslant 0 rbrace\)的上界。
由于集合的最小上界是\(a\),所以有\(aleqslant b\)。

后继函数的不动点

succ :: Int -> Int
succ n = n+1

在第七篇中,我们说fix可以得到任意函数的不动点,
那么这个succ函数呢?它有没有不动点?
fix succ是什么?

现在我们有了最小不动点定理,
就得验证succ所指称的数学函数,是不是一个完全偏序集上的连续函数,
如果是的话,它就有不动点。

在第四篇为了表示计算的不可终止性,我们对自然数集进行了扩充,\(Ncup lbrace perp rbrace\),
然后用这个集合作为程序中Int类型的值的解释。

然而,\(Ncup lbrace perp rbrace\)不是一个完全偏序集,原因是它没有上界,
如果我们额外加入一个比其他的自然都大的元素\(+infty \),
则我们就得到了一个完全偏序集,\(Ncup lbrace perp rbracecup lbrace +infty rbrace\)。

然后,我们看succ连续吗?
首先,它是单调的,如果我们再定义\(succ(+infty )=+infty \),
就有\(succ(bigvee N)=bigvee succ(N)\),
因此,succ是一个连续函数。

根据最小不动点定理,succ的最小不动点是,\(fix succ=bigvee lbrace succ^n(perp )| ngeqslant 0 rbrace \)。

由于\(succ(perp )=perp \),即对于非终止的输入succ的计算也不会终止,
所以\(succ^n(perp )=perp \),
因此,\(fix succ=bigvee lbrace succ^n(perp )| ngeqslant 0 rbrace =perp \),
即,succ的最小不动点是\(perp \),fix succ的计算不会终止。

求解阶乘函数

上一篇中,我们证明了阶乘函数fact是以下函数的不动点,fact = fix g

g :: (Int -> Int) -> Int -> Int
g f n = case n of1 -> 1_ -> n * f (n-1)

现在我们来看一下,如何运用最小不动点定理来得到这个答案。
为了避免篇幅过长,关于g函数的连续性证明暂略,
我们直接使用公式,
\(fix g=bigvee lbrace g^n(perp )| ngeqslant 0 rbrace \),
即,g函数的最小不动点,就是集合\(D=lbrace g^n(perp )| ngeqslant 0 rbrace\)的上确界。

我们先来看一下这个集合\(D\)中有哪些元素,
其中,\(g(perp )in D\),我们将\(perp \)传入\(g\)中,看看会得到什么,

f1 = \n -> case n of1 -> 1_ -> ...

这个函数能计算f1 1,但是不能计算f1 2,恰好是fact函数有限展开的一阶项。

我们再来看\(g^2(perp )in D\),它等于\(g(f1)\),

f2 = \n -> case n of1 -> 1_ -> n * f1 (n-1)

这个函数能计算f2 1以及f2 2,但是不能计算f2 3,恰好是fact函数展开的二阶项。

由此,我们看出了规律,
\(g^n(perp )in D\)就是fact函数有限展开的第\(n\)阶项。
上一篇中,我们已经证明了,当\(nrightarrow infty\)时,它就是fact函数,
考虑到\(f1,f2,cdots\)这些函数的序关系,
因此,我们有\(fact=bigvee lbrace g^n(perp )| ngeqslant 0 rbrace \)。

即,fact函数就是g函数的最小不动点。

总结

到此为止,我想这个系列的文章已经讨论完了,
本系列文章一直围绕着递归函数和不动点进行分析,
在内容上可以分为两个部分,前半部分主要与可计算性理论有关,
后半部分与不动点定理有关,希望对大家有所帮助。

参考

有向集合
完全偏序
Kleene fixed-point theorem
Foundations for Programming Languages

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html中单选框颜色怎么改,如何更改单选按钮的颜色?

侃侃无极一种快速的解决方法是使用来覆盖单选按钮的输入样式:after,但是创建自己的自定义工具箱可能是更好的做法。 input[typeradio]:after { width: 15px; height: 15px; border-radius: 15px; top: -2px; left: -1px; …

PhotoShop

前景色填充:Altdelete 背景色填充:Ctrldelete 切换前景/背景色:X 键 接按d 是默认的黑色和白色转载于:https://www.cnblogs.com/xingfuzzhd/p/3358156.html

python 循环技巧

原文地址:http://docs.pythontab.com/python/python3.4/datastructures.html#tut-tuples 在字典中循环时,关键字和对应的值可以使用 iteritems() 方法同时解读出来。 knights {gallahad: the pure, robin: the brave}for k,v in knights.items():print(…

C++内存管理详解

C内存管理详解 转载:http://blog.csdn.net/yingxunren/article/details/4344933 伟大的Bill Gates 曾经失言:   640K ought to be enough for everybody — Bill Gates 1981   程序员们经常编写内存管理程序,往往提心吊胆。如果不想触…

如何先执行input (checkbox,radio)再执行函数

2019独角兽企业重金招聘Python工程师标准>>> 遇到一个问题,当input type"checkbox"点击时,没有立即执行勾选或去勾,而是先执行函数,如下代码 $(".sidebar_cart .cart_list ul").on("click&qu…

计算机基础及msoffice应用好考吗,全国计算机等级考试考试一级WPS Office和MS Office有什么不同?那个好考?...

以后的计算机office中的word等时2010版本,计算机一级有两个选择:1、一级WPS Office1. 采用无纸化考试,上机操作。考试时间为90 分钟。2. 软件环境:Windows 7 操作系统,WPS Office 2012 办公软件。3. 在指定时间内,完成下列各项操作:(1) 选择题…

Linux服务器上监控网络带宽的18个常用命令

本文介绍了一些可以用来监控网络使用情况的Linux命令行工具。这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度。入站流量和出站流量分开来显示。 作者:布加迪编译来源:51CTO.com|2014-04-11 10:10移动端收藏分享【51…

strcpy和memcpy的区别

转载:http://www.cnblogs.com/stoneJin/archive/2011/09/16/2179248.html strcpy与memcpy都是标准的C库函数,strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。 已知…

js正則表達式语法

1. 正則表達式规则 1.1 普通字符 字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之同样的一个字符。 举例1:表达式 "c&q…

计算机常见屏幕英语语句,计算机常见屏幕英语

计算机系统常见的屏幕英语对照,。、计算机常见屏幕英语(SCREEN ENGLISH)access 访问 data 数据 hard disk 硬盘 files 文件directory 目录 delete 删除(同:remove) exists 存在 name 名称 read-only 只读 change 修改,改变 save 保存 password 密码 conn…

[转]Windows Phone 7程序设计”完全版电子书可以免费下载了

本文转自:http://www.cnblogs.com/salam/archive/2010/10/29/1864246.html 现在学习Windows Phone 7开发资料十分有限,除了MSDN的官方开发文档外和一些博客外,几无其他的学习渠道。幸运地是美国的资深程序员兼作家Charles Petzold为大家免费放…

土豆春季实习试题之惨烈教训

今天做土豆的春季C实习生招聘试题,很多不应该错的错了,在此挑出一些重要的错误,供自己参考,以免以后再犯。 一、一道编程题,很简单,但是错了。 题目: 输入一个数组,求它的逆序数组…

linux-redhat替换yum网络源为centos网络源

2019独角兽企业重金招聘Python工程师标准>>> 1.为什么要替换 redhat系统使用yum命令安装软件时会出现This system is not registered with RHN. RHN support will be disabled. 原因是redhat的yum安装软件需要注册,是收费的。而centos的yum源是免费的。这…

计算机如何打开无线网络适配器,win7系统下网络适配器打不开怎么解决

通常情况下我们的电脑中都会有一个网络适配器,这是计算机联网的设备,不过最近有深度技术win7旗舰版系统用户却遇到了网络适配器打不开的情况,该怎么办呢,接下来系统城小编就给大家分享一下win7系统下网络适配器打不开的具体解决方…

cf13C Sequence(DP)

题意: N个数。a1...aN。 对于每个数而言,每一步只能加一或减一。 问最少总共需要多少步使得新序列是非递减序列。 N (1 ≤ N ≤ 5000) 思路: *一个还不知道怎么证明的结论(待证):最后的新序列b1...bN中…

【华为OD机试真题2023CD卷 JAVAJS】求幸存数之和

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 求幸存数之和 知识点数组 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 给一个正整数列 nums,一个跳数 jump,及幸存数量 left。运算过程为:从索引为0的位置开始向后跳,中间跳过 J 个数字,命中索引为J+…

JavaScript编码规范

1. 变量命名规范 变量名包括全局变量,局部变量,类变量,函数参数等等,他们都属于这一类。 基本规范 变量命名都以类型前缀有意义的单词组成,单词首字母都需要大写。例如:sUserName,nCount。 前缀…

大数据相加(转载)

转载:http://www.du52.com/text.php?id411 在这个大数据的年代里,我们不可避免会遇到两个超越正常数据类型(如int,long,long long)的整数相加。显然两个大数据已经不能使用传统的加号直接相加,但是相加的原理仍然是不…

微型计算机中使用的光盘应属于什么媒体,计算机应用基础练习题

计算机应用基础一、判断题1、微型机中硬盘工作时,应特别注意避免强烈震动【是】2、在Windows中,文件夹或文件的换名只有一种方法【否】3、用户在连接网络时,只可以使用域名,不可以使用IP地址【否】4、在WORD2007中,您可…

七天学会SALTSTACK自动化运维 (3)

七天学会SALTSTACK自动化运维 (3) 导读SLSTOP.SLSMINION选择器SLS文件的编译总结参考链接导读 SLS SLS (aka SaLt State file) 是 salkstack 中非常基础和重要的一种配置文件. 重要程度仅次于minion和 master 的主配置文件(或者说是一种数据结构,使用yaml编写), 因…