Trustworthy Systems

A verified cyclicity checker: For theories with overloaded constants

Authors

Arve Gengelbach and Johannes \AAman Pohjola

KTH Royal Institute of Technology
Stockholm
Sweden\ UNSW Sydney
Australia

Abstract

Non-terminating (dependencies of) definitions can lead to logical contradictions, for example when defining a boolean constant as its own negation. Some proof assistants thus detect and disallow non-terminating definitions. Termination is generally undecidable when constants may have different definitions at different type instances, which is called (ad-hoc) overloading. The Isabelle/HOL proof assistant supports overloading of constant definitions, but relies on an unclear foundation for this critical termination check. With this paper we aim to close this gap: we present a mechanised proof that, for restricted overloading, non-terminating definitions are of a detectable cyclic shape, and we describe a mechanised algorithm with its correctness proof. In addition we demonstrate this cyclicity checker on parts of the Isabelle/HOL main library. Furthermore, we introduce the first-ever formally verified kernel of a proof assistant for higher-order logic with overloaded definitions. All our results are in the HOL4 theorem prover.

BibTeX Entry

  @inproceedings{Gengelbach_Pohjola_22,
    address          = {Haifa, Israel},
    author           = {Arve Gengelbach and Johannes {\AA}man Pohjola},
    booktitle        = {International Conference on Interactive Theorem Proving},
    doi              = {10.4230/LIPIcs.ITP.2022.15},
    editor           = {June Andronick and Leonardo de Moura},
    month            = aug,
    pages            = {15:1--15:18},
    paperurl         = {https://trustworthy.systems/publications/papers/Gengelbach_Pohjola_22.pdf},
    publisher        = {Schloss Dagstuhl - Leibniz-Zentrum f{\"{u}}r Informatik},
    title            = {A Verified Cyclicity Checker: For Theories with Overloaded Constants},
    volume           = {237},
    year             = {2022}
  }

Download