let get_pureness (term: term) : pureness =
  let vars = ref 0
  and pars = ref 0
  in
  let rec do_get_pureness (term: term) : unit =
    match term with
      | Term.Func func(*(_, terms, _)*) ->
          Array.iter
            do_get_pureness
            func.Term.subterms

      | Term.Var var ->
          if Var.is_universal var then
            vars := !vars + 1
          else
            pars := !pars + 1
            
      | Term.Const _ ->
          ()
  in

    do_get_pureness term;
    {
      vars = !vars;
      pars = !pars;
    }