Types Lambda表达式中替换的定义

Types Lambda表达式中替换的定义,types,lambda,theory,lambda-calculus,Types,Lambda,Theory,Lambda Calculus,让我们将[x |->v]t表示为“用v替换t中所有自由出现的x” 我教科书的替换规则是 [x |-> v] x=v [x |-> v] y=y (where y is not x) [x |-> v] (function x -> t) = (function x -> t) [x |-> v] (function y -> t) (where y is not x) = (function y -> [x |-> v]t)

让我们将
[x |->v]t
表示为“用v替换t中所有自由出现的x”

我教科书的替换规则是

[x |-> v] x=v
[x |-> v] y=y (where y is not x)

[x |-> v] (function x -> t) = (function x -> t)
[x |-> v] (function y -> t) (where y is not x) =
        (function y -> [x |-> v]t)

[x |-> v] (t1 t2) ->  ([x |-> v]t1   [x |-> v]t2)
我不太理解前两条规则为什么y是x会有区别?
[x |->v]x
中的第一个x和第二个x是否相同?第二条规则的y是否可以类似于
1+x
您能给出两个分别使用这两个规则的Lambda表达式或C/C++/C#/Java示例吗?


非常感谢

第一条规则是将
x
映射到
v
。第二条规则是任何非x变量保持不变。这两个都是完全定义其行为所必需的同一规则的一部分

我认为一个比较合理的例子如下:

int x = 1337;
int y = 9001;
int v;
v = x;

请注意,
v
现在已设置为
x
(第一条规则)的值,但
y
的值没有更改(第二条规则)。

在您的示例中,x,y都是变量。y是否可以是包含x的表达式?@LoveRight否,要使此定义有意义,
x
y
必须仅为变量。如果
y
可以代表任意术语,则定义将是错误的。希望你的书在某个地方指出,它将使用
t1
t2
等来代表任意术语,
x
y
等来代表变量,
v
(如果需要多个术语,可以推测为
v1
v2
等)来代表值(即不可约术语)-可能会有一个符号或约定部分来写。