}
return mkForAll( newArgs, body[1], qa );
}else if( body.getKind()==AND ){
- if( options::miniscopeQuant() ){
- //break apart
+ // aggressive miniscoping implies that structural miniscoping should
+ // be applied first
+ if (options::miniscopeQuant() || options::aggressiveMiniscopeQuant())
+ {
+ // break apart
NodeBuilder<> t(kind::AND);
for( unsigned i=0; i<body.getNumChildren(); i++ ){
t << computeMiniscoping( args, body[i], qa );
if( options::quantSplit() ){
//splitting subsumes free variable miniscoping, apply it with higher priority
return computeSplit( args, body, qa );
- }else if( options::miniscopeQuantFreeVar() ){
+ }
+ else if (options::miniscopeQuantFreeVar()
+ || options::aggressiveMiniscopeQuant())
+ {
+ // aggressive miniscoping implies that free variable miniscoping should
+ // be applied first
Node newBody = body;
NodeBuilder<> body_split(kind::OR);
NodeBuilder<> tb(kind::OR);
regress1/sygus/issue3802-default-consts.sy
regress1/sygus/issue3839-cond-rewrite.smt2
regress1/sygus/issue3944-div-rewrite.smt2
+ regress1/sygus/issue3947-agg-miniscope.smt2
regress1/sygus/large-const-simp.sy
regress1/sygus/let-bug-simp.sy
regress1/sygus/list-head-x.sy
--- /dev/null
+; EXPECT: sat
+; COMMAND-LINE: --sygus-inference
+(set-logic ALL)
+(set-option :ag-miniscope-quant true)
+(set-option :sygus-inference true)
+(declare-fun a () Real)
+(declare-fun b () Real)
+(assert (forall ((c Real)) (or (< c a) (< 0 b))))
+(check-sat)