Generative Explanations for Program Synthesizers
<|reference_start|>Generative Explanations for Program Synthesizers: Despite great advances in program synthesis techniques, they remain algorithmic black boxes. Although they guarantee that when synthesis is successful, the implementation satisfies the specification, they provide no additional information regarding how the implementation works or the manner in which the specification is realized. One possibility to answer these questions is to use large language models (LLMs) to construct human-readable explanations. Unfortunately, experiments reveal that LLMs frequently produce nonsensical or misleading explanations when applied to the unidiomatic code produced by program synthesizers.   In this paper, we develop an approach to reliably augment the implementation with explanatory names. We recover fine-grained input-output data from the synthesis algorithm to enhance the prompt supplied to the LLM, and use a combination of a program verifier and a second language model to validate the proposed explanations before presenting them to the user. Together, these techniques massively improve the accuracy of the proposed names, from 24% to 79% respectively. Through a pair of small user studies, we find that users significantly prefer the explanations produced by our technique (76% of responses indicating the appropriateness of the presenting names) to the baseline (with only 2% of responses approving of the suggestions), and that the proposed names measurably help users in understanding the synthesized implementation.<|reference_end|>
@article{nazari2024generative,
    title={Generative Explanations for Program Synthesizers},
    author={Amirmohammad Nazari, Souti Chattopadhyay, Swabha Swayamdipta, Mukund
  Raghothaman},
    journal={arXiv preprint arXiv:2403.03429},
    year={2024},
    archivePrefix={arXiv},
    eprint={2403.03429},
    primaryClass={cs.PL}
}