λ演算的β-约化子和速记表示

lc的Python项目详细描述


这个工具通过提供一个 回复:

λ> (λ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输入 当您键入反斜杠(\)时,λ

速记

You can start any ‘Monty Python’ routine and people finish it for you. Everyone knows it like shorthand.

—Robin Williams

上面的通知输入被转换成相应的速记教会 最后是数字。这个口译员有速记符号的概念:

  1. 速记是用大括号({})写的,并且不区分大小写。
  2. 教会数字,以及许多其他常见的速记,是预先定义的 你
  3. 大括号可以省略在教会的数字,因为数字是不允许的 用作变量。
  4. 使用=运算符定义速记。
λ> {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}

内置速记

除了可数的无限个教会数字外,下面是 口译员内置速记:

{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)

错误

None. Mutts have fleas, not bugs.

—Mutt Manual Page

  • {pred}(因此,{sub})似乎有某种问题。
  • 当应用程序导致变量冲突时,它们将显示为 相同的变量,但是解释器仍然将它们视为单独的 变量。需要做的是在 会发生这种情况,并自动对变量进行α-重命名

如果你解决了这两个问题,公关是非常感谢!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java重定向视图使会话属性消失   无java抽象执行器服务   java Hibernate无法插入联接表   JavaBean验证程序组件约束   java Reactor:使用修饰调度程序或subscriberContext传播线程局部变量的线程安全方式?   字符串拆分中的Java正则表达式量词   java查找两个LinkedList的合并点:运行时错误   基于片段的java图像识别   java复制插入的可嵌入对象   java从vlcj播放器阵列播放视频   Oracle中的java调试存储过程   java中applet与CGI的通信   java使用id作为引用使用spring数据保存嵌套对象   java LinkedList是一个不直观的解决方案,因为大多数时候我不需要知道集合中元素的物理位置?   关于Java版本的困惑   java如果条件可以是true或false,为什么需要它   Java Swing打印对话框组布局标签颜色