Mechanized metatheory model-checking

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 received comparatively little attention. In this paper, we consider the problem of bounded model-checking 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.

[1]  Dale Miller,et al.  A proof theory for generic judgments , 2005, TOCL.

[2]  Frank Pfenning,et al.  Higher-Order Pattern Complement and the Strict Lambda-Calculus , 2001, ArXiv.

[3]  Michael Hanus,et al.  The Integration of Functions into Logic Programming: From Theory to Practice , 1994, J. Log. Program..

[4]  Kim Marriott,et al.  Explicit representation of terms defined by counter examples , 1986, Journal of Automated Reasoning.

[5]  James Cheney A Simpler Proof Theory for Nominal Logic , 2005, FoSSaCS.

[6]  Koen Claessen,et al.  QuickCheck: a lightweight tool for random testing of Haskell programs , 2000, ICFP.

[7]  Peter Schroeder-Heister,et al.  Rules of definitional reflection , 1993, [1993] Proceedings Eighth Annual IEEE Symposium on Logic in Computer Science.

[8]  James Cheney Scrap your nameplate: (functional pearl) , 2005, ICFP '05.

[9]  Melvin Fitting,et al.  Fixpoint Semantics for Logic Programming a Survey , 2001, Theor. Comput. Sci..

[10]  Giorgio Levi,et al.  Compilative Constructive Negation in Constraint Logic Programs , 1994, CAAP.

[11]  Juan José Moreno-Navarro,et al.  How to Incorporate Negation in a Prolog Compiler , 2000, PADL.

[12]  James Cheney The Semantics of Nominal Logic Programs , 2006, ICLP.

[13]  Frank Pfenning,et al.  Higher-order pattern complement and the strict λ-calculus , 2003, TOCL.

[14]  Ilkka Niemelä Answer Set Programming: A Declarative Approach to Solving Search Problems , 2006, JELIA.

[15]  Kenneth Kunen,et al.  Negation in Logic Programming , 1987, J. Log. Program..

[16]  Tobias Nipkow,et al.  Random testing in Isabelle/HOL , 2004, Proceedings of the Second International Conference on Software Engineering and Formal Methods, 2004. SEFM 2004..

[17]  David Walker,et al.  Static typing for a faulty lambda calculus , 2006, ICFP '06.

[18]  Christian Urban,et al.  alpha-Prolog: A Logic Programming Language with Names, Binding and a-Equivalence , 2004, ICLP.

[19]  Frank Pfenning,et al.  Logical Frameworks , 2001, Handbook of Automated Reasoning.

[20]  Andrew M. Pitts,et al.  Nominal Logic: A First Order Theory of Names and Binding , 2001, TACS.

[21]  Lee Naish A Declarative Debugging Scheme , 1997, J. Funct. Log. Program..

[22]  Christian Urban,et al.  Nominal logic programming , 2006, TOPL.

[23]  Alwen Tiu,et al.  Model Checking for pi-Calculus Using Proof Search , 2005, CONCUR.

[24]  Franco Turini,et al.  A Transformational Approach to Negation in Logic Programming , 1990, J. Log. Program..

[25]  Juan José Moreno-Navarro,et al.  Constructive Intensional Negation , 2004, FLOPS.

[26]  Peter J. Stuckey,et al.  Negation and Constraint Logic Programming , 1995, Inf. Comput..

[27]  Alberto Momigliano,et al.  Elimination of Negation in a Logical Framework , 2000, CSL.

[28]  James Cheney Equivariant Unification , 2009, Journal of Automated Reasoning.

[29]  Antonio Brogi,et al.  Universal Quantification by Case Analysis , 1990, ECAI.

[30]  Frank Pfenning,et al.  System Description: Twelf - A Meta-Logical Framework for Deductive Systems , 1999, CADE.

[31]  Martín Abadi,et al.  Analyzing security protocols with secrecy types and logic programs , 2002, POPL '02.

[32]  Brigitte Pientka Verifying Termination and Reduction Properties about Higher-Order Logic Programs , 2005, Journal of Automated Reasoning.

[33]  Peter Schroeder-Heister Definitional Reflection and the Completion , 1993, ELP.

[34]  Manuel V. Hermenegildo,et al.  Combined Static and Dynamic Assertion-Based Debugging of Constraint Logic Programs , 1999, LOPSTR.

[35]  C. R. Ramakrishnan,et al.  Efficient Model Checking Using Tabled Resolution , 1997, CAV.

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

[37]  Maribel Fernández,et al.  Nominal rewriting with name generation: abstraction vs. locality , 2005, PPDP.

[38]  Sérgio Vale Aguiar Campos,et al.  Symbolic Model Checking , 1993, CAV.

[39]  Kenneth L. McMillan,et al.  Symbolic model checking , 1992 .

[40]  Dale Miller,et al.  Reasoning with higher-order abstract syntax in a logical framework , 2000, TOCL.

[41]  Stephan Merz,et al.  Model Checking , 2000 .

[42]  Benjamin C. Pierce,et al.  Mechanized Metatheory for the Masses: The PoplMark Challenge , 2005, TPHOLs.

[43]  Hubert Comon-Lundh,et al.  Disunification: A Survey , 1991, Computational Logic - Essays in Honor of Alan Robinson.

[44]  Frank Pfenning,et al.  On equivalence and canonical forms in the LF type theory , 2001, TOCL.

[45]  C. R. Ramakrishnan,et al.  XMC: A Logic-Programming-Based Verification Toolset , 2000, CAV.

[46]  Christian Urban,et al.  Nominal unification , 2004, Theor. Comput. Sci..

[47]  Paolo Mancarella,et al.  An Algebra of Logic Programs , 1988, ICLP/SLP.

[48]  James Harland,et al.  Success and Failure for Hereditary Harrop Formulae , 1993, J. Log. Program..

[49]  Andrew M. Pitts,et al.  A New Approach to Abstract Syntax with Variable Binding , 2002, Formal Aspects of Computing.