let simplify_precedence_cstr k k'
    (Precedence  ((c_x, p_x), (c_y, p_y))) =
  let h =
    max (nbones p_x.u + k * nbones p_x.v) (nbones p_y.u + k * nbones p_y.v)
      + lcm (k' * nbones p_x.v) (k' * nbones p_y.v)
  in
  let rec build j cstrs =
    if j <= h then
      let cstr =
        Le ([  1, Iof(c_x, iof p_x j);
              -1, Iof(c_y, iof p_y j); ],
            0)
      in
      build (j + 1) (cstr :: cstrs)
    else cstrs
  in
  List.rev (build 1 [])