gpt4 book ai didi

Z3 将数组的默认值设置为零

转载 作者:行者123 更新时间:2023-12-04 12:58:02 32 4
gpt4 key购买 nike

我正在尝试解决数组表达式的模型,其中数组的默认值等于 0。

例如,我试图解决这个例子,但我一直得到未知的结果

(declare-const arr (Array Int Int))
(declare-const arr2 (Array Int Int))
(declare-const a Int)
(declare-const b Int)

(assert (forall ((x Int)) (= (select arr x) 0)))

(assert (> a 0))
(assert (<= a 10))

(assert (= arr2 (store arr a 1337)))

(assert (> b 0))
(assert (<= b 10))


(assert (= (select arr2 b) 0))

(check-sat)
(get-model)

最佳答案

帕特里克关于不使用量词的建议是正确的!他们会让你的生活更艰难。但是,您很幸运,因为 z3 支持您的用例的常量数组,这很常见。语法是:

(assert (= arr ((as const (Array Int Int)) 0)))

这确保 arr将其所有条目作为 0 ;不需要量化,z3 在内部处理它就好了。

因此,您的基准将是:
(declare-const arr (Array Int Int))
(declare-const arr2 (Array Int Int))
(declare-const a Int)
(declare-const b Int)

(assert (= arr ((as const (Array Int Int)) 0)))

(assert (> a 0))
(assert (<= a 10))

(assert (= arr2 (store arr a 1337)))

(assert (> b 0))
(assert (<= b 10))


(assert (= (select arr2 b) 0))

(check-sat)
(get-model)

很快就解决了。这样,您可以让整个数组以 0 开头。 ,并修改您感兴趣的范围;这可以像往常一样依赖于变量,不需要提前知道。

关于Z3 将数组的默认值设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54863754/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com