Skip to main content
    • Aa
    • Aa

αCheck: A mechanized metatheory model checker*


The problem of mechanically formalizing and proving metatheoretic properties of programming language calculi, type systems, operational semantics, and related formal systems has received considerable attention recently. However, the dual problem of searching for errors in such formalizations has attracted comparatively little attention. In this article, we present αCheck, a bounded model checker for metatheoretic properties of formal systems specified using nominal logic. In contrast to the current state of the art for metatheory verification, our approach is fully automatic, does not require expertise in theorem proving on the part of the user, and produces counterexamples in the case that a flaw is detected. We present two implementations of this technique, one based on negation-as-failure and one based on negation elimination, along with experimental results showing that these techniques are fast enough to be used interactively to debug systems as they are developed.

Hide All

This research was supported by EPSRC grant GR/S63205/01 and a Royal Society University Research Fellowship.

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.

C. Amaral , M. Florido and V. Santos Costa 2014. PrologCheck: Property-based testing in Prolog. In Functional and Logic Programming, vol. 8475, M. Codish and E. Sumii , Eds. Lecture Notes in Computer Science, Springer International Publishing, 117.

R. Barbuti , P. Mancarella , D. Pedreschi and F. Turini 1990. A transformational approach to negation in logic programming. Journal of Logic Programming 8, 201228.

C. Calvès and M. Fernández 2008. A polynomial nominal unification algorithm. Theoretical Computer Science 403, 2–3, 285306.

J. Cheney 2006. Completeness and Herbrand theorems for nominal logic. Journal of Symbolic Logic 71, 1, 299320.

J. Cheney 2010. Equivariant unification. Journal of Automated Reasoning 45, 3, 267300.

J. Cheney 2016. A simple sequent calculus for nominal logic. Journal of Logic and Computation 26, 2, 699726.

J. Cheney and A. Momigliano 2007. Mechanized metatheory model-checking. In PPDP, M. Leuschel and A. Podelski , Eds. ACM, 7586.

P. Dybjer , Q. Haiyan and M. Takeyama 2004. Verifying Haskell programs by combining testing, model checking and interactive theorem proving. Information & Software Technology 46, 15, 10111025.

M. Gabbay 2007. Fresh logic: Proof-theory and semantics for FM and nominal techniques. Journal of Applied Logic 5, 2, 356387.

M. J. Gabbay 2011. Foundations of nominal techniques: Logic and semantics of variables in abstract syntax. Bulletin of Symbolic Logic 17, 2, 161229.

M. J. Gabbay and A. M. Pitts 2002. A new approach to abstract syntax with variable binding. Formal Aspects of Computing 13, 341363.

A. Gacek , D. Miller and G. Nadathur 2012. A two-level logic approach to reasoning about computations. Journal of Automated Reasoning 49, 2, 241273.

F. Gadducci , M. Miculan and U. Montanari 2006. About permutation algebras, (pre)sheaves and named sets. Higher-Order and Symbolic Computation 19, 2–3, 283304.

J. Harland 1993. Success and failure for hereditary Harrop formulae. Journal of Logic Programming 17, 1, 129.

R. Harper and F. Pfenning 2005. On equivalence and canonical forms in the LF type theory. ACM Transactions on Computational Logic 6, 1, 61101.

C. Klein , M. Flatt and R. B. Findler 2012b. The Racket virtual machine and randomized testing. Higher-Order and Symbolic Computation 25, 2–4, 209253.

J.-L. Lassez and K. Marriott 1987. Explicit representation of terms defined by counter examples. Journal of Automated Reasoning 3, 3, 301318.

J. Levy and M. Villaret 2012. Nominal unification from a higher-order perspective. ACM Transactions on Computational Logic 13, 2, 10:110:31.

H. Liu , E. Cheng and P. Hudak 2009. Causal commutative arrows and their optimization. SIGPLAN Notices 44, 9, 3546.

D. Miller , G. Nadathur , F. Pfenning and A. Scedrov 1991. Uniform proofs as a foundation for logic programming. Annals of Pure and Applied Logic 51, 125157.

A. Momigliano and F. Pfenning 2003. Higher-order pattern complement and the strict lambda-calculus. ACM Transactions on Computational Logic 4, 4, 493529.

B. Pientka 2005. Verifying termination and reduction properties about higher-order logic programs. Journal of Automated Reasoning 34, 2, 179207.

A. M. Pitts 2013. Nominal Sets: Names and Symmetry in Computer Science. Cambridge University Press.

G. Roşu and T. F. Şerbănuţă 2010. An overview of the K semantic framework. Journal of Logic and Algebraic Programming 79, 6, 397434.

C. Runciman , M. Naylor and F. Lindblad 2008. Smallcheck and lazy SmallCheck: Automatic exhaustive testing for small values. In Haskell Workshop, A. Gill , Ed. ACM, 3748.

U. Schöpp 2007. Modelling generic judgements. Electronic Notes in Theoretical Computer Science 174, 5, 1935.

P. Sewell , F. Z. Nardelli , S. Owens , G. Peskine , T. Ridge , S. Sarkar and R. Strnisa 2010. Ott: Effective tool support for the working semanticist. Journal of Functional Programming 20, 1, 71122.

P. J. Stuckey 1995. Negation and constraint logic programming. Information and Computation 118, 1, 1233.

A. Tiu and D. Miller 2010. Proof search specifications of bisimulation and modal logics for the π-calculus. ACM Transactions on Computers Logic 11, 2 (January), 13:113:35.

C. Urban , J. Cheney and S. Berghofer 2011. Mechanizing the metatheory of LF. ACM Transactions on Computational Logic 12, 2, Article 15.

C. Urban and C. Kaliszyk 2012. General bindings and alpha-equivalence in Nominal Isabelle. Logical Methods in Computer Science 8, 2, 135.

C. Urban , A. M. Pitts and M. J. Gabbay 2004. Nominal unification. Theoretical Computer Science 323, 1–3, 473497.

D. Volpano , C. Irvine and G. Smith 1996. A sound type system for secure flow analysis. Journal of Computer Security 4, 2–3, 167187.

Recommend this journal

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

Theory and Practice of Logic Programming
  • ISSN: 1471-0684
  • EISSN: 1475-3081
  • URL: /core/journals/theory-and-practice-of-logic-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: 15 *
Loading metrics...

Abstract views

Total abstract views: 53 *
Loading metrics...

* Views captured on Cambridge Core between 22nd May 2017 - 26th July 2017. This data will be updated every 24 hours.