Subtype Inference by Example

by azhenleyon 6/10/2025, 12:04 AMwith 10 comments

by tompon 6/13/2025, 9:02 PM

I recommend anyone interested in this to check the work of Lionel Parreaux, in particular SimpleSub, which is equivalent to MLsub but substantially simpler.

As it turns out, Dolan's main contribution wasn't the algorithm (which is overly complex, as proven by Parreaux's simpler implementation), but the type language - the insight that most subtyping constraints can be removed and/or simplified to simple union and intersection types, assuming certain simplifications of the type system (namely: positive/negative types, and distributivity of union/intersection over function types).

https://lptk.github.io/programming/2020/03/26/demystifying-m...

https://dl.acm.org/doi/10.1145/3409006

Parreaux is continuing to work on this problem, and has since removed one of the assumptions/simplifications (positive/negative types) in his work on MLstruct

https://github.com/hkust-taco/mlstruct

by juancnon 6/13/2025, 7:14 PM

  ...but traditional static type systems require large amounts of manual annotation by programmers, making them difficult to work with...
I like to have type annotations, yeah, they can look ugly, but I much rather know what something is rather than have to infer it by myself.

Makes reading code a lot easier if you know what you're doing.

by abeppuon 6/13/2025, 8:19 PM

I'm dimly aware that the Hindley-Milner system is closely related to System F and that System F has many notable exceptions on of the most significant of which is System F<: (System F-sub), which I thought was the subject of a number of inference papers in the 80s and 90s.

What's the difference between that work decades ago and the work from Stephen Dolan in 2016 cited in this post? Like, what's the thing that is demonstrated now that we didn't have like 30 years ago?

https://en.wikipedia.org/wiki/System_F#System_F%3C: