Specification and inference of trace refinement relations

The modern software engineering process is evolutionary, with commits/patches begetting new versions of code, progressing steadily toward improved systems. In recent years, program analysis and verification tools have exploited version-based reasoning, where new code can be seen in terms of how it h...

Ausführliche Beschreibung

Gespeichert in:
Bibliographische Detailangaben
Veröffentlicht in:Proceedings of ACM on programming languages 2019-10, Vol.3 (OOPSLA), p.1-30
Hauptverfasser: Antonopoulos, Timos, Koskinen, Eric, Le, Ton Chanh
Format: Artikel
Sprache:eng
Online-Zugang:Volltext
Tags: Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
container_end_page 30
container_issue OOPSLA
container_start_page 1
container_title Proceedings of ACM on programming languages
container_volume 3
creator Antonopoulos, Timos
Koskinen, Eric
Le, Ton Chanh
description The modern software engineering process is evolutionary, with commits/patches begetting new versions of code, progressing steadily toward improved systems. In recent years, program analysis and verification tools have exploited version-based reasoning, where new code can be seen in terms of how it has changed from the previous version. When considering program versions, refinement seems a natural fit and, in recent decades, researchers have weakened classical notions of concrete refinement and program equivalence to capture similarities as well as differences between programs. For example, Benton, Yang and others have worked on state-based refinement relations . In this paper, we explore a form of weak refinement based on trace relations rather than state relations. The idea begins by partitioning traces of a program C 1 into trace classes, each identified via a restriction r 1 . For each class, we specify similar behavior in the other program C 2 via a separate restriction r 2 on C 2 . Still, these two trace classes may not yet be equivalent so we further permit a weakening via a binary relation A on traces, that allows one to, for instance disregard unimportant events, relate analogous atomic events, etc. We address several challenges that arise. First, we explore one way to specify trace refinement relations by instantiating the framework to Kleene Algebra with Tests (KAT) due to Kozen. We use KAT intersection for restriction, KAT hypotheses for A , KAT inclusion for refinement, and have proved compositionality. Next, we present an algorithm for automatically synthesizing refinement relations, based on a mixture of semantic program abstraction, KAT inclusion, a custom edit-distance algorithm on counterexamples, and case-analysis on nondeterministic branching. We have proved our algorithm to be sound. Finally, we implemented our algorithm as a tool called Knotical, on top of Interproc and Symkat. We demonstrate promising first steps in synthesizing trace refinement relations across a hand-crafted collection of 37 benchmarks that include changing fragments of array programs, models of systems code, and examples inspired by the thttpd and Merecat web servers.
doi_str_mv 10.1145/3360604
format Article
fullrecord <record><control><sourceid>crossref</sourceid><recordid>TN_cdi_crossref_primary_10_1145_3360604</recordid><sourceformat>XML</sourceformat><sourcesystem>PC</sourcesystem><sourcerecordid>10_1145_3360604</sourcerecordid><originalsourceid>FETCH-LOGICAL-c220t-7c1826da22f6a3a466b22bc3da1e4e7bfd0bcfd95dc9a5f61339725b1fe900b33</originalsourceid><addsrcrecordid>eNpNj0tLAzEUhYMoWGrxL8zO1ei9uZlMs5TiCwoubNdDHjcQaTMlmY3_3lG7cHW-xeFwPiFuEe4RVfdApEGDuhALqfquRSXx8h9fi1WtnwCAhtSazEKYjxP7FJO3UxpzY3NoUo5cOHtuxthMxc5QOKbMR87TjIffar0RV9EeKq_OuRT756fd5rXdvr-8bR63rZcSprb3uJY6WCmjtmSV1k5K5ylYZMW9iwGcj8F0wRvbRY1Eppedw8gGwBEtxd3fri9jrfOT4VTS0ZavAWH4kR7O0vQNniBI4Q</addsrcrecordid><sourcetype>Aggregation Database</sourcetype><iscdi>true</iscdi><recordtype>article</recordtype></control><display><type>article</type><title>Specification and inference of trace refinement relations</title><source>ACM Digital Library</source><source>EZB-FREE-00999 freely available EZB journals</source><creator>Antonopoulos, Timos ; Koskinen, Eric ; Le, Ton Chanh</creator><creatorcontrib>Antonopoulos, Timos ; Koskinen, Eric ; Le, Ton Chanh</creatorcontrib><description>The modern software engineering process is evolutionary, with commits/patches begetting new versions of code, progressing steadily toward improved systems. In recent years, program analysis and verification tools have exploited version-based reasoning, where new code can be seen in terms of how it has changed from the previous version. When considering program versions, refinement seems a natural fit and, in recent decades, researchers have weakened classical notions of concrete refinement and program equivalence to capture similarities as well as differences between programs. For example, Benton, Yang and others have worked on state-based refinement relations . In this paper, we explore a form of weak refinement based on trace relations rather than state relations. The idea begins by partitioning traces of a program C 1 into trace classes, each identified via a restriction r 1 . For each class, we specify similar behavior in the other program C 2 via a separate restriction r 2 on C 2 . Still, these two trace classes may not yet be equivalent so we further permit a weakening via a binary relation A on traces, that allows one to, for instance disregard unimportant events, relate analogous atomic events, etc. We address several challenges that arise. First, we explore one way to specify trace refinement relations by instantiating the framework to Kleene Algebra with Tests (KAT) due to Kozen. We use KAT intersection for restriction, KAT hypotheses for A , KAT inclusion for refinement, and have proved compositionality. Next, we present an algorithm for automatically synthesizing refinement relations, based on a mixture of semantic program abstraction, KAT inclusion, a custom edit-distance algorithm on counterexamples, and case-analysis on nondeterministic branching. We have proved our algorithm to be sound. Finally, we implemented our algorithm as a tool called Knotical, on top of Interproc and Symkat. We demonstrate promising first steps in synthesizing trace refinement relations across a hand-crafted collection of 37 benchmarks that include changing fragments of array programs, models of systems code, and examples inspired by the thttpd and Merecat web servers.</description><identifier>ISSN: 2475-1421</identifier><identifier>EISSN: 2475-1421</identifier><identifier>DOI: 10.1145/3360604</identifier><language>eng</language><ispartof>Proceedings of ACM on programming languages, 2019-10, Vol.3 (OOPSLA), p.1-30</ispartof><lds50>peer_reviewed</lds50><oa>free_for_read</oa><woscitedreferencessubscribed>false</woscitedreferencessubscribed><cites>FETCH-LOGICAL-c220t-7c1826da22f6a3a466b22bc3da1e4e7bfd0bcfd95dc9a5f61339725b1fe900b33</cites></display><links><openurl>$$Topenurl_article</openurl><openurlfulltext>$$Topenurlfull_article</openurlfulltext><thumbnail>$$Tsyndetics_thumb_exl</thumbnail><link.rule.ids>315,781,785,27928,27929</link.rule.ids></links><search><creatorcontrib>Antonopoulos, Timos</creatorcontrib><creatorcontrib>Koskinen, Eric</creatorcontrib><creatorcontrib>Le, Ton Chanh</creatorcontrib><title>Specification and inference of trace refinement relations</title><title>Proceedings of ACM on programming languages</title><description>The modern software engineering process is evolutionary, with commits/patches begetting new versions of code, progressing steadily toward improved systems. In recent years, program analysis and verification tools have exploited version-based reasoning, where new code can be seen in terms of how it has changed from the previous version. When considering program versions, refinement seems a natural fit and, in recent decades, researchers have weakened classical notions of concrete refinement and program equivalence to capture similarities as well as differences between programs. For example, Benton, Yang and others have worked on state-based refinement relations . In this paper, we explore a form of weak refinement based on trace relations rather than state relations. The idea begins by partitioning traces of a program C 1 into trace classes, each identified via a restriction r 1 . For each class, we specify similar behavior in the other program C 2 via a separate restriction r 2 on C 2 . Still, these two trace classes may not yet be equivalent so we further permit a weakening via a binary relation A on traces, that allows one to, for instance disregard unimportant events, relate analogous atomic events, etc. We address several challenges that arise. First, we explore one way to specify trace refinement relations by instantiating the framework to Kleene Algebra with Tests (KAT) due to Kozen. We use KAT intersection for restriction, KAT hypotheses for A , KAT inclusion for refinement, and have proved compositionality. Next, we present an algorithm for automatically synthesizing refinement relations, based on a mixture of semantic program abstraction, KAT inclusion, a custom edit-distance algorithm on counterexamples, and case-analysis on nondeterministic branching. We have proved our algorithm to be sound. Finally, we implemented our algorithm as a tool called Knotical, on top of Interproc and Symkat. We demonstrate promising first steps in synthesizing trace refinement relations across a hand-crafted collection of 37 benchmarks that include changing fragments of array programs, models of systems code, and examples inspired by the thttpd and Merecat web servers.</description><issn>2475-1421</issn><issn>2475-1421</issn><fulltext>true</fulltext><rsrctype>article</rsrctype><creationdate>2019</creationdate><recordtype>article</recordtype><recordid>eNpNj0tLAzEUhYMoWGrxL8zO1ei9uZlMs5TiCwoubNdDHjcQaTMlmY3_3lG7cHW-xeFwPiFuEe4RVfdApEGDuhALqfquRSXx8h9fi1WtnwCAhtSazEKYjxP7FJO3UxpzY3NoUo5cOHtuxthMxc5QOKbMR87TjIffar0RV9EeKq_OuRT756fd5rXdvr-8bR63rZcSprb3uJY6WCmjtmSV1k5K5ylYZMW9iwGcj8F0wRvbRY1Eppedw8gGwBEtxd3fri9jrfOT4VTS0ZavAWH4kR7O0vQNniBI4Q</recordid><startdate>20191001</startdate><enddate>20191001</enddate><creator>Antonopoulos, Timos</creator><creator>Koskinen, Eric</creator><creator>Le, Ton Chanh</creator><scope>AAYXX</scope><scope>CITATION</scope></search><sort><creationdate>20191001</creationdate><title>Specification and inference of trace refinement relations</title><author>Antonopoulos, Timos ; Koskinen, Eric ; Le, Ton Chanh</author></sort><facets><frbrtype>5</frbrtype><frbrgroupid>cdi_FETCH-LOGICAL-c220t-7c1826da22f6a3a466b22bc3da1e4e7bfd0bcfd95dc9a5f61339725b1fe900b33</frbrgroupid><rsrctype>articles</rsrctype><prefilter>articles</prefilter><language>eng</language><creationdate>2019</creationdate><toplevel>peer_reviewed</toplevel><toplevel>online_resources</toplevel><creatorcontrib>Antonopoulos, Timos</creatorcontrib><creatorcontrib>Koskinen, Eric</creatorcontrib><creatorcontrib>Le, Ton Chanh</creatorcontrib><collection>CrossRef</collection><jtitle>Proceedings of ACM on programming languages</jtitle></facets><delivery><delcategory>Remote Search Resource</delcategory><fulltext>fulltext</fulltext></delivery><addata><au>Antonopoulos, Timos</au><au>Koskinen, Eric</au><au>Le, Ton Chanh</au><format>journal</format><genre>article</genre><ristype>JOUR</ristype><atitle>Specification and inference of trace refinement relations</atitle><jtitle>Proceedings of ACM on programming languages</jtitle><date>2019-10-01</date><risdate>2019</risdate><volume>3</volume><issue>OOPSLA</issue><spage>1</spage><epage>30</epage><pages>1-30</pages><issn>2475-1421</issn><eissn>2475-1421</eissn><abstract>The modern software engineering process is evolutionary, with commits/patches begetting new versions of code, progressing steadily toward improved systems. In recent years, program analysis and verification tools have exploited version-based reasoning, where new code can be seen in terms of how it has changed from the previous version. When considering program versions, refinement seems a natural fit and, in recent decades, researchers have weakened classical notions of concrete refinement and program equivalence to capture similarities as well as differences between programs. For example, Benton, Yang and others have worked on state-based refinement relations . In this paper, we explore a form of weak refinement based on trace relations rather than state relations. The idea begins by partitioning traces of a program C 1 into trace classes, each identified via a restriction r 1 . For each class, we specify similar behavior in the other program C 2 via a separate restriction r 2 on C 2 . Still, these two trace classes may not yet be equivalent so we further permit a weakening via a binary relation A on traces, that allows one to, for instance disregard unimportant events, relate analogous atomic events, etc. We address several challenges that arise. First, we explore one way to specify trace refinement relations by instantiating the framework to Kleene Algebra with Tests (KAT) due to Kozen. We use KAT intersection for restriction, KAT hypotheses for A , KAT inclusion for refinement, and have proved compositionality. Next, we present an algorithm for automatically synthesizing refinement relations, based on a mixture of semantic program abstraction, KAT inclusion, a custom edit-distance algorithm on counterexamples, and case-analysis on nondeterministic branching. We have proved our algorithm to be sound. Finally, we implemented our algorithm as a tool called Knotical, on top of Interproc and Symkat. We demonstrate promising first steps in synthesizing trace refinement relations across a hand-crafted collection of 37 benchmarks that include changing fragments of array programs, models of systems code, and examples inspired by the thttpd and Merecat web servers.</abstract><doi>10.1145/3360604</doi><tpages>30</tpages><oa>free_for_read</oa></addata></record>
fulltext fulltext
identifier ISSN: 2475-1421
ispartof Proceedings of ACM on programming languages, 2019-10, Vol.3 (OOPSLA), p.1-30
issn 2475-1421
2475-1421
language eng
recordid cdi_crossref_primary_10_1145_3360604
source ACM Digital Library; EZB-FREE-00999 freely available EZB journals
title Specification and inference of trace refinement relations
url https://sfx.bib-bvb.de/sfx_tum?ctx_ver=Z39.88-2004&ctx_enc=info:ofi/enc:UTF-8&ctx_tim=2024-12-17T03%3A36%3A22IST&url_ver=Z39.88-2004&url_ctx_fmt=infofi/fmt:kev:mtx:ctx&rfr_id=info:sid/primo.exlibrisgroup.com:primo3-Article-crossref&rft_val_fmt=info:ofi/fmt:kev:mtx:journal&rft.genre=article&rft.atitle=Specification%20and%20inference%20of%20trace%20refinement%20relations&rft.jtitle=Proceedings%20of%20ACM%20on%20programming%20languages&rft.au=Antonopoulos,%20Timos&rft.date=2019-10-01&rft.volume=3&rft.issue=OOPSLA&rft.spage=1&rft.epage=30&rft.pages=1-30&rft.issn=2475-1421&rft.eissn=2475-1421&rft_id=info:doi/10.1145/3360604&rft_dat=%3Ccrossref%3E10_1145_3360604%3C/crossref%3E%3Curl%3E%3C/url%3E&disable_directlink=true&sfx.directlink=off&sfx.report_link=0&rft_id=info:oai/&rft_id=info:pmid/&rfr_iscdi=true