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;
}