in orient, generalize type vars and clear scope between every rule
in type inference, for symbols with arity=0, use the
default type; for other symbols use a function type with fresh vars.
This allows to generalize in the presence of undeclared constants