diff options
author | ajreynol <reynolds@larapc05.epfl.ch> | 2014-06-03 14:01:01 +0200 |
---|---|---|
committer | ajreynol <reynolds@larapc05.epfl.ch> | 2014-06-03 14:01:08 +0200 |
commit | 6480823e5620b316b4c319453f45f6d7d452e2b1 (patch) | |
tree | c94fbf4956aa983906d99105d7d89906739d6290 /src/theory/quantifiers/term_database.cpp | |
parent | 30e1feed2331bb44338363228fe73e82ab7c7c3d (diff) |
Support E-matching/QCF for Set operators.
Diffstat (limited to 'src/theory/quantifiers/term_database.cpp')
-rw-r--r-- | src/theory/quantifiers/term_database.cpp | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/theory/quantifiers/term_database.cpp b/src/theory/quantifiers/term_database.cpp index 5636e0c5f..9f25b0825 100644 --- a/src/theory/quantifiers/term_database.cpp +++ b/src/theory/quantifiers/term_database.cpp @@ -73,25 +73,21 @@ unsigned TermDb::getNumGroundTerms( Node f ) { Node TermDb::getOperator( Node n ) { //return n.getOperator(); - - if( n.getKind()==SELECT || n.getKind()==STORE ){ + Kind k = n.getKind(); + if( k==SELECT || k==STORE || k==UNION || k==INTERSECTION || k==SUBSET || k==SETMINUS || k==MEMBER || k==SET_SINGLETON ){ //since it is parametric, use a particular one as op - TypeNode tn1 = n[0].getType(); - TypeNode tn2 = n[1].getType(); + TypeNode tn = n[0].getType(); Node op = n.getOperator(); - std::map< Node, std::map< TypeNode, std::map< TypeNode, Node > > >::iterator ito = d_par_op_map.find( op ); + std::map< Node, std::map< TypeNode, Node > >::iterator ito = d_par_op_map.find( op ); if( ito!=d_par_op_map.end() ){ - std::map< TypeNode, std::map< TypeNode, Node > >::iterator it = ito->second.find( tn1 ); + std::map< TypeNode, Node >::iterator it = ito->second.find( tn ); if( it!=ito->second.end() ){ - std::map< TypeNode, Node >::iterator it2 = it->second.find( tn2 ); - if( it2!=it->second.end() ){ - return it2->second; - } + return it->second; } } - d_par_op_map[op][tn1][tn2] = n; + d_par_op_map[op][tn] = n; return n; - }else if( inst::Trigger::isAtomicTrigger( n ) ){ + }else if( inst::Trigger::isAtomicTriggerKind( k ) ){ return n.getOperator(); }else{ return Node::null(); |