Variables 在lambda演算中,变量一般可以是表达式吗?

Variables 在lambda演算中,变量一般可以是表达式吗?,variables,lambda-calculus,Variables,Lambda Calculus,为了更好地理解函数式编程,我正在阅读lambda演算的wiki页面 定义是: 如果x是一个变量,M∈ ∧,那么(λx.M)∈ ∧ 直觉上,我认为变量是由单个字母id表示的。但因为这里我们讨论的是严格的数学定义,所以我只想再次确认这个理解:一般来说,表达式可以被归类为变量吗 e、 g.如果x是一个变量,那么表达式(x+x)在lambda演算中是一个变量吗?i、 把(λ(x+x).M)写成lambda微积分抽象可以吗 (关注点是在某些情况下,这是正确的。例如:像4x^3这样的表达式是一个变量)不,(

为了更好地理解函数式编程,我正在阅读lambda演算的wiki页面

定义是:

如果x是一个变量,M∈ ∧,那么(λx.M)∈ ∧

直觉上,我认为变量是由单个字母id表示的。但因为这里我们讨论的是严格的数学定义,所以我只想再次确认这个理解:一般来说,表达式可以被归类为变量吗

e、 g.如果
x
是一个变量,那么表达式
(x+x)
在lambda演算中是一个变量吗?i、 把(λ(x+x).M)写成lambda微积分抽象可以吗

(关注点是在某些情况下,这是正确的。例如:
像4x^3这样的表达式是一个变量

不,
(x+x)
不是变量(实际上它甚至不是朴素的lambda演算中的表达式)。 我认为您以某种方式混合了术语变量表达式(或者想要某种模式匹配?)

那么让我们遵循lambda演算和表达式的核心定义:

定义本身并没有那么难(事实上,您自己将其与wiki页面链接)。 从一开始就提到:

  • 你有一组变量:(
    V_1,V_2,…
    )(当然你可以随意命名它们-重要的是你要记住,它们在微积分中被视为不同的符号)
  • 符号
    λ
这就是它——这就是这个语法/演算的所有“标记”

现在,有两条规则可以用来形成表达式

  • 每个变量都是一个表达式
  • 抽象:如果
    E
    是一个表达式,而
    x
    是一个变量,那么
    (λx.E)
    是一个表达式(这里
    x
    E
    是模板或元变量-您必须用一些实表达式填充它们才能使其成为表达式!)
  • 应用程序:如果
    A
    B
    是表达式,则
    (A B)
    是表达式
因此,可能的表达是:

  • v_50
  • (λv_4.v_5)
  • ((λv_4.v_5)v_50)
这就是表达的全部

你看:如果你从一开始就不允许
(x+x)
作为变量的符号或名称,它就永远不会是变量——事实上,没有表达式是变量,即使有些表达式只包含一个所述变量——如果你调用某个表达式,它也永远不会是变量(再次);)


PS:当然有一些惯例可以让括号稍微小一点,但首先你不需要它们。

谢谢你的精彩解释。符号听起来更合理。