| 252 | | The substitution step can lead to recursive equalities; i.e., we need to apply an occurs check after each substitution. It is an important property of propagation that we only need to substitute into right-hand sides during finalisation. |
| 253 | | |
| 254 | | After finalisation and zonking all flattening of locals is undone (c.f., note below the flattening code above). |
| | 252 | The substitution step can lead to recursive equalities; i.e., we need to apply an occurs check after each substitution. We need to instantiate all flexibles that arose during flattening of wanteds ''before'' we instantiate any other flexibles. Consider `F delta ~ alpha, F alpha ~ delta`, where `alpha` is a skolem and `delta` a free flexible. We need to produce `F (F delta) ~ delta` (and not `F (F alpha) ~ alpha`). Otherwise, we may wrongly claim to having performed an improvement, which can lead to non-termination of the combined class-family solver. |
| | 253 | |
| | 254 | Note that it is an important property of propagation that we only need to substitute into right-hand sides during finalisation. After finalisation and zonking all flattening of locals is undone (c.f., note below the flattening code above). |