/* Let d = dst and s = src dst is replaced by |s| dst - sgn(s)d src  */
void isl_seq_elim(isl_int *dst, isl_int *src, unsigned pos, unsigned len, isl_int *m)
/* Let d = dst and s = src dst is replaced by |s| dst - sgn(s)d src  */
void isl_seq_elim(isl_int *dst, isl_int *src, unsigned pos, unsigned len, isl_int *m)
{
	isl_int a;
	isl_int b;
	if (isl_int_is_zero(dst[pos]))
		return;
	isl_int_init(a);
	isl_int_init(b);
	isl_int_gcd(a, src[pos], dst[pos]);
	isl_int_divexact(b, dst[pos], a);
	if (isl_int_is_pos(src[pos]))
		isl_int_neg(b, b);
	isl_int_divexact(a, src[pos], a);
	isl_int_abs(a, a);
	isl_seq_combine(dst, a, dst, b, src, len);
	if (m)
		isl_int_mul(*m, *m, a);
	isl_int_clear(a);
	isl_int_clear(b);
}