HEAL DSpace

Επαλήθευση ιδιοτήτων πολυπλοκότητας δυαδικών δέντρων αναζήτησης σε liquid haskell

Αποθετήριο DSpace/Manakin

Εμφάνιση απλής εγγραφής

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


Αρχεία σε αυτό το τεκμήριο

Οι παρακάτω άδειες σχετίζονται με αυτό το τεκμήριο:

Αυτό το τεκμήριο εμφανίζεται στην ακόλουθη συλλογή(ές)

Εμφάνιση απλής εγγραφής

Αναφορά Δημιουργού - Μη Εμπορική Χρήση - Παρόμοια Διανομή 3.0 Ελλάδα Εκτός από όπου ορίζεται κάτι διαφορετικό, αυτή η άδεια περιγράφεται ως Αναφορά Δημιουργού - Μη Εμπορική Χρήση - Παρόμοια Διανομή 3.0 Ελλάδα