(bvsrem s t) abbreviates (let (?msb_s (extract[|m-1|:|m-1|] s)) (let (?msb_t (extract[|m-1|:|m-1|] t)) (ite (and (= ?msb_s bit0) (= ?msb_t bit0)) (bvurem s t) (ite (and (= ?msb_s bit1) (= ?msb_t bit0)) (bvneg (bvurem (bvneg s) t)) (ite (and (= ?msb_s bit0) (= ?msb_t bit1)) (bvurem s (bvneg t)) (bvneg (bvurem (bvneg s) (bvneg t))))))))