이 단일 상태 개체를 사용하여 두 개의 나무 State.a
및 State.b
의 루트를 가리키는 다음 합금 모델을 정의했습니다. 내가 얻을 솔루션 중합금에서 나무 사이에 구조적 평등을 표현하는 방법은 무엇입니까?
sig N {
children: set N
}
fact {
let p = ~children |
~p.p in iden
and no iden & ^p
}
one sig State {
a: one N,
b: one N
}
fun parent[n:N] : N {
n.~children
}
fact {
no State.a.parent
no State.b.parent
State.a != State.b
State.a.^children != State.b.^children
}
pred show {}
run show for 4
는 :
+-----+
+--+State|+-+
a| +-----+ |b
| |
v v
+--+ +--+
|N2| |N3|
++-+ +-++
| |
+v-+ +-v+
|N0| |N1|
+--+ +--+
그래서 나는 구조적으로 동일한 두 나무
N2 -> N0
및
N3 -> N1
를 얻을.
State.a
과 State.b
이이 같은 의미로 일치하지 않게하려면 어떻게해야합니까?
이것은 재귀 적 술어로만 수행 할 수 있으며 재귀는 깊이 3까지만 가능합니다 (제 생각 엔).
따라서 가능한 경우 비회원 솔루션을 선호합니다.