簡體   English   中英

如何在合金中運行謂詞和斷言

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM