Vi presenterar en automatiserad teknik för att generera kompilatorer optimeringar från exempel på betongprogram före och efter förbättringar har gjorts till dem. Den viktigaste tekniska insikten i vår teknik är att ett bevis på likvärdighet mellan de ursprungliga och omvandlade betongprogrammen informerar oss om vilka aspekter av programmen som är viktiga och vilka som kan förkastas. Vår teknik använder därför dessa bevis, som kan produceras genom översättningsvalidering eller en proof-carrying kompilator, som en vägledning för att generalisera de ursprungliga och omvandlade programmen till allmänt tillämpliga optimeringsregler. Vi presenterar en kategori-teoretisk formalisering av vår bevis generaliseringsteknik. Denna abstraktion gör vår teknik tillämplig på logiker förutom vår egen. I synnerhet visar vi hur vår teknik också kan användas för att lära sig frågeoptimering för relationella databaser eller för att hjälpa programmerare i felsökning typ fel. Slutligen visar vi experimentellt att vår teknik gör det möjligt för programmerare att utbilda en kompilator med tillämpningsspecifika optimeringar genom att ge konkreta exempel på originalprogram och önskade transformerade program. Vi visar också hur det gör det möjligt för en kompilator att lära sig effektiva-till-kör optimeringar från dyra-till-kör super-optimizers.
Tate m.fl. REF använder en beviskontroll för att lära sig transformationer från exempel.
Generating compiler optimizations from proofs
{'venue': "POPL '10", 'journal': None, 'mag_field_of_study': ['Computer Science']}