Skip to content

Incorrect UNSAT result on disjoint Real/Quantifier and String constraints #325

@wingsyuyi-satori

Description

@wingsyuyi-satori

I found a soundness issue where z3-noodler returns unsat for a benchmark containing two independent constraints (one involving Real arithmetic with quantifiers, and another involving Strings).
Crucially, z3-noodler returns sat for each constraint when run in isolation. However, it incorrectly returns unsat when they are combined. Reference solvers like Z3 and cvc5 correctly return sat for the full benchmark.

(declare-const x Real)
(declare-const t String)
(assert (forall ((i Int)) (or (< i 0) (> i (to_int x)))))
(assert (> 1 (ite (str.< t ";") 1 0)))
(check-sat)

z3-noodler return unsat.
z3 / cvc5 return sat.
version:

Z3 version 4.15.1 - 64 bit 
- build hashcode 9274e4c8faa89ce4c46bb4c95a18ebf54040abbd 
- mata hashcode fe5ec3898a2bfbaebafcfa163b27bd4951cece0c

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions