diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2018-10-09 16:54:58 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-09 16:54:58 -0500 |
commit | 9168f325706e61bb12fec71cd375647e2102f8d3 (patch) | |
tree | aa5129a48322e43ae0f5faa9ade2decbd7091df0 /src/theory/quantifiers/sygus/synth_conjecture.h | |
parent | 90ffa8b4eb26af9060e57be7fe5d6008717d3ce6 (diff) |
Support for basic actively-generated enumerators (#2606)
Diffstat (limited to 'src/theory/quantifiers/sygus/synth_conjecture.h')
-rw-r--r-- | src/theory/quantifiers/sygus/synth_conjecture.h | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/src/theory/quantifiers/sygus/synth_conjecture.h b/src/theory/quantifiers/sygus/synth_conjecture.h index d5ace4dfe..ef1b4459f 100644 --- a/src/theory/quantifiers/sygus/synth_conjecture.h +++ b/src/theory/quantifiers/sygus/synth_conjecture.h @@ -83,9 +83,19 @@ class SynthConjecture */ void doSingleInvCheck(std::vector<Node>& lems); /** do syntax-guided enumerative check + * * This is step 2(a) of Figure 3 of Reynolds et al CAV 2015. + * + * The method returns true if this conjecture is finished trying solutions + * for the given call to SynthEngine::check. + * + * Notice that we make multiple calls to doCheck on one call to + * SynthEngine::check. For example, if we are using an actively-generated + * enumerator, one enumerated (abstract) term may correspond to multiple + * concrete terms t1, ..., tn to check, where we make up to n calls to doCheck + * when each of t1, ..., tn fails to satisfy the current refinement lemmas. */ - void doCheck(std::vector<Node>& lems); + bool doCheck(std::vector<Node>& lems); /** do refinement * This is step 2(b) of Figure 3 of Reynolds et al CAV 2015. */ @@ -94,7 +104,7 @@ class SynthConjecture /** * Prints the synthesis solution to output stream out. This invokes solution * reconstruction if the conjecture is single invocation. Otherwise, it - * returns the enumer + * returns the solution found by sygus enumeration. */ void printSynthSolution(std::ostream& out); /** get synth solutions @@ -182,6 +192,9 @@ class SynthConjecture /** * Get model values for terms n, store in vector v. This method returns true * if and only if all values added to v are non-null. + * + * It removes terms from n that correspond to "inactive" enumerators, that + * is, enumerators whose values have been exhausted. */ bool getEnumeratedValues(std::vector<Node>& n, std::vector<Node>& v); /** @@ -282,18 +295,6 @@ class SynthConjecture d_cinfo[d_candidates[i]].d_inst.push_back(vs[i]); } } - /** - * This performs the next check of the syntax-guided enumerative check - * (see doCheck above). The method returns true if a new solution was - * considered. - * - * Notice that one call to doCheck may correspond to multiple calls to - * doCheckNext. For example, if we are using an actively-generated enumerator, - * one enumerated (abstract) term may correspond to multiple concrete - * terms t1, ..., tn to check, where we make up to n calls to doCheckNext when - * each of t1, ..., tn fail to satisfy the current refinement lemmas. - */ - bool doCheckNext(std::vector<Node>& lems); /** get synth solutions internal * * This function constructs the body of solutions for all @@ -343,9 +344,15 @@ class SynthConjecture /** * Prints the current synthesis solution to the output stream indicated by * the Options object, send a lemma blocking the current solution to the - * output channel. + * output channel, which we refer to as a "stream exclusion lemma". */ void printAndContinueStream(); + /** + * Whether we have guarded a stream exclusion lemma when using sygusStream. + * This is an optimization that allows us to guard only the first stream + * exclusion lemma. + */ + bool d_guarded_stream_exc; //-------------------------------- end sygus stream /** expression miner managers for each function-to-synthesize * |