transitive closure: project out parameters when any constraints are impure