const CVC4::Datatype& dt = (*i).getDatatype();
// ensure it's well-founded (the check is done here because
// that's how it is in CVC3)
- CompatCheckArgument(!dt.isWellFounded(), "datatype is not well-founded");
+ CompatCheckArgument(dt.isWellFounded(), "datatype is not well-founded");
for(CVC4::Datatype::const_iterator j = dt.begin(); j != dt.end(); ++j) {
// For each constructor, register its name and its selectors names.
CompatCheckArgument(
for( unsigned i=0; i<datatypes.size(); i++ ){
Debug("parser-sygus") << " " << i << " : " << datatypes[i].getName() << std::endl;
}
- seq = new CommandSequence();
std::vector<DatatypeType> datatypeTypes = PARSER_STATE->mkMutualDatatypeTypes(datatypes);
seq->addCommand(new DatatypeDeclarationCommand(datatypeTypes));
std::map<DatatypeType, Expr> evals;
}
+SygusSymBreak::~SygusSymBreak() {
+ for(std::map< Node, ProgSearch* >::iterator i = d_prog_search.begin(), iend = d_prog_search.end();
+ i != iend; ++i){
+ ProgSearch* current = (*i).second;
+ if(current != NULL){
+ delete current;
+ }
+ }
+}
+
void SygusSymBreak::addTester( int tindex, Node n, Node exp ) {
if( options::sygusNormalFormGlobal() ){
Node a = getAnchor( n );
bool isGenericRedundant( TypeNode tn, Node g, bool active = true );
public:
SygusSplit( quantifiers::TermDbSygus * tds ) : d_tds( tds ){}
+ ~SygusSplit(){}
/** get sygus splits */
void getSygusSplits( Node n, const Datatype& dt, std::vector< Node >& splits, std::vector< Node >& lemmas );
};
d_parent( p ), d_anchor( a ), d_testers( c ), d_watched_terms( c ), d_watched_count( c ), d_prog_depth( c, 0 ) {
d_anchor_type = d_anchor.getType();
}
+ ~ProgSearch(){}
Node d_anchor;
NodeMap d_testers;
IntMap d_watched_terms;
Node getSeparationTemplate( TypeNode tn, Node rep_prog, Node anc_var, int& status );
public:
SygusSymBreak( quantifiers::TermDbSygus * tds, context::Context* c );
+ ~SygusSymBreak();
/** add tester */
void addTester( int tindex, Node n, Node exp );
/** lemmas we have generated */
d_is_computed = false;
}
+RelevantDomain::~RelevantDomain() {
+ for( std::map< Node, std::map< int, RDomain * > >::iterator itr = d_rel_doms.begin(); itr != d_rel_doms.end(); ++itr ){
+ for( std::map< int, RDomain * >::iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2 ){
+ RDomain * current = (*itr2).second;
+ Assert( current != NULL );
+ delete current;
+ }
+ }
+}
+
RelevantDomain::RDomain * RelevantDomain::getRDomain( Node n, int i, bool getParent ) {
if( d_rel_doms.find( n )==d_rel_doms.end() || d_rel_doms[n].find( i )==d_rel_doms[n].end() ){
d_rel_doms[n][i] = new RDomain;
void computeRelevantDomainLit( Node q, bool hasPol, bool pol, Node n );
public:
RelevantDomain( QuantifiersEngine* qe, FirstOrderModel* m );
- virtual ~RelevantDomain(){}
+ virtual ~RelevantDomain();
/* reset */
bool reset( Theory::Effort e );
/** identify */
Node b_lbl = getBaseLabel( refType );
Node s_atom_new = NodeManager::currentNM()->mkNode( kind::SEP_LABEL, s_atom, b_lbl );
Node lem;
+ Trace("sep-lemma-debug") << "...polarity is " << polarity << std::endl;
if( polarity ){
lem = NodeManager::currentNM()->mkNode( kind::OR, s_atom.negate(), s_atom_new );
}else{