Branch data Line data Source code
1 : : /****************************************************************************** 2 : : * Top contributors (to current version): 3 : : * Andrew Reynolds 4 : : * 5 : : * This file is part of the cvc5 project. 6 : : * 7 : : * Copyright (c) 2009-2024 by the authors listed in the file AUTHORS 8 : : * in the top-level source directory and their institutional affiliations. 9 : : * All rights reserved. See the file COPYING in the top-level source 10 : : * directory for licensing information. 11 : : * **************************************************************************** 12 : : * 13 : : * Synthesis finder 14 : : */ 15 : : 16 : : #include "cvc5_private.h" 17 : : 18 : : #ifndef CVC5__THEORY__QUANTIFIERS__SYNTH_FINDER_H 19 : : #define CVC5__THEORY__QUANTIFIERS__SYNTH_FINDER_H 20 : : 21 : : #include <cvc5/cvc5_types.h> 22 : : 23 : : #include "smt/env_obj.h" 24 : : 25 : : namespace cvc5::internal { 26 : : 27 : : class SygusTermEnumerator; 28 : : 29 : : namespace theory { 30 : : namespace quantifiers { 31 : : 32 : : class ExprMiner; 33 : : class ExprMinerId; 34 : : class SygusEnumeratorCallback; 35 : : class CandidateRewriteDatabase; 36 : : class QueryGenerator; 37 : : class RewriteVerifier; 38 : : class SygusSampler; 39 : : 40 : : /** 41 : : * Algorithms for finding terms from sygus enumeration. This can be 42 : : * seen as a wrapper around a (fast) sygus enumerator 43 : : */ 44 : : class SynthFinder : protected EnvObj 45 : : { 46 : : public: 47 : : SynthFinder(Env& env); 48 : 174 : ~SynthFinder() {} 49 : : /** 50 : : * Initialize find synth for the given target and provided grammar. 51 : : */ 52 : : void initialize(modes::FindSynthTarget fst, const TypeNode& gtn); 53 : : /** 54 : : * Increment the enumerator of this class, returns false if the enumerator 55 : : * is finished generating values. 56 : : */ 57 : : bool increment(); 58 : : /** 59 : : * Get the current found term based on the enumeration, or null if none 60 : : * is available. 61 : : */ 62 : : Node getCurrent(); 63 : : 64 : : private: 65 : : /** Initialize find synthesis target */ 66 : : void initializeInternal(modes::FindSynthTarget fst, const TypeNode& gtn); 67 : : /** Run find synthesis target */ 68 : : Node runNext(const Node& n, modes::FindSynthTarget fst); 69 : : /** An identity expression miner */ 70 : : std::unique_ptr<ExprMinerId> d_eid; 71 : : /** The enumerator callback */ 72 : : std::unique_ptr<SygusEnumeratorCallback> d_ecb; 73 : : /** candidate rewrite database */ 74 : : std::unique_ptr<CandidateRewriteDatabase> d_crd; 75 : : /** The query generator we are using */ 76 : : std::unique_ptr<QueryGenerator> d_qg; 77 : : /** Rewrite verifier */ 78 : : std::unique_ptr<RewriteVerifier> d_rrv; 79 : : /** sygus sampler object */ 80 : : std::unique_ptr<SygusSampler> d_sampler; 81 : : /** The enumerator */ 82 : : std::unique_ptr<SygusTermEnumerator> d_enum; 83 : : /** The active expression miner */ 84 : : ExprMiner* d_current; 85 : : /** The current target we are given as input */ 86 : : modes::FindSynthTarget d_fst; 87 : : /** The current target we are using */ 88 : : modes::FindSynthTarget d_fstu; 89 : : /** The current buffer of terms returned by expression mining */ 90 : : std::vector<Node> d_buffer; 91 : : /** The index in the buffer that is next to process */ 92 : : size_t d_bufferIndex; 93 : : }; 94 : : 95 : : } // namespace quantifiers 96 : : } // namespace theory 97 : : } // namespace cvc5::internal 98 : : 99 : : #endif /* CVC5__THEORY__QUANTIFIERS__SYNTH_FINDER_H */