@@ -78,9 +78,7 @@ RewriteResponse BagsRewriter::postRewrite(TNode n)
78
78
{
79
79
case Kind::BAG_MAKE: response = rewriteMakeBag (n); break ;
80
80
case Kind::BAG_COUNT: response = rewriteBagCount (n); break ;
81
- case Kind::BAG_DUPLICATE_REMOVAL:
82
- response = rewriteDuplicateRemoval (n);
83
- break ;
81
+ case Kind::BAG_SETOF: response = rewriteSetof (n); break ;
84
82
case Kind::BAG_UNION_MAX: response = rewriteUnionMax (n); break ;
85
83
case Kind::BAG_UNION_DISJOINT: response = rewriteUnionDisjoint (n); break ;
86
84
case Kind::BAG_INTER_MIN: response = rewriteIntersectionMin (n); break ;
@@ -91,9 +89,6 @@ RewriteResponse BagsRewriter::postRewrite(TNode n)
91
89
response = rewriteDifferenceRemove (n);
92
90
break ;
93
91
case Kind::BAG_CARD: response = rewriteCard (n); break ;
94
- case Kind::BAG_IS_SINGLETON: response = rewriteIsSingleton (n); break ;
95
- case Kind::BAG_FROM_SET: response = rewriteFromSet (n); break ;
96
- case Kind::BAG_TO_SET: response = rewriteToSet (n); break ;
97
92
case Kind::BAG_MAP: response = postRewriteMap (n); break ;
98
93
case Kind::BAG_FILTER: response = postRewriteFilter (n); break ;
99
94
case Kind::BAG_FOLD: response = postRewriteFold (n); break ;
@@ -207,16 +202,16 @@ BagsRewriteResponse BagsRewriter::rewriteBagCount(const TNode& n) const
207
202
return BagsRewriteResponse (n, Rewrite::NONE);
208
203
}
209
204
210
- BagsRewriteResponse BagsRewriter::rewriteDuplicateRemoval (const TNode& n) const
205
+ BagsRewriteResponse BagsRewriter::rewriteSetof (const TNode& n) const
211
206
{
212
- Assert (n.getKind () == Kind::BAG_DUPLICATE_REMOVAL );
207
+ Assert (n.getKind () == Kind::BAG_SETOF );
213
208
if (n[0 ].getKind () == Kind::BAG_MAKE && n[0 ][1 ].isConst ()
214
209
&& n[0 ][1 ].getConst <Rational>().sgn () == 1 )
215
210
{
216
- // (bag.duplicate_removal (bag x n)) = (bag x 1)
211
+ // (bag.setof (bag x n)) = (bag x 1)
217
212
// where n is a positive constant
218
213
Node bag = d_nm->mkNode (Kind::BAG_MAKE, n[0 ][0 ], d_one);
219
- return BagsRewriteResponse (bag, Rewrite::DUPLICATE_REMOVAL_BAG_MAKE );
214
+ return BagsRewriteResponse (bag, Rewrite::SETOF_BAG_MAKE );
220
215
}
221
216
return BagsRewriteResponse (n, Rewrite::NONE);
222
217
}
@@ -472,44 +467,6 @@ BagsRewriteResponse BagsRewriter::rewriteCard(const TNode& n) const
472
467
return BagsRewriteResponse (n, Rewrite::NONE);
473
468
}
474
469
475
- BagsRewriteResponse BagsRewriter::rewriteIsSingleton (const TNode& n) const
476
- {
477
- Assert (n.getKind () == Kind::BAG_IS_SINGLETON);
478
- if (n[0 ].getKind () == Kind::BAG_MAKE)
479
- {
480
- // (bag.is_singleton (bag x c)) = (c == 1)
481
- Node equal = n[0 ][1 ].eqNode (d_one);
482
- return BagsRewriteResponse (equal, Rewrite::IS_SINGLETON_BAG_MAKE);
483
- }
484
- return BagsRewriteResponse (n, Rewrite::NONE);
485
- }
486
-
487
- BagsRewriteResponse BagsRewriter::rewriteFromSet (const TNode& n) const
488
- {
489
- Assert (n.getKind () == Kind::BAG_FROM_SET);
490
- if (n[0 ].getKind () == Kind::SET_SINGLETON)
491
- {
492
- // (bag.from_set (set.singleton x)) = (bag x 1)
493
- Node bag = d_nm->mkNode (Kind::BAG_MAKE, n[0 ][0 ], d_one);
494
- return BagsRewriteResponse (bag, Rewrite::FROM_SINGLETON);
495
- }
496
- return BagsRewriteResponse (n, Rewrite::NONE);
497
- }
498
-
499
- BagsRewriteResponse BagsRewriter::rewriteToSet (const TNode& n) const
500
- {
501
- Assert (n.getKind () == Kind::BAG_TO_SET);
502
- if (n[0 ].getKind () == Kind::BAG_MAKE && n[0 ][1 ].isConst ()
503
- && n[0 ][1 ].getConst <Rational>().sgn () == 1 )
504
- {
505
- // (bag.to_set (bag x n)) = (set.singleton x)
506
- // where n is a positive constant and T is the type of the bag's elements
507
- Node set = d_nm->mkNode (Kind::SET_SINGLETON, n[0 ][0 ]);
508
- return BagsRewriteResponse (set, Rewrite::TO_SINGLETON);
509
- }
510
- return BagsRewriteResponse (n, Rewrite::NONE);
511
- }
512
-
513
470
BagsRewriteResponse BagsRewriter::postRewriteEqual (const TNode& n) const
514
471
{
515
472
Assert (n.getKind () == Kind::EQUAL);
0 commit comments