Checking equivalence in a non-strict language
Abstract Program equivalence checking is the task of confirming that two programs have the same behavior on corresponding inputs. We develop a calculus based on symbolic execution and coinduction to check the equivalence of programs in a non-strict functional language. Additionally, we show that our calculus can be used to derive counterexamples for pairs of inequivalent programs, including counterexamples that arise from non-termination. We describe a fully automated approach for finding both equivalence proofs and counterexamples. Our implementation, nebula , proves equivalences of programs written in Haskell. We demonstrate nebula ’s practical effectiveness at both proving equivalence and producing counterexamples automatically by applying nebula to existing benchmark properties.
Authors
- William T. Hallahan (ORCID: https://orcid.org/0000-0003-4925-3861)
- Ružica Piskač (ORCID: https://orcid.org/0000-0002-3267-0776)
- John C. Kolesar (ORCID: https://orcid.org/0000-0002-6084-2387)
Institutions
- Binghamton University (US)
- Yale University (US)
Publication Details
- Journal
- Journal of Functional Programming
- Published
- 2025-01-01
- DOI
- https://doi.org/10.1017/s0956796825100099
- Primary Topic
- Logic, programming, and type systems
- Type
- article
- Field-Weighted Citation Impact
- 0.00
Funders
- National Science Foundation
- Centre International de Recherche sur le Cancer