let dom of_term op al =
  try
    (match op, al with
      | Sym.Num(q), [] -> 
          Dom.of_q q
      | Sym.Multq(q), [a] -> 
          Dom.multq q (of_term a)
      | Sym.Add, [a; b] -> 
          Dom.add (of_term a) (of_term b)
      | Sym.Add, _ -> 
          Dom.addl (List.map of_term al)
      | _ -> 
          Dom.Real)
  with
      Not_found -> Dom.Real