I den här artikeln studerar vi problemet med att generera ingångar till ett högre ordningsprogram som orsakar fel. Vi närmar oss först problemet i inställningen av PCF, en maskinskriven, kärna funktionellt språk och bidra med den första relativt kompletta metoden för att bygga motexempel för PCF-program. Metoden är relativt komplett med avseende på en första ordningens lösare över bastyperna av PCF. I praktiken innebär detta att en SMT-lösare kan användas för effektiv, automatiserad generering av högre ordning motexempel för en stor klass av program. Vi uppnår detta resultat genom att använda en ny form av symbolisk exekvering för högre ordningsprogram. Den anmärkningsvärda aspekten av denna symboliska avrättning är att även om symboliska högre ordning ingångar och värden beaktas, vägen villkor förblir en första ordningen formel. Vår hantering av symbolisk funktionstillämpning möjliggör rekonstruktion av högre ordning motexempel från denna första ordning formel. Efter att ha fastställt våra huvudsakliga teoretiska resultat skisserar vi hur vi ska tillämpa metoden på otypade, högre ordningsspråk med förstklassiga kontrakt och visar hur motexempelgenerering kan användas för att upptäcka kontraktsbrott i denna miljö. För att validera vårt tillvägagångssätt implementerar vi ett verktyg som genererar motexempel för felaktiga moduler skrivna i Racket.
REF presenterade ljud och relativt kompletta semantik för att konstruera ett motexempel på ett högre ordningsprogram.
Relatively complete counterexamples for higher-order programs
{'venue': 'PLDI 2015', 'journal': None, 'mag_field_of_study': ['Computer Science']}