P: Joint Program-and-Proof Planning for Verified Code Generation
Het artikel introduceert , een op LLM gebaseerde agentische workflow die programma's en hun formele bewijzen gezamenlijk plant om de inefficiënties van sequentiële generatie te overwinnen, waarbij het staat-van-de-kunst prestaties en aanzienlijke kostenreducties bereikt op benchmarks voor geverifieerde codegeneratie, inclusief een nieuwe, uit een repository afgeleide dataset genaamd Lean4Commit0.
Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer
Stel je voor dat je een superintelligente robot leert om een verhaal te schrijven. Je geeft de robot een prompt, en de robot spuugt een verhaal uit. Maar hier is de crux: je wilt niet zomaar een verhaal; je wilt een verhaal dat wiskundig gegarandeerd waar is, zonder plotgaten, zonder magie die de wetten van de natuurkunde breekt, en zonder personages die zonder uitleg verdwijnen. Dit is de wereld van geverifieerde codegeneratie. Het is een hoek van de informatica waar we AI niet alleen vragen om software te schrijven, maar om software te schrijven die gepaard gaat met zijn eigen "bewijs van correctheid"—een wiskundig certificaat dat zegt: "Ik beloof dat deze code precies zal doen wat ik heb gezegd, voor elke mogelijke situatie."
Lange tijd was de standaardmanier om dit te doen als een tweetalige dans: eerst schrijft de robot de code (het verhaal), en dan probeert een apart team van robot-proeflezers te controleren of het verhaal wel logisch is. Als de proeflezers een plotgat vinden, sturen ze het verhaal terug naar de schrijver om het te repareren. De schrijver past het verhaal aan, stuurt het terug, en de cyclus herhaalt zich. De auteurs van dit artikel stellen dat deze "schrijf-dan-controleer"-dans vaak lomp en inefficiënt is. Het is alsof je een brug bouwt en er pas na voltooiing achter komt dat je de steunbalken bent vergeten, waardoor je de hele brug moet afbreken en opnieuw moet opbouwen. De auteurs van dit artikel stellen een nieuwe manier voor: in plaats van de code en het bewijs apart te schrijven, moet de robot de volledige brug plannen—zowel de weg als de steunbalken—tegelijkertijd, zodat ze vanaf de eerste schets al perfect bij elkaar passen.
Het Probleem: De "Schrijf-dan-Controleer"-valstrik
Het artikel, getiteld "Joint Program-and-Proof Planning for Verified Code Generation," pakt een frustrerende bottleneck aan in de manier waarop AI geverifieerde software schrijft. Momenteel volgen de meeste systemen een "programma-dan-bewijs"-workflow. Het is alsof je een chef-kok vraagt om een complex gerecht te koken en hem dan, nadat het eten op tafel staat, een voedselcriticus vraagt om te bewijzen dat de ingrediënten vers waren en de bereidingswijze veilig was. Als de criticus een probleem vindt (zoals halfgare kip), moet de chef teruggaan, het gerecht opnieuw bereiden en hopen dat de criticus het deze keer wel goedkeurt.
De auteurs betogen dat deze sequentiële aanpak gebrekkig is. Wanneer de AI zich eerst vastlegt op het schrijven van de code, kan de AI een structuur kiezen die aan de oppervlakte prima lijkt, maar een nachtmerrie is om te bewijzen. Stel je voor dat de AI een programma schrijft om het grootste getal in een lijst te vinden. De AI kan een methode kiezen die kort en bondig is om te schrijven, maar die een ongelooflijk complexe, verborgen wiskundige regel vereist om te bewijzen dat het werkt. Zodra de code is geschreven, zit de AI vast: de AI moet ofwel een supermoeilijk bewijs verzinnen dat past bij die specifieke code, of de code verscheuren en opnieuw beginnen. Dit leidt tot veel verspilde tijd, geld en "reparatielussen" waarbij de AI de code en het bewijs blijft patchen, maar ze nooit echt op elkaar aansluiten.
De Oplossing: P3 (De "Hand-in-Hand" Planner)
Om dit op te lossen, introduceren de onderzoekers P3, een nieuwe workflow waarbij de AI optreedt als een meesterarchitect die de blauwdruk voor zowel het gebouw als de veiligheidsinspectie tekent voordat er ook maar één baksteen wordt gelegd.
In plaats van direct in de code te duiken, maakt P3 eerst een verenigd plan. Dit plan is een hoogwaardige schets die twee vragen tegelijk beantwoordt:
- Hoe zal de code werken? (De "Programma-schets")
- Hoe zullen we bewijzen dat het werkt? (De "Bewijs-schets")
Het plan bepaalt de structuur van de oplossing. Het kiest de juiste "vorm" voor de code (zoals te kiezen tussen een recursieve lus of een fold) en kiest tegelijkertijd de bijbehorende wiskundige regels (invarianten) die nodig zijn om te bewijzen dat die vorm veilig is. Het is als beslissen: "We gaan een brug bouwen met ophangkabels, dus ons bewijsplan moet ook het controleren van de spanning in die kabels bevatten."
Zodra dit gedeelde plan is vastgelegd, "elaboreert" de AI de details. De AI schrijft de werkelijke code en het werkelijke bewijs, maar het is slechts het invullen van de blanco ruimtes in een vooraf overeengekomen blauwdruk. Als het bewijs faalt, weet de AI precies waar hij moet kijken, omdat de structuur al was beslist. Als het plan zelf slecht is (bijv. het brugontwerp is onmogelijk), gaat de AI terug naar de planningsfase om de blauwdruk opnieuw te tekenen, in plaats van wanhopig de afgebouwde brug te blijven patchen.
Het Nieuwe Testveld: Lean4Commit0
De auteurs realiseerden zich dat eerdere tests voor deze AI-systemen te makkelijk waren, zoals het vragen aan een robot om wiskundige puzzels uit een tekstboek op te lossen. Software in de echte wereld is rommeliger. Om hun nieuwe methode goed te testen, hebben ze een nieuwe benchmark gebouwd genaamd Lean4Commit0.
Ze hebben 108 real-world open-source softwarebibliotheken (geschreven in Python, Rust, C/C++ en Java) gescraped en de kernfuncties daarvan omgezet in uitdagingen voor "geverifieerde code". In plaats van eenvoudige taken zoals "tel twee getallen bij elkaar op", bevatten deze uitdagingen complexe relaties tussen verschillende onderdelen van een programma. Bijvoorbeeld, in een configuratiesysteem zouden ze de AI kunnen vragen te bewijzen dat "als je een instelling op 'Hoog' zet en later op 'Laag', het systeem de instelling 'Laag' correct onthoudt." Deze taken vereisen dat de AI begrijpt hoe verschillende functies met elkaar communiceren, wat ze veel moeilijker maakt dan tekstboekproblemen.
Wat Ze Vonden: Slimmer Plannen Wint
Het team heeft P3 getest tegen vier van de krachtigste beschikbare AI-modellen (waaronder versies van Codex, Gemini en Claude) over drie verschillende benchmarks: Verina, AlgoVeri en hun nieuwe Lean4Commit0.
De resultaten waren duidelijk: Samen plannen werkt beter dan apart schrijven.
- Succespercentage: P3 loste meer taken op dan welke andere methode dan ook in elke enkele test. Op de moeilijkste taken verbeterde het succespercentage met 4,6 tot 11,2 procentpunten vergeleken met de beste bestaande methoden.
- Efficiëntie: Het ging niet alleen om het oplossen van meer problemen; het was ook sneller en goedkoper. Bij moeilijke taken verminderde P3 de kosten van API-aanroepen met wel 40% en verkortte de tijd die nodig was met wel 37%. Dit komt omdat de AI geen tijd verspilde aan het proberen te bewijzen van onmogelijke zaken of het herschrijven van code die structureel fout was.
- Het "Gezamenlijke" Voordeel: Om te bewijzen dat het "gezamenlijk plannen" het geheime ingrediënt was, voerden ze een test uit waarbij de AI de code plande maar het bewijs niet vooraf plande. Deze "alleen-code-planning"-methode presteerde slechter dan P3, wat bevestigde dat het denken over het bewijs terwijl men de code plant, het verschil maakt.
Een Praktijkvoorbeeld: De Red-Black Tree
Om te laten zien hoe dit in de praktijk werkt, keken de auteurs naar een klassiek informaticaprobleem: het verwijderen van een knoop uit een "red-black tree" (een complexe datastructuur die wordt gebruikt om gegevens efficiënt te organiseren).
- De Oude Manier (Programma-dan-Bewijs): De AI legde zich vast op een specifieke manier om de knoop te verwijderen. Het bleek dat deze manier structureel zo rommelig was dat het bewijs meer dan 6.300 regels code vereiste om de gaten te dichten, of het faalde volledig.
- De P3-Manier: De AI plande eerst de verwijdering. De AI realiseerde zich dat een andere structurele aanpak makkelijker te bewijzen zou zijn. De AI hield zich aan dat plan en loste het probleem op in slechts 1.105 regels.
Waarom Dit Belangrijk Is
Dit artikel suggereert dat als we willen dat AI echt betrouwbare software schrijft, we moeten stoppen met het behandelen van de "code" en het "bewijs" als twee aparte taken. Door de AI te dwingen om na te denken over de wiskundige veiligheid van de code terwijl hij de code zelf ontwerpt, krijgen we software die niet alleen correct is door constructie, maar ook goedkoper en sneller te produceren is. Het is een verschuiving van "repareer het later" naar "bouw het in één keer goed", wat ervoor zorgt dat de software waarop we vertrouwen net zo solide is als de wiskunde die bewijst dat het werkt.
Verdrinkt u in papers in uw vakgebied?
Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.