GraphAlignCoder: Aligning Program and Proof Graphs for Code Generation
证明流图与程序图对齐提供结构级代码监督:GraphAlignCoder为每道题同步构建Python程序图和Lean证明流图,通过两阶段训练将形式正确性结构注入代码LLM,解决执行反馈只标记通过失败而不提供结构监督的问题。对比CodeRL,LiveCodeBench v6解题数提升31.6%,BigCodeBench Hard提升43.8%。
执行反馈训练只能标记程序通过与否,缺乏对正确解法内部结构的监督,GraphAlignCoder将Lean证明流图与Python程序图对齐以补充这一过程级信号。实验在LiveCodeBench v6等三个基准上对比基础模型、仅代码SFT和CodeRL,解题数分别提升31.6%和43.8%,消融确认图注入与整合两阶段缺一不可。
形式证明流图与程序图对齐可为代码LLM训练提供过程级结构监督;证据为LiveCodeBench v6和BigCodeBench Hard对比CodeRL分别提升31.6%和43.8%,消融排除了单阶段的充分性。
1. 旧有评测缺口:执行反馈方法(如CodeRL)仅提供通过/失败二元信号,不指示正确程序应如何在分支、循环、返回等层面组织;模型从失败样本中无法获得结构性修复方向,导致隐藏测试失败难以根除。 2. 构建协议与受控变量:对同一题目同步提取Python程序图(控制流+数据流+区域结构)和Lean证明流图(case-split→程序分支、义务保持→循环体、归纳分解→递归),以图对齐为桥梁分两阶段训练;消融实验分别隔离了图注入和整合阶段的独立贡献。 3. 决定性结果与失败诊断:vs CodeRL,LiveCodeBench v6提升31.6%(38→50),BigCodeBench Hard提升43.8%(16→23);具体失败案例显示CodeRL提取th时同时处理行导致列数与值数错配,DataFrame构建失败,GraphAlignCoder通过义务保持的顺序校验结构(表存在→行存在→表头提取→td对齐)成功通过。
三个基准:LiveCodeBench v6(竞赛级)、BigCodeBench Hard、BigCodeBench Full。对比:基础模型、仅代码SFT、CodeRL。主指标为解题数量。结果:vs CodeRL,LiveCodeBench v6为50 vs 38(+31.6%),BigCodeBench Hard为23 vs 16(+43.8%),BigCodeBench Full为363 vs 359。消融:仅注入图描述获初始增益,跨基准迁移需要整合阶段。失败诊断:HTML表格解析中CodeRL因th/td数量错配导致DataFrame构建失败;GraphAlignCoder通过逐步义务校验成功通过。
- 它要解决什么
- 执行反馈只能判断程序是否通过,不能指导模型如何组织正确解法——形式证明图能否弥补这一结构监督缺口?
- 研究路径
- 对每道题提取Python控制流图、数据流图和区域级结构;约束Lean管道生成证明迹后抽取proof-flow图,节点对应tactic/subgoal/case-split。第一阶段用图衍生文本描述各程序区域正确性;第二阶段去除图描述以纯代码输出整合已学结构。proof case-split→程序分支、义务保持→循环体、归纳分解→递归是两图对齐的结构基础。
- 这对工程意味着什么
- 为代码LLM引入形式图对齐时,整合阶段(从图知识蒸馏回纯代码生成)不可省略;常见误区是只做图注入而跳过整合,消融表明这会导致跨基准泛化能力显著下降。
- 证据定位
- GraphAlignCoder vs CodeRL:LiveCodeBench v6解题数50 vs 38(+31.6%),BigCodeBench Hard 23 vs 16(+43.8%),BigCodeBench Full 363 vs 359;消融确认图注入产生初始增益,整合阶段保证跨基准迁移。(筛选维度:可复核评测)
- 适用边界
- 论文节选未披露Lean证明管道的成功率及失败题目的处理方式,未说明训练数据规模和题目来源分布,评测限于竞赛和函数级任务,系统级代码库的泛化性未经验证。
方法与英文摘要
对竞赛及基准题目,先提取Python控制流图、数据流图和区域级程序图;同步用约束Lean管道生成证明迹,抽取proof-flow图(节点含tactic、subgoal、case-split)。训练分两阶段:阶段一注入图衍生区域正确性描述,阶段二将知识整合进纯代码生成。评测用LiveCodeBench v6、BigCodeBench Hard和BigCodeBench Full,对比基础模型、仅代码SFT和CodeRL。
Code large language models (LLMs) can generate syntactically plausible programs that nevertheless violate hidden semantic constraints. Existing execution-feedback training methods identify whether a completed program fails, but provide limited supervision about how a correct solution should be organized. We introduce GraphAlignCoder, a training framework that transfers explicit correctness structure into code generation. GraphAlignCoder constructs an implementation graph that captures control and dependence among program regions. In parallel, a constrained Lean pipeline produces proof traces, from which we extract a formal proof-flow graph. The model first learns executable code together with graph-derived descriptions of why individual program regions are correct, and then consolidates this knowledge into code generation. GraphAlignCoder consistently outperforms the base model, code-only SFT, and CodeRL across all benchmarks. Compared with CodeRL, it increases the solved count from 38 to 50 on LiveCodeBench v6 and from 16 to 23 on BigCodeBench Hard, corresponding to relative gains of 31.6% and 43.8%, while also improving BigCodeBench Full from 359 to 363 tasks. The ablation study further shows that verification-graph injection produces the initial reasoning gain, while verification to code consolidation is essential for robust cross-benchmark transfer.