| `Var(v,_) -> V v\r
| `N _ | `Match _ -> assert false in\r
assert (List.length ps = 0);\r
- let convs = List.rev convs in\r
- let conv = if List.length convs = 1 then aux (List.hd convs :> Num.nf) else List.fold_left (fun x y -> mk_app x (aux (y :> Num.nf))) (V (List.length var_names)) convs in\r
+ let convs = (List.rev convs :> Num.nf list) in\r
+ let conv = aux\r
+ (if List.length convs = 1\r
+ then List.hd convs\r
+ else `I((List.length var_names, min_int), Listx.from_list convs)) in\r
let var_names = "@" :: var_names in\r
let div = match div with\r
| Some div -> aux (div :> Num.nf)\r