Neformalna verifikacija

Σχετικά έγγραφα
Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2014

Overview. Transition Semantics. Configurations and the transition relation. Executions and computation

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία ΕΙΣΑΓΩΓΙΚΟ ΦΡΟΝΤΙΣΤΗΡΙΟ

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

Γλωσσική Τεχνολογία. Εισαγωγικό Φροντιστήριο

Iskazna logika 3. Matematička logika u računarstvu. novembar 2012

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

Κεφάλαιο : Επαναλήψεις (for, do-while)

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στον Προγραμματισμό

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή

ΑΤΣΑΛΑΚΗ ΞΑΝΘΟΥΛΑ ΕΡΓΑΣΤΗΡΙΟ 2

The Simply Typed Lambda Calculus

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Προγραμματισμός Η/Υ (ΤΛ2007 )

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Φροντιςτήριο. Linked-List

Προγραμματισμός Ι (HY120)

Λύσεις Σειράς Ασκήσεων 5

Γλώσσες προγραµµατισµού. Ανάπτυξη Συστηµάτων Λογισµικού

Type Theory and Coq. Herman Geuvers. Principal Types and Type Checking

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

Πίνακας Περιεχομένων. 1. Locals Window & BreakPoints

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

Βασικά Στοιχεία της Java

Διάλεξη 5η: Εντολές Επανάληψης

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Εισαγωγή στον Προγραμματισμό

ECE570 Lecture 6: Rewrite Systems

Εισαγωγή στην Γλώσσα Προγραμματισμού Python. 12/10/16 1

Εισαγωγή. Όλες οι (άλλες) επιστήµες µηχανικών βασίζονται σε σταθερό θεωρητικό (µαθηµατικό) υπόβαθρο

Τυπικές Μέθοδοι στην Ανάπτυξη Συστηµάτων Λογισµικού

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

ΠΡΟΣΟΜΟΙΩΣΗ ΘΕΩΡΙΑ 1. H αρχική οθόνη του Open Roberta lab

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

Υπολογισμός - Εντολές Επανάληψης

Δομημένος Προγραμματισμός

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΑΡΧΕΙΑ ΚΕΙΜΕΝΟΥ ΣΤΗΝ C

Εισαγωγή στον Προγραμματισμό

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΟΜΟΣΠΟΝ ΙΑ ΕΚΠΑΙ ΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑ ΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2013

❷ s é 2s é í t é Pr 3

Συναρτήσεις διαχείρισης αλφαριθμητικών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

11.5 Ολοκληρωμένο παράδειγμα Μισθοδοσία

Βασικά Στοιχεία της Java

Οντοκεντρικός Προγραμματισμός

Αλγόριθμοι. Α. Υπολογιστικά Προβλήματα. Β. Εισαγωγή στους Αλγόριθμους. Γ. ομή Αλγόριθμων. Δ. ομές εδομένων

ΕΚΔΟΣΗ 1.0 ΟΚΤΩΒΡΙΟΣ, 2017 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΤΟ ΠΡΩΤΟΚΟΛΛΟ TARRY ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β. ΤΑΜΠΑΚΑΣ

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Προγραμματισμός Ι. Θεματική ενότητα 4: Έλεγχος ροής Προτάσεις υπό συνθήκη διακλάδωσης

T~oestatavalt korrektne transleerimine

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

24ος ΠΑΝΕΛΛΗΝΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

οµές Επιλογής Εντολές if και switch

λρ-calculus 1. each λ-variable is a λρ-term, called an atom or atomic term; 2. if M and N are λρ-term then (MN) is a λρ-term called an application;

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόμενη Λύση

Αποτελέσματα προόδου

ΕΚΔΟΣΗ 1.1 ΑΠΡΙΛΙΟΣ, 2018 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΤΟ ΠΡΩΤΟΚΟΛΛΟ ECHO ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β. ΤΑΜΠΑΚΑΣ

8. Συνθήκες ελέγχου, λογικοί τελεστές

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 8 : Πίνακες IΙ. Αλέξανδρος Τζάλλας

Ανάπτυξη και Σχεδίαση Λογισμικού

Formal Semantics. 1 Type Logic

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Απαντήσεις στο μάθημα Δομημένος Προγραμματισμός ΕΠΑΛ

H ΓΛΩΣΣΑ C. Μάθηµα 16: Είσοδος/Έξοδος: Συναρτήσεις Eξόδου. ηµήτρης Ψούνης

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

ΠΡΟΤΕΙΝΟΜΕΝΕΣ ΛΥΣΕΙΣ

Αλγόριθμοι και Πολυπλοκότητα

Types and Logics. Programming Languages CS442. David Toman. School of Computer Science University of Waterloo

Παράλληλη Επεξεργασία Κεφάλαιο 10 ο Αντίγραφα Εργαζομένων

Κεφάλαιο : Εισαγωγή στην C: (Διαλέξεις 3-4)

Δομές Ανακυκλώσεων. Εντολές ελέγχου - 1

Χpήσιµες Βιβλιοθήκες της γλώσσας C

Περιεχόμενα. Πρόλογος... 17

Προγραμματισμός Η/Υ (ΤΛ2007 )

Οδηγίες εγκατάστασης και χρήσης του Quartus

Προγραμματισμός Ι (HY120)

Transcript:

Neformalna verifikacija Bojan Petrović bojan_petrovic@fastmail.fm Haklab Beograd April 2015

Haklab Beograd

Software Foundations

Software Foundations Glavni tvorac kursa je Bendžamin Pirs sa Univerziteta u Pensilvaniji Pokrivene oblasti Funkcionalno programiranje Formalna logika Formalna verifikacija softvera Operaciona sematika programskih jezika Sistemi tipova Coq

Software Foundations u Haklabu

Pedagoški pristup Grøn, Øyvind; Næss, Arne (1998). Introduction to general relativity and its mathematics. HiO-rapport 1998 14. Oslo: Høgskolen i Oslo.

Coq Coq je programski jezik i interaktivni dokazivač teorema Coq nije Tjuring potpun Coq je zasnovan na varijanti lambda računa sa zavisnim tipovima nazvanoj "račun konstrukcija" (Calculus of Constructions) Neke od uspešnih primena: CompCert; dokaz teoreme o četiri boje

Barendregtova λ-kocka λω λpω λ2 λp2 λω λpω λ λp

man 3 printf PRINTF(3) Linux Programmer s Manual PRINTF(3) NAME printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - formatted output conversion SYNOPSIS #include <stdio.h> int printf(const char *format,...);

Vektori Check @append. append: forall (A : Type) (n p : nat), t A n -> t A p -> t A (n + p)

Ekstrinsična verifikacija Check sort. sort : list nat -> list nat Theorem Sorted_sort : forall l, Sorted (sort l). Theorem Permuted_sort : forall l, Permutation l (sort l).

Intrinsična verifikacija Check mergesort. mergesort : forall (A: Type) (l: List A), { l : list A Sorted l /\ Permutation l l /\ Stable l l }

Neka od poglavlja Functional Programming in Coq Logic in Coq Simple Imperative Programs Program Equivalence Hoare Logic Hoare Logic as a Logic The Simply Typed Lambda-Calculus Typing Mutable References Subtyping Normalization of STLC

Infrastruktura: brojevi Inductive nat : Type := O : nat S : nat -> nat.

Infrastruktura: logika Inductive and (P Q : Prop) : Prop := conj : P -> Q -> and P Q. Inductive or (P Q : Prop) : Prop := or_introl : P -> or P Q or_intror : Q -> or P Q. Inductive False : Prop :=. Inductive ex (X:Type) (P : X->Prop) : Prop := ex_intro : forall (witness:x), P witness -> ex X P.

Imp c ::= SKIP x ::= a c ;; c WHILE b DO c END IFB b THEN c ELSE c FI

Imp: operaciona semantika (deo) SKIP/st st (Skip) aeval st a 1 = n X := a 1 /st update st X n (Assign) c 1 /st st c 2 /st st c 1 ;; c 2 /st st (Sequence).

Horova logika: Notacija Notation "{{ P }} c {{ Q }}" := (hoare_triple P c Q) (at level 90, c at next level) : hoare_spec_scope. Notation "P [ X -> a ]" := (assn_sub X a P) (at level 10). Theorem hoare_asgn : forall Q X a, {{Q [X -> a]}} (X ::= a) {{Q}}.

Imp/Imp+BREAK Inductive ceval : com -> state -> state -> Prop := E_Skip : forall (st : state), SKIP / st st E_Ass : forall (st : state) (a : aexp) (n : nat) (X : id), aeval st a = n -> (X ::= a) / st (update st X n) E_Seq : forall (c1 c2 : com) (st st st : state), (c1 / st st ) -> (c2 / st st ) -> (c1 ; c2) / st st E_IfTrue : forall (st st : state) (c1 c2 : com) (b : bexp), beval st b = true -> c1 / st st -> (IFB b THEN c1 ELSE c2 FI) / st st E_IfFalse : forall (st st : state) (c1 c2 : com) (b : bexp), beval st b = false -> c2 / st st -> (IFB b THEN c1 ELSE c2 FI) / st st E_WhileEnd : forall (st : state) (c1 : com) (b : bexp), beval st b = false -> (WHILE b DO c1 END) / st st E_WhileLoop : forall (st st st : state) (c1 : com) (b : bexp), beval st b = true -> c1 / st st -> (WHILE b DO c1 END) / st st -> (WHILE b DO c1 END) / st st where "c1 / st st " := (ceval c1 st st ). Inductive ceval : com -> state -> status -> state -> Prop := E_Skip : forall (st : state), SKIP / st SContinue / st E_Break : forall (st : state), BREAK / st SBreak / st E_Ass : forall (st : state) (a : aexp) (n : nat) (X : id), aeval st a = n -> (X ::= a) / st SContinue / (update st X n) E_Seq_SBreak : forall (c1 c2 : com) (st st : state), (c1 / st SBreak / st ) -> (c1 ; c2) / st SBreak / st E_Seq_SCont : forall (c1 c2 : com) (st st st : state) (s : status), (c1 / st SContinue / st ) -> (c2 / st s / st ) -> (c1 ; c2) / st s / st E_IfTrue : forall (st st : state) (s : status) (c1 c2 : com) (b : bexp), beval st b = true -> c1 / st s / st -> (IFB b THEN c1 ELSE c2 FI) / st s / st E_IfFalse : forall (st st : state) (s : status) (c1 c2 : com) (b : bexp), beval st b = false -> c2 / st s / st -> (IFB b THEN c1 ELSE c2 FI) / st s / st E_WhileEnd : forall (st : state) (c1 : com) (b : bexp), beval st b = false -> (WHILE b DO c1 END) / st SContinue / st E_WhileLoop_SBreak : forall (st st : state) (c1 : com) (b : bexp), beval st b = true -> c1 / st SBreak / st -> (WHILE b DO c1 END) / st SContinue / st E_WhileLoop_SCont : forall (st st st : state) (s:status) (c1 : com) (b : bexp), beval st b = true -> c1 / st SContinue / st -> (WHILE b DO c1 END) / st SContinue / st -> (WHILE b DO c1 END) / st SContinue / st where "c1 / st s / st " := (ceval c1 st s st ).

Ispravnost kompajlera aritmetičkih izraza Theorem s_compile_correct : forall (e : aexp) (st : state), s_execute st [] (s_compile e) = [aeval st e].

Neki negativni aspekti Nedostatak individualnog angažmana Efikasnost Coq-a