Lambda Calculus

简介:

Lambda Calculus是非经典逻辑中的一种,形式比图灵机模型和一阶谓词逻辑等简洁优雅许多,是函数式编程语言的理论支柱,本文主要简单梳理了untyped Lambda Calculus以及Church数的构造。

Functional Programming Languages

  • Properties
    • based-on lambda calculus
    • closure(functor) and high-order function
    • lazy evaluation
    • recursion
    • reference transparently
    • no side-effects
    • expression

Lambda Calculus

  • Four core components

    • expression
    • variable(value)
    • function
    • application
  • Grammar

    • (expression) := (variable) | (function) | (application)
    • (function) := lambda (variable).(expression)
    • (application) := (expression)(expression)
    • examples
      • function definition : lambda x.x ==> Identity function I
      • function application : (lambda x.x)(y) = y
  • free and bound variables

    • lambda x.xy ==> x bound but y free
  • substitution and reduction

    • alpha substitution
    • beta reduction
  • numbers definition(Church numbers)

    • S : lambda wyx.y(wyx) (Successor function)
    • 0 : lambda sz.z
    • 1 : lambda sz.s(z)
      • S(0) = (lambda wyx.y(wyx))(lambda sz.z)
        = lambda yx.y((lambda sz.z)(y)x)
        = lambda yx.y(x) = 1
    • 2 : lambda sz.s(s(z))
      • S(1) = (lambda wyx.y(wyx))(lambda sz.s(z))
        = lambda yx.y((lambda sz.s(z))yx)
        = lambda yx.y((lambda z.y(z))x)
        = lambda yx.y(y(x)) = 2
    • 3 : lambda sz.s(s(s(z)))
    • 3(Func)(var) ==> apply 3 Func times on var
  • addition

    • ’+’ : lambda wyx.y(wyx) (successor function)
    • 1 + 2 = 1S(2)
    • (lambda sz.s(z)) (lambda wyx.y(wyx)) (lambda ab.a(a(b))) = (lambda z.(lambda wyx.y(wyx))(z)) (2)
      = (lambda zyx.y(zyx))(2) = S(2)
    • 2 + 2 = 2S(2)
    • (lambda sz.s(s(z))) (lambda wyx.y(wyx)) (2) = (lambda z.S(S(z)))(2) = S(S(2))
  • multiplication

    • ’*’ : lambda xyz.x(yz)
    • 1*2 = (lambda abc.a(bc))(1,2) = (lambda bc.1(bc))(2)
      = (lambda c.1(2(c)))
      = (lambda c.(lambda sz.s(z))(lambda sz.s(s(z)))(c))
      = lambda c.(lambda cz.c(c(z))) = 2
  • Condition

    • T : lambda xy.x
    • F : lambda xy.y
  • logic operation

    • && : lambda xy.xyF

      • &&(T,T) = (lambda x1y1.x1)(lambda x2y2.x2)(lambda xy.y) = lambda x2y2.x2 = T
      • &&(F,Any) = (lambda x1y1.y1)(Any)(lambda xy.y) = lambda xy.y = F
    • | : lambda xy.xTy

      • |(F,F) = (lambda x1y1.y1)(lambda xy.x)(lambda x2y2.y2) = lambda x2y2.y2 = F
      • |(T,Any) = (lambda x1y1.x1)(lambda xy.x)(Any) = lambda xy.x = T
    • ~ : lambda x.xFT

      • ~(F) = (lambda xy.y)(lambda x1y1.y1)(lambda x2y2.x2) = lambda x2y2.x2 = T
      • ~(T) = (lambda xy.x)(lambda x1y1.y1)(lambda x2y2.x2) = lambda x1y1.y1 = F
  • conditional test

    • Z : lambda x.xF~F ==> T if x==0 else F
    • Z(0) = 0F(~F) = (lambda sz.z)F~F = ~F = T
    • Z(1) = (lambda sz.s(z))F~F = F(~)F = (lambda xy.y)(~)(F) = IF = F
  • predecessor

    • p : lambda zxy.xy ==> a pair (x,y)
    • Inc : lambda pz.z(S(pT))(pT) ==> increase each element of one pair (x,x-1) -> (x+1,x)
    • P : (lambda n.n(In(lambda z.z00)))F
    • nP(0) = 0
  • equality and inequality

    • >= : lambda xy.Z(xPy) [if x>=y return True else False]
    • <= : lambda xy.Z(yPx) [if x<=y return True else False]
    • = : lambda xy.^(Z(xPy))(Z(yPx))
  • recursion

    • Y combinator : Y = lambda f.(lambda x.f(xx))(lambda x.f(xx))
      = f((lambda x.f(xx))(lambda x.f(xx)))
    • Yf = f(Yf) [Yf ==> recursion of f]
    • example 1+2+3…+n : f = lambda rn.(Zn)(0)(nS(r(Pn)))
    • Yf = f(Yf) = lambda Yfn.(Zn)(0)(nS(Yf(Pn))) ==> Yf recursion

    ref:《A Tutorial Introduction to the Lambda Calculus》

