summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2014-02-04 10:03:25 -0600
committerAndrew Reynolds <andrew.j.reynolds@gmail.com>2014-02-04 10:03:25 -0600
commit0ca6b72fa4546f81949fe08f3d8a0eb9251dc7c9 (patch)
tree71d341cddbad77b4b28e3e66bb3d1f2cea6a00d2 /src
parent9c00db91190ce2956efee1c721e6a1f8707a57b1 (diff)
Do not use transitive closure module for cycle detection in datatypes (was bottleneck).
Diffstat (limited to 'src')
-rw-r--r--src/theory/datatypes/theory_datatypes.cpp12
-rw-r--r--src/theory/datatypes/theory_datatypes.h2
2 files changed, 9 insertions, 5 deletions
diff --git a/src/theory/datatypes/theory_datatypes.cpp b/src/theory/datatypes/theory_datatypes.cpp
index a3339f9a9..0c6842222 100644
--- a/src/theory/datatypes/theory_datatypes.cpp
+++ b/src/theory/datatypes/theory_datatypes.cpp
@@ -41,7 +41,7 @@ using namespace CVC4::theory::datatypes;
TheoryDatatypes::TheoryDatatypes(Context* c, UserContext* u, OutputChannel& out, Valuation valuation, const LogicInfo& logicInfo) :
Theory(THEORY_DATATYPES, c, u, out, valuation, logicInfo),
- d_cycle_check(c),
+ //d_cycle_check(c),
d_hasSeenCycle(c, false),
d_infer(c),
d_infer_exp(c),
@@ -612,6 +612,7 @@ void TheoryDatatypes::merge( Node t1, Node t2 ){
oldRep = trep1;
newRep = trep2;
}
+ /*
bool result = d_cycle_check.addEdgeNode( oldRep, newRep );
//d_hasSeenCycle.set( d_hasSeenCycle.get() || result );
Debug("datatypes-cycles") << "DtCyc: Equal " << oldRep << " -> " << newRep << " " << result << " " << d_hasSeenCycle.get() << endl;
@@ -625,6 +626,7 @@ void TheoryDatatypes::merge( Node t1, Node t2 ){
d_cycle_check.debugPrint();
}
}
+ */
}
}
@@ -1043,6 +1045,7 @@ void TheoryDatatypes::collectTerms( Node n ) {
collectTerms( n[i] );
}
if( n.getKind() == APPLY_CONSTRUCTOR ){
+ /*
//we must take into account subterm relation when checking for cycles
for( int i=0; i<(int)n.getNumChildren(); i++ ) {
bool result = d_cycle_check.addEdgeNode( n, n[i] );
@@ -1055,6 +1058,7 @@ void TheoryDatatypes::collectTerms( Node n ) {
//EqcInfo* eqc = getOrMakeEqcInfo( r, true );
//eqc->d_selectors = true;
}
+ */
}else if( n.getKind() == APPLY_SELECTOR ){
//we must also record which selectors exist
Debug("datatypes") << " Found selector " << n << endl;
@@ -1227,9 +1231,9 @@ Node TheoryDatatypes::searchForCycle( Node n, Node on,
for( int i=0; i<(int)ncons.getNumChildren(); i++ ) {
Node cn = searchForCycle( ncons[i], on, visited, explanation, false );
if( cn==on ) {
- if( Debug.isOn("datatypes-cycles") && !d_cycle_check.isConnectedNode( n, ncons[i] ) ){
- Debug("datatypes-cycles") << "Cycle subterm: " << n << " is not -> " << ncons[i] << "!!!!" << std::endl;
- }
+ //if( Debug.isOn("datatypes-cycles") && !d_cycle_check.isConnectedNode( n, ncons[i] ) ){
+ // Debug("datatypes-cycles") << "Cycle subterm: " << n << " is not -> " << ncons[i] << "!!!!" << std::endl;
+ //}
//add explanation for why the constructor is connected
if( n != ncons ) {
Node lit = NodeManager::currentNM()->mkNode( EQUAL, n, ncons );
diff --git a/src/theory/datatypes/theory_datatypes.h b/src/theory/datatypes/theory_datatypes.h
index d094451b8..3a29433f8 100644
--- a/src/theory/datatypes/theory_datatypes.h
+++ b/src/theory/datatypes/theory_datatypes.h
@@ -44,7 +44,7 @@ private:
typedef context::CDHashMap< Node, bool, NodeHashFunction > BoolMap;
/** transitive closure to record equivalence/subterm relation. */
- TransitiveClosureNode d_cycle_check;
+ //TransitiveClosureNode d_cycle_check;
/** has seen cycle */
context::CDO< bool > d_hasSeenCycle;
/** inferences */
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback