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))