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]
就是一个很普遍的例子。