Implementing polymorphism in SMT solvers

Based on our experience with the development of Alt-Ergo, we show the small number of modifications needed to bring parametric polymorphism to our SMT solver. The first one occurs in the typing module where unification is now necessary for solving polymorphic constraints over types. The second one consists in extending triggers' definition in order to deal with both term and type variables. Last, the matching module must be modified to account for the instantiation of type variables. We hope that this experience is convincing enough to raise interest for polymorphism in the SMT community.

[1]  Benjamin C. Pierce,et al.  Types and programming languages: the next generation , 2003, 18th Annual IEEE Symposium of Logic in Computer Science, 2003. Proceedings..

[2]  Didier Rémy,et al.  MLF: raising ML to the power of system F , 2003, ACM SIGPLAN Notices.

[3]  Claude Marché,et al.  Multi-prover Verification of C Programs , 2004, ICFEM.

[4]  Cesare Tinelli,et al.  Combined Satisfiability Modulo Parametric Theories , 2007, TACAS.

[5]  Michael Norrish,et al.  Types, bytes, and separation logic , 2007, POPL '07.

[6]  Claude Marché,et al.  The Why/Krakatoa/Caduceus Platform for Deductive Program Verification , 2007, CAV.

[7]  Franz Baader,et al.  Unification theory , 1986, Decis. Support Syst..

[8]  David Detlefs,et al.  Simplify: a theorem prover for program checking , 2005, JACM.

[9]  K. Rustan M. Leino,et al.  Class-local object invariants , 2008, ISEC '08.

[10]  Jean-François Couchot,et al.  Handling Polymorphism in Automated Deduction , 2007, CADE.