Graph explorer

Tabled Typeclass Resolution

Typeclasses provide an elegant and effective way of managing ad-hoc polymorphism in both programming languages and interactive proof assistants. However, the increasingly sophisticated uses of typeclasses within proof assistants, especially within Lean's burgeoning mathematics library, mathlib, have elevated once-theoretical limitations of existing typeclass resolution procedures into major impediments to ongoing progress. The two most devastating limitations of existing procedures are exponential running times in the presence of diamonds and divergence in the presence of cycles. We present a new procedure, tabled typeclass resolution, that solves both problems by tabling, which is a generalization of memoizing originally introduced to address similar limitations of early logic programming systems. We have implemented our procedure for the upcoming version (v4) of Lean, and have confirmed empirically that our implementation is exponentially faster than existing systems in the presence of diamonds. Although tabling is notoriously difficult to implement, our procedure is notably lightweight and could easily be implemented in other systems. We hope our new procedure facilitates ev

6 nodes6 linksoverview previewTabled Typeclass Resolution
6 nodes6 links
Tabled Typeclass Resolution6 visible / 6 total nodes / 9 links
Related contextCo-authorshipCo-authorshipCo-authorshipAuthorshipAuthorshipAuthorshipTopic signalTopic signalWTabled Typeclass Resolutionpreprint / 2020ADaniel SelsamResearcherASebastian UllrichResearcherALeonardo de MouraResearcherTLogic in Computer Science2208 worksTProgramming Languages1239 works
PaperSignal 105 links

Tabled Typeclass Resolution

preprint / 2020

Open