应用程序和抽象的 lambda 演算优先级

Hdo*_*dot 1 abstraction lambda-calculus apply operator-precedence

Application has higher precedence than abstraction.
Run Code Online (Sandbox Code Playgroud)

从这个意义上说,什么是 lambda 演算抽象?我很困惑有什么优先权?

lem*_*ree 5

Lambda 抽象是\xce\xbbx.M针对某些变量x和任意项M
\n(MN)对于某些任意术语,应用是MN

\n

优先级是指如果可以进行多次读取,则首先执行多个操作中的哪一个的问题,因为该术语由于省略括号而产生歧义。例如,在算术中,按惯例乘法优先于加法,这意味着5+2\xc3\x973被读为5+(2\xc3\x973)而不是(5+2)\xc3\x973。首先计算乘法运算符并绑定最接近它的项,然后加法是次要的,嵌入乘法项。

\n

对于 lambda 演算,应用程序比抽象具有更高优先级的约定意味着,如果由于省略了括号而产生疑问,您将首先尝试形成应用程序,然后才执行抽象,因此应用程序“绑定”更强,并且抽象术语将稍后形成并包含应用术语。

\n

例如,\xce\xbbx.M N原则上可以读作 或\xce\xbbx.(MN)(\xce\xbbx.M)M但由于应用程序优先于抽象,因此您首先形成可能的应用程序(MN),然后形成抽象\xce\xbbx.(MN)。如果是相反的情况,即如果抽象优先于应用,那么您将首先尝试形成一个抽象术语(\xce\xbbx.M),然后用您已经获得的术语进行应用((\xce\xbbx.M)M)
\n因此,通过定义应用程序优先于抽象,\xce\xbbx.M N = \xce\xbbx.(MN),而不是((\xce\xbbx.M)M)

\n