Gradient-Based Program Repair: Fixing Bugs in Continuous Program Spaces
André Silva, Gustav Thorén, Martin Monperrus
TL;DR
This work reframes automatic program repair as continuous optimization by compiling symbolic programs into differentiable numerical representations and optimizing them with gradient descent to satisfy a correctness loss. It introduces RaspBugs, a large benchmark of buggy RASP programs with paired numerical representations, to evaluate repairs in the numerical program space. Empirical results show GBPR repairs a majority of bugs across multiple base programs, often achieving near-perfect correctness, and it outperforms symbolic baselines on complex, multi-location bugs. The study demonstrates a new paradigm bridging continuous optimization and program behavior, with implications for scalable repair and verification in differentiable systems.
Abstract
Automatic program repair seeks to generate correct code from buggy programs, with most approaches searching the correct program in a discrete, symbolic space of source code tokens. This symbolic search is fundamentally limited by its inability to directly reason about program behavior. We introduce Gradient-Based Program Repair (GBPR), a new paradigm that reframes program repair as continuous optimization in a differentiable numerical program space. Our core insight is to compile symbolic programs into differentiable numerical representations, enabling search in the numerical program space directly guided by program behavior. To evaluate GBPR, we present RaspBugs, a new benchmark of 1,466 buggy symbolic RASP programs and their respective numerical representations. Our experiments demonstrate that GBPR can effectively repair buggy symbolic programs by gradient-based optimization in the numerical program space, with convincing repair trajectories. To our knowledge, we are the first to state program repair as continuous optimization in a numerical program space. Our work establishes a new direction for program repair research, bridging two rich worlds: continuous optimization and program behavior.
