ポスターは、合金の機能を比較する方法を尋ねました。小さな例(関数の代わりに述語を比較する)をテストしながら、質問に答えるために、私は次のような動作に気付きました。述語の比較
アナライザは、チェックコマンドの境界が3より大きく、ファクト 'f1'がアクティブである場合に反例を検出しません。事実を不活性化すると、アナライザは期待どおりに動作します。なぜ冗長な事実 'f1'はアナライザの動作を変更するのですか?また境界が3よりも大きいのはなぜですか?
open util/ordering [V]
sig V {}
fact f1 {
# V > 0
}
pred p1 [x: V] {
x = last
}
pred p2 [x: V] {
x = first
}
assert a1 {
all x: V | p1[x] <=> p2[x]
}
check a1 for 3
いつでもチェック境界が4以上であると「F1は」アクティブアナライザーレポート「0 VARSであることが表示されます。 0プライマリヴァース。 0句。
高いIntスコープを指定すると問題が解決しました。ご指摘ありがとうございます。 –
私は、一度署名の順序を設定すると、その署名によってタイプされた原子の数は、分析が実行される範囲になるように束縛されることを付け加えます。こうして事実を取り除くことができます1。 –