Programverifiering erbjuder ett ramverk för att säkerställa program korrekthet och därför systematiskt eliminera olika klasser av buggar. Att sluta loopinvarianter är en av de största utmaningarna bakom automatisk verifiering av verkliga program som ofta innehåller många loopar. I denna uppsats presenterar vi Continuous Logic Network (CLN), en ny neural arkitektur för automatiskt lärande loopinvarianter direkt från programutförande spår. Till skillnad från befintliga neurala nätverk, CLNs kan lära sig exakta och explicita representationer av formler i tillfredsställande Modulo Theories (SMT) för loop invariants från programutförande spår. Vi utvecklar en ny ljud- och fullständig semantisk kartläggning för att tilldela SMT-formler till kontinuerliga sanningsvärden som gör att CLNs kan tränas effektivt. Vi använder CLNs för att implementera ett nytt inference system för loopinvarianter, CLN2INV, som avsevärt överträffar befintliga metoder på den populära Code2Inv datasetet. CLN2INV är det första verktyget för att lösa alla 124 teoretiskt lösa problem i datasetet Code2Inv. Dessutom tar CLN2INV bara 1,1 sekunder i genomsnitt för varje problem, vilket är 40× snabbare än befintliga metoder. Vi visar vidare att CLN2INV även kan lära sig 12 betydligt mer komplexa loopinvarianter än de som krävs för Code2Inv datasetet.
Däremot använder CLN2INV CLNs för att lära SMT formler för invarianter direkt från programdata REF.
CLN2INV: Learning Loop Invariants with Continuous Logic Networks
{'venue': 'ArXiv', 'journal': 'ArXiv', 'mag_field_of_study': ['Mathematics', 'Computer Science']}