let rec tau = function
| App(Arith(Num(q)), []) -> Dom.of_q q
| App(Arith(Multq(q)), [x]) -> Dom.union (Dom.of_q q) (tau x)
| App(Arith(Add), xl) ->
if List.for_all (fun x -> Dom.eq (tau x) Dom.Int) xl then Dom.Int else Dom.Real
| a -> if is_intvar a then Dom.Int else Dom.Real