Skip to main content
    • Aa
    • Aa

A comprehensible guide to a new unifier for CIC including universe polymorphism and overloading*


Unification is a core component of every proof assistant or programming language featuring dependent types. In many cases, it must deal with higher order problems up to conversion. Since unification in such conditions is undecidable, unification algorithms may include several heuristics to solve common problems. However, when the stack of heuristics grows large, the result and complexity of the algorithm can become unpredictable. Our contributions are twofold: (1) We present a full description of a new unification algorithm for the Calculus of Inductive Constructions (the base logic of COQ), building it up from a basic calculus to the full Calculus of Inductive Constructions as it is implemented in COQ, including universe polymorphism, canonical structures (the overloading mechanism baked into COQ's unification), and a small set of useful heuristics. (2) We implemented our algorithm, and tested it on several libraries, providing evidence that the selected set of heuristics suffices for large developments.

Hide All

This research was partially supported by EU 7FP grant agreement 295261 (MEALS).

Linked references
Hide All

This list contains references from the content that can be linked to their source. For a full set of references and notes please see the PDF or HTML where available.

F. Baader & T. Nipkow (1998) Term Rewriting and All That. New York, NY, USA: Cambridge University Press.

M. A. Bender , J. T. Fineman , S. Gilbert & R. E. Tarjan (2015) A new approach to incremental cycle detection and related problems. ACM Trans. Algorithms 12 (2), 14:114:22.

E. Brady (2013) Idris, a general-purpose dependently typed programming language: Design and implementation. J. Funct. Program. (JFP) 23, pp. 552593.

I. Cervesato & F. Pfenning (2003) A linear spine calculus. J. Log. Comput. 13 (5), 639688.

C. Dunchev , F. Guidi , C. Sacerdoti Coen & E. Tassi (2015) Elpi: Fast, embeddable, λprolog interpreter. In Logic for Programming, Artificial Intelligence, and Reasoning, M. Davis , A. Fehnker , A. McIver & A. Voronkov (eds), Lecture Notes in Computer Science, vol. 9450. Berlin, Heidelberg: Springer, pp. 460468.

G. Gonthier , B. Ziliani , A. Nanevski & D. Dreyer (2013a) How to make ad hoc proof automation less ad hoc. J. Funct. Program. (JFP) 23 (04), 357401.

R. Harper & R. Pollack (1991) Type checking with universes. Theor. Comput. Sci. 89 (1), 107136.

K. Knight (1989) Unification: A multidisciplinary survey. ACM Comput. Surv. 21 (1), 93124.

A. Nanevski , F. Pfenning & B. Pientka (2008) Contextual modal type theory. ACM Trans. Comput. Logic 9 (3), pp. 23:123:49.

L. C. Paulson (1985) Verifying the unification algorithm in lcf. Sci. Comput. Program. 5 (2), 143169.

J. Reed (2009) Higher-order constraint simplification in dependent type theory. In Proceedings of the Fourth International Workshop on Logical Frameworks and Meta-Languages: Theory and Practice (LFMTP). New York, NY, USA: ACM, pp. 4956.

J. A. Robinson (1965) A machine-oriented logic based on the resolution principle. J. ACM (JACM) 12 (1), 2341.

P. Wadler & S. Blott (1989) How to make ad-hoc polymorphism less ad hoc. In Proceedings of the 16th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. New York, NY, USA: ACM, pp. 60–76.

B. Ziliani , D. Dreyer , N. R. Krishnaswami , A. Nanevski & V. Vafeiadis (2013) Mtac: A monad for typed tactic programming in Coq. In Proceedings of the 18th ACM SIGPLAN International Conference on Functional Programming (ICFP), New York, NY, USA: ACM, pp. 87100.

Recommend this journal

Email your librarian or administrator to recommend adding this journal to your organisation's collection.

Journal of Functional Programming
  • ISSN: 0956-7968
  • EISSN: 1469-7653
  • URL: /core/journals/journal-of-functional-programming
Please enter your name
Please enter a valid email address
Who would you like to send this to? *


Full text views

Total number of HTML views: 0
Total number of PDF views: 24 *
Loading metrics...

Abstract views

Total abstract views: 132 *
Loading metrics...

* Views captured on Cambridge Core between 7th February 2017 - 24th June 2017. This data will be updated every 24 hours.