This is a nice feature! For a toy language project, I did something similar. From the AST, built a DAG of types where each edge is e.g. “is exactly/is-a”. Then start flood-filling the DAG from known types. The trick is that you only push a type “down” when you cannot make any more “up” progress. Push a single one down & retry the “up”s. Repeat.