Fix for sygusToBuiltinEval for non-ground composite terms (#5466)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Mon, 23 Nov 2020 16:34:53 +0000 (10:34 -0600)
committerGitHub <noreply@github.com>
Mon, 23 Nov 2020 16:34:53 +0000 (10:34 -0600)
commit2a5a65feac6ce270732f0a4d672e5838f5cd673a
tree93bab28f266da04f92b4e44b1116ddd81b30aa69
parent5aa585b74682a7e92a188548ce582eeb1212e42b
Fix for sygusToBuiltinEval for non-ground composite terms (#5466)

There was a bug in the method for computing the evaluation of a sygus term applied to arguments.

The case that was wrong was for (DT_SYGUS_EVAL t c1 ... cn) where t contained a subterm (op t1 ... tn) where:
(1) (op t1 ... tn) is a non-ground sygus datatype term
(2) op was an operator of the form (lambda ((z T)) (g z xi)) where xi is a variable from the formal argument list of the function to synthesize.
In this case, xi was not getting replaced by ci.

This bug appears when using sygus repair for grammars with composite term that involve variables from the formal argument list of the synth-fun.
src/theory/datatypes/sygus_datatype_utils.cpp
src/theory/datatypes/sygus_datatype_utils.h
src/theory/quantifiers/sygus/sygus_eval_unfold.cpp
src/theory/quantifiers/sygus/sygus_repair_const.cpp