Andreas Lööw, Daniele Nantes-Sobrinho, Sacha-Élie Ayoun, Caroline Cronjäger, Petar Maksimović, Philippa Gardner
{"title":"Compositional Symbolic Execution for Correctness and Incorrectness Reasoning (Extended Version)","authors":"Andreas Lööw, Daniele Nantes-Sobrinho, Sacha-Élie Ayoun, Caroline Cronjäger, Petar Maksimović, Philippa Gardner","doi":"arxiv-2407.10838","DOIUrl":null,"url":null,"abstract":"The introduction of separation logic has led to the development of\nsymbolic-execution techniques and tools that are (functionally) compositional\nwith function specifications that can be used in broader calling contexts. Many\nof the compositional symbolic-execution tools developed in academia and\nindustry have been grounded on a formal foundation, but either the function\nspecifications are not validated concerning the underlying separation logic of\nthe theory, or there is a large gulf between the theory and the tool\nimplementation. We introduce a formal compositional symbolic-execution engine which creates\nand uses function specifications from an underlying separation logic and\nprovides a sound theoretical foundation partially inspired by the Gillian\nsymbolic-execution platform. This is achieved by providing an axiomatic\ninterface which describes the properties of the consume and produce operations\nused in the engine to compositionally update the symbolic state, including,\nwhen calling function specifications -- a technique used by VeriFast, Viper,\nand Gillian but not previously characterised independently of the tool. Our\nresult consume and produce operations inspired by the Gillian implementation\nthat satisfy the properties described by our axiomatic interface. A surprising\nproperty of our engine semantics is its ability to underpin both correctness\nand incorrectness reasoning, with the primary distinction being the choice\nbetween satisfiability and validity. We use this property to extend the Gillian\nplatform, which previously only supported correctness reasoning, with\nincorrectness reasoning and automatic true bug-finding using incorrectness\nbi-abduction. We evaluate our new Gillian platform through instantiation to C.\nThis instantiation is the first tool grounded on a common formal compositional\nsymbolic-execution engine to support both correctness and incorrectness\nreasoning.","PeriodicalId":501197,"journal":{"name":"arXiv - CS - Programming Languages","volume":"54 44 1","pages":""},"PeriodicalIF":0.0000,"publicationDate":"2024-07-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"0","resultStr":null,"platform":"Semanticscholar","paperid":null,"PeriodicalName":"arXiv - CS - Programming Languages","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/arxiv-2407.10838","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
引用次数: 0
Abstract
The introduction of separation logic has led to the development of
symbolic-execution techniques and tools that are (functionally) compositional
with function specifications that can be used in broader calling contexts. Many
of the compositional symbolic-execution tools developed in academia and
industry have been grounded on a formal foundation, but either the function
specifications are not validated concerning the underlying separation logic of
the theory, or there is a large gulf between the theory and the tool
implementation. We introduce a formal compositional symbolic-execution engine which creates
and uses function specifications from an underlying separation logic and
provides a sound theoretical foundation partially inspired by the Gillian
symbolic-execution platform. This is achieved by providing an axiomatic
interface which describes the properties of the consume and produce operations
used in the engine to compositionally update the symbolic state, including,
when calling function specifications -- a technique used by VeriFast, Viper,
and Gillian but not previously characterised independently of the tool. Our
result consume and produce operations inspired by the Gillian implementation
that satisfy the properties described by our axiomatic interface. A surprising
property of our engine semantics is its ability to underpin both correctness
and incorrectness reasoning, with the primary distinction being the choice
between satisfiability and validity. We use this property to extend the Gillian
platform, which previously only supported correctness reasoning, with
incorrectness reasoning and automatic true bug-finding using incorrectness
bi-abduction. We evaluate our new Gillian platform through instantiation to C.
This instantiation is the first tool grounded on a common formal compositional
symbolic-execution engine to support both correctness and incorrectness
reasoning.