Synbit: Synthesizing Bidirectional Programs using Unidirectional Sketches
summary
Synbit synthesizes well behaved bidirectional programs in HOBiT from a unidirectional get plus a few I/O examples by converting get into a partial sketch generation and filling holes with component based, type directed synthesis. It uses simple range analysis to restrict hole shapes, lazy nondeterministic generation to run incomplete programs on demand, and a modular completion that fixes control flow to prune the search. The implemented tool produces many microbenchmarks (including reverse), fails when get and put structures diverge, and builds a 35-line get into a 115-line BX program.
AI-written summary · about
