/*===============================*/
/** {@inheritDoc} */
@Override public Object visit(ExprBinary x) throws Err {
Expr a=x.left, b=x.right;
Expression s, s2; IntExpression i; Formula f; Object obj;
switch(x.op) {
case IMPLIES: f=cform(a).not().or(cform(b)); return k2pos(f,x);
case IN: return k2pos(isIn(cset(a),b), x);
case NOT_IN: return k2pos(isIn(cset(a),b).not(), x);
case LT: i=cint(a); f=i.lt(cint(b)); return k2pos(f,x);
case LTE: i=cint(a); f=i.lte(cint(b)); return k2pos(f,x);
case GT: i=cint(a); f=i.gt(cint(b)); return k2pos(f,x);
case GTE: i=cint(a); f=i.gte(cint(b)); return k2pos(f,x);
case NOT_LT: i=cint(a); f=i.lt(cint(b)).not(); return k2pos(f,x);
case NOT_LTE: i=cint(a); f=i.lte(cint(b)).not(); return k2pos(f,x);
case NOT_GT: i=cint(a); f=i.gt(cint(b)).not(); return k2pos(f,x);
case NOT_GTE: i=cint(a); f=i.gte(cint(b)).not(); return k2pos(f,x);
case AND: f=cform(a); f=f.and(cform(b)); return k2pos(f,x);
case OR: f=cform(a); f=f.or(cform(b)); return k2pos(f,x);
case IFF: f=cform(a); f=f.iff(cform(b)); return k2pos(f,x);
case PLUSPLUS: s=cset(a); return s.override(cset(b));
case MUL: i=cint(a); return i.multiply(cint(b));
case DIV: i=cint(a); return i.divide(cint(b));
case REM: i=cint(a); return i.modulo(cint(b));
case SHL: i=cint(a); return i.shl(cint(b));