(get-assignment)命令应返回符号列表及其真/假值(如果它们是Bool排序)。根据我的理解,这只能在以下情况下完成:produce-assignments设置为true,when(check-sat)返回sat。但是,当我在Z3上运行一个小脚本来测试它时,(get-assignment)只返回() - 空白。 这是我的剧本:
(set-option :produce-assignments true)
(set-logic QF_UF)
(declare-fun a () Bool)
(declare-fun b () Bool)
(assert (= a b ))
(check-sat)
(get-assignment)
答案 0 :(得分:2)
get-assignment
的语义不直观。它显示named
子公式的值。从SMT 2.0 reference(第62页):
get-assignment
是一个轻量级且受限制的get-value版本,它要求为之前输入的一组选定的真值分配 公式。(29)与已经讨论过的其他几个命令类似 (例如,get-proof),此命令只有在发出时才能发出 produce-assignments选项(默认为false)设置为true (见下文第5.1.7节)。求解器不需要支持此功能 选项。与get-value一样,它只能在check-sat之后发出 报告的命令或者可选的报告命令 未知,没有干预断言设置命令。命令 返回所有对的序列(f b),其中b为true或false f是集合中形式(t)的(子)项的标签 所有断言,与Bool一样。与get-value类似,何时 最近的check-sat命令的响应是sat,只是 然后,所有断言的集合保证有一个模型(在 逻辑)同意返回的真值分配。
以下是使用两个命名子公式(也可在线提供here)的相同示例:
(set-option :produce-assignments true)
(set-logic QF_UF)
(declare-fun a () Bool)
(declare-fun b () Bool)
(assert (! (= (! a :named a_val) b ) :named eq_val))
(check-sat)
(get-assignment)