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

lambda calculus precedence of application and abstraction

Application has higher precedence than abstraction.

从这个意义上讲,什么是 lambda 演算抽象?我对有什么优先权感到困惑?

Lambda 抽象是 λx.M,对于某些变量 x 和任意项 M
应用程序是 (MN),对于某些任意项 MN

Preccedence 是指如果可以多次读取则先执行几个操作中的哪一个,因为省略括号导致该术语有歧义。例如,在算术中,约定乘法优先于加法,这意味着 5+2×3 读作 5+(2×3) 而不是 (5+2)×3。乘法运算符首先被评估并绑定最接近它的项,加法是次要的,嵌入乘法项。

W.r.t。对于 lambda 演算,应用程序优先于抽象的约定意味着在有疑问的情况下,因为括号被省略,你将首先尝试形成一个应用程序,然后才执行抽象,因此应用程序 "binds" 更强大,并且抽象术语将在以后形成并包含应用术语。

例如,λx.M N 原则上可以读作 λx.(MN)(λx.M)M,但由于应用程序优先于应用程序,因此您首先形成可能的应用程序 (MN)然后是抽象 λx.(MN)。如果反过来,即如果抽象优先于应用,那么你将首先尝试形成一个抽象术语 (λx.M),然后应用你已经得到的术语 ((λx.M)M).
因此,通过定义应用程序优先于抽象,λx.M N = λx.(MN),而不是 ((λx.M)M).