线性不变生成基于约束的方法

时间:2014-02-27 15:41:59

标签: system transition z3 linear integer-arithmetic

我读过“Sriram Sankaranarayanan,Henny B. Sipma和Zohar Mann”的论文“基于约束的线性关系分析”,通过在给定模板不等式中应用Farkas引理来检查由抽象解释引起的固定点方程。未知系数,计算系数值的约束,以便将任何解决方案替换回模板产生有效的不变关系。

我已经按照示例1(在该文件上) 设V = {x,y},L = {0}。考虑下面显示的过渡系统。每个转换都为并发过程建模,以原子方式更新变量x,y。

Θ = (x = 0 ∧ y = 0)
T = {τ1 , τ2 }
τ1 = <l0 , l0 , [x' = x + 2y ∧ y' = 1 − y]>
τ2 = <l0, l0 , [x' = x + 1 ∧ y' = y + 2]>

我通过使用Farkas Lemma(该论文中的示例2)以及连续(通过转换τ1和τ2)对Initiation进行编码。

作者说: ...我们使用变量{x1,...修复线性过渡系统Π。 。 。 ,xn},统称为x。假设系统具有单个位置以简化表示。位置处的模板断言是α(c)= c1 x1 +···+ cn xn +d≥0。系数变量{c1,... 。 。 ,cn,d}统称为c。系统的转换是{τ1,. 。 。 ,τm},其中τi:,,ρi。初始条件由Θ表示。示例1中的系统将用作运行示例,以说明所提出的想法。

我已经达到了通过每次转换的启动和连续获得的约束的结合所获得的整体约束(该论文中的示例4)。

在那一点上,我想通过在像Z3这样的求解中对所有这些进行编码来解决约束是可能的。 事实上,我通过将线性算法直接编码到Z3中来做到这一点:

(define-sort MyType () Int)
(declare-const myzero MyType)
(declare-const mi1 MyType)
(declare-const mi2 MyType)
(declare-const c1 MyType)
(declare-const c2 MyType)
(declare-const d MyType)
(assert (= myzero 0))
;initiation
    (assert (>= d 0) )
;transition 1
(assert (and 
    (= (- (* mi1 c1) c1) 0)
    (= (- (+ (* mi1 c2) c2) (* 2 c1) ) 0)
    (<= (- (- (* mi1 d) d) c2) 0)
    (>= mi1 0)
))
;transition 2
(assert (and 
    (= (- (* mi2 c1) c1) 0)
    (= (- (* mi2 c2) c2) 0)
    (<= (- (- (- (* mi2 d) d) c1) (* 2 c2) ) 0)
    (>= mi2 0)
))
(check-sat)
(get-model)

一旦我没有在位置“l0”到c1,c2,...,cn,d作为单个(o范围)值找出任何归纳不变量,我想我表现不佳。

Z3对所有系数都回答为零:

sat
(model 
    (define-fun mi2 () Int 0)
    (define-fun c2 () Int 0)
    (define-fun mi1 () Int 0)
    (define-fun c1 () Int 0)
    (define-fun d () Int 4)
    (define-fun myzero () Int 0)
)

我试图找到相关的例子,但直到现在还没有运气得到它。

任何帮助我都会很感激。 亚历山大

1 个答案:

答案 0 :(得分:1)

如果我理解你在Z3编码中正确地做了什么,你确实是 得到正确但不平凡的不变量,如0&lt; = 4。

为了得到有趣的不变量,我建议添加像c1&lt;&gt;这样的约束。 0,看看解算器是否给你一些有趣的东西。

我们的工作早在Z3存在之前就完成了:我们使用求解器REDLOG作为REDUCE的一部分,它仍然可用。欢迎通过电子邮件向我发送您的疑问。

最佳, 斯利拉姆