Skip to main navigation Skip to search Skip to main content

Checking equivalence in a non-strict language

  • Yale University

Research output: Contribution to journalArticlepeer-review

4 Scopus citations

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.

Original languageEnglish
Article number177
JournalProceedings of the ACM on Programming Languages
Volume6
Issue numberOOPSLA2
DOIs
StatePublished - Oct 31 2022

Keywords

  • Haskell
  • coinduction
  • equivalence
  • non-strictness
  • symbolic execution

Fingerprint

Dive into the research topics of 'Checking equivalence in a non-strict language'. Together they form a unique fingerprint.

Cite this