// (likewise, when bitwidth==5, then +15 is the maximum allowed integer, and we want to allow 0-16 without throwing an exception)
if (a instanceof ExprConstant && ((ExprConstant)a).op==ExprConstant.Op.NUMBER && ((ExprConstant)a).num()==0)
if (b instanceof ExprConstant && ((ExprConstant)b).op==ExprConstant.Op.NUMBER && ((ExprConstant)b).num()==max+1)
return IntConstant.constant(min);
obj=visitThis(a);
if (obj instanceof IntExpression) { i=(IntExpression)obj; return i.minus(cint(b));}
s=(Expression)obj; return s.difference(cset(b));
case INTERSECT:
s=cset(a); return s.intersection(cset(b));
case ANY_ARROW_SOME: case ANY_ARROW_ONE: case ANY_ARROW_LONE:
case SOME_ARROW_ANY: case SOME_ARROW_SOME: case SOME_ARROW_ONE: case SOME_ARROW_LONE: