dc.contributor.author |
Μαστόρου, Λυκούργος
|
el |
dc.contributor.author |
Mastorou, Lykourgos
|
en |
dc.date.accessioned |
2023-01-27T07:31:05Z |
|
dc.date.available |
2023-01-27T07:31:05Z |
|
dc.identifier.uri |
https://dspace.lib.ntua.gr/xmlui/handle/123456789/56955 |
|
dc.identifier.uri |
http://dx.doi.org/10.26240/heal.ntua.24653 |
|
dc.rights |
Default License |
|
dc.subject |
Γλώσσες προγραμματισμού |
el |
dc.subject |
Αυτοματοποιημένες αποδείξεις |
el |
dc.subject |
Πιστοποιημένος κώδικας |
el |
dc.subject |
Συνεπαγωγικές αποδείξεις |
el |
dc.subject |
Προγραμματισμός με αποδείξεις |
el |
dc.subject |
Certified code |
en |
dc.subject |
Coinduction |
en |
dc.subject |
Programming languages |
en |
dc.subject |
Theorem Proving |
en |
dc.subject |
Programming with proofs |
en |
dc.title |
Μηχανική κατασκευή συνεπαγωγικών (coinductive) αποδείξεων στη Liquid Haskell |
el |
dc.title |
Mechanizing coinductive proofs in Liquid Haskell |
en |
heal.type |
bachelorThesis |
|
heal.classification |
Επιστήμη υπολογιστών |
el |
heal.classification |
Επαλήθευση κώδικα |
el |
heal.classification |
Computer science |
en |
heal.classification |
Software verification |
el |
heal.language |
el |
|
heal.language |
en |
|
heal.access |
free |
|
heal.recordProvider |
ntua |
el |
heal.publicationDate |
2022-07-28 |
|
heal.abstract |
Η ορθότητα είναι μια επιθυμητή αλλά όχι τετριμμένη ιδιότητα του λογισμικού. Ένας πολύ αξιόπιστος
τρόπος για να διασφαλιστεί η ορθότητα είναι η επαλήθευση λογισμικού. H Liquid Haskell είναι ένας
επαγωγικός επαληθευτής που βασίζεται σε έναν επιλύτη SMT και επεκτείνει το σύστημα τύπων της
Haskell χρησιμοποιώντας λογικά κατηγορήματα. Χρησιμοποιώντας τη Liquid Haskell, είναι δυνατό
να αποδειχθούν πολλές επιθυμητές ιδιότητες για κώδικα γραμμένο σε Haskell. Η Haskell, λόγω της
οκνηρής αποτίμησης, μας επιτρέπει να ορίσουμε αντικείμενα που έχουν πιθανώς άπειρα στοιχεία,
όπως άπειρες λίστες. Ωστόσο, η Liquid Haskell δεν είναι σε θέση να επαληθεύσει τέτοιους ορισμούς
λόγω έλλειψη τερματισμού τους. Επίσης, για παρόμοιους λόγους, δεν μπορεί να επιχειρηματολογήσει
για ιδιότητες τέτοιων ορισμών.
Αυτή η εργασία έχει στόχο να αντιμετωπίσει αυτό το χάσμα μεταξύ των δυνατοτήτων της Haskell
και της εκφραστικότητας της Liquid Haskell. Παρουσιάζουμε μια τεχνική που μας βοηθά να επαλη-
θεύσουμε την παραγωγικότητα των συναναδρομικών ορισμών, ακολουθώντας παρόμοια δουλειά σε
άλλες γλώσσες. Παρουσιάζουμε επίσης δύο εναλλακτικές προσεγγίσεις, δηλαδή τις συνεπαγωγικές
αποδείξεις με τη χρήση δεικτών και τις εποικοδομητικές συνεπαγωγικές αποδείξεις, οι οποίες κω-
δικοποιούν με συνέπεια συνεπαγωγικές αποδείξεις στη Liquid Haskell. Χρησιμοποιούμε αυτές τις
κωδικοποιήσεις για να ελέγξουμε αυτόματα διάφορους ορισμούς και αποδείξεις, επιδεικνύοντας πώς
μπορεί να χρησιμοποιηθεί ένας επαγωγικός επαληθευτής για να ελέγχθούν οι συνεπαγωγικές ιδιότητες και η παραγωγικότητα κώδικα Haskell. |
el |
heal.abstract |
Correctness is a desirable, yet not trivial, property of software. One very reliable way to ensure correctness is software verification. Liquid Haskell is an inductive verifier which is based on an SMT
solver and extends Haskell’s type system using logical predicates. Using Liquid Haskell, it is possible
to prove many desired properties for code written in Haskell. Haskell, due to laziness, allows us to
define objects that have possibly infinite elements, such as infinite lists. However, Liquid Haskell is
not able to verify such definitions due to their lack of termination. Also, for similar reasons, it cannot
reason about properties of such definitions.
This thesis aims to address this gap between Haskell’s capabilities and Liquid Haskell’s expressiveness. We present a technique which aids us to verify the productivity of corecursive definitions,
following similar work in other languages. We also present two alternative approaches, namely indexed and constructive coinduction, to consistently encode coinductive proofs in Liquid Haskell. We
use these encodings to machine check various definitions and proofs, showcasing how an inductive
verifier can be used to check coinductive properties and productivity of Haskell code. |
en |
heal.advisorName |
Παπασπύρου, Νικόλαος |
el |
heal.committeeMemberName |
Παπασπύρου, Νικόλαος |
el |
heal.committeeMemberName |
Σαγώνας, Κωνσταντίνος |
el |
heal.committeeMemberName |
Παγουρτζής, Αριστείδης |
el |
heal.academicPublisher |
Εθνικό Μετσόβιο Πολυτεχνείο. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών |
el |
heal.academicPublisherID |
ntua |
|
heal.numberOfPages |
77 σ. |
el |
heal.fullTextAvailability |
false |
|