Assert( d_nf.find( eqc )==d_nf.end() );
bool success = true;
+ Node emp_set = getEmptySet(tn);
if( !base.isNull() ){
- Node emp_set = getEmptySet( tn );
for( unsigned j=0; j<comps.size(); j++ ){
//compare if equal
std::vector< Node > c;
Assert( false );
}
}else{
+ // must ensure disequal from empty
+ if (!eqc.isConst() && !ee_areDisequal(eqc, emp_set))
+ {
+ split(eqc.eqNode(emp_set));
+ }
//normal form is this equivalence class
d_nf[eqc].push_back( eqc );
Trace("sets-nf") << "----> N " << eqc << " => { " << eqc << " }" << std::endl;
regress1/sets/fuzz31811.smt2
regress1/sets/insert_invariant_37_2.smt2
regress1/sets/issue2568.smt2
+ regress1/sets/issue2904.smt2
regress1/sets/lemmabug-ListElts317minimized.smt2
regress1/sets/remove_check_free_31_6.smt2
regress1/sets/sets-disequal.smt2
--- /dev/null
+(set-logic ALL_SUPPORTED)\r
+(set-info :status unsat)\r
+\r
+; conjecture set nonempty(~b & ~c)\r
+\r
+(declare-fun n () Int)\r
+(declare-fun f () Int)\r
+(declare-fun m () Int)\r
+\r
+(declare-fun b () (Set Int))\r
+(declare-fun c () (Set Int))\r
+(declare-fun UNIVERALSET () (Set Int))\r
+(assert (subset b UNIVERALSET))\r
+(assert (subset c UNIVERALSET))\r
+\r
+(assert (> n 0))\r
+(assert (= (card UNIVERALSET) n))\r
+(assert (= (card b) m))\r
+(assert (= (card c) (- f m)))\r
+(assert (>= m 0))\r
+(assert (>= f m))\r
+(assert (> n (+ (* 2 f) m)))\r
+\r
+\r
+(assert (>= (card (setminus UNIVERALSET (intersection (setminus UNIVERALSET b) (setminus UNIVERALSET c)))) n))\r
+\r
+(check-sat)\r