0

For the problem below, solution exists but z3 says UNSAT.

(set-logic QF_UFNRA)
(declare-fun a () Real)
(declare-fun b () Real)
(declare-fun c () Real)
(declare-fun d () Real)
(declare-fun e () Real)
(declare-fun f () Real)
(declare-fun g () Real)
(declare-fun h () Real)
(assert (and (<= a 1.0) (> a 0.0)))
(assert (and (<= b 1.0) (> b 0.0)))
(assert (and (<= c 1.0) (> c 0.0)))
(assert (and (<= d 1.0) (> d 0.0)))
(assert (and (<= e 1.0) (>= e 0.0)))
(assert (and (<= f 1.0) (>= f 0.0)))
(assert (and (<= g 1.0) (>= g 0.0)))
(assert (and (<= h 1.0) (>= h 0.0)))
(assert (= (* (+ a b) (+ a c)) a))
(assert (= (* (+ a b) (+ b d)) b))
(assert (= (* (+ a c) (+ c d)) c))
(assert (= (* (+ b d) (+ c d)) d))
(assert (= (+ a b c d e f g h) 1.0))
(check-sat)

Valid solution:

a = 1/12, b = 1/4, c = 1/6, d = 1/2, e = f = g = h = 0 

I am not able to figure out why z3 says unsat.

z3 version is z3-4.3.0-x64.

Logan
  • 161
  • 2
  • 10

1 Answers1

0

I don't know what is the version of z3 on rise4fun (http://rise4fun.com/z3). I just tested it, and it says SAT. It returns the model you gave.

iguerNL
  • 464
  • 2
  • 8
  • The latest version from github also gives the right answer. I guess the bug was fixed since 4.3.0 version. – Logan Jul 24 '16 at 15:27