Using human-in-the-loop synthesis to author functional reactive programs
Julie L Newcomb, Rastislav Bodik

TL;DR
This paper introduces a human-in-the-loop synthesis approach for functional reactive programs, improving ease of programming and correctness assurance through an interactive tool that refines specifications via candidate program generation and user feedback.
Contribution
It presents an efficient encoding of FRP semantics in Rosette, compares its performance with existing tools, and develops an interactive synthesis tool for practical program development.
Findings
The synthesis technique outperforms existing tools on benchmark tasks.
The interactive tool effectively converges on correct programs with limited user interactions.
Application to web and IoT benchmarks demonstrates practical utility.
Abstract
Programs that respond to asynchronous events are challenging to write; they are difficult to reason about and tricky to test and debug. Because these programs can have a huge space of possible input timings and interleaving, the programmer may easily miss corner cases. We propose applying synthesis to aid programmers in creating programs more easily and with a higher degree of confidence in their correctness. We have written an efficient encoding of functional reactive programming (FRP) semantics based on functional programming over lists lifted in Rosette. We demonstrate that this technique is state-of-the-art by first comparing its performance against two existing synthesis tools that produce list manipulation programs, and then by synthesizing a suite of benchmarks given complete specifications. We also propose an interactive tool in which a programmer provides some initial partial…
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 Testing and Debugging Techniques · Software Engineering Research · Software System Performance and Reliability
