Synbit: Synthesizing Bidirectional Programs using Unidirectional Sketches
Masaomi Yamaguchi, Kazutaka Matsuda, Cristina David, Meng Wang

TL;DR
Synbit is a novel synthesis technique that converts unidirectional code into bidirectional programs using sketches and input/output examples, leveraging a specially designed language to handle complex and realistic tasks.
Contribution
The paper introduces Synbit, a new approach that synthesizes bidirectional programs from unidirectional code and examples, utilizing a language that preserves program structure and modularity.
Findings
Successfully synthesized bidirectional programs for complex microbenchmarks
Generated realistic bidirectional programs with Synbit for practical problems
Outperformed a state-of-the-art unidirectional synthesis tool in backward computation tasks
Abstract
We propose a technique for synthesizing bidirectional programs from the corresponding unidirectional code plus a few input/output examples. The core ideas are: (1) constructing a sketch using the given unidirectional program as a specification, and (2) filling the sketch in a modular fashion by exploiting the properties of bidirectional programs. These ideas are enabled by our choice of programming language, HOBiT, which is specifically designed to maintain the unidirectional program structure in bidirectional programming, and keep the parts that control bidirectional behavior modular. To evaluate our approach, we implemented it in a tool called Synbit and used it to generate bidirectional programs for intricate microbenchmarks, as well as for a few larger, more realistic problems. We also compared Synbit to a state-of-the-art unidirectional synthesis tool on the task of synthesizing…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
Taxonomy
TopicsSoftware Engineering Research · Logic, programming, and type systems · Parallel Computing and Optimization Techniques
