Ensure exported sygus solutions match grammar (#4270)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Sat, 11 Apr 2020 04:37:43 +0000 (23:37 -0500)
committerGitHub <noreply@github.com>
Sat, 11 Apr 2020 04:37:43 +0000 (23:37 -0500)
commit4e310461b2e41f9ccf1426797b5d8b58e27bc1c7
treef6b6861a47d42b12b3cf776488038358db09a50a
parent04a8bf833bad57329a4e83b3c5aafb7537de885d
Ensure exported sygus solutions match grammar (#4270)

Previously we were doing rewriting/expand definitions during grammar normalization, which overwrote the original sygus operators. The connection to the original grammar was maintained via the SygusPrintCallback utility, which ensured that a sygus term printed in a way that matched the grammar.

We now have several use cases where solutions from SyGuS will be directly exported to the user, including the current use of get-abduct. This means that the terms must match the grammar, and we cannot simply rely on the print callback.

This moves the code to normalize sygus operators to datatypes utils, where the conversion between sygus and builtin terms takes place. This allows a version of this function where isExternal = true, which constructs terms matching the original grammar.

This PR enables the SyGuS API to have an accurate getSynthSolution method. It also will eliminate the need for SygusPrintCallback altogether, once the v1 parser is deleted.
src/expr/dtype_cons.h
src/theory/datatypes/theory_datatypes_utils.cpp
src/theory/datatypes/theory_datatypes_utils.h
src/theory/quantifiers/sygus/sygus_grammar_norm.cpp
src/theory/quantifiers/sygus/sygus_grammar_norm.h
src/theory/quantifiers/sygus/synth_conjecture.cpp
test/regress/CMakeLists.txt
test/regress/regress1/sygus/yoni-true-sol.smt2 [new file with mode: 0644]