λ演算的β归约器和缩写表示器
项目描述
这个工具通过提供一个REPL来帮助你在λ演算中β归约项。
λ> (λc.c(λx.λy.x))((λx.λy.λf.fxy)(λf.λx.f(fx))(λf.λx.f(f(fx)))) INPUT (λc.c(λx.λy.x))((λx.λy.λf.fxy)(λf.λx.f(fx))(λf.λx.f(f(fx)))) β ==> (λx.λy.λf.fxy)(λf.λx.f(fx))(λf.λx.f(f(fx)))(λx.λy.x) β ==> (λy.λf.f(λf.λx.f(fx))y)(λf.λx.f(f(fx)))(λx.λy.x) β ==> (λf.f(λf.λx.f(fx))(λf.λx.f(f(fx))))(λx.λy.x) β ==> (λx.λy.x)(λf.λx.f(fx))(λf.λx.f(f(fx))) β ==> (λy.λf.λx.f(fx))(λf.λx.f(f(fx))) β ==> λf.λx.f(fx) Potential shorthand representations: -> As Church numeral 2
输入
注意输入中的漂亮Unicode λ:此REPL使用Readline在输入时按反斜杠 (\) 输入一个 λ。
缩写
你可以开始任何“蒙提·派森”常规操作,人们会为你完成它。每个人都像缩写一样知道它。
——罗宾·威廉姆斯
注意输入在末尾被转换为相应的Church数字。此解释器具有缩写符号的概念
- 缩写用花括号 ({}) 表示,并且是 不区分大小写 的。 
- Church数字以及许多其他常见缩写都是为您预定义的。 
- 在Church数字上可以省略花括号,因为数字不允许用作变量。 
- 使用 = 运算符定义缩写。 
λ> {ABC}=λf.λx.x
λ> {ABC}
INPUT λf.λx.x
Potential shorthand representations:
-> As Church numeral 0
-> As {FALSE}
-> As {ABC}
λ> {IF}{FALSE}1{ABC}
INPUT (λp.λa.λb.pab)(λx.λy.y)(λf.λx.fx)(λf.λx.x)
β ==> (λa.λb.(λx.λy.y)ab)(λf.λx.fx)(λf.λx.x)
β ==> (λb.(λx.λy.y)(λf.λx.fx)b)(λf.λx.x)
β ==> (λx.λy.y)(λf.λx.fx)(λf.λx.x)
β ==> (λy.y)(λf.λx.x)
β ==> λf.λx.x
Potential shorthand representations:
-> As Church numeral 0
-> As {FALSE}
-> As {ABC}
内置缩写
除了可计数的无限数量的Church数字之外,以下缩写也内置到解释器中
{succ}=λn.λf.λx.f(nfx)
{add}=λm.λn.(m{succ}n)
{mult}=λm.λn.(m({add}n)0)
{true}=λx.λy.x
{false}=λx.λy.y
{and}=λp.λq.pqp
{or}=λp.λq.ppq
{not}=λp.p{false}{true}
{if}=λp.λa.λb.pab
{cons}=λx.λy.λf.fxy
{car}=λc.c{true}
{cdr}=λc.c{false}
{nil}=λx.{true}
{pred}=λn.λf.λx.n(λg.λh.h(gf))(λu.x)(λu.u)
{sub}=λm.λn.n{pred}m
{zero?}=λn.n(λx.{false}){true}
{nil?}=λp.p(λx.λy.{false})
{lte?}=λm.λn.{zero?}({sub}mn)
错误
无。狗有跳蚤,没有错误。
——Mutt手册页
- {pred}(以及由此产生的 {sub})似乎有一些问题。 
- 当变量因为应用冲突而相同时,它们将显示为相同的变量,但解释器仍然将它们视为不同的变量。需要做的是在发生这种情况时检测到某种机制,并对变量进行自动α重命名。 
如果您解决了这些问题中的任何一个,我们非常欢迎您提交一个PR!
项目详情
    
       关闭
    
      
        
    
    
  
lc-0.1.tar.gz的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 4d3f76ebce605ef8193e737d4f767a12b483be7c3541bb0b292a5770622a41de | |
| MD5 | 7783743964d51e98157605a6de478bbc | |
| BLAKE2b-256 | fdc803f5ab776150d9be8cc6ef4f1d57aaf2fa88bfc27f08b2428c148e565d10 |