In lambda calculus, application is left associative. That is, if M, N, and P are expressions, then we parse MNP1 as (MN)P. But if we want the "alternative" parsing, we can get it using parentheses/grouping: M(NP).
Conversely, abstraction is right associative. That is, if x and y are variables, then we parse λx.λy.M2 as λx.(λy.M). Is there an "alternative" parsing to λx.λy.M? Does (λx.λy).M makes sense? If not, can you give an example of a valid "alternative" parsing of chained abstractions where parenthesis would have to be used to the get the "alternative" parsing?
1 My understanding is that when we see two expressions next to each other as in MN there is an implied application operator between them which says "apply M to N" or more verbosely "feed N as input to M". Is this correct? If so, a phrase like "M something N" is desirable so we can read lambda expressions left to right. Maybe "M consumes N"?
2 In this case it looks like the dot (.) is acting as the abstraction operator. Is there a way to verbalize λx.M left to right? Something like "function (λ) taking x outputing (.) M"?
λx.λy.M. Do I have the following correct?: 1. If M = Var(x), then the tree is: https://bit.ly/3B7zudA 2. If M = Var(y), then the tree is: https://bit.ly/2XwHIy6 3. If M = App(Var(x), Var(y)), then the tree is: https://bit.ly/3GbsboU 4. If M = Var(z), then the tree is: https://bit.ly/3m20JSA – joseville Oct 21 '21 at 17:58