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
solution unsoundness on a string formula #6483
Comments
4tXJ7f
added a commit
to 4tXJ7f/cvc5
that referenced
this issue
May 18, 2021
Fixes cvc5#6483. The benchmark in the issue was performing the following incorrect rewrite: ``` Rewrite (str.replace "B" (str.replace (str.++ (str.replace "B" a "B") a) "B" "") "B") to (str.replace "B" a "B") by RPL_X_Y_X_SIMP. ``` The rewrite `RPL_X_Y_X_SIMP` rewrites terms of the form `(str.replace x y x)`, where `x` is of length one and `(= y "")` rewrites to a conjunction of equalities of the form `(= y_i "")` where `y_i` is some term. The function responsible for collecting the terms `y_i` from this conjunction, `collectEmptyEqs()`, returns a `bool` and a vector of `Node`s. The `bool` indicates whether all equalities in the conjunction were of the form `(= y_i "")`. The rewrite `RPL_X_Y_X_SIMP` only applies if this is true. However, `collectEmptyEqs()` had a bug where it would not return false when all of the conjuncts were equalities but not all of them were equalities with the empty string. This commit fixes `collectEmptyEqs()` and adds tests.
ajreynol
pushed a commit
that referenced
this issue
May 18, 2021
Fixes #6483. The benchmark in the issue was performing the following incorrect rewrite: Rewrite (str.replace "B" (str.replace (str.++ (str.replace "B" a "B") a) "B" "") "B") to (str.replace "B" a "B") by RPL_X_Y_X_SIMP. The rewrite RPL_X_Y_X_SIMP rewrites terms of the form (str.replace x y x), where x is of length one and (= y "") rewrites to a conjunction of equalities of the form (= y_i "") where y_i is some term. The function responsible for collecting the terms y_i from this conjunction, collectEmptyEqs(), returns a bool and a vector of Nodes. The bool indicates whether all equalities in the conjunction were of the form (= y_i ""). The rewrite RPL_X_Y_X_SIMP only applies if this is true. However, collectEmptyEqs() had a bug where it would not return false when all of the conjuncts were equalities but not all of them were equalities with the empty string. This commit fixes collectEmptyEqs() and adds tests.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Commit: 441c53b
OS: Ubuntu 18.04
It also affects cvc4-1.7 and cvc4-1.8, but both can detect the produced invalid model.
The text was updated successfully, but these errors were encountered: