Closed shmarovfedor closed 10 years ago
Can you tell me the result with the alternative flags: “-r” or “-b” or “-d"?
On Jun 20, 2014, at 9:12 AM, shmarovfedor notifications@github.com wrote:
The following model is SAT with -k 5:
define a 20
define b 30
[0, 130] x;
define K 1.0
[0, 5] time; [0, 1000] tau;
{ mode 1; invt: (x >= 18); flow: d/dt[x] = - x * K; d/dt[tau] = 10.0; jump: (x <= 18) ==> @2 (and (x' = x) (tau' = tau)); } { mode 2; invt: (x <= 22); flow: d/dt[x] = - K * (x - 30); d/dt[tau] = 10.0; jump: (x >= 22) ==> @1 (and (x' = x) (tau' = tau)); } init: @1 (and (x >= a) (x <= b) (tau = 0));
goal: @2 (and (x >= 19.9) (x <= 20.1) (tau = 18));
But the model is UNSAT if I run it with -k 5 and -e flag
— Reply to this email directly or view it on GitHub.
It is unsat
for any of the flags
That suggests there is a problem with the “all paths” encoding. Can you post the SMT2 file generated using the -d option?
On Jun 20, 2014, at 9:19 AM, shmarovfedor notifications@github.com wrote:
It is unsat for any of the flags
— Reply to this email directly or view it on GitHub.
(set-logic QF_NRA_ODE)
(declare-fun x () Real)
(declare-fun tau () Real)
(declare-fun x_0_0 () Real)
(declare-fun x_0_t () Real)
(declare-fun x_1_0 () Real)
(declare-fun x_1_t () Real)
(declare-fun x_2_0 () Real)
(declare-fun x_2_t () Real)
(declare-fun x_3_0 () Real)
(declare-fun x_3_t () Real)
(declare-fun x_4_0 () Real)
(declare-fun x_4_t () Real)
(declare-fun x_5_0 () Real)
(declare-fun x_5_t () Real)
(declare-fun tau_0_0 () Real)
(declare-fun tau_0_t () Real)
(declare-fun tau_1_0 () Real)
(declare-fun tau_1_t () Real)
(declare-fun tau_2_0 () Real)
(declare-fun tau_2_t () Real)
(declare-fun tau_3_0 () Real)
(declare-fun tau_3_t () Real)
(declare-fun tau_4_0 () Real)
(declare-fun tau_4_t () Real)
(declare-fun tau_5_0 () Real)
(declare-fun tau_5_t () Real)
(declare-fun time_0 () Real)
(declare-fun time_1 () Real)
(declare-fun time_2 () Real)
(declare-fun time_3 () Real)
(declare-fun time_4 () Real)
(declare-fun time_5 () Real)
(declare-fun mode_0 () Real)
(declare-fun mode_1 () Real)
(declare-fun mode_2 () Real)
(declare-fun mode_3 () Real)
(declare-fun mode_4 () Real)
(declare-fun mode_5 () Real)
(define-ode flow_1 ((= d/dt[x] (* (- 0 x) 1)) (= d/dt[tau] 10)))
(define-ode flow_2 ((= d/dt[x] (* -1 (- x 30))) (= d/dt[tau] 10)))
(assert (<= 0 x_0_0))
(assert (<= x_0_0 130))
(assert (<= 0 x_0_t))
(assert (<= x_0_t 130))
(assert (<= 0 x_1_0))
(assert (<= x_1_0 130))
(assert (<= 0 x_1_t))
(assert (<= x_1_t 130))
(assert (<= 0 x_2_0))
(assert (<= x_2_0 130))
(assert (<= 0 x_2_t))
(assert (<= x_2_t 130))
(assert (<= 0 x_3_0))
(assert (<= x_3_0 130))
(assert (<= 0 x_3_t))
(assert (<= x_3_t 130))
(assert (<= 0 x_4_0))
(assert (<= x_4_t 130))
(assert (<= 0 x_5_0))
(assert (<= x_5_0 130))
(assert (<= 0 x_5_t))
(assert (<= x_5_t 130))
(assert (<= 0 tau_0_0))
(assert (<= tau_0_0 1000))
(assert (<= 0 tau_0_t))
(assert (<= tau_0_t 1000))
(assert (<= 0 tau_1_0))
(assert (<= tau_1_0 1000))
(assert (<= 0 tau_1_t))
(assert (<= tau_1_t 1000))
(assert (<= 0 tau_2_0))
(assert (<= tau_2_0 1000))
(assert (<= 0 tau_2_t))
(assert (<= tau_2_t 1000))
(assert (<= 0 tau_3_0))
(assert (<= tau_3_0 1000))
(assert (<= 0 tau_3_t))
(assert (<= tau_3_t 1000))
(assert (<= 0 tau_4_0))
(assert (<= tau_4_0 1000))
(assert (<= 0 tau_4_t))
(assert (<= tau_4_t 1000))
(assert (<= 0 tau_5_0))
(assert (<= tau_5_0 1000))
(assert (<= 0 tau_5_t))
(assert (<= tau_5_t 1000))
(assert (<= 0 time_0))
(assert (<= time_0 5))
(assert (<= 0 time_1))
(assert (<= time_1 5))
(assert (<= 0 time_2))
(assert (<= time_2 5))
(assert (<= 0 time_3))
(assert (<= time_3 5))
(assert (<= 0 time_4))
(assert (<= time_4 5))
(assert (<= 0 time_5))
(assert (<= time_5 5))
(assert (<= 1 mode_0))
(assert (<= mode_0 2))
(assert (<= 1 mode_1))
(assert (<= mode_1 2))
(assert (<= 1 mode_2))
(assert (<= mode_2 2))
(assert (<= 1 mode_3))
(assert (<= mode_3 2))
(assert (<= 1 mode_4))
(assert (<= mode_4 2))
(assert (<= 1 mode_5))
(assert (<= mode_5 2))
(assert (and (or (and (= [x_5_t tau_5_t] (integral 0. time_5 [x_5_0 tau_5_0] flow_2)) (= mode_5 2) (forall_t 2 [0 time_5] (<= x_5_t 22)) (<= x_5_t 22) (<= x_5_0 22)) (and (= [x_5_t tau_5_t] (integral 0. time_5 [x_5_0 tau_5_0] flow_1)) (= mode_5 1) (forall_t 1 [0 time_5] (>= x_5_t 18)) (>= x_5_t 18) (>= x_5_0 18))) (or (and (= [x_4_t tau_4_t] (integral 0. time_4 [x_4_0 tau_4_0] flow_2)) (= mode_4 2) (forall_t 2 [0 time_4] (<= x_4_t 22)) (<= x_4_t 22) (<= x_4_0 22) (= mode_5 1) (>= x_4_t 22) (= tau_5_0 tau_4_t) (= x_5_0 x_4_t)) (and (= [x_4_t tau_4_t] (integral 0. time_4 [x_4_0 tau_4_0] flow_1)) (= mode_4 1) (forall_t 1 [0 time_4] (>= x_4_t 18)) (>= x_4_t 18) (>= x_4_0 18) (= mode_5 2) (<= x_4_t 18) (= tau_5_0 tau_4_t) (= x_5_0 x_4_t))) (or (and (= [x_3_t tau_3_t] (integral 0. time_3 [x_3_0 tau_3_0] flow_2)) (= mode_3 2) (forall_t 2 [0 time_3] (<= x_3_t 22)) (<= x_3_t 22) (<= x_3_0 22) (= mode_4 1) (>= x_3_t 22) (= tau_4_0 tau_3_t) (= x_4_0 x_3_t)) (and (= [x_3_t tau_3_t] (integral 0. time_3 [x_3_0 tau_3_0] flow_1)) (= mode_3 1) (forall_t 1 [0 time_3] (>= x_3_t 18)) (>= x_3_t 18) (>= x_3_0 18) (= mode_4 2) (<= x_3_t 18) (= tau_4_0 tau_3_t) (= x_4_0 x_3_t))) (or (and (= [x_2_t tau_2_t] (integral 0. time_2 [x_2_0 tau_2_0] flow_2)) (= mode_2 2) (forall_t 2 [0 time_2] (<= x_2_t 22)) (<= x_2_t 22) (<= x_2_0 22) (= mode_3 1) (>= x_2_t 22) (= tau_3_0 tau_2_t) (= x_3_0 x_2_t)) (and (= [x_2_t tau_2_t] (integral 0. time_2 [x_2_0 tau_2_0] flow_1)) (= mode_2 1) (forall_t 1 [0 time_2] (>= x_2_t 18)) (>= x_2_t 18) (>= x_2_0 18) (= mode_3 2) (<= x_2_t 18) (= tau_3_0 tau_2_t) (= x_3_0 x_2_t))) (or (and (= [x_1_t tau_1_t] (integral 0. time_1 [x_1_0 tau_1_0] flow_2)) (= mode_1 2) (forall_t 2 [0 time_1] (<= x_1_t 22)) (<= x_1_t 22) (<= x_1_0 22) (= mode_2 1) (>= x_1_t 22) (= tau_2_0 tau_1_t) (= x_2_0 x_1_t)) (and (= [x_1_t tau_1_t] (integral 0. time_1 [x_1_0 tau_1_0] flow_1)) (= mode_1 1) (forall_t 1 [0 time_1] (>= x_1_t 18)) (>= x_1_t 18) (>= x_1_0 18) (= mode_2 2) (<= x_1_t 18) (= tau_2_0 tau_1_t) (= x_2_0 x_1_t))) (or (and (= [x_0_t tau_0_t] (integral 0. time_0 [x_0_0 tau_0_0] flow_2)) (= mode_0 2) (forall_t 2 [0 time_0] (<= x_0_t 22)) (<= x_0_t 22) (<= x_0_0 22) (= mode_1 1) (>= x_0_t 22) (= tau_1_0 tau_0_t) (= x_1_0 x_0_t)) (and (= [x_0_t tau_0_t] (integral 0. time_0 [x_0_0 tau_0_0] flow_1)) (= mode_0 1) (forall_t 1 [0 time_0] (>= x_0_t 18)) (>= x_0_t 18) (>= x_0_0 18) (= mode_1 2) (<= x_0_t 18) (= tau_1_0 tau_0_t) (= x_1_0 x_0_t))) (and (= tau_0_0 0) (<= x_0_0 30) (>= x_0_0 20)) (= mode_0 1) (= mode_5 2) (= tau_5_t 18) (<= x_5_t 20.1) (>= x_5_t 19.9)))
(check-sat)
(exit)
I created a simpler version of this problem (k = 2) with the drh:
[0, 130] x;
[0, 5] time; [0, 1000] tau;
{ mode 1; invt: (x >= 18); flow: d/dt[x] = - x * K; d/dt[tau] = 10.0; jump: (x <= 18) ==> @2 (and (x' = x) (tau' = tau)); } { mode 2; invt: (x <= 22); flow: d/dt[x] = - K * (x - 30); d/dt[tau] = 10.0; jump: (x >= 22) ==> @1 (and (x' = x) (tau' = tau)); } init: @1 (and (x >= a) (x <= b) (tau = 0));
goal: @1 (and (x = 22) );
With the -d flag, I get an unsat result because (I think) the explanation generated by the ICP solver is incorrect. The search gets to a point where it asserts:
x_0_t <= 18 x_0_t >= 18 x_0_t >= 22
This is going to be unsat, and it is properly detected as such. However the explanation drops the "x_0_t >= 22” literal, which is the cause of the conflict. Among other literals it says:
x_0_t <= 18 x_0_t >= 18
are the literals to blame. Unfortunately, these are required by the SAT solution. Soonho?
The SMT2 is:
(set-logic QF_NRA_ODE) (declare-fun x () Real) (declare-fun tau () Real) (declare-fun x_0_0 () Real) (declare-fun x_0_t () Real) (declare-fun x_1_0 () Real) (declare-fun x_1_t () Real) (declare-fun x_2_0 () Real) (declare-fun x_2_t () Real) (declare-fun tau_0_0 () Real) (declare-fun tau_0_t () Real) (declare-fun tau_1_0 () Real) (declare-fun tau_1_t () Real) (declare-fun tau_2_0 () Real) (declare-fun tau_2_t () Real) (declare-fun time_0 () Real) (declare-fun time_1 () Real) (declare-fun time_2 () Real) (declare-fun mode_0 () Real) (declare-fun mode_1 () Real) (declare-fun mode_2 () Real) (define-ode flow_1 ((= d/dt[x]( %28- 0 x%29 1)) (= d/dt[tau] 10))) (define-ode flow_2 ((= d/dt[x]( -1 %28- x 30%29)) (= d/dt[tau] 10))) (assert (<= 0 x_0_0)) (assert (<= x_0_0 130)) (assert (<= 0 x_0_t)) (assert (<= x_0_t 130)) (assert (<= 0 x_1_0)) (assert (<= x_1_0 130)) (assert (<= 0 x_1_t)) (assert (<= x_1_t 130)) (assert (<= 0 x_2_0)) (assert (<= x_2_0 130)) (assert (<= 0 x_2_t)) (assert (<= x_2_t 130)) (assert (<= 0 tau_0_0)) (assert (<= tau_0_0 1000)) (assert (<= 0 tau_0_t)) (assert (<= tau_0_t 1000)) (assert (<= 0 tau_1_0)) (assert (<= tau_1_0 1000)) (assert (<= 0 tau_1_t)) (assert (<= tau_1_t 1000)) (assert (<= 0 tau_2_0)) (assert (<= tau_2_0 1000)) (assert (<= 0 tau_2_t)) (assert (<= tau_2_t 1000)) (assert (<= 0 time_0)) (assert (<= time_0 5)) (assert (<= 0 time_1)) (assert (<= time_1 5)) (assert (<= 0 time_2)) (assert (<= time_2 5)) (assert (<= 1 mode_0)) (assert (<= mode_0 2)) (assert (<= 1 mode_1)) (assert (<= mode_1 2)) (assert (<= 1 mode_2)) (assert (<= mode_2 2)) (assert
(and (or (and (= [x_2_t tau_2_t](integral 0. time_2 [x_2_0 tau_2_0] flow_2)) (forall_t 2 [0 time_2](= x_2_t 22)) (<= x_2_t 22) (<= x_2_0 22)) (and (= [x_2_t tau_2_t](integral 0. time_2 [x_2_0 tau_2_0] flow_1)) (= mode_2 1) (forall_t 1 [0 time_2](>= x_2_t 18)) (>= x_2_t 18) (>= x_2_0 18)))
(or (and (= [x_1_t tau_1_t](integral 0. time_1 [x_1_0 tau_1_0] flow_2)) (= mode_1 2) (forall_t 2 [0 time_1](= x_1_t 22)) (<= x_1_t 22) (<= x_1_0 22) (= mode_2 1) (>= x_1_t 22) (= tau_2_0 tau_1_t) (= x_2_0 x_1_t)) (and (= [x_1_t tau_1_t](integral 0. time_1 [x_1_0 tau_1_0] flow_1)) (forall_t 1 [0 time_1](>= x_1_t 18)) (>= x_1_t 18) (>= x_1_0 18) (<= x_1_t 18) (= tau_2_0 tau_1_t) (= x_2_0 x_1_t)))
(or (and (= [x_0_t tau_0_t](integral 0. time_0 [x_0_0 tau_0_0] flow_2)) (forall_t 2 [0 time_0](= x_0_t 22)) (<= x_0_t 22) (<= x_0_0 22) (>= x_0_t 22) (= tau_1_0 tau_0_t) (= x_1_0 x_0_t)) (and (= [x_0_t tau_0_t](integral 0. time_0 [x_0_0 tau_0_0] flow_1)) (= mode_0 1) (forall_t 1 [0 time_0](>= x_0_t 18)) (>= x_0_t 18) (>= x_0_0 18) (= mode_1 2) (<= x_0_t 18) (= tau_1_0 tau_0_t) (= x_1_0 x_0_t)))
(and (= tau_0_0 0) (<= x_0_0 30) (>= x_0_0 20)) (= mode_0 1) (= mode_2 1) (= x_2_t 22))) (check-sat) (exit)
On Jun 20, 2014, at 9:25 AM, shmarovfedor notifications@github.com wrote:
(set-logic QF_NRA_ODE) (declare-fun x () Real) (declare-fun tau () Real) (declare-fun x_0_0 () Real) (declare-fun x_0_t () Real) (declare-fun x_1_0 () Real) (declare-fun x_1_t () Real) (declare-fun x_2_0 () Real) (declare-fun x_2_t () Real) (declare-fun x_3_0 () Real) (declare-fun x_3_t () Real) (declare-fun x_4_0 () Real) (declare-fun x_4_t () Real) (declare-fun x_5_0 () Real) (declare-fun x_5_t () Real) (declare-fun tau_0_0 () Real) (declare-fun tau_0_t () Real) (declare-fun tau_1_0 () Real) (declare-fun tau_1_t () Real) (declare-fun tau_2_0 () Real) (declare-fun tau_2_t () Real) (declare-fun tau_3_0 () Real) (declare-fun tau_3_t () Real) (declare-fun tau_4_0 () Real) (declare-fun tau_4_t () Real) (declare-fun tau_5_0 () Real) (declare-fun tau_5_t () Real) (declare-fun time_0 () Real) (declare-fun time_1 () Real) (declare-fun time_2 () Real) (declare-fun time_3 () Real) (declare-fun time_4 () Real) (declare-fun time_5 () Real) (declare-fun mode_0 () Real) (declare-fun mode_1 () Real) (declare-fun mode_2 () Real) (declare-fun mode_3 () Real) (declare-fun mode_4 () Real) (declare-fun mode_5 () Real) (define-ode flow_1 ((= d/dt[x]( %28- 0 x%29 1)) (= d/dt[tau] 10))) (define-ode flow_2 ((= d/dt[x]( -1 %28- x 30%29)) (= d/dt[tau] 10))) (assert (<= 0 x_0_0)) (assert (<= x_0_0 130)) (assert (<= 0 x_0_t)) (assert (<= x_0_t 130)) (assert (<= 0 x_1_0)) (assert (<= x_1_0 130)) (assert (<= 0 x_1_t)) (assert (<= x_1_t 130)) (assert (<= 0 x_2_0)) (assert (<= x_2_0 130)) (assert (<= 0 x_2_t)) (assert (<= x_2_t 130)) (assert (<= 0 x_3_0)) (assert (<= x_3_0 130)) (assert (<= 0 x_3_t)) (assert (<= x_3_t 130)) (assert (<= 0 x_4_0)) (assert (<= x_4_t 130)) (assert (<= 0 x_5_0)) (assert (<= x_5_0 130)) (assert (<= 0 x_5_t)) (assert (<= x_5_t 130)) (assert (<= 0 tau_0_0)) (assert (<= tau_0_0 1000)) (assert (<= 0 tau_0_t)) (assert (<= tau_0_t 1000)) (assert (<= 0 tau_1_0)) (assert (<= tau_1_0 1000)) (assert (<= 0 tau_1_t)) (assert (<= tau_1_t 1000)) (assert (<= 0 tau_2_0)) (assert (<= tau_2_0 1000)) (assert (<= 0 tau_2_t)) (assert (<= tau_2_t 1000)) (assert (<= 0 tau_3_0)) (assert (<= tau_3_0 1000)) (assert (<= 0 tau_3_t)) (assert (<= tau_3_t 1000)) (assert (<= 0 tau_4_0)) (assert (<= tau_4_0 1000)) (assert (<= 0 tau_4_t)) (assert (<= tau_4_t 1000)) (assert (<= 0 tau_5_0)) (assert (<= tau_5_0 1000)) (assert (<= 0 tau_5_t)) (assert (<= tau_5_t 1000)) (assert (<= 0 time_0)) (assert (<= time_0 5)) (assert (<= 0 time_1)) (assert (<= time_1 5)) (assert (<= 0 time_2)) (assert (<= time_2 5)) (assert (<= 0 time_3)) (assert (<= time_3 5)) (assert (<= 0 time_4)) (assert (<= time_4 5)) (assert (<= 0 time_5)) (assert (<= time_5 5)) (assert (<= 1 mode_0)) (assert (<= mode_0 2)) (assert (<= 1 mode_1)) (assert (<= mode_1 2)) (assert (<= 1 mode_2)) (assert (<= mode_2 2)) (assert (<= 1 mode_3)) (assert (<= mode_3 2)) (assert (<= 1 mode_4)) (assert (<= mode_4 2)) (assert (<= 1 mode_5)) (assert (<= mode_5 2)) (assert (and (or (and (= [x_5_t tau_5_t](integral 0. time_5 [x_5_0 tau_5_0] flow_2)) (= mode_5 2) (forall_t 2 [0 time_5](= x_5_t 22)) (<= x_5_t 22) (<= x_5_0 22)) (and (= [x_5_t tau_5_t](integral 0. time_5 [x_5_0 tau_5_0] flow_1)) (= mode_5 1) (forall_t 1 [0 time_5](>= x_5_t 18)) (>= x_5_t 18) (>= x_5_0 18))) (or (and (= [x_4_t tau_4_t](integral 0. time_4 [x_4_0 tau_4_0] flow_2)) (= mode_4 2) (forall_t 2 [0 time_4](= x_4_t 22)) (<= x_4_t 22) (<= x_4_0 22) (= mode_5 1) (>= x_4_t 22) (= tau_5_0 tau_4_t) (= x_5_0 x_4_t)) (and (= [x_4_t tau_4_t](integral 0. time_4 [x_4_0 tau_4_0] flow_1)) (= mode_4 1) (forall_t 1 [0 time_4](>= x_4_t 18)) (>= x_4_t 18) (>= x_4_0 18) (= mode_5 2) (<= x_4_t 18) (= tau_5_0 tau_4_t) (= x_5_0 x_4_t))) (or (and (= [x_3_t tau_3_t](integral 0. time_3 [x_3_0 tau_3_0] flow_2)) (= mode_3 2) (forall_t 2 [0 time_3](= x_3_t 22)) (<= x_3_t 22) (<= x_3_0 22) (= mode_4 1) (>= x_3_t 22) (= tau_4_0 tau_3_t) (= x_4_0 x_3_t)) (and (= [x_3_t tau_3_t](integral 0. time_3 [x_3_0 tau_3_0] flow_1)) (= mode_3 1) (forall_t 1 [0 time_3](>= x_3_t 18)) (>= x_3_t 18) (>= x_3_0 18) (= mode_4 2) (<= x_3_t 18) (= tau_4_0 tau_3_t) (= x_4_0 x_3_t))) (or (and (= [x_2_t tau_2_t](integral 0. time_2 [x_2_0 tau_2_0] flow_2)) (= mode_2 2) (forall_t 2 [0 time_2](= x_2_t 22)) (<= x_2_t 22) (<= x_2_0 22) (= mode_3 1) (>= x_2_t 22) (= tau_3_0 tau_2_t) (= x_3_0 x_2_t)) (and (= [x_2_t tau_2_t](integral 0. time_2 [x_2_0 tau_2_0] flow_1)) (= mode_2 1) (forall_t 1 [0 time_2](>= x_2_t 18)) (>= x_2_t 18) (>= x_2_0 18) (= mode_3 2) (<= x_2_t 18) (= tau_3_0 tau_2_t) (= x_3_0 x_2_t))) (or (and (= [x_1_t tau_1_t](integral 0. time_1 [x_1_0 tau_1_0] flow_2)) (= mode_1 2) (forall_t 2 [0 time_1](= x_1_t 22)) (<= x_1_t 22) (<= x_1_0 22) (= mode_2 1) (>= x_1_t 22) (= tau_2_0 tau_1_t) (= x_2_0 x_1_t)) (and (= [x_1_t tau_1_t](integral 0. time_1 [x_1_0 tau_1_0] flow_1)) (= mo de_1 1) (forall_t 1 [0 time_1](>= x_1_t 18)) (>= x_1_t 18) (>= x_1_0 18) (= mode_2 2) (<= x_1_t 18) (= tau_2_0 tau_1_t) (= x_2_0 x_1_t))) (or (and (= [x_0_t tau_0_t](integral 0. time_0 [x_0_0 tau_0_0] flow_2)) (= mode_0 2) (forall_t 2 [0 time_0](= x_0_t 22)) (<= x_0_t 22) (<= x_0_0 22) (= mode_1 1) (>= x_0_t 22) (= tau_1_0 tau_0_t) (= x_1_0 x_0_t)) (and (= [x_0_t tau_0_t](integral 0. time_0 [x_0_0 tau_0_0] flow_1)) (= mode_0 1) (forall_t 1 [0 time_0](>= x_0_t 18)) (>= x_0_t 18) (>= x_0_0 18) (= mode_1 2) (<= x_0_t 18) (= tau_1_0 tau_0_t) (= x_1_0 x_0_t))) (and (= tau_0_0 0) (<= x_0_0 30) (>= x_0_0 20)) (= mode_0 1) (= mode_5 2) (= tau_5_t 18) (<= x_5_t 20.1) (>= x_5_t 19.9))) (check-sat) (exit)
— Reply to this email directly or view it on GitHub.
I think the ICP detects a conflict from x_0_0
variable, not from x_0_t
variable in this case. It assigns [20, 30]
to x_0_0
, and then check constraints. When it meets (<= 18 x_0_0)
which is unfeasible with the value [20, 30]
, ICP solver generates an explanation.
If you look at the attached .output file, you’ll see that the theory literals are consistent up until the point we add the (x >= 22) literal. The explanation does not include this literal.
Thanks, Dan
On Jun 20, 2014, at 2:51 PM, Soonho Kong notifications@github.com wrote:
I think the ICP detects a conflict from x_0_0 variable, not from x_0_t variable in this case. It assigns [20, 30] to x_0_0, and then check constraints. When it meets (<= 18 x_0_0) which is unfeasible with the value [20, 30], ICP solver generates an explanation.
— Reply to this email directly or view it on GitHub.
@danbryce, thanks. I found a horrible bug that I've been hunting for a week. I'm fixing it now.
Now both of @shmarovfedor and @danbryce 's examples are SAT with -d
, -e
, and -r
options.
Thanks!
Dan
On Jun 24, 2014, at 2:55 PM, Soonho Kong notifications@github.com wrote:
Now both of @shmarovfedor and @danbryce 's examples are SAT with -d, -e, and -r options.
— Reply to this email directly or view it on GitHub.
The following model is SAT with
-k 5
:But the model is UNSAT if I run it with
-k 5
and-e
flag