Leads to free variables in assertions when using `str.<=` whose reduction uses EXISTS not FORALL.
Fixes #5483.
Node retNode = t;
if( t.getNumChildren()==0 ){
retNode = simplify(t, asserts);
- }else if( t.getKind()!=kind::FORALL ){
+ }
+ else if (!t.isClosure())
+ {
bool changed = false;
std::vector< Node > cc;
if( t.getMetaKind() == kind::metakind::PARAMETERIZED ){
regress1/strings/issue5330.smt2
regress1/strings/issue5330_2.smt2
regress1/strings/issue5374-proxy-i.smt2
+ regress1/strings/issue5483-pp-leq.smt2
regress1/strings/kaluza-fl.smt2
regress1/strings/loop002.smt2
regress1/strings/loop003.smt2
--- /dev/null
+; COMMAND-LINE: -i
+; EXPECT: sat
+(set-logic QF_SLIA)
+(declare-fun _substvar_21_ () String)
+(declare-fun _substvar_29_ () String)
+(set-option :strings-lazy-pp false)
+(assert (xor true true true true (str.<= _substvar_21_ _substvar_29_) true true))
+(push 1)
+(check-sat)