{
curr = d_curr_sols.size() == 1
? d_curr_sols[0]
- : nm->mkNode(d_isStrong ? AND : OR, d_curr_sols);
+ : nm->mkNode(d_isStrong ? OR : AND, d_curr_sols);
Node imp = nm->mkNode(AND, basen.negate(), curr);
Trace("sygus-sol-implied")
- << " implies: check subsumed " << imp << "..." << std::endl;
+ << " implies: check subsumed (strong=" << d_isStrong << ") " << imp
+ << "..." << std::endl;
// check the satisfiability query
Result r = doCheck(imp);
Trace("sygus-sol-implied") << " implies: ...got : " << r << std::endl;
regress1/strings/type002.smt2
regress1/strings/type003.smt2
regress1/strings/username_checker_min.smt2
+ regress1/sygus-abduct-ex1-grammar.smt2
regress1/sygus-abduct-test.smt2
regress1/sygus-abduct-test-user.smt2
regress1/sygus/VC22_a.sy
--- /dev/null
+; COMMAND-LINE: --produce-abducts --sygus-stream --sygus-abort-size=3
+; EXPECT: (error "Maximum term size (3) for enumerative SyGuS exceeded.")
+; SCRUBBER: sed -e 's/.*(>= j (+ 1 1))/SPURIOUS/; s/(define-fun.*//; /^$/d'
+; EXIT: 1
+
+(set-logic QF_LIA)
+(set-option :produce-abducts true)
+
+(declare-fun n () Int)
+(declare-fun m () Int)
+(declare-fun i () Int)
+(declare-fun j () Int)
+
+(assert (and (>= n 0) (>= m 0)))
+(assert (< n i))
+(assert (< (+ i j) m))
+
+; This test ensures that (>= j (+ 1 1)) is not printed as a solution,
+; since it is spurious: (>= j 0) is a stronger solution and will be enumerated
+; first.
+(get-abduct A
+ (not (<= n m))
+ ((GA Bool) (GI Int))
+ (
+ (GA Bool ((>= GI GI)))
+ (GI Int ((+ GI GI) (- GI) i j 0 1))
+ )
+)