【发布时间】:2022-01-22 06:46:24
【问题描述】:
我被困住了,需要你的帮助(我查阅了文档并查看了 Z3 github repo 中的主示例,但找不到我想做的示例)。
假设我想要一个包含所有 RGB(即红色、绿色、蓝色)颜色的枚举,并且我想对这个枚举施加约束,无论枚举是否包含任何特定颜色。
以下约束应评估为 Sat:enumRgb contains "red" && enumRgb contain "green"
此约束应评估为 UnSat:enumRgb 包含“粉红色”。
在代码中(它不完整,因为我被卡住了)它看起来像这样:
public Expr addEnumExpr() {
EnumSort rgbEnum = myCtx.mkEnumSort(myCtx.mkSymbol("rgbEnum"), myCtx.mkSymbol("red"), myCtx.mkSymbol("green"), myCtx.mkSymbol("blue"));
Symbol colorPink = myCtx.mkSymbol("pink");
Expr enumExpr = myCtx.mkConst("enumExpr", rgbEnum);
return myCtx.mkEq(colorPink, enumExpr);
}
注意:myCtx 是一个保存 Context 的全局变量。
所以我遇到的具体问题:
- 由于类型不兼容(colorPink 是符号),无法创建 equals 约束
- 为了检查枚举中是否包含某种颜色,equals 表达式是否正确?
【问题讨论】:
-
你已经问过这个问题并在这里得到了答案:stackoverflow.com/questions/70157458/…
-
没有。它不是。我问如何在枚举上创建一个特定的约束。一个简单的例子实际上会更有帮助
-
SMTLib 是一种类型化语言。这意味着您不能创建任何具有值
pink的枚举值。这就像问"hello"是否是一个数字。在类型化系统中,这永远不会发生。 -
谢谢。这个答案实际上帮助了我。对不起,如果我原来的问题是愚蠢的或什么的
-
不用担心。当您得到答案并且您不接受/投票时,很难判断您是否还有其他问题或其他问题是否令人困惑。这就是堆栈溢出通常的工作方式。见这里:stackoverflow.com/help/someone-answers