constraint for recursion