Logic 分离逻辑的一个例子?

Logic 分离逻辑的一个例子?,logic,Logic,有人能解释这个分离逻辑的例子吗 第一行和第二行有什么区别 第一行表示堆只包含一个heaplet,因此存储中的引用x指向它,并且它包含值4,4 在A中为false,因为它忘记了y指向的heaplet(它没有正确地描述整个堆) 第二行表示堆可以分成两个不相交的堆,其中一个由引用x指向,包含4,4,第二个可以是任何东西 在A中,第二个堆可以是y指向的堆。在B中,第二个heaplet可以是emp 第三行仅在A中为真,因为在B中指向4,4的堆不是不相交的 第四行仅在B中正确,因为它表示整个堆可以描述

有人能解释这个分离逻辑的例子吗

第一行和第二行有什么区别


第一行表示堆只包含一个heaplet,因此存储中的引用x指向它,并且它包含值
4,4

在A中为false,因为它忘记了y指向的heaplet(它没有正确地描述整个堆)


第二行表示堆可以分成两个不相交的堆,其中一个由引用x指向,包含
4,4
,第二个可以是任何东西

在A中,第二个堆可以是y指向的堆。在B中,第二个heaplet可以是
emp


第三行仅在A中为真,因为在B中指向
4,4
的堆不是不相交的


第四行仅在B中正确,因为它表示整个堆可以描述为包含x引用的
4,4
,以及包含y引用的
4,4

它在A中不正确,因为A包含两个不相交的
4,4
,因此应该使用分离连接来描述它。

第一行表示堆只包含一个heaplet,因此存储中的引用x指向它,并且它包含值
4,4

在A中为false,因为它忘记了y指向的heaplet(它没有正确地描述整个堆)


第二行表示堆可以分成两个不相交的堆,其中一个由引用x指向,包含
4,4
,第二个可以是任何东西

在A中,第二个堆可以是y指向的堆。在B中,第二个heaplet可以是
emp


第三行仅在A中为真,因为在B中指向
4,4
的堆不是不相交的


第四行仅在B中正确,因为它表示整个堆可以描述为包含x引用的
4,4
,以及包含y引用的
4,4

它在A中不正确,因为A包含两个不相交的
4,4
,所以应该使用分离连接来描述它。

这些是分离逻辑的公理。我能理解第一个、第二个和最后一个,但我不能理解第三个

谁能给我解释一下吗?
[X/X]
是什么意思

“在
e
中的每个
x
都将被
x
替换”,对吗


这些是分离逻辑的公理。我能理解第一个、第二个和最后一个,但我不能理解第三个

谁能给我解释一下吗?
[X/X]
是什么意思

“在
e
中的每个
x
都将被
x
替换”,对吗


此问题属于感谢您的评论,我将在cstheory.stackexchange.com中提问此问题属于感谢您的评论,我将在cstheory.stackexchange.com中提问非常感谢。我明白了。你能帮我看看下面的第二个例子吗?非常感谢。我明白了。你能看到我下面的第二个例子吗?<代码> {x/\e>>y}x:= [e] [x/x] -y/yyx} < />代码:考虑一个位置的堆,代码“代码> e <代码>包含一些值<代码> y>代码>,存储位置<代码> x>代码>包含一个值<代码> x>代码>,然后运行<代码> x:= [e]产生一个堆,其中一个位置
e[X/X]
包含相同的值
Y
,现在存储位置
X
包含值
Y
。执行此语句不会影响堆(仍然只有一个位置包含值
Y
),但会影响存储位置
x
Y
X
只是前后关联的占位符变量。例如:“代码>x:= [x+x] 1 /< x>:= [e] {e[x/x] -y/\y= x}< /代码>:考虑一个位置的堆,代码“E>代码”,包含一些值<代码> y>代码>,存储位置<代码> x>代码>包含值<代码> x>代码>,然后运行<代码> x:= [e]产生一个堆,其中一个位置
e[X/X]
包含相同的值
Y
,现在存储位置
X
包含值
Y
。执行此语句不会影响堆(仍然只有一个位置包含值
Y
),但会影响存储位置
x
Y
X
只是前后关联的占位符变量。例如,
x:=[x+1]
就是一个很普遍的例子。