Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Soundness Bug with QF_NRA formula. #265

Open
KJongUk opened this issue Mar 29, 2022 · 1 comment
Open

Soundness Bug with QF_NRA formula. #265

KJongUk opened this issue Mar 29, 2022 · 1 comment

Comments

@KJongUk
Copy link

KJongUk commented Mar 29, 2022

(declare-fun c () Real)
(declare-fun d () Real)
(assert (<= c (- 8.0)))
(assert (<= (- 0.5) d))
(assert (<= d 1.0))
(assert (<= (* d (- c)) c))
(check-sat)

when execute above formula in dreal 'dreal --precision 1e-9 --model file.smt2',
dReal returns 'delta-sat'.

delta-sat with delta = 1e-100
c : [-1.797693134862315708e+308, -1.797693134862315708e+308]
d : [-0.1666666666666666852, -0.1666666666666666852]

But I think this formula is unsat.

and according to following unsatisfiable formula, dreal returns 'delta-sat'.

(declare-fun x () Real)
(declare-fun y () Real)
(assert (<= y (- 2.0)))
(assert (> x 2.0))
(assert (<= (/ y x) y))
(check-sat)

But I also think this formula is unsat. Thank you.

Version Info:
dReal : 'dReal v4.21.06.2 (Release Build)'
OS :

Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.3 LTS
Release:	18.04
Codename:	bionic
@soonhokong
Copy link
Member

Hi,

  1. delta-sat doesn't not exclude the case where the original formula is unsatisfiable. It merely indicates that the delta-perturbation of the original formula is satisfiable.

  2. If you provide finite bounds on c, x, y, they will turn into UNSAT. In theory, dReal should be able to branch on any interval i if |i| > delta. However, because our implementation is using IEEE-754 doubles to represent intervals, it is possible to have a case where |i| > delta but we cannot find subintervals i1 and i2 which cover i. We have been thinking about a better way to handle this case. We will update the solver behavior in the future.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants