'Return a set of all the free (non-bound) variables.  This includes
both individual and predicate variables, but not constants.
:return: set of ``Variable`` objects'

def free(self):

    return self.visit((lambda e: e.free()), (lambda parts: reduce(operator.or_, parts, set())))
