Maybe we should avoid narrow and directly create a fresh abstract type symbol every time that's upper-bounded by tp? I didn't think this through fully, but maybe this need to use the "try a regular X or fallback to the X' of something that's guaranteed to be unique" pattern shows that X was not the right solution to begin with.