let split a =
  let (numerator, denumerator) =
    List.partition
      (fun m ->
         let (_, n) = destruct m in
           n >= 0)
      (to_list a)
  in
    (mk_multl numerator, mk_inv (mk_multl denumerator))