
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών A Higher-Order Extension of Prolog with Polymorphic Type Inference ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ΕΜΜΑΝΟΥΗΛ ΚΟΥΚΟΥΤΟΣ Επιβλέπων : Νικόλαος Σ. Παπασπύρου Επικ. Καθηγητής Ε.Μ.Π. Αθήνα, Ιούλιος 2013 Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών A Higher-Order Extension of Prolog with Polymorphic Type Inference ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ΕΜΜΑΝΟΥΗΛ ΚΟΥΚΟΥΤΟΣ Επιβλέπων : Νικόλαος Σ. Παπασπύρου Επικ. Καθηγητής Ε.Μ.Π. Εγκρίθηκε από την τριμελή εξεταστική επιτροπή την 12η Ιουλίου 2013. ........................................... ........................................... ........................................... Νικόλαος Σ. Παπασπύρου Κωστής Σαγώνας Δημήτρης Φωτάκης Επικ. Καθηγητής Ε.Μ.Π. Αν. Καθηγητής Ε.Μ.Π. Λέκτορας Ε.Μ.Π. Αθήνα, Ιούλιος 2013 ........................................... Εμμανουήλ Κουκουτός Διπλωματούχος Ηλεκτρολόγος Μηχανικός και Μηχανικός Υπολογιστών Ε.Μ.Π. Copyright c Εμμανουήλ Κουκουτός, 2013. Με επιφύλαξη παντός δικαιώματος. All rights reserved. Απαγορεύεται η αντιγραφή, αποθήκευση και διανομή της παρούσας εργασίας, εξ ολοκλήρου ή τμήματος αυτής, για εμπορικό σκοπό. Επιτρέπεται η ανατύπωση, αποθήκευση και διανομή για σκοπό μη κερδοσκοπικό, εκπαιδευτικής ή ερευνητικής φύσης, υπό την προϋπόθεση να αναφέρεται η πηγή προέλευσης και να διατηρείται το παρόν μήνυμα. Ερωτήματα που αφορούν τη χρήση της εργασίας για κερδοσκοπικό σκοπό πρέπει να απευθύνονται προς τον συγγραφέα. Οι απόψεις και τα συμπεράσματα που περιέχονται σε αυτό το έγγραφο εκφράζουν τον συγγραφέα και δεν πρέπει να ερμηνευθεί ότι αντιπροσωπεύουν τις επίσημες θέσεις του Εθνικού Μετσόβιου Πολυτεχνείου. στη μητέρα μου Περίληψη Από όταν σχεδιάστηκε η Prolog, ο λογικός προγραμματισμός έγινε ένα από τα επικρατέστερα μοντέλα προγραμματισμού. Ο λογικός προγραμματισμός είναι παραδοσιακά πρώτης τάξης. Ωστόσο, έχουν υπάρξει κάποιες προσπάθειες να επεκταθεί με χαρακτηριστικά υψηλότερης τάξης. Μία πρόσφατη εργασία των Χαραλαμπίδη κ.α. προτείνει μία καινοτόμα εναλλακτική στις προηγούμε- νες προσπάθειες. Οι συγγραφείς ορίζουν ένα θεωρητικό πλαίσιο, H, με στατικό σύστημα τύπων και εκτατή σημασιολογία. Σε αντίθεση με προηγούμενα πλαίσια υψηλότερης τάξης με εκτατή σημασιολο- γία, το δικό τους επιτρέπει μη αρχικοποιημένες μεταβλητές υψηλότερης τάξης. Παρέχουν επίσης μία πρωτότυπη υλοποίηση, υπό το όνομα H. Σε αυτή τη διπλωματική εργασία, συνεχίζουμε τη δουλειά των Χαραλαμπίδη κ.α. για να υπερβούμε δύο μειονεκτήματά της: • Η H είναι αυτή τη στιγμή ασύμβατη με την Prolog, το εκ των πραγμάτων σημείο αναφοράς για το λογικό προγραμματισμό. Πιο συγκεκριμένα, απλά προγράμματα σε Prolog που θεωρητι- κά ανήκουν στο υποσύνολο πρώτης τάξης της H δεν γίνονται δεκτά από την H. • Η H δεν υποστηρίζει πολυμορφικά κατηγορήματα. Για να υπερβούμε αυτά τα μειονεκτήματα, επανασχεδιάζουμε την H, στοχεύοντας σε μια υλοποίηση που θα μπορεί να χειριστεί ένα υπερσύνολο υψηλότερης τάξης της συνηθισμένης Prolog, και την επεκτείνουμε με ένα πολυμορφικό σύστημα συμπερασμού τύπων. Ονομάζουμε το καινούριο μας πλαί- σιο polyH. Στη συνέχεια προτείνουμε μία γλώσσα προγραμματισμού βασισμένη στο πλαίσιο αυτό, την polyH, η οποία είναι σχεδιασμένη για να αποτελέσει μια επέκταση υψηλότερης τάξης της Prolog, και για την οποία παρέχουμε μια πρωτότυπη υλοποίηση. Λέξεις κλειδιά Συμπερασμός τύπων, πολυμορφισμός, λογικός προγραμματισμός, προγραμματισμός υψηλής τάξης, Prolog 7 Abstract Since the design of Prolog, logic programming has been one of the most prominent programming paradigms. Logic programming has traditionally been first-order. However, there have been some attempts to extend it with higher-order features. A recent work by Charalambidis et al. proposes an innovative alternative to the previous attempts. Its authors define a framework, H, with a static typing discipline and an extensional semantics. Unlike previous extensional higher-order frameworks, their framework allows for uninstantiated higher-order variables. They also provide a prototype implementation, H. In this thesis, we build on this work of Charalambidis et al. to overcome two drawbacks: • H is currently incompatible with Prolog, the de-facto standard in logic programming. More specifically, simple Prolog programs which theoretically belong in the first-order subset of H are not accepted by H. • H supports no polymorphic predicates. To overcome these drawbacks, we redesign H, aiming at an implementation that could handle a higher- order proper superset of ordinary Prolog, and extend it with a polymorphic type inference system. The new framework is named polyH. Then, we propose a surface language over our framework, polyH, which is designed to be a higher-order extension of Prolog, and of which we provide a prototype implementation. Key words Type inference, polymorphism, logic programming, higher-order programming, Prolog 9 Ευχαριστίες Καταρχήν, θα ήθελα να ευχαριστήσω τον επιβλέποντα αυτής της διπλωματικής, Νικόλαο Παπασπύ- ρου, για την πολύτιμη καθοδήγησή του κατά τη διάρκεια εκπόνησης της διπλωματικής μου. Επίσης τους καθηγητές μου Δημήτρη Φωτάκη και Κωστή Σαγώνα, και όσους άλλους συμβάλλουν θετικά στη λειτουργία του Πολυτεχνείου. Επίσης, θα ήθελα να ευχαριστήσω τον Άγγελο Χαραλαμπίδη, υποψήφιο διδάκτορα του ΕΚΠΑ, για τις παρατηρήσεις του και τη βοήθειά του. Ακόμα, ευχαριστώ τους γονείς μου, που πάντα με κινητοποιούσαν και με υποστήριζαν στις σπουδές μου. Τέλος, ένα μεγάλο ευχαριστώ στους συμφοιτητές και τους φίλους μου, που δουλέψαμε και ζήσαμε μαζί αυτά τα μοναδικά χρόνια. Εμμανουήλ Κουκουτός, Αθήνα, 12η Ιουλίου 2013 Η εργασία αυτή είναι επίσης διαθέσιμη ως Τεχνική Αναφορά CSD-SW-TR-1-13, Εθνικό Μετσόβιο Πολυτεχνείο, Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών, Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών, Εργαστήριο Τεχνολογίας Λογισμικού, Ιούλιος 2013. URL: http://www.softlab.ntua.gr/techrep/ FTP: ftp://ftp.softlab.ntua.gr/pub/techrep/ 11 Contents Περίληψη ::::::::::::::::::::::::::::::::::::::::::: 7 Abstract :::::::::::::::::::::::::::::::::::::::::::: 9 Ευχαριστίες :::::::::::::::::::::::::::::::::::::::::: 11 Contents :::::::::::::::::::::::::::::::::::::::::::: 13 List of Figures ::::::::::::::::::::::::::::::::::::::::: 15 1. Introduction :::::::::::::::::::::::::::::::::::::::: 17 1.1 Objectives ........................................ 17 1.2 Motivation ........................................ 17 1.3 Outline of the Thesis .................................. 18 2. An overview of H ::::::::::::::::::::::::::::::::::::: 19 2.1 An Intuitive Approach to H ............................... 19 2.2 Types in H ....................................... 20 2.3 Syntax of H ....................................... 21 2.4 Semantics of H ..................................... 21 2.5 H .......................................... 22 2.6 Shortcomings of H and H ............................. 23 3. polyH: A Framework for Higher-Order Logic Programming ::::::::::::: 25 3.1 Syntax of polyH ..................................... 25 3.2 The Type System of polyH ............................... 26 3.2.1 Types and Environments ............................ 26 3.2.2 Typing Rules .................................. 27 3.2.3 The Unification Algorithm ........................... 29 4. polyH: a Higher-Order Extension of Prolog :::::::::::::::::::: 31 4.1 Lexical Conventions of polyH ........................... 31 4.2 The Syntax of polyH ................................ 31 4.2.1 Syntax of Expressions ............................. 31 4.2.2 Syntax of Sentences and Programs ....................... 32 4.3 Implementation of polyH ............................. 33 5. Transforming polyH to polyH :::::::::::::::::::::::::::: 35 5.1 Inferring the Meaning and Arity of Constants ..................... 35 5.2 Dependency Analysis .................................. 36 5.3 Mapping polyH to polyH ............................. 37 5.3.1 Transforming Expressions ........................... 37 5.3.2 Transforming Clauses ............................. 37 13 5.3.3 Transforming Rules and Directives ...................... 40 5.4 Examples of Transformations .............................. 40 6. Examples ::::::::::::::::::::::::::::::::::::::::: 43 6.1 First-order List Predicates ................................ 43 6.2 Higher-order List Predicates .............................. 44 6.3 A Comment on List Predicates ............................. 45 6.4 Generic Higher-order Predicates ............................ 45 6.5 The call/1 meta-predicate ............................... 46 7. Concluding Remarks ::::::::::::::::::::::::::::::::::: 49 7.1 Contribution ....................................... 49 7.2 Limitations and Future Work .............................. 49 Bibliography ::::::::::::::::::::::::::::::::::::::::: 51 14 List of Figures 3.1 The syntax of expressions in polyH .......................... 26 3.2 Types in polyH ..................................... 27 3.3 Unification ....................................... 29 4.1 Lexical conventions in polyH ........................... 31 4.2 The syntax of expressions in polyH ........................ 32 4.3 Sentences and programs in polyH ......................... 32 4.4 The syntax of clauses in polyH .......................... 33 4.5 Goals and directives in polyH ........................... 33 5.1 Transforming a polyH expression to polyH .................... 38 15 Chapter 1 Introduction 1.1 Objectives This thesis aims at defining and implementing
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages52 Page
-
File Size-