Normalization and Partial Evaluation of Functional Logic Programs M.Sc. Björn Peemöller Dissertation zurErlangungdesakademischenGrades DoktorderIngenieurwissenschaften (Dr.-Ing.) derTechnischenFakultät derChristian-Albrechts-UniversitätzuKiel eingereichtimJahr2016 KielComputerScienceSeries(KCSS)2017/1dated2017-06-11 URN:NBNurn:nbn:de:gbv:8:1-zs-00000328-a6 ISSN2193-6781(printversion) ISSN2194-6639(electronicversion) Electronicversion,updates,errataavailableviahttps://www.informatik.uni-kiel.de/kcss [email protected] PublishedbytheDepartmentofComputerScience,KielUniversity ProgrammingLanguagesandCompilerConstruction Pleaseciteas: BjörnPeemöller.NormalizationandPartialEvaluationofFunctionalLogicPrograms.Number2017/1 Ź inKielComputerScienceSeries.DepartmentofComputerScience,2017.Dissertation,Facultyof Engineering,KielUniversity. @book{Peemoeller2017, author = {Bj{\"o}rn Peem{\"o}ller}, title = {Normalization and Partial Evaluation of Functional Logic Programs}, publisher = {Department of Computer Science, Kiel University}, year = {2017}, number = {2017/1}, isbn = {978-3-7448-2192-6} series = {Kiel Computer Science Series}, note = {Dissertation, Faculty of Engineering, Kiel University} } ©2017byBjörnPeemöller HerstellungundVerlag:BoD—BooksonDemand,Norderstedt ISBN:978-3-7448-2192-6 ii About this Series The Kiel Computer Science Series (KCSS) covers dissertations, habilitation theses, lecturenotes,textbooks,surveys,collections,handbooks,etc.writtenattheDepart- ment of Computer Science at Kiel University. It was initiated in 2011 to support authorsinthedisseminationoftheirworkinelectronicandprintedform,without restrictingtheirrightstotheirwork.Theseriesprovidesaunifiedappearanceand aimsathigh-qualitytypography.TheKCSSisanopenaccessseries;allseriestitlesare electronicallyavailablefreeofchargeatthedepartment’swebsite.Inaddition,authors areencouragedtomakeprintedcopiesavailableatareasonableprice,typicallywith aprint-on-demandservice. Pleasevisithttp://www.informatik.uni-kiel.de/kcssformoreinformation,forinstruc- tionshowtopublishintheKCSS,andforaccesstoallexistingpublications. iii 1.Gutachter: Prof.Dr.MichaelHanus Christian-Albrechts-UniversitätzuKiel 2.Gutachter: Priv.-Doz.Dr.FrankHuch Christian-Albrechts-UniversitätzuKiel DatumdermündlichenPrüfung:25.Juli2016 iv Zusammenfassung DieseArbeitbefasstsichmitderNormalisierungundderpartiellenAuswertungvon Programmeninderfunktional-logischenProgrammierspracheCurry.DasParadigma derfunktional-logischenProgrammierungkombiniertdiebeidenwichtigstenBereiche derdeklarativenProgrammierung,diefunktionaleunddielogischeProgrammierung. WährendfunktionaleSprachenKonzeptewiealgebraischeDatentypen,Funktionen höhererOrdnungodereinebedarfsgesteuerteAuswertungbereitstellen,bietenlogi- scheSpracheneinenicht-deterministischeAuswertungsowieeineeingebauteSuche nachErgebnissen.DiesebeidenParadigmenwerdeninfunktional-logischenSprachen kombiniert,sodasseineVielzahlanSprachkonstruktenundKonzeptenzurVerfü- gungstehtumkompakteundausdrucksstarkeProgrammezuentwickeln.Jedoch erschwerendieVielzahlsyntaktischerKonstrukteundderhoheAbstraktionsgrad auchdieÜbersetzungineffizienteZielprogramme. ZurReduktiondersyntaktischenKomplexitätbeinhaltengängigeKompilierungs- schemataüblicherweiseeineNormalisierungsphase,inderkomplexeKonstrukteschritt- weisedurcheinfachereersetztwerden,biseinProgrammschließlichineinermini- malen Teilsprache ausgedrückt werden kann. Obwohl einzelne Transformationen vergleichsweiseeinfachsind,mussauchderenkorrekteKombinationsichergestellt sein,damitdieKonstrukteihreursprünglicheBedeutungbehalten. DieEffizienznormalisierterProgrammekanndannmittelsverschiedenerOptimie- rungstechnikenverbessertwerden.EinesehrmächtigeTechnikisthierbeidiepartielle Auswertung,beiderzurKompilierungszeitdieAusführungbestimmterProgramm- teile simuliert wird, um so ein semantisch äquivalentes Programm zu berechnen, daszurLaufzeitüblicherweiseeffizienterausgeführtwird.DadiepartielleAuswer- tung eine vollautomatische Optimierung darstellt, kann sie zudem in bestehende Kompilierungsschemata eingebunden werden. Allerdings erfordert dies auch die TerminierungdesOptimierungsprozesses,waseinewesentlicheHerausforderung nebendersemantischenÄquivalenzdarstellt. DieseArbeitbetrachtetdieSpracheCurryalsRepräsentantenfürdasfunktional- logischeProgrammierparadigma.ZunächstwirdeineformaleDarstellungderNor- malisierung von Curry-Programmen entwickelt, um die korrekte Transformation unterschiedlicherSprachkonstruktefestzulegen.FürdieresultierendeKernsprache wirddannderendynamischeSemantikdefiniert,umdaraufaufbauendeingrundle- gendesSchemazurpartiellenAuswertungzuentwickelnunddessenKorrektheitund Terminierungzuzeigen.AufgrundderNormalisierungeignetsichdiesesSchema bereitszurpartiellenAuswertungbeliebigerCurry-Programme.DesWeiterenwird dieImplementierungeinespraktischenpartiellenAuswertersskizziertunddessen AnwendbarkeitundVorteilhaftigkeitanhandeinigertypischerBeispieledemonstriert. v Abstract This thesis deals with the development of a normalization scheme and a partial evaluatorforthefunctionallogicprogramminglanguageCurry.Thefunctionallogic programmingparadigmcombinesthetwomostimportantfieldsofdeclarativepro- gramming,namelyfunctionalandlogicprogramming.Whilefunctionallanguages provideconceptssuchasalgebraicdatatypes,higher-orderfunctionsordemand- drivenevaluation,logiclanguagesusuallysupportanon-deterministicevaluation andabuilt-insearchforresults.Functionallogiclanguagesfinallycombinethese twoparadigmsinanintegratedway,henceprovidingmultiplesyntacticconstructs andconceptstofacilitatetheconcisenotationofhigh-levelprograms.However,both thevarietyofsyntacticconstructsandthehighdegreeofabstractioncomplicatethe translationintoefficienttargetprograms. Toreducethesyntacticcomplexityoffunctionallogiclanguages,atypicalcompi- lationschemeincorporatesanormalizationphasetosubsequentlyreplacecomplex constructsbysimpleronesuntilaminimallanguagesubsetisreached.Whilethein- dividualtransformationsareusuallysimple,theyalsohavetobecorrectlycombined tomakethesyntacticconstructsinteractintheintendedway. Theefficiencyofnormalizedprogramscanthenbeimprovedbymeansofdiffer- entoptimizationtechniques.Averypowerfuloptimizationtechniqueisthepartial evaluationofprograms.Partialevaluationbasicallyanticipatestheexecutionofcertain programfragmentsatcompiletimeandcomputesasemanticallyequivalentprogram, whichisusuallymoreefficientatruntime.Sincepartialevaluationisafullyauto- maticoptimizationtechnique,itcanalsobeincorporatedintothenormalcompilation schemeofprograms.Nevertheless,thisalsorequiresterminationoftheoptimization process,whichestablishesoneofthemainchallengesforpartialevaluationbesides semanticequivalence. InthisworkweconsiderthelanguageCurryasarepresentativeofthefunctional logicprogrammingparadigm.Wedevelopaformalrepresentationofthenormal- ization process of Curry programs into a kernel language, while respecting the interferenceofdifferentlanguageconstructs.Wethendefinethedynamicsemantics ofthiskernellanguage,beforewesubsequentlydevelopapartialevaluationscheme andshowitscorrectnessandtermination.Duetothepreviouslydescribednormal- izationprocess,thisschemeisthendirectlyapplicabletoarbitraryCurryprograms. Furthermore,theimplementationofapracticalpartialevaluatorissketchedbasedon thepartialevaluationscheme,anditsapplicabilityandusefulnessisdocumentedby avarietyoftypicalpartialevaluationexamples. vii Preface by Prof. Dr. Michael Hanus Declarativeprogramminglanguagessupportthedevelopmentofreliablesoftwarein ahigh-levelmanner.Duetotheirabstractionfromaconcretecomputerarchitecture, theimplementationofdeclarativeprogramminglanguagesisdemanding.Thisthesis isaninterestingcontributiontothisproblem. BjörnPeemöller developedanopti- mizationtechniqueforfunctionallogicprogramswhichisappliedtothesourcelevel. Sincedeclarativeprogramsoftencontaingenericandre-usableoperationsthatare appliedinvariouscontexts,itisadvantageoustospecializethevarioususesofsuch operationsandgeneratenewspecializedoperationsthatareusuallymoreefficient. Thistransformationprocessiscalled“partialevaluation”andithasbeensuccessfully applied to different classes of programming languages. In fact, partial evaluation for functional logic languages has been pioneered by the Technical University of Valenciamorethanfifteenyearsago.Sincethestructureandpracticeoffunctional logicprogramminghasbeenadvancedsincethattime,theoriginalpartialevaluation techniquesarenotapplicabletomodernfunctionallogiclanguageslikeCurry. BjörnPeemöllersolvedthisgapinhisthesis.Sincepartialevaluationisacomplex process,hedevelopsapartialevaluatorforasimplifiedintermediatelanguage,called FlatCurry.InordertoapplythispartialevaluatortopracticalCurryprograms,the firstpartofthethesisspecifiesatransformationofCurryprogramsintoFlatCurry programs. Although this transformation is implemented in contemporary Curry systems,thepreciseandabstractspecificationofthistaskisanimportantcontribution whichcanbeusedasastandardreferenceinfuturework.Themainpartofthisthesis contains the specification and correctness proof of the partial evaluator. In order todevelopapracticaltool,anumberofsmallertransformationsareaddedwhich improvetheefficiencyofthegeneratedprograms.Thefinalbenchmarksdemonstrate thesuccessofhisapproach.Thedevelopedpartialevaluatorproducessimilarefficient codeastheoriginalpartialevaluator,butitisapplicabletoalargerclassofprograms. Inparticular,itisabletooptimizeprogramscontainingfunctionalpatternssothat the potential non-determinism is completely eliminated. In this way the partial evaluatorcanbeusedasanautomatictooltotransformhigh-levelnon-deterministic specificationsintoefficientdeterministicprograms. This thesis contains good and original results and I recommend it to anyone interestedinsourcecodeoptimizationtechniquesfordeclarativeprograms. MichaelHanus Kiel,October2016 ix
Description: