Άσκηση Λύσεις Σειράς Ασκήσεων 5 Έστω P και Q συνθήκες και S ένα πρόγραμμα. Να εξηγήσετε με λόγια τις πιο κάτω προδιαγραφές (i) με την έννοια της μερικής ορθότητας και (ii) με την έννοια της ολικής ορθότητας. (α) { P } S { true } (β) { P } S { false } (γ) { false } S { Q } Λύση (α) Με την έννοια της μερικής ορθότητας η προδιαγραφή δηλώνει ότι αν το πρόγραμμα S ξεκινήσει την εκτέλεσή του σε μια κατάσταση που ικανοποιεί τη συνθήκη Ρ τότε, αν τερματίσει θα ικανοποιεί τη συνθήκη true. Αφού όμως η συνθήκη true ικανοποιείται τετριμμένα σε κάθε κατάσταση ενός προγράμματος, η συγκεκριμένη προδιαγραφή, υπό την έννοια της μερικής ορθότητα δεν επιβάλλει οποιοδήποτε περιορισμό και ικανοποιείται για οποιαδήποτε S και P. Mε την έννοια της ολικής ορθότητας η προδιαγραφή δηλώνει ότι κάθε φορά που το πρόγραμμα ξεκινά την εκτέλεσή του σε μια κατάσταση που ικανοποιεί τη συνθήκη Ρ, τότε θα τερματίσει. (β) Με την έννοια της μερικής ορθότητας η προδιαγραφή δηλώνει ότι αν το πρόγραμμα S ξεκινήσει την εκτέλεσή του σε μια κατάσταση που ικανοποιεί τη συνθήκη Ρ τότε, αν τερματίσει, θα ικανοποιεί τη συνθήκη false. Αφού όμως η συνθήκη true δεν ικανοποιείται σε καμιά κατάσταση ενός προγράμματος, η συγκεκριμένη προδιαγραφή, υπό την έννοια της μερικής ορθότητας εκφράζει ότι κάθε φορά που το πρόγραμμα S ξεκινά την εκτέλεσή του σε μια κατάσταση που ικανοποιεί τη συνθήκη P τότε δεν τερματίζει. Mε την έννοια της ολικής ορθότητας η προδιαγραφή δηλώνει ότι κάθε φορά που το πρόγραμμα ξεκινά την εκτέλεσή του σε μια κατάσταση που ικανοποιεί τη συνθήκη Ρ, τότε θα τερματίσει σε μια κατάσταση που ικανοποιεί τη συνθήκη false. Αυτό όμως δεν είναι εφικτό και επομένως η προδιαγραφή αυτή δεν ικανοποιείται από κανένα πρόγραμμα. (γ) Με την έννοια της μερικής ορθότητας η προδιαγραφή δηλώνει ότι αν το πρόγραμμα S ξεκινήσει την εκτέλεσή του σε μια κατάσταση που ικανοποιεί τη συνθήκη false τότε, αν τερματίσει θα ικανοποιεί τη συνθήκη P. Αφού όμως η συνθήκη false δεν ικανοποιείται σε καμιά κατάσταση ενός προγράμματος, η συγκεκριμένη προδιαγραφή, ικανοποιείται τετριμμένα από οποιοδήποτε πρόγραμμα και μετασυνθήκη. Το ίδιο ισχύει και για την έννοια της ολικής ορθότητα. Άσκηση 2 Να γράψετε πρόγραμμα S το οποίο να χρησιμοποιεί τις μεταβλητές x και y και να ικανοποιεί την προδιαγραφή tot {x = a y = b} S {z = exp(a,b) x = a y = b}, όπου exp(m,0) = exp(m,n+) = m exp(m,n) Λύσεις Σειράς Προβλημάτων 5 Χειμερινό Εξάμηνο 205 Σελίδα
Λύση Ορίζουμε το ζητούμενο πρόγραμμα S ως εξής: n := x; m := 0; z := ; while (m < y){ m := m + ; z := z * n; } και αποδεικνύουμε την ορθότητα του όπως φαίνεται πιο κάτω χρησιμοποιώντας ως αμετάβλητη συνθήκη και μεταβλητή έκφραση τις εξής: η = z = exp(m,n) x = a y = b n y m = x E = y n { x = a y = b 0 y } { = exp(x,0) x = a y = b 0 y x = x } m := x; { = exp(m,0) x = a y = b 0 y m = x } Κανόνας Ανάθεσης n := 0; { = exp(m,n) x = a y = b n y m = x } Κανόνας Ανάθεσης z := ; { z = exp(m,n) x = a y = b n y m = x 0 y n } Κανόνας Ανάθεσης while (n < y){ { z = exp(m,n) x = a y = b n y n < y m = x 0 y n = E 0 } Αμ. Συνθ., Μετ. Εκφρ. & Φρουρός { z m = exp(m,n+) x = a y = b n + y m = x 0 y n < E 0 } n := n + ; { z m = exp(m,n) x = a y = b n y m = x 0 y n < E 0 } Κανόνας Ανάθεσης z := z * m; { z = exp(m,n) x = a y = b n y m = x 0 y n < E 0 } Κανόνας Ανάθεσης } { z = exp(m,n) x = a y = b n y y n m = x } Κανόνας total while { z = exp(a,b) x = a y = b } Άσκηση 3 (35 μονάδες) Να αποδείξετε την ορθότητα των πιο κάτω προδιαγραφών με την έννοια της ολικής ορθότητας. (α) Θα χρησιμοποιήσουμε ως αμετάβλητη συνθήκη και μεταβλητή έκφραση τις η = (a = b a 2 = n) (a < b a 2 < n b 2 ) E = b a Λύσεις Σειράς Προβλημάτων 5 Χειμερινό Εξάμηνο 205 Σελίδα 2
{ n 0 n x n n } { [(0 = n 0 2 = n) (0 < n 0 < n n 2 )] 0 b a } a := 0; { [(a = n a 2 = n) (a < n a 2 < n n 2 )] 0 b a } Κανόνας Ανάθεσης b := n; { [(a = b a 2 = n) (a < b a 2 < n b 2 )] 0 b a } Κανόνας Ανάθεσης while (b a > ) { { [(a = b a 2 = n) (a < b a 2 < n b 2 ) b a > ] 0 b a = E 0 } Αμ. Συνθ, Φρουρός, Μετ. Εκφρ. { [(a+b)div 2] 2 < n ((a+b)div 2 < b [(a+b)div 2] 2 < n b 2 0 b (a+b)div 2 < E 0 ) [(a+b)div 2] 2 > n (a < (a+b)div 2 a 2 < n [(a+b)div 2] 2 0 (a+b)div 2 a < E 0 } mid := (a + b) div 2; { mid 2 < n (mid < b mid 2 < n b 2 0 b mid < E 0 ) mid 2 > n (a < mid a 2 < n mid 2 0 mid a < E 0 } if (mid * mid = n) { mid 2 = n} {[(mid = mid mid 2 = n) (mid < mid mid 2 < n mid 2 )] 0 mid mid < E 0 } a := mid; { [(a = mid a 2 = n) (a < mid a 2 < n mid 2 )] 0 mid a < E 0 } Κανόνας Aνάθεσης b := mid; { [(a = b a 2 = n) (a < b a 2 < n b 2 )] 0 b a < E 0 } Κανόνας Aνάθεσης else { mid 2 < n (mid < b mid 2 < n b 2 0 b mid < E 0 ) mid 2 n (a < mid a 2 < n mid 2 0 mid a < E 0 } { mid 2 < n [(mid = b mid 2 = n) (mid < b mid 2 < n b 2 )] 0 b mid < E 0 ) mid 2 n (a = mid a 2 = n) (a < mid a 2 < n mid 2 )] 0 mid a < E 0 } if (mid * mid < n) else { [(mid = b mid 2 = n) (mid < b mid 2 < n b 2 )] 0 b mid < E 0 } a := mid; { [(a = b a 2 = n) (a < b a 2 < n b 2 )] 0 b a < E 0 } Κανόνας Aνάθεσης { [(a = mid a 2 = n) (a < mid a 2 < n mid 2 )] 0 mid a < E 0 } b := mid; { [(a = b a 2 = n) (a < b a 2 < n b 2 )] 0 b a < E 0 } Κανόνας Aνάθεσης { [(a = b a 2 = n) (a < b a 2 < n b 2 ) ] 0 b a < E 0 } Κανόνας if { (a = b a 2 = n) (a < b a 2 < n b 2 ) 0 b a < E 0 } Κανόνας if { [(a = b a 2 = n) (a < b a 2 < n b 2 )] (b a) } Κανόνας Total while { (a = b a a = n) (a+ = b a a < n b b n) } Λύσεις Σειράς Προβλημάτων 5 Χειμερινό Εξάμηνο 205 Σελίδα 3
(β) Για διευκόλυνση στην κατανόηση θα δοθεί πρώτα η απόδειξη για τη μερική ορθότητα και στη συνέχεια για την ολική ορθότητα. Για την απόδειξη της μερικής ορθότητας χρησιμοποιούμε ως αμετάβλητες συνθήκες: Εσωτερικός βρόχος: x n! = a! n fact = (n y + ) x y Εξωτερικός βρόχος: fact n! = a! n 0 Η απόδειξη έχει ως εξής: { n = a a 0 } { n! = a! n 0 } fact := ; { fact n! = a! n 0 } Κανόνας Ανάθεσης while (n > ){ { fact n! = a! n 0 n > } Αμ. Συνθ. και Φρουρός { fact n! = a! n fact = (n n + ) fact n } x := fact; { x n! = a! n fact = (n n + ) x n } Κανόνας Ανάθεσης y := n; { x n! = a! n fact = (n y + ) x y } Κανόνας Ανάθεσης while (y > ) { x n! = a! n fact = (n y + ) x y y > } Αμ. Συνθ. και Φρουρός { x n! = a! n fact + x = (n y + + ) x y } fact := fact + x; { x n! = a! n fact = (n y + + ) x y } Κανόνας Ανάθεσης y := y-; { x n! = a! n fact = (n y + ) x y } Κανόνας Ανάθεσης { x n! = a! n fact = (n y + ) x y y } Κανόνας Total while { fact (n )! = a! (n ) 0 } (αποδείξτε το!) n := n-; { fact n! = a! n 0 } Κανόνας Ανάθεσης { fact n! = a! n 0 n } Κανόνας Total while { fact = a! } Στην απόδειξη ολικής ορθότητας θα χρειαστεί να ενδυναμώσουμε την αμετάβλητη συνθήκη του εσωτερικού βρόχου και να ορίσουμε σχετικές μεταβλητές εκφράσεις. Συγκεκριμένα, για τον εσωτερικό βρόχο έχουμε Αμετάβλητη συνθήκη: x n! = a! n fact = (n y + ) x y 0 n < E 0 Μεταβλητή Έκφραση: y και για τον εξωτερικό: Αμετάβλητη συνθήκη: fact n! = a! n 0 Μεταβλητή Έκφραση: n Ακολουθεί η απόδειξη. Λύσεις Σειράς Προβλημάτων 5 Χειμερινό Εξάμηνο 205 Σελίδα 4
{ n = a a 0 } { n! = a! n 0 } fact := ; { fact n! = a! n 0 } Κανόνας Ανάθεσης while (n > ){ { fact n! = a! n 0 n > 0 n = E 0 } Αμ. Συνθ., Φρουρός & Mετ. Εκφρ. { fact n! = a! n fact = (n n + ) fact n 0 n < E 0 } x := fact; { x n! = a! n fact = (n n + ) x n 0 n < E 0 } Κανόνας Ανάθεσης y := n; { x n! = a! n fact = (n y + ) x y 0 n < E 0 0 y } Κανόνας Ανάθεσης while (y > ) { x n! = a! n fact = (n y + ) x y y > 0 n < E 0 0 y = F 0 } Αμ. Συνθ., Φρουρός & Mετ. Εκφρ. { x n! = a! n fact + x = (n y + + ) x y 0 n < E 0 0 y < F 0 } fact := fact + x; { x n! = a! n fact = (n y + + ) x y 0 n < E 0 0 y < F 0 } Κανόνας Ανάθεσης y := y-; { x n! = a! n fact = (n y + ) x y 0 n < E 0 0 y < F 0 } Κανόνας Ανάθεσης { x n! = a! n fact = (n y + ) x y 0 n < E 0 y } Κανόνας Total while { fact (n )! = a! (n ) 0 0 n < E 0 } (αποδείξτε το!) n := n-; { fact n! = a! n 0 0 n < E 0 } Κανόνας Ανάθεσης { fact n! = a! n 0 n } Κανόνας Total while { fact = a! } Άσκηση 4 (30 μονάδες) Θέλουμε να προσθέσουμε στη γλώσσα WHILE (διαφάνεια 9 5) εντολές της μορφής: do B C B n C n od Οι εντολές αυτές εκτελούνται ως εξής: () Εφόσον τουλάχιστον μια από τις λογικές εκφράσεις Β,,Β n, υπολογίζεται ως αληθής, έστω η B i, τότε επιλέγεται για εκτέλεση η αντίστοιχη εντολή C i και επαναλαμβάνεται το βήμα. Αν υπάρχουν περισσότερες από μια εκφράσεις ανάμεσα στις Β,,Β n, οι οποίες υπολογίζονται ως αληθείς τότε επιλέγεται μη ντετερμινιστικά μια από τις αντίστοιχες εντολές για εκτέλεση. Λύσεις Σειράς Προβλημάτων 5 Χειμερινό Εξάμηνο 205 Σελίδα 5
(2) Αν καμιά από τις λογικές εκφράσεις Β,,Β n, δεν υπολογίζεται ως αληθής, τότε η εκτέλεση της εντολής τερματίζει. (α) Να προτείνετε κανόνα για την ανάλυση προδιαγραφών που σχετίζονται με την εντολή αυτή. Ο καινούριος κανόνας για την εντολή είναι ο εξής: { Bi 0 E E0} Ci { 0 E E0} { 0 E} do B C,..., B C { B... B } n n do - loop (β) Να αποδείξετε την πιο κάτω προδιαγραφή. Θα χρησιμοποιήσουμε ως αμετάβλητη συνθήκη φ = True και ως μεταβλητή έκφραση την 3 max(x,y,z) (x+y+z). {true} { 3 max(x,y,z) (x+y+z) 0 } do x<y { x<y 0 3 max(x,y,z) (x+y+z) = E 0 } { 0 3 max(x+,y,z) (x++y+z) < E 0 } x:= x+ { 0 3 max(x,y,z) (x+y+z) < E 0 } y<z { y<z 0 3 max(x,y,z) (x+y+z) = E 0 } { 0 3 max(x,y+,z) (x+y++z) < E 0 } y:= y+ { 0 3 max(x,y,z) (x+y+z) < E 0 } z<x { z<x 0 3 max(x,y,z) (x+y+z) = E 0 } { 0 3 max(x,y,z+) (x+y+z+) < E 0 } z:= z+ { 0 3 max(x,y,z) (x+y+z) < E 0 } od {true (x<y) (y<z) (z<x)} {x = y = z Λύσεις Σειράς Προβλημάτων 5 Χειμερινό Εξάμηνο 205 Σελίδα 6