私は簡単な質問があります。私は単純なプログラム(Z3 NET APIを使用して)を書いて、次のように出力を得ました。Z3の未解釈関数の表現について
プログラム(一部):
Sort[] domain = new Sort[3];
domain[0] = intT;
domain[1] = intT;
domain[2] = intT;
FPolicy = z3.MkFuncDecl("FPolicy", domain, boolT);
Term[] args = new Term[3];
args[0] = z3.MkNumeral(0, intT);
args[1] = z3.MkNumeral(1, intT);
args[2] = z3.MkNumeral(30, intT);
z3.AssertCnstr(z3.MkApp(FPolicy, args));
args[1] = z3.MkNumeral(2, intT);
args[2] = z3.MkNumeral(20, intT);
z3.AssertCnstr(z3.MkApp(FPolicy, args));
出力:私は、私が作ることが疑問に思って
FPolicy -> {
0 1 30 -> true
0 2 20 -> true
else -> true
}
- 偽として "他>真"(すなわち、 "他 - >偽") 。
これは私が望んでいたより良い解決策です。しかし、アレイ理論を使うことの(可能な)欠点はありますか? –
主な欠点はパフォーマンスです。 'select'と' default'だけを使ったとしても、オーバーヘッドがあります。つまり、配列理論の 'store'、' map'、 'const'演算子を使用しないで*使用しているとします。たとえば、すべての関数アプリケーションには余分な引数があります。一致する条件を検出するために使用されるハッシュテーブルは大きくなります。 –