Fixes #6661. The option `--strings-inm` could be used to ignore negative
membership constraints. However, this option made the string solver
model-unsound or produced incorrect models if the user provided a
benchmark that actually contained negative membership constraints. The
solver did not check for negative membership constraints and did not
warn the user about them. Because the option is not really being used,
this commit removes it.
default = "false"
help = "strings eager check"
-[[option]]
- name = "stringIgnNegMembership"
- category = "regular"
- long = "strings-inm"
- type = "bool"
- default = "false"
- help = "internal for strings: ignore negative membership constraints (fragment checking is needed, left to users for now)"
-
[[option]]
name = "stringLazyPreproc"
category = "regular"
{
for (const Node& m : mr.second)
{
- bool polarity = m.getKind() != NOT;
- if (polarity || !options::stringIgnNegMembership())
- {
- allMems[m] = mr.first;
- }
+ allMems[m] = mr.first;
}
}
(set-logic QF_S)
(set-info :status sat)
(set-option :strings-exp true)
-; this option requires user to check whether the constraint is in the fragment
-; currently we do not provide only positive membership constraint checking
-; if users use this option but the constraint is not in this fragment, the result will fail
-(set-option :strings-inm true)
(declare-fun x () String)
(declare-fun y () String)