Led to some LFSC proof checking failures on strings benchmarks.
// the language containing only the empty string
nullTerm = nm->mkNode(STRING_TO_REGEXP, nm->mkConst(String("")));
break;
+ case REGEXP_UNION:
+ // empty language
+ nullTerm = nm->mkNode(REGEXP_NONE);
+ break;
+ case REGEXP_INTER:
+ // universal language
+ nullTerm = nm->mkNode(REGEXP_STAR, nm->mkNode(REGEXP_ALLCHAR));
+ break;
case BITVECTOR_AND:
nullTerm = theory::bv::utils::mkOnes(tn.getBitVectorSize());
break;
ret = nm->mkNode(ck, children[i], ret);
}
}
+ Trace("lfsc-term-process-debug")
+ << "...return n-ary conv " << ret << std::endl;
return ret;
}
return n;
regress1/strings/idof-neg-index.smt2
regress1/strings/idof-triv.smt2
regress1/strings/ilc-l-nt.smt2
+ regress1/strings/instance2984-null-term.smt2
regress1/strings/instance3303-delta.smt2
regress1/strings/instance7075-delta.smt2
regress1/strings/issue1105.smt2
--- /dev/null
+(set-logic ALL)
+(set-info :status unsat)
+(declare-const X String)
+(assert (not (str.in_re X (re.union (str.to_re "") (re.comp (str.to_re "")) (re.* (str.to_re ""))))))
+(check-sat)