If we combine finite model finding and higher-order, then we could try to find a model find operators whose kind was BOUND_VARIABLE.
void FirstOrderModelFmc::processInitializeModelForTerm(Node n) {
if( n.getKind()==APPLY_UF ){
- if( d_models.find(n.getOperator())==d_models.end()) {
- d_models[n.getOperator()] = new Def;
+ // cannot be a bound variable
+ Node op = n.getOperator();
+ if (op.getKind() != BOUND_VARIABLE)
+ {
+ if (d_models.find(op) == d_models.end())
+ {
+ d_models[op] = new Def;
+ }
}
}
}
regress1/sygus/issue3839-cond-rewrite.smt2
regress1/sygus/issue3944-div-rewrite.smt2
regress1/sygus/issue3947-agg-miniscope.smt2
+ regress1/sygus/issue3995-fmf-var-op.smt2
regress1/sygus/issue4009-qep.smt2
regress1/sygus/issue4025-no-rlv-cond.smt2
regress1/sygus/large-const-simp.sy
--- /dev/null
+; EXPECT: unsat
+; COMMAND-LINE: --sygus-inference --fmf-bound --uf-ho --no-bv-div-zero-const
+(set-logic ALL)
+(declare-fun a () (_ BitVec 1))
+(assert (bvsgt (bvsmod a a) #b0))
+(check-sat)