summaryrefslogtreecommitdiff
path: root/src/theory/uf
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2013-03-06 10:46:07 -0600
committerAndrew Reynolds <andrew.j.reynolds@gmail.com>2013-03-06 10:46:19 -0600
commit44d9a7c29f565dbba0baea3f9df23d6d3e5bd74f (patch)
treef9a0b47038e393553a2d6a315138ae8b128915a1 /src/theory/uf
parent66b99ac64a6920787905948315e74ca1c5b3e90b (diff)
fixed two bugs for the new E-matching implementation, added aggressive miniscoping option --ag-miniscope-quant, minor cleanup
Diffstat (limited to 'src/theory/uf')
-rw-r--r--src/theory/uf/theory_uf_strong_solver.cpp49
1 files changed, 24 insertions, 25 deletions
diff --git a/src/theory/uf/theory_uf_strong_solver.cpp b/src/theory/uf/theory_uf_strong_solver.cpp
index 3e31faedb..25cb8b66c 100644
--- a/src/theory/uf/theory_uf_strong_solver.cpp
+++ b/src/theory/uf/theory_uf_strong_solver.cpp
@@ -637,38 +637,37 @@ void StrongSolverTheoryUF::SortModel::check( Theory::Effort level, OutputChannel
if( !addedLemma ){
Trace("uf-ss-debug") << "No splits added. " << d_cardinality << std::endl;
Trace("uf-ss-si") << "Must combine region" << std::endl;
- if( true || !options::ufssColoringSat() ){
- bool recheck = false;
- //naive strategy, force region combination involving the first valid region
- if( options::sortInference()){
- std::map< int, int > sortsFound;
- for( int i=0; i<(int)d_regions_index; i++ ){
- if( d_regions[i]->d_valid ){
- Node op = d_regions[i]->d_nodes.begin()->first;
- int sort_id = d_thss->getTheory()->getQuantifiersEngine()->getTheoryEngine()->getSortInference()->getSortId(op) ;
- if( sortsFound.find( sort_id )!=sortsFound.end() ){
- combineRegions( sortsFound[sort_id], i );
- recheck = true;
- break;
- }else{
- sortsFound[sort_id] = i;
- }
- }
- }
- }
- if( !recheck ) {
- for( int i=0; i<(int)d_regions_index; i++ ){
- if( d_regions[i]->d_valid ){
- forceCombineRegion( i, false );
+ bool recheck = false;
+ if( options::sortInference()){
+ //if sort inference is enabled, search for regions with same sort
+ std::map< int, int > sortsFound;
+ for( int i=0; i<(int)d_regions_index; i++ ){
+ if( d_regions[i]->d_valid ){
+ Node op = d_regions[i]->d_nodes.begin()->first;
+ int sort_id = d_thss->getTheory()->getQuantifiersEngine()->getTheoryEngine()->getSortInference()->getSortId(op);
+ if( sortsFound.find( sort_id )!=sortsFound.end() ){
+ combineRegions( sortsFound[sort_id], i );
recheck = true;
break;
+ }else{
+ sortsFound[sort_id] = i;
}
}
}
- if( recheck ){
- check( level, out );
+ }
+ if( !recheck ) {
+ //naive strategy, force region combination involving the first valid region
+ for( int i=0; i<(int)d_regions_index; i++ ){
+ if( d_regions[i]->d_valid ){
+ forceCombineRegion( i, false );
+ recheck = true;
+ break;
+ }
}
}
+ if( recheck ){
+ check( level, out );
+ }
}
}
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback