![](/img/trans.png)
[英]What is the difference between assertions and unparameterized predicates in Alloy?
[英]how to run predicates and assertions in alloy
我來自C / C ++,並且試圖了解在Alloy中如何運行/檢查謂詞/斷言。 (a)如果我有多個謂詞,並且要同時運行它們,那么當我運行第一個謂詞時,如何確保與我的其他謂詞中的約束條件相關的條件保持不變? 我對如何運行多個謂詞感到困惑。 (b)對於斷言也是如此。 我必須對每個斷言進行檢查嗎?
感謝您對此的任何反饋。
您可以在“運行”命令中使用任意公式,因此可以在其中組合任意多個謂詞。 這是一個例子:
one sig S {
x: Int
}
pred gt[n: Int] { S.x > n }
pred lt[n: Int] { S.x < n }
run { gt[2] and lt[4] }
對於斷言,我認為您必須一個一個地檢查它們,例如,
one sig S {
x: Int
}
assert plus_1 { plus[S.x, 1] > S.x }
assert minus_1 { minus[S.x, 1] < S.x }
check plus_1
check minus_1
// doesn't compile: check { plus_1 and minus_1 }
但是,您可以將斷言轉換為謂詞,然后可以在“檢查”命令的主體中從它們形成任意公式,例如,
one sig S {
x: Int
}
pred plus_1[] { plus[S.x, 1] > S.x }
pred minus_1[] { minus[S.x, 1] < S.x }
check { plus_1 and minus_1 }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.