type = "unsigned long"
help = "timeout (in milliseconds) for satisfiability checks in expression miners"
+[[option]]
+ name = "sygusExprMinerCheckUseExport"
+ category = "expert"
+ long = "sygus-expr-miner-check-use-export"
+ type = "bool"
+ default = "true"
+ help = "export expressions to a different ExprManager with different options for satisfiability checks in expression miners"
+
# CEGQI applied to general quantified formulas
[[option]]
<< endl;
options::bvLazyRewriteExtf.set(false);
}
+
+ if (!options::sygusExprMinerCheckUseExport())
+ {
+ if (options::sygusExprMinerCheckTimeout.wasSetByUser())
+ {
+ throw OptionException(
+ "--sygus-expr-miner-check-timeout=N requires "
+ "--sygus-expr-miner-check-use-export");
+ }
+ if (options::sygusRewSynthInput())
+ {
+ throw OptionException(
+ "--sygus-rr-synth-input requires "
+ "--sygus-expr-miner-check-use-export");
+ }
+ }
}
void SmtEngine::setProblemExtended(bool value)
// check is ground.
Node squery = convertToSkolem(query);
NodeManager* nm = NodeManager::currentNM();
- if (options::sygusExprMinerCheckTimeout.wasSetByUser()
- || options::sygusRewSynthInput())
+ if (options::sygusExprMinerCheckUseExport())
{
// To support a separate timeout for the subsolver, we need to create
// a separate ExprManager with its own options. This requires that
checker->setTimeLimit(options::sygusExprMinerCheckTimeout(), true);
checker->setLogic(smt::currentSmtEngine()->getLogicInfo());
checker->setOption("sygus-rr-synth-input", false);
+ checker->setOption("input-language", "smt2");
Expr equery = squery.toExpr().exportTo(&em, varMap);
checker->assertFormula(equery);
}
regress1/nl/dist-big.smt2
regress1/nl/div-mod-partial.smt2
regress1/nl/dumortier_llibre_artes_ex_5_13.transcendental.k2.smt2
- regress1/nl/exp-approx.smt2
regress1/nl/exp-4.5-lt.smt2
+ regress1/nl/exp-approx.smt2
regress1/nl/exp1-lb.smt2
regress1/nl/exp_monotone.smt2
regress1/nl/factor_agg_s.smt2
regress1/rr-verify/bool-crci.sy
regress1/rr-verify/bv-term-32.sy
regress1/rr-verify/bv-term.sy
+ regress1/rr-verify/fp-arith.sy
+ regress1/rr-verify/fp-bool.sy
regress1/rr-verify/regex.sy
regress1/rr-verify/string-term.sy
regress1/sep/chain-int.smt2
regress1/rr-verify/bool-crci.sy \
regress1/rr-verify/bv-term-32.sy \
regress1/rr-verify/bv-term.sy \
+ regress1/rr-verify/fp-arith.sy \
+ regress1/rr-verify/fp-bool.sy \
regress1/rr-verify/regex.sy \
regress1/rr-verify/string-term.sy \
regress1/sep/chain-int.smt2 \
--- /dev/null
+; COMMAND-LINE: --sygus-rr --sygus-samples=0 --sygus-rr-synth-check --sygus-abort-size=1 --sygus-rr-verify-abort --no-sygus-sym-break
+; EXPECT: (error "Maximum term size (1) for enumerative SyGuS exceeded.")
+; SCRUBBER: grep -v -E '(\(define-fun|\(rewrite)'
+; EXIT: 1
+
+(set-logic FP)
+
+(define-fun fp_plus_zero () Float16 (_ +zero 5 11))
+(define-fun fp_minus_zero () Float16 (_ -zero 5 11))
+(define-fun fp_plus_inf () Float16 (_ +oo 5 11))
+(define-fun fp_minus_inf () Float16 (_ -oo 5 11))
+(define-fun fp_nan () Float16 (_ NaN 5 11))
+
+(synth-fun f ( (r RoundingMode) (x Float16) (y Float16)) Float16
+(
+ (Start Float16 (
+ (fp.abs Start)
+ (fp.neg Start)
+ (fp.add r Start Start)
+ (fp.sub r Start Start)
+ (fp.mul r Start Start)
+ (fp.div r Start Start)
+ (fp.sqrt r Start)
+ (fp.rem Start Start)
+ x
+ y
+ fp_plus_zero
+ fp_minus_zero
+ fp_plus_inf
+ fp_minus_inf
+ fp_nan
+ ))
+))
+(check-synth)
--- /dev/null
+; COMMAND-LINE: --sygus-rr --sygus-samples=0 --sygus-rr-synth-check --sygus-abort-size=1 --sygus-rr-verify-abort --no-sygus-sym-break
+; EXPECT: (error "Maximum term size (1) for enumerative SyGuS exceeded.")
+; SCRUBBER: grep -v -E '(\(define-fun|\(rewrite)'
+; EXIT: 1
+
+(set-logic FP)
+
+(define-fun fp_plus_zero () Float16 (_ +zero 5 11))
+(define-fun fp_minus_zero () Float16 (_ -zero 5 11))
+(define-fun fp_plus_inf () Float16 (_ +oo 5 11))
+(define-fun fp_minus_inf () Float16 (_ -oo 5 11))
+(define-fun fp_nan () Float16 (_ NaN 5 11))
+
+(synth-fun f ( (r RoundingMode) (x Float16) (y Float16)) Bool
+(
+ (Start Bool (
+ (fp.isNaN FpOp)
+ (fp.isNegative FpOp)
+ (fp.isPositive FpOp)
+ (fp.isZero FpOp)
+ (fp.isSubnormal FpOp)
+ (fp.isNormal FpOp)
+ (and Start Start)
+ (or Start Start)
+ (not Start Start)
+ true
+ false
+ ))
+
+ (FpOp Float16 (
+ (fp.abs FpOp)
+ (fp.neg FpOp)
+ (fp.add r FpOp FpOp)
+ (fp.sub r FpOp FpOp)
+ (fp.mul r FpOp FpOp)
+ (fp.div r FpOp FpOp)
+ (fp.sqrt r FpOp)
+ (fp.rem FpOp FpOp)
+ x
+ y
+ fp_plus_zero
+ fp_minus_zero
+ fp_plus_inf
+ fp_minus_inf
+ fp_nan
+ (ite Start FpOp FpOp)
+ ))
+
+))
+(check-synth)