如何利用Z3 SMT解决ILP问题
问题 我试图用z3来反驳Petri网上的可达性断言 所以我声明N个状态变量v0,…v_N-1,它们是正整数,Petri网的每个位置一个 我给出的关于状态的原子命题p的主要策略如下:如何利用Z3 SMT解决ILP问题,z3,linear-programming,smt,Z3,Linear Programming,Smt,问题 我试图用z3来反驳Petri网上的可达性断言 所以我声明N个状态变量v0,…v_N-1,它们是正整数,Petri网的每个位置一个 我给出的关于状态的原子命题p的主要策略如下: (使用外部引擎)计算任何“简单”的正不变量作为变量的线性约束,形式为alpha_0*v_0+…=只有正或零alpha_i的常数,然后检查在这些约束下可到达的任何状态是否满足P,如果不满足,则结束,否则 计算(z3外部)广义不变量,其中αi也可以是负数,并检查_sat,如果未统计,则得出结论,否则 在系统的每个转换中
- (使用外部引擎)计算任何“简单”的正不变量作为变量的线性约束,形式为alpha_0*v_0+…=只有正或零alpha_i的常数,然后检查在这些约束下可到达的任何状态是否满足P,如果不满足,则结束,否则
- 计算(z3外部)广义不变量,其中αi也可以是负数,并检查_sat,如果未统计,则得出结论,否则
- 在系统的每个转换中添加一个正变量t_i,并断言Petri网状态方程,即任何可达状态都有一个Parikh触发计数向量(t_i的值),使得M0初始状态+该Parikh向量与关联矩阵的乘积给出到达状态。所以这个问题引入了很多新的变量,涉及到一些变量的乘法,但仍然是一个线性整数规划问题
你们中有没有人尝试过将基本上是ILP问题的内容反馈给SMT,并找到了选项设置或特定编码来帮助它部署正确的解决方案?谢谢。我正在对线性约束(“状态方程”)进行编码,我不确定您在想什么SAT编码,但例如,在某些情况下,这些东西可以在无界Petri网上回答,因此,没有直接的SAT编码看起来是等价的。好吧,我已经从一门关于Petri网的课程中链接到了这个问题的数学公式,如果我在编码线性约束(“状态方程”),我不确定你在想什么SAT编码,但举个例子,这个东西在某些情况下可以在无界Petri网上回答,所以没有直接的SAT编码是等价的。好吧,我已经从一门关于Petri网的课程中找到了这个问题的数学公式,如果这有帮助的话