相关文章
|
3月前
|
Oracle Java 关系型数据库
Java 17 采用率增长 430%
1995年,Sun Microsystems发布Java语言,推动现代多媒体应用发展。凭借“一次编写,到处运行”的优势,Java迅速成为主流编程语言。New Relic最新发布的《2023年Java生态系统现状》报告显示,Java 11以超56%的使用率稳居榜首,Java 8仍占近33%。尽管Oracle每半年更新一次Java版本,但开发者更倾向使用长期支持(LTS)版本。Java 17的采用率在过去一年增长430%,潜力巨大。此外,Amazon已成为最受欢迎的JDK供应商,市场份额达31%。容器化应用也已成为主流,70%的Java应用来自容器。
|
移动开发 小程序 JavaScript
uniapp中uview组件库的Input 输入框 的使用方法
uniapp中uview组件库的Input 输入框 的使用方法
2165 0
|
4月前
免费图片在线压缩工具
在线图片压缩,快速减小图片大小,不损失太多画质
869 0
|
JavaScript API 微服务
探索现代后端开发:关键技术和最佳实践
【10月更文挑战第6天】探索现代后端开发:关键技术和最佳实践
|
Kubernetes Cloud Native Java
当 Quarkus 遇上 Spring Boot,谁才是现代云原生应用的终极之选?究竟哪款能助你的应用傲视群雄?
Quarkus 和 Spring Boot 均为构建现代云原生应用的热门框架,旨在简化开发流程并提升性能。Spring Boot 依托庞大的 Spring 生态系统,提供开箱即用的体验,适合快速搭建应用。Quarkus 由红帽发起,专为 GraalVM 和 HotSpot 设计,强调性能优化和资源消耗最小化,是云原生环境的理想选择。
953 3
|
Dubbo 网络协议 Java
RPC框架:一文带你搞懂RPC
这篇文章全面介绍了RPC(远程过程调用)的概念、原理和应用场景,解释了RPC如何工作以及为什么在分布式系统中广泛使用,并探讨了几种常用的RPC框架如Thrift、gRPC、Dubbo和Spring Cloud,同时详细阐述了RPC调用流程和实现透明化远程服务调用的关键技术,包括动态代理和消息的编码解码过程。
RPC框架:一文带你搞懂RPC
|
存储 Ubuntu 测试技术
如何在 Ubuntu 或 Debian VPS 上配置 Apache Web 服务器
如何在 Ubuntu 或 Debian VPS 上配置 Apache Web 服务器
305 0
WK
|
XML 移动开发 数据格式
Beautiful Soup支持哪些解析器
Beautiful Soup是一款强大的库,用于解析HTML和XML文档。它支持多种解析器,包括Python标准库中的`html.parser`、lxml的HTML和XML解析器以及html5lib。`html.parser`无需额外安装,但速度较慢;lxml则基于C语言,速度快且支持XPath;html5lib则完全支持HTML5标准,容错性好但速度较慢。用户可通过`features`参数指定解析器,选择最适合需求的解析器可提升效率与准确性。
WK
628 2
|
存储 弹性计算 Ubuntu
阿里云云服务器实例使用教学
云服务器免费试用 阿里云云服务器网址:https://free.aliyun.com/?crowd=personal 详细步骤 访问阿里云免费试用。单击页面右上方的登录/注册按钮,并根据页面提示完成账号登录(已有阿里云账号)、账号注册(尚无阿里云账号)或实名认证(根据试用产品要求完成个人实名认证或企业实名认证)。 成功登录后,可试用人群选择个人认证,产品类别选择计算 > 云服务器 ECS,在试用卡片上单击立即试用。 在配置ECS实例信息面板,完成参数信息配置。本试用教程主要配置参数如表所示,其他参数可保持默认值。实际操作时,建议根据您的实际业务体量和需求选择。 参数 示例 操作系统 CentO
753 1
|
iOS开发 开发者
【教程】iOS如何抓取HTTP和HTTPS数据包经验分享
📱 在日常的App开发和研发调研中,对各类App进行深入的研究分析时,我们需要借助专业的抓包应用来协助工作。本文将介绍如何使用iOS手机抓包工具来获取HTTP和HTTPS数据包,并推荐一款实用的抓包应用——克魔助手,希望能够帮助读者提升工作效率,高效地完成日常工作。