}else{\r
Assert( eq_terms[i].getType()==tn );\r
registerPattern( eq_terms[i], tn );\r
- if( isUniversalLessThan( eq_terms[i], t ) ){\r
+ if( isUniversalLessThan( eq_terms[i], t ) || ( options::conjectureUeeIntro() && d_pattern_fun_sum[t]>=d_pattern_fun_sum[eq_terms[i]] ) ){\r
setUniversalRelevant( eq_terms[i] );\r
assertEq = true;\r
}\r
if( assertEq ){\r
Node exp;\r
d_uequalityEngine.assertEquality( t.eqNode( eq_terms[i] ), true, exp );\r
+ }else{\r
+ Trace("thm-ee-no-add") << "Do not add : " << t << " == " << eq_terms[i] << std::endl;\r
}\r
}\r
}else{\r
\r
\r
Node ConjectureGenerator::getCanonicalTerm( TNode n, std::map< TypeNode, unsigned >& var_count, std::map< TNode, TNode >& subs ) {\r
- Trace("ajr-temp") << "get canonical term " << n << " " << n.getKind() << " " << n.hasOperator() << std::endl;\r
if( n.getKind()==BOUND_VARIABLE ){\r
std::map< TNode, TNode >::iterator it = subs.find( n );\r
if( it==subs.end() ){\r
//check if there is only one feasible equivalence class. if so, don't make pattern any more specific.\r
//unsigned i = s->d_ccand_eqc[0].size()-1;\r
//if( s->d_ccand_eqc[0][i].size()==1 && s->d_ccand_eqc[1][i].empty() ){\r
- // Trace("ajr-temp") << "Apply this!" << std::endl;\r
// d_status = 6;\r
// return getNextTerm( s, depth );\r
//}\r
filter based on model
option conjectureGenGtEnum --conjecture-gen-gt-enum=N int :default 0
number of ground terms to generate for model filtering
+option conjectureUeeIntro --conjecture-gen-uee-intro bool :default false
+ more aggressive merging for universal equality engine, introduces terms
endmodule