Lambda演算(一)

写于软工一学完Lambda演算的一个星期多后,感觉对这个东西依然晕晕的,查了一些资料之后借此随笔来梳理一下,加深理解。

Lambda 演算

Definition

1. λ

λ 项是 λ 演算中最基本的概念,可以递归地定义:

- 变量

假设我么有一个无穷字符串集合,其元素称为变量。例如:x 是一个变量。变量可以是一个字母或者一个字符串,表示一个参数(形参)或者一个值(实参)。

- 原子

每一个变量都是一个 λ 项。

- 抽象

若 M 是一个 λ 项,那么,λ x.M是一个 λ 项。简单来说可以看作生成了一个匿名的函数,有形参 x。

- 应用

若 M,N都是 λ 项,则 (MN) 也是一个 λ 项。简单来说可以看作把实参 N 代入函数 M。

注意:函数的输入也可以是函数。

2. 符号约定

我们按一下符号约定使用符号:

  • 用大写字母如 M, N 表示任意 λ 项,用小写字母和希腊字母如 x,y,ϕ 表示变量。
  • 对于括号,有以下省略约定:
  1. λ 项最外层的括号可以直接省略。如 (λx.x) 可以省略为λx.x.
  2. 左结合的应用型 λ 项,括号可以省略。如 (((MN)P)Q) 可以省略为 MNPQ.
  3. 抽象型的 λλϕ.(xy) 可以省略为 λϕ.xy 即默认情况下 ϕ 的管辖范围尽量长。

3. 自由变量与绑定变量

不受约束的变量是自由变量,如 λx.xyz 中 x 是约束变量,y,z 是自由变量,这和数理逻辑里的概念是一样的。如果一个项没有自由变量,则它是一个组合子。

4. 柯里化

某些时候我们需要表达多元的函数,比如 f(x,y)xy,但是 λ 函数只能接受一个参数,注意到 λ 函数的输入也可以是函数,因此这时我们可以使用柯里化,分层地定义,如λxy.xyλx.(λy.yx),在内层函数中 x 可视作常量。

演算公理系统

1. α 变换

类似数理逻辑里面的改名规则,λx.(λy.xy)λa.(λb.ab)

2. β 规约

其实就是用实参替换函数里的形参。如:(λx.(2x))y2y,以及(λx.λy.xy)72(λy.7y)2(λx.x2)75

Practice

阶段总结

到此,我们基本建立了 λ 演算的大厦,它包括三条定义:原子,抽象,应用,和两条规则,α 变换和β 规约,以及约定了一些符号使用。

posted @   今天AC了吗  阅读(203)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示