Towards Flexible Goal-Oriented Logic Programming
Total Page:16
File Type:pdf, Size:1020Kb
FACULTY OF SCIENCES Towards Flexible Goal-Oriented Logic Programming ir. Benoit Desouter Dissertation submitted in partial fulfillment of the requirements for the degree of Doctor of Computer Science Supervisors: prof. dr. ir. Tom Schrijvers prof. dr. ir. Marko van Dooren Department of Applied Mathematics, Computer Science and Statistics Faculty of Sciences, Ghent University ii Acknowledgments As it feels more natural to thank people in the language that we have used on a daily basis during the journey towards completing this PhD thesis, I'll use Dutch for most of the next few pages. In de eerste plaats wil ik mijn promotoren Tom en Marko bedanken. Tom, bedankt voor het geduld als ik occasioneel iets maar half begreep, en om er altijd vertrouwen in te blijven hebben. Je hebt me heel wat kansen aangereikt, waardoor ik van heel wat onderwerpen iets heb opgestoken. Marko, hoewel je er pas halverwege bijkwam, toonde je al snel interesse voor het onderwerp en heb je er vanuit je eigen expertise heel wat aan toegevoegd. Je deur stond altijd voor me open als ik even een tussentijdse statusupdate wou geven. Bedankt voor de babbels over vanalles en nog wat, en om me grondig te betrekken bij het geven van Programmeren 1. Ik heb nog heel wat bijgeleerd over objec- tori¨entatie door jouw visie, slides en codevoorbeelden. Daarnaast ook bedankt om mijn lokale LATEX-goeroe te zijn: niettegenstaande ik LATEX al tien jaar lang gebruik, heb ik voor het precies goed krijgen van deze thesis heel wat nieuwe pakketten en trucjes moeten gebruiken, met regelmatig vreemde out- put of cryptische foutmeldingen tot gevolg die ik niet altijd alleen kon oplossen | of het zou me op zijn minst veel meer tijd gekost hebben. Ook wil ik graag Bart Demoen, Jan Wielemaker, Christophe Scholliers, Kris Coolsaet en Gunnar Brinkmann bedanken voor het grondig nalezen van mijn thesis en voor hun kritische feedback. In het bijzonder wil ik Bart bedanken voor zijn ondersteuning van hPro- log, het experimentele Prolog-systeem waarop ik zoveel heb gevloekt. Zon- der hProlog zou het meeste van deze thesis echter niet mogelijk geweest zijn. Meer dan eens heb je geduldig geantwoord op mijn emails met vragen over het iii iv \vreemde" gedrag van hProlog. Bedankt voor de stroom aan Prolog tips en WAM-expertise. Het is bijzonder leuk als je werk ook gebruikt wordt door iemand anders dan jezelf, en zeker als die persoon een alom gerespecteerde voortrekker is in dat gebied. Daarom wil ik Jan bedanken om onze implementatie van tabling te porten naar SWI-Prolog, de datastructuren te herschrijven in C en het geheel op te nemen in de offici¨ele development release. Daardoor heeft SWI- Prolog nu een experimentele tabling implementatie die stapsgewijs verbeterd kan worden. Het was heel onverwachts om zoveel positieve reacties te zien uit de SWI-Prolog community. Gunnar en Kris, bedankt om de administratie op jullie te nemen; ik weet dat dat niet altijd de leukste taak is. I would also like to thank LogicBlox, Inc. for giving us the ability to inves- tigate the integration of Datalog and constraint programming in their system. Ik heb heel graag gewerkt op de vakgroep WE02 omwille van de goede sfeer. De verzameling van TWISTers die ik moet bedanken is in de loop der jaren behoorlijk groot geworden. Om die verzameling te kunnen neerschrijven, heb ik noodgedwongen een volgorde moeten kiezen, hoewel ik dat liever niet had moeten doen. Op andere momenten in de tijd was de volgorde misschien anders geweest. Mezelf kennende, ben ik waarschijnlijk ook wel iemand onterecht vergeten, daarvoor al vast een sorry en dankjewel voor wie hieronder geen specifieke vermelding heeft, maar zich toch aangesproken voelt. Herman, ik had me geen betere bureaugenoot kunnen indenken. Merci voor de komische noot die nooit ver weg was, de ernst wanneer het nodig was en voor niet-ophoudende babbels over geeky en minder geeky onderwerpen. Lynn en Sofie, bedankt voor de vele aangename gesprekken, het aanhoren van mijn occasionele gezeur, en voor de inside jokes over het oprichten van een eigen vakgroep bestaande uit de mensen van de \vaagheid" en mezelf. Aan de wan- delzoektocht die we met ons drie hebben ondernomen op de personeelssportdag 2015, heb ik hele goede herinneringen. Lynn, bedankt om op de zonnige mei- dag toen Bart, Sofie en wij op het grasveld achter S9 zaten te werken (wegens de veel te warme bureaus), bij het zien van een eerdere versie van dit manu- script, spontaan suggesties te maken voor het verbeteren van mijn wiskundige notatie. Virginie, bedankt voor je enthousiasme, zowel bij badminton als op het werk, en voor het hart onder de riem wanneer ik daar nood aan had. Om gelijkaardige redenen een grote dankjewel voor het het een\man"spraesidium van onze niet-erkende \studentenvereniging": Catherine. Daarbovenop nog een dankjewel voor het organiseren van spelletjesavonden, weekendjes en der- gelijke. Je besefte van bij het begin als geen ander het belang van teambuilding en je slaagt er telkens opnieuw in om elke vreemde eend in de bijt zich al snel v thuis te laten voelen. Bij toekomstige organisaties zal ik zeker van de partij zijn; jullie zijn nog niet van mij af, beloofd! Charlotte, dankjewel voor bab- bels over verbouwingen, over je schattige dochtertje Emilina (bij de laatste aanpassing van dit dankwoord, ben je nog maar net bevallen van Jolan) en zoveel meer. Machteld en Jens, dankjewel voor het tweewekelijks reserveren van de badmintonpleintjes in het GUSB en voor goede babbels. Dieter en Bart, jullie waren als \de informatica-assistenten" best wel een voorbeeld voor mij. Bedankt daarvoor! Felix, ik ben er zeker van dat ook jij een voorbeel- dassistent zult zijn voor toekomstige collega's. Katia en Ann, de koffiepauzes waren voor mij de manier om even alle dagelijkse beslommeringen rond onder- zoek en onderwijs uit mijn hoofd te zetten. Bedankt om die momenten nog aangenamer te maken. Hilde, bedankt voor alle petten die jij droeg. Kris, om het er na zoveel keer inwrijven dat ik qua diploma een ingenieur ben, op je geheel eigen wijze toch je appreciatie voor me uit te drukken: bedankt! Glad, niet alleen tijdens je S9 tijd, maar telkens we elkaar op straat tegenkwamen, was je bereid je ervaring met me te delen. We hebben samen behoorlijk de draak gestoken met alles wat maar enigszins naar bureaucratie rook. Nico, ook uit jouw ervaring kon ik rijkelijk putten. Joyce en jij zijn bovendien fan- tastische TWIST-organisatoren en Minions! Micha¨el, officieel was je de peter van Herman, maar tijdens die eerste onzekere weken, nu 4 jaar geleden, deed je meer dan je best om ook mij op m'n gemak te stellen. Jean-Marie, Jan en Dominiek, jullie enthousiasme en inzet was aanstekelijk! Annick, Davy, Nico, Niels en Bert, voor het samen geven van en uitgebreid discussi¨eren over Programmeren 1. De cursus van vier jaar geleden lijkt in het niets meer op de cursus van vandaag; dat bracht vaak een hoop last minute werk en kinderziektes met zich mee, die we samen hebben aangepakt en over- wonnen. We hebben honderden studenten naar de eindmeet geleid. Annick, dankjewel voor het delen van pure onderwijservaring, je vele voorbereidings- werk in het weekend, en voor de aangename babbels tussenin! Ik keek altijd uit naar een les Programmeren 1. Davy, bedankt voor de technische hulpmid- delen waarmee we de uitdaging konden aangaan om eerstejaarsstudenten zo goed mogelijk de basis van objectori¨entatie bij te brengen. Ik bedoel natuurlijk Indianio en Capthook. Ook merci voor de luchtige insteek die bij jou nooit ver te zoeken was. Nico en Niels, steeds als ik weer eens dreigde bedolven te worden onder de berg oefeningen en bijhorende testen die we in de loop der jaren opgesteld en gewijzigd hebben, kon ik op jullie hulp rekenen. Sarah, je verdient een bijzondere vermelding voor je inspirerende persoon- lijkheid. Zelden heb ik iemand ontmoet met zo'n geduld, rustig, realistisch en supervriendelijk. Bedankt voor alle korte en langere topgesprekken, voor je verstandige opmerkingen en om me meer dan eens met m'n mond vol tanden vi te zetten. Al ben je dan al bijna twee jaar vol toewijding aan je doctoraat aan het schrijven, je blijft de verstandigste student aan wie ik ooit les heb mogen geven. Als halftime TWIST-er, halftime VIB-er en nog met een promotor in het verre Granada, heb je het misschien niet altijd even gemakkelijk, maar ik heb je niet ´e´enkeer horen klagen. Integendeel, je benadert alles vanuit je positieve maar kritische ingesteldheid. Aster, Cara en Malin (in alfabetische volgorde), ik ben behoorlijk trots op jullie; daarom kunnen jullie hier ook niet ontbreken. Tot slot wil ik ook mijn ouders bedanken voor alle goede zorgen en voor alle kansen. Jullie hebben me altijd gesteund, al snapten jullie vaak helemaal niks van wat ik aan het doen was, en jullie stonden ook altijd klaar voor me. Contents Acknowledgements iii 1 Introduction 1 1.1 The Purpose and Structure of this Dissertation . .5 1.2 Scientific Output . .7 2 Goal-directed Logic Programming 11 2.1 Introduction . 11 2.2 Vanilla Meta-Interpreter . 21 2.3 Definite Clause Grammars . 22 2.4 Nonbacktrackable Variables and Mutation . 23 2.4.1 Global Nonbacktrackable Variables . 24 2.4.2 Nonbacktrackable Mutation . 25 3 Modular Search 27 3.1 Introduction . 27 3.2 Problem Statement . 28 3.2.1 Problems with this Approach . 29 3.2.2 Current Solutions . 30 3.3 Solution Overview . 31 3.3.1 User Perspective . 31 3.3.2 Modularity Aspects . 33 3.4 Search Method Library . 36 3.4.1 Discrepancy-Bounded Search . 36 3.4.2 Iterative Deepening .