Church 整数前驱的推导
Church 整数前驱的推导比其后继复杂得多,wiki中一个前驱的定义据王垠的博客里说,是他一个数学系的同学花一星期时间推导出来的,
其定义确实比其它介绍lambda的文章中用pair来实现(据说是图灵的学长花了3个月时间才想出来的)的方式简单许多,本文记录自己学习这
个定义的分析过程,Church 整数的详细介绍
见:http://zh.wikipedia.org/wiki/%E9%82%B1%E5%A5%87%E6%95%B0
pred = λnfx.((n (λgh. h (g f)) (λu. x)) (λu. u)) pred 0 = λnfx.((n (λgh.h (g f)) (λu.x)) (λu.u)) λfx.x
= λfx.((λfx.x (λgh.h (g f)) (λu.x)) (λu.u))
= λfx.(((λx.x) (λu.x)) (λu.u))
= λfx.((λu.x) (λu.u))
= λfx.x
= 0 分析关键部分:((n (λgh.h (g f)) (λu.x)) (λu.u))
对n=1,2,3...分别有
(((λgh.h (g f)) (λu.x)) (λu.u))
= ((λh.h ((λu.x) f)) (λu.u))
= ((λh.h x) (λu.u))
= ((λu.u) x)
= x ((λgh.h (g f) ((λgh.h (g f)) (λu.x))) (λu.u))
=(((λgh.h (g f)) (λh.h x)) (λu.u))=((λh.h ((λh.h x) f)) (λu.u))
=((λh.h (f x)) (λu.u))
=((λu.u) (f x))
=(f x) 可见((n (λgh.h (g f)) (λu.x))对于大于0的情况分别等于
(λh.h x), ((λh.h (f x)), ((λh.h (f (f x))) .... (λu.u)的作用就是将第二个项 x, (f x), (f (f x)) ........提取出来: 整个pred的核心就在((n (λgh.h (g f)) (λu.x)) 这里,为了理解方便,将0临时编码为(λh.h x),也就是第一次应用(λgh.h (g f)) (λu.x)
后得到0,然后用(λgh.h (g f))作为后继函数作用在0上得到了1,(λh.h (f x)),
再次应用得到2,(λh.h (f (f x)))... 这就说明了为什么pred能获得n-1,n的丘奇编码中总共有n个f,总共产生n个(λgh.h (g f)),
其中最右边一个应用到(λu.x)上得到0,剩下的n-1个相当于从0开始应用succ(在这里succ是(λgh.h (g f)) )
n-1次,所以得到了n-1.
Church 整数前驱的推导的更多相关文章
- Go:学习笔记兼吐槽(1)
Go:学习笔记兼吐槽(1) Go:学习笔记兼吐槽(2) Go:学习笔记兼吐槽(3) 自动添加分号 在很多其他的编程语言中,每一行代码的结尾都必须有分号(假设一行中只有一句代码),Golang 的开 ...
- python入门知识点(下)
51.函数的文档注释及作用 """ 函数的文档注释: 函数的注释文字. 必须添加到函数定义的那一行的下面一行. 好处: 当使用Ctrl + Q查看函数的使用说明文档时,能 ...
- Apache Hudi数据跳过技术加速查询高达50倍
介绍 在 Hudi 0.10 中,我们引入了对高级数据布局优化技术的支持,例如 Z-order和希尔伯特空间填充曲线(作为新的聚类算法),即使在经常使用过滤器查询大表的复杂场景中,也可以在多个列而非单 ...
- BNU27945——整数边直角三角形——————【简单数学推导】
整数边直角三角形 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class nam ...
- Help Tomisu UVA - 11440 难推导+欧拉函数,给定正整数N和M, 统计2和N!之间有多少个整数x满足,x的所有素因子都大于M (2<=N<=1e7, 1<=M<=N, N-M<=1E5) 输出答案除以1e8+7的余数。
/** 题目:Help Tomisu UVA - 11440 链接:https://vjudge.net/problem/UVA-11440 题意:给定正整数N和M, 统计2和N!之间有多少个整数x满 ...
- [国家集训队]整数的lqp拆分 数学推导 打表找规律
题解: 考场上靠打表找规律切的题,不过严谨的数学推导才是本题精妙所在:求:$\sum\prod_{i=1}^{m}F_{a{i}}$ 设 $f(i)$ 为 $N=i$ 时的答案,$F_{i}$ 为斐波 ...
- RNN求解过程推导与实现
RNN求解过程推导与实现 RNN LSTM BPTT matlab code opencv code BPTT,Back Propagation Through Time. 首先来看看怎么处理RNN. ...
- 【NOIP考前模拟赛】纯数学方法推导——旅行者问题
一.写在前面 这题似乎是一道原创题目(不是博主原创),所以并不能在任何OJ上评测,博主在网盘上上传了数据(网盘地址:http://pan.baidu.com/s/1mibdMXi),诸位看官需者自取. ...
- python数据类型详解及列表字典集合推导式详解
一.运算符 Python语言支持以下类型的运算符: 算术运算符 如: #!/usr/bin/env python # -*- coding:utf-8 -*- a = 5 b = 6 print(a ...
随机推荐
- C#基础 ---------------单利模式
一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设计模式>,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了 ...
- 初识ZooKeeper与集群搭建实例
原文链接:http://www.linuxidc.com/Linux/2015-02/114230.htm zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Ch ...
- Iso-seq 必备基础
Iso-seq , 全称叫做 Isoform-sequencing, 是 Pacbio 公司对自己开发的转录本测序技术的规范化命名:是利用三代测序长读长的特点,不打断转录本,直接测序,从而得到全长转录 ...
- c#基础操作
内网 IPAddress ipAddr = Dns.Resolve(Dns.GetHostName()).AddressList[];//获得当前IP地址 string ip = ipAddr.ToS ...
- 单用户模式&救援模式&克隆虚拟机&Linux机器相互登录
1.13 单用户模式 1.14 救援模式 1.15 克隆虚拟机 1.16 Linux机器相互登录 1.单用户模式 关机:init 0 .poweroff 重启:init 6 .reboot 关机:in ...
- 【玩转Golang】slice切片的操作——切片的追加、删除、插入等
一.一般操作 1,声明变量,go自动初始化为nil,长度:0,地址:0,nil func main(){ var ss []string; fmt.Printf("length:%v \ta ...
- Peckham添加引用文件模糊匹配智能提示
下载地址:https://github.com/markohlebar/Peckham 跟VVDocumenter规范注释生成器的安装方式一样: 下载开源工程在Xcode重新编译运行会自动安装此插 ...
- mysql中explain
1.select_type: /* select_type 使用 SIMPLE */explain select * from tb_shop_order where id='201603292570 ...
- koa2实现拦截器进行登录前session校验
//定义允许直接访问的url const allowpage = ['/login','/api/login'] //拦截 function localFilter(ctx) { let url = ...
- 杨涛老师MvcPager示例
杨涛老师插件地址:http://www.webdiyer.com/mvcpager 杨涛老师网站上示例写的很详细了,参考他的示例和帮助文档就可以运用的很好了,有经验的同学可以直接参考官方示例. 一.标 ...