@@ -1246,15 +1246,16 @@ namespace seq {
12461246 // len(extract(y, o, l)) = o + l - len(y) if o <= len(y) < o + l
12471247 expr_ref len_y (mk_len (y), m);
12481248 expr_ref z (a.mk_int (0 ), m);
1249- expr_ref y_ge_l (a.mk_ge (len_y, a.mk_add (offs, l)), m);
1250- expr_ref y_ge_o (a.mk_ge (len_y, offs), m);
1251- expr_ref offs_ge_0 (a.mk_ge (offs, z), m);
1252- expr_ref l_ge_0 (a.mk_ge (l, z), m);
1249+ expr_ref y_ge_l = mk_ge (a.mk_sub (len_y, a.mk_add (offs, l)), 0 );
1250+ expr_ref y_ge_o = mk_ge (a.mk_sub (len_y, offs), 0 );
1251+ expr_ref offs_ge_0 = mk_ge (offs, 0 );
1252+ expr_ref l_ge_0 = mk_ge (l, 0 );
1253+
12531254 add_clause (~offs_ge_0, ~l_ge_0, ~y_ge_l, mk_eq (n, l));
12541255 add_clause (offs_ge_0, mk_eq (n, z));
12551256 add_clause (l_ge_0, mk_eq (n, z));
12561257 add_clause (y_ge_o, mk_eq (n, z));
1257- add_clause (~y_ge_o, y_ge_l, mk_eq (n, a.mk_sub (a.mk_add (offs, l), len_y)));
1258+ add_clause (~y_ge_o, y_ge_l, mk_eq (n, a.mk_sub (a.mk_add (offs, l), len_y)));
12581259 }
12591260 else if (seq.str .is_unit (x) ||
12601261 seq.str .is_empty (x) ||
0 commit comments