dc.contributor.author | Οικονόμου, Χρυσούλα | el |
dc.contributor.author | Oikonomou, Chrysoula | en |
dc.date.accessioned | 2021-07-29T10:39:03Z | |
dc.date.available | 2021-07-29T10:39:03Z | |
dc.identifier.uri | https://dspace.lib.ntua.gr/xmlui/handle/123456789/53745 | |
dc.identifier.uri | http://dx.doi.org/10.26240/heal.ntua.21443 | |
dc.rights | Αναφορά Δημιουργού - Μη Εμπορική Χρήση - Παρόμοια Διανομή 3.0 Ελλάδα | * |
dc.rights.uri | http://creativecommons.org/licenses/by-nc-sa/3.0/gr/ | * |
dc.subject | Εκλεπτυσμένοι τύποι | el |
dc.subject | Τυπική επαλήθευση | el |
dc.subject | Ανάλυση κόστους | el |
dc.subject | Δυαδικά δέντρα αναζήτησης | el |
dc.subject | Μελανέρυθρα δέντρα | el |
dc.subject | Liquid haskell | en |
dc.subject | Refinement types | en |
dc.subject | Formal verification | en |
dc.subject | Cost analysis | en |
dc.subject | Binary search trees | en |
dc.subject | Red-Black trees | en |
dc.title | Επαλήθευση ιδιοτήτων πολυπλοκότητας δυαδικών δέντρων αναζήτησης σε liquid haskell | el |
dc.title | Verifying complexity properties of binary search trees using liquid haskell | en |
heal.type | bachelorThesis | |
heal.classification | Γλώσσες προγραμματισμού | el |
heal.classification | Programming languages | en |
heal.language | el | |
heal.access | free | |
heal.recordProvider | ntua | el |
heal.publicationDate | 2021-03-26 | |
heal.abstract | Τα τελευταία χρόνια υπάρχει μεγάλη έρευνα γύρω από την ανάπτυξη τεχνικών για την τυπική επαλήθευση των προγραμμάτων. Μας ενδιαφέρει η στατική ανάλυση των ενδεχόμενων σφαλμάτων του κώδικα αποδεικνύοντας ή απορρίπτοντας ιδιότητες ορθότητας, τερματισμού, ασφάλειας μνήμης αλλά και όχι μόνο. Είναι σημαντικό να γνωρίζουμε επίσης, το κόστος εκτέλεσης ή/και την χρήση υπολογιστικών πόρων των προγραμμάτων. Τα οφέλη είναι προφανή, από την μείωση των διαφόρων σφαλμάτων του κώδικα μέχρι την αξιοπιστία του αποδεδειγμένου συστήματος. Ωστόσο, η τυπική επαλήθευση των προγραμμάτων δεν είναι συνηθισμένη και ως επί το πλείστον προορίζεται για ορισμένες ειδικές περιπτώσεις χρήσης. Οι πιο γνωστές γλώσσες προγραμματισμού με δυνατότητες τυπικής επαλήθευσης, όπως η Coq, η Agda και η Idris, χρησιμοποιούνται κυρίως από την ακαδημαϊκή κοινότητα. Ο κύριος λόγος κρύβεται πίσω από την δυσκολία στη χρήση τους. Στην παρούσα διπλωματική εργασία, εξερευνούμε την χρηστικότητα και τις δυνατότητες της Liquid Haskell (LH) και επιχειρούμε να συνεισφέρουμε στην βιβλιοθήκη της. H LH είναι μία επέκταση στο σύστημα τύπων της γλώσσας προγραμματισμού Haskell. Η επέκταση αυτή αφορά την εισαγωγή των εκλεπτυσμένων τύπων (refinement types) στο υπάρχον σύστημα τύπων, με τους οποίους εκφράζουμε ιδιότητες ορθότητας και πολυπλοκότητας. Ένα υποσύνολο των εκλεπτυσμένων τύπων είναι οι Liquid Τύποι (Logical Qualified Data Types) οι οποίοι περιορίζουν ακόμη περισσότερο τη γλώσσα των κατηγορημάτων που μπορούν να υπάρχουν στους εκλεπτυσμένους τύπους, ώστε να επιτυγχάνεται αυτόματα ο συμπερασμός τύπων στα ενδιάμεσα στάδια ενός προγράμματος, χαρακτηριστικό πολύ χρήσιμο για ένα σύστημα τύπων. Συστήματα τύπων με αυτόματο συμπερασμό τύπων καθίστανται χρήσιμα πέρα από θεωρητικά και πρακτικά για την προγραμματίστρια. Η δική μας συνεισφορά επικεντρώνεται στην ανάλυση της πολυπλοκότητας και της ορθότητας κάποιων δημοφιλών δομών δεδομένων (Binary Search Trees, Red-Black Trees) με χρήση της Liquid Haskell. Για τις περισσότερες αποδείξεις αρκεί η intrinsic μέθοδος, δηλαδή τόσο το κόστος της συνάρτησης όσο και οι ιδιότητες ορθότητας που θέλουμε να αποδείξουμε δηλώνονται στον τύπο της μέσω εκλεπτυσμένων κατηγορημάτων και αποδεικνύονται αυτόματα από τον SMT Solver. Ωστόσο, όταν τα κατηγορήματα που συνθέτουν τους εκλεπτυσμένους τύπους δεν ανήκουν στην SMT-αποφασίσιμη λογική, χρησιμοποιούμε την extrinsic μέθοδο. Δηλαδή εκφράζουμε θεωρήματα και λήμματα για τα κόστη και τις ιδιότητες ορθότητας των συναρτήσεων χρησιμοποιώντας εκλεπτυσμένους τύπους και έπειτα γράφουμε αποδείξεις για αυτά σε Haskell, χρησιμοποιώντας συνδυαστές απόδειξης (proof combinators). Ο κώδικάς μας μπορεί να βρεθεί στη διεύθυνση: \url{https://github.com/linen101/ticked-binary-search-trees} | el |
heal.abstract | In recent years there has been significant research for the development of techniques of formally verifying computer programs. We are interested in the static analysis of potential bugs in the code by means of proving or rejecting properties of correctness, termination, memory safety and more. It is also important to know the execution cost and/or the computational resource usage of various programs. The benefits are obvious, from significantly reducing the occurrence of bugs to the reliability of the formally proven system. Nevertheless, formal verification remains unusual and is mostly intended for special use cases. The most common programming languages that can be used for formal verification, like Coq, Agda and Idris, are mostly used by the academic community, the main reason being the difficulty in their usage. In this dissertation we explore the usability and usefulness of Liquid Haskell (LH), while attempting to contribute to its growing library. Liquid Haskell is an extension to the type system of the Haskell programming language, pertaining to the introduction of refinement types to the existing type system, which are used to express correctness, complexity, termination and completeness properties. A subset of refinement types are Liquid Types (Logical Qualified Data Types), that limit the language of expressible predicates for refinement types, in order to enable automatic type inference in the intermediate stages of a program, a very useful characteristic of type systems, not only for its theoretical properties but also for the practicality it offers the programmer. Our contribution is focused on the complexity and correctness analysis of specific popular data structures (Binary Search Trees, Red-Black Trees) by use of Liquid Haskell. For most proofs, the intrinsic method is enough: in this method, the function cost as well as the correctness invariants that we want to prove are declared in the function’s type through refinement predicates and automatically proven by the SMT Solver. Additionally, when the predicates that compose refinement types are not part of the SMT-decidable logic, we use the extrinsic method: we express theorems and lemmas for the costs and correctness properties of the functions using refinement types and then write their proofs in Haskell, by utilizing proof combinators. Our code can be found at: \href{https://github.com/linen101/ticked-binary-search-trees}{https://github.com/linen101/ticked-binary-search-trees} | en |
heal.advisorName | Παπασπύρου, Νικόλαος | el |
heal.advisorName | Papaspyrou, Nikolaos | en |
heal.committeeMemberName | Παπασπύρου, Νικόλαος | el |
heal.committeeMemberName | Σαγώνας, Κωνσταντίνος | el |
heal.committeeMemberName | Φωτάκης, Δημήτριος | el |
heal.academicPublisher | Εθνικό Μετσόβιο Πολυτεχνείο. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών | el |
heal.academicPublisherID | ntua | |
heal.numberOfPages | 115 σ. | el |
heal.fullTextAvailability | false |
Οι παρακάτω άδειες σχετίζονται με αυτό το τεκμήριο: