Learning and Exploration in Automated Theorem Proving

Fel i datorprogram, så kallade buggar, kan få stora konsekvenser. År 2002 beräknades buggar i program kosta den amerikanska ekonomin $60 miljarder per år enligt en undersökning av National Institute for Standards and Technology. Den siffran är knappast lägre idag, när datorer används i än större utsträckning till en mängd vitt skilda uppgifter. Kostnaden för att fixa en bug kan vara ännu högre om den upptäcks efter att datorsystemet har börjat användas. Toyota tvingades till exempel år 2010 återkalla 400 000 Prius-modeller efter att en bug hade upptäckts i programmet som kontrollerade bromssystemet. Att enbart testa program kan inte ge hundraprocentiga garantier för att det inte finns några buggar eftersom det är praktiskt omöjligt att testa alla möjliga kombinationer av indata till stora system. Formella verifikationsmetoder har därför vuxit i popularitet och blivit allt viktigare som komplement till testning. Formella metoder används för att matematiskt bevisa att programmet verkligen har vissa önskvärda egenskaper, och t.ex. därför aldrig kommer att krascha på vissa sätt. Tyvärr är sådana bevis ofta komplicerade och kräver både tid och expertis, något som de flesta programmerare saknar. Viss hjälp kan fås av program som kallas teorembevisare och kan assistera eller ibland t.o.m. helt automatiskt bevisa vissa egenskaper. Många etablerade teorembevisare har numer stora elektroniska matematiska bibliotek som användaren kan bygga vidare på för att skapa nya matematiska teorier eller som hjälp med nya bevis. Tyvärr kan bibliotekens storlek och inkonsekvent representation stå i vägen för effektiv återanvändning av kunskapen som finns tillgänglig. Ofta kan det vara lättare att skapa ett nytt matematiskt teoribibliotek istället för att ägna tid åt att söka efter liknande teorier som kan anpassas till ett nytt sammanhang. Vårt projekt har som syfte att bättre utnyttja dessa bibliotek för att öka automatiseringsgraden i teorembevisare och därigenom göra dem lättare att använda. Vi kommer att använda tekniker för maskininlärning för att bygga statistiska modeller baserat på data i bevisbibliotek, för att t.ex. kunna identifiera likheter mellan olika bevis. Statistiska metoder som maskininlärning är bra på att hitta mönster i stora mängder data men kan inte förklara varför dessa mönster uppstått. Vi vill därför kombinera detta med en ny teknik som vi kallar Teoribildning (Theory Exploration). Ett teoribildningssystem har som uppgift att automatiskt skapa en lämplig matematisk representation, eller teori, av t.ex. ett datorprogram som vi vill verifiera. Desto rikare matematisk teori som vi kan ge till en teorembevisare, desto kraftfullare blir den, och fler bevis kan då klaras av helt automatiskt. För att ett teoribildningssystem ska vara effektivt kan information från maskininlärning vara till stor hjälp. Om vi exempelvis försöker bevisa någon ny egenskap hos vårt program kan teoribildningssystemet först få information om liknande bevis från maskininlärningssystemet, och sedan använda dessa liknande bevis för att söka efter ett analogt bevis för den nya egenskapen på ett effektivt sätt. Olika sorters program och egenskaper behöver olika bevistekniker. Vi kommer att fokusera på induktionsbevis, som behövs för att bevisa egenskaper hos program som är baserade på rekursion. Sådana program räknar ut en lösning på ett problem genom att kombinera lösningar på mindre instanser av samma problem. Funktionella programmeringsspråk, till exempel språket Haskell, är exempel där rekursion förekommer mycket ofta. För att bevisa egenskaper hos funktionella program behövs i regel induktionsbevis, men i befintliga verifikationssystem måste induktionsbevis oftast göras interaktivt, med den mänskliga användaren som guidar bevisets olika steg. För att kunna göra det krävs, som tidigare nämnts, en hel del kunskap, tid och erfarenhet av liknande bevis. Vårt mål är att utveckla nya tekniker för att automatisera induktionsbevis som kan integreras i verktyg för verifiering av program. En programmerare kommer till exempel att kunna använda våra tekniker till att automatiskt kontrollera och bevisa att programmet fungerar som avsett.

Participants

Moa Johansson (contact)

Forskarassistent vid Software Technology (Chalmers)

Funding

Swedish Research Council (VR)

Funding years 2015–2018

More information

Latest update

2015-09-04