A class for states that do not allow to record elements or dependent sets. In effect this means that no new elements or dependent sets can be added in these states (since the previous state cannot be recorded in a snapshot) On the other hand, these states do allow by default Fresh instances to subsume arbitary types, which are then recorded in their hidden sets.
Add element to hidden set, recording it in elemsMap, return whether this was allowed. By default, recording is allowed but the special state VarState.Separate overrides this.
Add element to hidden set, recording it in elemsMap, return whether this was allowed. By default, recording is allowed but the special state VarState.Separate overrides this.
If root1 and root2 belong to the same binder but have different originalBinders it means that one of the roots was mapped to the binder of the other by a substBinder when comparing two method types. In that case we can unify the two roots1, provided none of the two roots have already been unified themselves. So unification must be 1-1.
If root1 and root2 belong to the same binder but have different originalBinders it means that one of the roots was mapped to the binder of the other by a substBinder when comparing two method types. In that case we can unify the two roots1, provided none of the two roots have already been unified themselves. So unification must be 1-1.
Note, see (**) below: We also allow unifications of results that have different ExprType binders. This is necessary because ExprTypes don't get updated with SubstBindingMaps. It's sound since ExprTypes always appear alone and at the top-level, so there is no problem with confusing results at different levels. See pos-customargs/captures/overrides.scala for a test case.