lambda演算学习笔记(二)——基本运算

λ \lambda λ演算学习笔记(二)——基本运算

α \alpha α替换和 β \beta β化简

λ \lambda λ演算的基本运算有两种

  1. 参数换名,即将一个函数声明中的参数名改为另一个符号.比如对数学函数 f ( x ) = x f(x)=x f(x)=x,其 λ \lambda λ表达式为 λ x . x \lambda x.x λx.x.如果我们把自变量的名字改成y,则可以得到 f ( y ) = y f(y)=y f(y)=y λ y . y \lambda y.y λy.y,显然改名之后得到的新函数和原来的函数相等.因为对同样的输入,它们必然得到同样的输出.参数改名在 λ \lambda λ演算中有个专有名词叫 α \alpha α替换.
  2. 调用求值, 对函数调用表达式,用实参代替形参,然后代入函数体,得到新的结果.它对应数学上的用具体值代入函数,然后求值的过程.在 λ \lambda λ演算中对应的专有名词叫 β \beta β替换或者 β \beta β归约.我更习惯叫 β 化 简 \beta化简 β,或者简称化简.下面看一个例子

f = λ x λ y . ( x y ) f=\lambda x \lambda y. (x y) f=λxλy.(xy) , a = λ z . z a=\lambda z. z a=λz.z,那么表达式 f a b f a b fab的求值(化简)过程为

  • 首先计算(f a),即用符号a替换f的f的函数体中的参数名x,得到 ( f a ) = λ y . ( a y ) (f a)=\lambda y.(a y) (fa)=λy.(ay)
    ,这一步的结果得到的一个新的函数声明表达式,
    我们可以设 t = ( f a ) = λ y . ( a y ) t=(f a)=\lambda y.(a y) t=(fa)=λy.(ay)
  • 然后继续计算(t b),即用符号b替换f的t的函数体中的y,得到(a b)
  • 由于a又是一个函数声明,所以可以继续化简,用b替换a的函数体中的所有形参z,最后得到b
  • 即最终化简结果为f a b= b

λ \lambda λ 表达式的等价判断

在数学上,我们会看到两个函数的表达式虽然不同,但是实际是同一个函数的情形.比如设 f ( x ) = x + 2 f(x)=x+2 f(x)=x+2 , g ( t ) = 3 + t − 1 g(t)=3+t-1 g(t)=3+t1,显然对任意 x x x,都有 f ( x ) = g ( x ) f(x)=g(x) f(x)=g(x),所以 f = g f=g f=g.
λ \lambda λ演算中也有类似情形.两个看起来不同的函数声明,对同样的输入会得到同样的输出.则我们称这两个表达式等价.
比如考虑 f = λ a . ( λ b . b ) a f=\lambda a.(\lambda b.b) a f=λa.(λb.b)a g = λ z . z g=\lambda z. z g=λz.z,则可以验证对任意符号x,都有 ( f   x ) = x (f\ x)=x (f x)=x, ( g   x ) = x (g\ x)=x (g x)=x,所以 f f f g g g等价,即他俩对应的是同一个数学函数.有一个重要结论,如果两个函数声明表达式 M M M N N N等价, 那么对某个含 M M M的新表达式 P P P,把 M M M全部替换为 N N N,则新表达式和原表达式仍然等价,即对同样的实参,求值之后的结果相同.
λ \lambda λ 表达式等价的概念在下一个笔记中会用到.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值