Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指定Z3的初始模型值_Z3 - Fatal编程技术网

指定Z3的初始模型值

指定Z3的初始模型值,z3,Z3,如何为模型指定初始“软”值?这个初始模型是解决一个类似查询的结果,对于当前查询,这个模型可能有正确的片段,甚至可能是正确的 目前,我正在通过增量求解模拟此问题,并且: 这是否真的将trans\u sequed的初始值指定为trans\u sequed 增量求解模式比顺序求解模式慢。引入初始值的更好方法是什么? < P>我认为这是一个很好的方法,但是你可以考虑使用更多的布尔变量。现在,这是一种“全部”或“没有”的方法。在您的脚本中,当执行(check sat p)时,Z3将查找一个模型,其中tra

如何为模型指定初始“软”值?这个初始模型是解决一个类似查询的结果,对于当前查询,这个模型可能有正确的片段,甚至可能是正确的

目前,我正在通过增量求解模拟此问题,并且:

这是否真的将
trans\u sequed
的初始值指定为
trans\u sequed


增量求解模式比顺序求解模式慢。引入初始值的更好方法是什么?

< P>我认为这是一个很好的方法,但是你可以考虑使用更多的布尔变量。现在,这是一种“全部”或“没有”的方法。在您的脚本中,当执行
(check sat p)
时,Z3将查找一个模型,其中
trans\u假定的
trans\u寻求的
具有相同的解释。如果该模型不存在,它将返回包含
p
的unsat核心。当执行
(check)
时,Z3可以自由地将
p
赋值给
false
,并且通用量词本质上是一个不在乎的量词。也就是说,
trans\u假定的
trans\u寻求的
可以完全不同

如果您使用多个布尔变量来控制
trans_
的解释,您将拥有更大的灵活性。 如果问题的其余部分是无量词的,则应该考虑删除通用量词。如果您只关心有限个点中的
trans_seek
值,则可以执行此操作

假设我们有
trans\u假设(0)=1
trans\u假设(1)=10
。然后,我们可以写:

assert (=> p0 (= (trans_sought 0) 1)))
assert (=> p1 (= (trans_sought 1) 10)))

在这种编码中,我们可以查询
(检查sat p0 p1)
(检查sat p0)
(检查sat p1)

哦,听起来很有趣!据我所知,你建议对相同的模型进行精细的假设。但这可能会导致许多具有不同假设的
检查sat p..
调用。这可能很昂贵(嗯,值得怀疑,因为它是递增的)。我试图避免这种情况,让Z3启发法来选择模型的哪些部分应该保留。如果
trans\u假定的
trans\u寻求的
完全不同,则可以!我只想让Z3从
trans_假设的
开始,然后Z3可以使用自己的启发式方法对其进行调整。Z3将调整
转换,还是从一个全新的转换开始?Z3将为
(check sat)
创建一个新模型,但它将重新使用在第一个
(check sat p)
中学习的引理。但是,如果Z3将
p
赋值给
false
,则依赖于
p
的任何引理都将自动禁用。使用随机化也可能是一个问题。我认为您可能会以一个不稳定的解决方案结束(即,它并不总是有效)。
assert (=> p0 (= (trans_sought 0) 1)))
assert (=> p1 (= (trans_sought 1) 10)))