Automation 自动证明线性方程/不等式

Automation 自动证明线性方程/不等式,automation,equation,algebra,theorem-proving,inequality,Automation,Equation,Algebra,Theorem Proving,Inequality,我正在寻找一种工具来确定一组给定的线性方程/不等式(a)是否包含另一组给定的线性方程/不等式(B)。返回值应为“true”或“false” 为了举例说明,让我们看看A和B的可能实例以及算法的预期返回值: A: {Z=3,Y=Z+2, X < Y} ; B: {X<5} ; Expected result: true A: {Z=3,Y=Z+2, X < Y} ; B: {X<10} ; Expected result: true A: {Z=3,Y=Z+2, X &

我正在寻找一种工具来确定一组给定的线性方程/不等式(a)是否包含另一组给定的线性方程/不等式(B)。返回值应为“true”或“false”

为了举例说明,让我们看看A和B的可能实例以及算法的预期返回值:

A: {Z=3,Y=Z+2, X < Y} ;
B: {X<5} ; 
Expected result: true

A: {Z=3,Y=Z+2, X < Y} ;
B: {X<10} ;
Expected result: true

A: {Z=3,Y=Z+2, X < Y} ;
B: {X=3} ; 
Expected result: false

A: {X<=Y,X>=Y} ;
B: {X=Y} ; 
Expected result: true

A: {X<=Y,X>=Y} ;
B: {X=Y, X>Z+2} ; 
Expected result: false
A:{Z=3,Y=Z+2,XB:{X我想我找到了一个有效的解决方案。这个问题可以重新表述为赋值问题,然后可以通过定理证明者(如Z3)来解决,通过一些工作,可能还可以通过线性规划求解者来解决

为了举例说明,让我们看一下我上面给出的第一个示例:

A: {Z=3, Y=Z+2, X<Y} ;
B: {X<5} ; 
A:{Z=3,Y=Z+2,X
(declare-fun x () Int)
(declare-fun y () Int)
(declare-fun z () Int)
(assert (= z 3))
(assert (= y (+ z 2))) 
(assert (< x y))
(assert (not (< x 5)))
(check-sat)
(get-model)
(exit)