|
|
@ -478,12 +478,14 @@ module Sum = struct
|
|
|
|
else Qset.map_counts ~f:(fun _ -> Q.mul const) sum
|
|
|
|
else Qset.map_counts ~f:(fun _ -> Q.mul const) sum
|
|
|
|
|
|
|
|
|
|
|
|
let to_term sum =
|
|
|
|
let to_term sum =
|
|
|
|
match Qset.length sum with
|
|
|
|
match Qset.pop sum with
|
|
|
|
| 0 -> zero
|
|
|
|
| None -> zero
|
|
|
|
| 1 -> (
|
|
|
|
| Some (arg, q, sum') when Qset.is_empty sum' -> (
|
|
|
|
match Qset.min_elt sum with
|
|
|
|
match arg with
|
|
|
|
| Some (Integer _, q) -> rational q
|
|
|
|
| Integer {data} ->
|
|
|
|
| Some (arg, q) when Q.equal Q.one q -> arg
|
|
|
|
assert (Z.equal Z.one data) ;
|
|
|
|
|
|
|
|
rational q
|
|
|
|
|
|
|
|
| _ when Q.equal Q.one q -> arg
|
|
|
|
| _ -> Add sum )
|
|
|
|
| _ -> Add sum )
|
|
|
|
| _ -> Add sum
|
|
|
|
| _ -> Add sum
|
|
|
|
end
|
|
|
|
end
|
|
|
|