Previously we were treating constructor/selector/tester symbols as arguments to the abduct-to-synthesize.
for (const Node& s : symset)
{
TypeNode tn = s.getType();
+ if (tn.isConstructor() || tn.isSelector() || tn.isTester())
+ {
+ // datatype symbols should be considered interpreted symbols here, not
+ // (higher-order) variables.
+ continue;
+ }
// Notice that we allow for non-first class (e.g. function) variables here.
// This is applicable to the case where we are doing get-abduct in a logic
// with UF.
# Regression level 1 tests
set(regress_1_tests
+ regress1/abduct-dt.smt2
regress1/arith/arith-int-004.cvc
regress1/arith/arith-int-011.cvc
regress1/arith/arith-int-012.cvc
--- /dev/null
+; COMMAND-LINE: --produce-abducts
+; SCRUBBER: grep -v -E '(\(define-fun)'
+; EXIT: 0
+(set-logic ALL)
+(declare-datatypes ((List 0)) (((nil) (cons (head Int) (tail List)))))
+(declare-fun x () List)
+(assert (distinct x nil))
+(get-abduct A (= x (cons (head x) (tail x))))