Certificate-Carrying Transformation of Event-Driven Block Programs
2026-07-01 • Programming Languages
Programming Languages
AI summaryⓘ
The authors developed a system that ensures changes made by an optimizer to Scratch programs don’t alter their behavior, by having a trusted checker verify every condition needed for the change’s safety. Instead of trusting the optimizer, this checker independently re-examines if the rewrite preserves program behavior under certain clear observations. They proved key theoretical guarantees, implemented the checker on real Scratch projects, and showed it reliably accepts correct rewrites while rejecting incorrect ones. Their approach keeps the trusted codebase small and provides solid guarantees for optimizing concurrent, event-driven programs.
Scratchblock-based programmingprogram optimizationbehavior preservationsource-to-source rewritingconcurrent programmingformal verificationLean theorem proverevent-driven systemsprogram analysis
Authors
Yuan Si, Jialu Zhang
Abstract
Block-based end-user languages such as Scratch run tens of millions of programs. Existing tools establish behavior preservation through program analysis and testing without a checked guarantee. We turn optimization into certificate-carrying source-to-source rewriting. An untrusted optimizer proposes a rewrite; a trusted, fail-closed checker accepts it only after recomputing every side condition that the rewrite's behavior preservation depends on under an explicit observation lens. The checker is the sole authority: given a correct checker and a small, explicitly stated set of model-to-VM assumptions, an optimizer bug cannot mint an unsound acceptance. The observation lens is a parameter, and the central soundness argument is a cooperative-frame refinement theorem: a write overwritten before any thread observes it, within a window in which no thread yields, can be removed. We mechanize this theorem in Lean and show that one parametric statement covers two concrete rewrite families instantiated to variable state and renderer state. We build a checker for six rewrite families and evaluate it on 300 real Scratch projects. The checker accepts a behavior-preserving rewrite on 94.3% of projects (283 of 300); certification costs under one tenth of a second per project; and a cross-family adversarial campaign of 4,278 perturbed rewrites produces zero false accepts. An audit found eight false accepts the per-family test suites missed; each is now rejected. An ablation that strips the semantic side conditions, leaving analysis and testing alone, ships rewrites the virtual machine confirms change behavior; the full checker rejects every one. The result shows how to provide behavior-preservation guarantees for a concurrent, event-driven, end-user language. The checker recomputes every required condition instead of trusting optimizer claims, keeping the trusted base small.