Z3 实现一个模拟字符串Contains方法的公式

Z3 实现一个模拟字符串Contains方法的公式,z3,smt,Z3,Smt,我正在尝试实现String.Containts函数。 我已经编写了一些简单的测试用例,但是下面的一个(应该返回UNSAT)返回SAT 测试通过将所有可能的子字符串与所需字符串(从Z3输出中获取的文本)进行比较,尝试匹配字符串“abcd”中的子字符串“bd”: {(存在((i Int)) 让((a!1)(对于所有((k Int)) (和(>=KI) (=i0) (=KI) (感谢尼古拉的回答。在这个具体的例子中,我应该如何使用暗示?你能给我推荐一些关于Z3序列的特殊阅读吗? (forall ((k

我正在尝试实现String.Containts函数。 我已经编写了一些简单的测试用例,但是下面的一个(应该返回UNSAT)返回SAT

测试通过将所有可能的子字符串与所需字符串(从Z3输出中获取的文本)进行比较,尝试匹配字符串“abcd”中的子字符串“bd”:

{(存在((i Int))
让((a!1)(对于所有((k Int))
(和(>=KI)
(=i0)
(

我尝试了各种实现,但没有成功。

如果断言公式,它将返回UNSAT

该部分:

(forall ((k Int))
           (and (>= k i)
                (<= k (+ i 1)) ...)))
(forall((k Int))
(和(>=KI)

(感谢尼古拉的回答。在这个具体的例子中,我应该如何使用暗示?你能给我推荐一些关于Z3序列的特殊阅读吗?
(forall ((k Int))
           (and (>= k i)
                (<= k (+ i 1)) ...)))