Άσκηση 1 Λύσεις Σειράς Ασκήσεων 5 Να υπολογίσετε τις ασθενέστερες προσυνθήκες έτσι ώστε οι πιο κάτω προδιαγραφές να είναι ορθές σύμφωνα (i) με την έννοια της μερικής ορθότητας και (ii) με την έννοια της ολικής ορθότητας. Να αιτιολογήσετε σύντομα τις απαντήσεις σας (δεν είναι απαραίτητο να κατασκευάσετε αποδείξεις με τους κανόνες). (α) {? while x > 0 {x := x 1; y := y + 1 { x < 0 ) (β) {? x := x a; a := x-3; n := n + 1 {x = 2a n n > 0 (γ) {? if x!= 0 then y := z + 1 else y = w + 2 {y = 5 (δ) {? while True x = 0 {x = 0 Λύση (i) Μερική ορθότητα (α) Η ασθενέστερη προσυνθήκη είναι η x<0: Aν το x είναι αρνητικό κατά την εκκίνηση του προγράμματος τότε και μόνο τότε θα είναι αρνητικό κατά τον τερματισμό του. (β) Η ασθενέστερη προσυνθήκη είναι η xa= 2(xa 3) n+1 n + 1 > 0. Μπορούμε να την παραγάγουμε μέσω του συστήματος κανόνων. (γ) Η ασθενέστερη προσυνθήκη είναι η: (x 0 5 = z+1) (x = 0 5=w+2) (δ) Η ασθενέστερη προσυνθήκη είναι η true: το πρόγραμμα δεν τερματίζει ποτέ επομένως ικανοποιεί την προδιαγραφή με οποιαδήποτε προσυνθήκη. (ii) Ολική ορθότητα (α) Η ασθενέστερη προσυνθήκη είναι και πάλι {x<0: Aν το x είναι αρνητικό κατά την εκκίνηση του προγράμματος τότε και μόνο τότε θα είναι αρνητικό κατά τον τερματισμό του. Επίσης το πρόγραμμα τερματίζει. (β) Η ασθενέστερη προσυνθήκη είναι και πάλι η xa= 2(xa 3) n+1 n + 1 > 0. Το πρόγραμμα δεν περιέχει οποιοδήποτε επαναληπτικό βρόχο, επομένως τερματίζει πάντα. (γ) Η ασθενέστερη προσυνθήκη είναι και πάλι η: (x 0 5 = z+1) (x = 0 5=w+2) (δ) Η ασθενέστερη προσυνθήκη είναι η false: το πρόγραμμα δεν τερματίζει ποτέ. Λύσεις Σειράς Προβλημάτων 5 Χειμερινό Εξάμηνο 2016 Σελίδα 1
Άσκηση 2 Να αποδείξετε την ορθότητα των πιο κάτω προδιαγραφών με την έννοια της μερικής ορθότητας. Λύση {x = x 0 {(x 3 0 [(x 0 < 3 x 3 = 0) (x 0 3 x 3 +1 < x 0 )] x := x-3; * { x 0 [(x 0 < 3 x=0) (x 0 3 x+1 < x 0 )] Αξίωμα ανάθεσης {(x < 0 [(x 0 < 3 1=1) (x 0 3 1 < x 0 )]) (x 0 [(x 0 < 3 x=0) (x 0 3 x+1 < x 0 )]) if (x<0) { {(x 0 < 3 1=1) (x 0 3 1 < x 0 ) x := 1; {(x 0 < 3 x=1) (x 0 3 x < x 0 ) else { { (x 0 < 3 x = 0) (x 0 3 x+1 < x 0 ) {true [(x 0 < 3 x+1=1) (x 0 3 x+1 < x 0 )] false [(x 0 < 3 10=1) (x 0 3 10 < x 0 )] if (true) { {(x 0 < 3 x+1=1) (x 0 3 x+1 < x 0 ) x := x+1; {(x 0 < 3 x=1) (x 0 3 x < x 0 ) else { {(x 0 < 3 10=1) (x 0 3 10 < x 0 ) x := 10; {(x 0 < 3 x=1) (x 0 3 x < x 0 ) {(x 0 < 3 x=1) (x 0 3 x < x 0 ) {(x 0 < 3 x=1) (x 0 3 x < x 0 ) Απόδειξη συνεπαγωγής *: Αν x 0 = 3 τότε x 3 0 [(x 0 < 3 x 3 = 0) (x 0 3 x 3 +1 < x 0 )] = x 0 3 0 [(x 0 < 3 x 0 3 = 0) (x 0 3 x 0 3 +1 < x 0 )] = x 0 3 [x 0 3 (x 0 3 2 < 0)] = x 0 3 [x 0 3 (x 0 3 true)] = x 0 3 x 0 3 = true ** Αξίωμα ανάθεσης Αξίωμα ανάθεσης Αξίωμα ανάθεσης Κανόνας εντολής if Κανόνας εντολής if Απόδειξη συνεπαγωγής **: (x<0 [(x 0 <3 1=1) (x 0 3 1 < x 0 )]) (x 0 [(x 0 < 3 x=0) (x 0 3 x+1 < x 0 )]) = (x < 0 [(x 0 < 3 true) (true)]) (x 0 [(x 0 < 3 x=0) (x 0 3 x+1 < x 0 )] = (x < 0 (true true)) (x 0 [(x 0 < 3 x=0) (x 0 3 x+1 < x 0 )] Λύσεις Σειράς Προβλημάτων 5 Χειμερινό Εξάμηνο 2016 Σελίδα 2
= x 0 [(x 0 < 3 x=0) (x 0 3 x+1 < x 0 )] (β) Αμετάβλητη συνθήκη για πρώτο while: z = x + y + c Αμετάβλητη συνθήκη για δεύτερο while: z = a + y + c {true { c = 0 + 0 + c x := 0; { c = x + 0 + c y := 0; { c = x + y + c z := c; { z = x + y + c while x a { { z = x + y + c x a Αμ. Συνθήκη και Φρουρός { z + 1 = x + 1 + y + c x := x + 1; { z + 1 = x + y + c z := z + 1; { z = x + y + c { z = x + y + c x = a Κανόνας partial while { z = a + y + c while y b { { z = a + y + c y b Αμ. Συνθήκη και Φρουρός { z + 1 = a + y + 1 + c y := y + 1; { z + 1 = a + y + c z := z + 1 { z = a + y + c { z = a + y + c y = b Κανόνας partial while { z = a + b + c Άσκηση 3 (35 μονάδες) Να αποδείξετε την ορθότητα των πιο κάτω προδιαγραφών με την έννοια της ολικής ορθότητας. (α) Θα αποδείξουμε την ολική ορθότητα της προδιαγραφής χρησιμοποιώντας ως αμετάβλητη συνθήκη και μεταβλητή έκφραση τις πιο κάτω: η = j, 0 j < i, A[k] A[j] i n E = n i Λύσεις Σειράς Προβλημάτων 5 Χειμερινό Εξάμηνο 2016 Σελίδα 3
{n>0 { j, 0 j < 1, A[0] A[j] 0 n 1 k := 0; { j, 0 j < 1, A[k] A[j] 0 n 1 i := 1; { j, 0 j < i, A[k] A[j] 0 n i while (i < n){ { j, 0 j < i, A[k] A[j] i n i < n 0 n i = E 0 Αμ. Συνθήκη, Φρουρός και Μετ. Έκφραση {(A[i]<A[k]) j, 0 j < i+1,a[i] A[j] i + 1 n 0 n i 1< E 0 ) {(A[i] A[k]) j, 0 j < i+1, A[k] A[j] i + 1 n 0 n i 1< E 0 ) if (A[i] < A[k]) { j, 0 j < i+1, A[i] A[j] i + 1 n 0 n i 1< E 0 k = i; { j, 0 j < i+1, A[k] A[j] i + 1 n 0 n i 1< E 0 { j, 0 j < i+1, A[k] A[j] i+1 n 0 n i 1< E 0 Κανόνας if i := i+1; { j, 0 j < i, A[k] A[j] i n 0 n i < E 0 Καν. Ανάθεσης { j, 0 j < i, A[k] A[j] i n, i n Κανόνας total while { j, 0 j < i, A[k] A[j] i = n { j, 0 j < n, A[k] A[j] (β) Για την απόδειξη χρησιμοποιούμε τα εξής: Εξωτερικός βρόχος: o Αμετάβλητη συνθήκη: S+X Y = x y o Μεταβλητή έκφραση: Χ Εσωτερικός βρόχος: o Αμετάβλητη συνθήκη: S + X Y = x y 1 X E 0 o Μεταβλητή έκφραση: X Λύσεις Σειράς Προβλημάτων 5 Χειμερινό Εξάμηνο 2016 Σελίδα 4
{X = x Υ = y x 0 {0 + X Y = x y 0 X S:=0; {S + X Y = x y 0 X while (X=0) {S + X Y = x y (Χ = 0) 0 X = E 0 Αμετ. Συνθήκη, Φρουρός και Μετ. Έκφραση {S + X Y = x y 1 X E 0 0 X while odd(χ){ {S + X Y = x y 1 X E 0 odd(χ) 0 X = F 0 Αμετ. Συνθήκη, Φρουρός και Μετ. Έκφραση {S + (X div 2) 2 Y = x y 1 X div 2 E 0 0 X div 2< F 0 Y:= 2 Y; {S + (X div 2 Y = x y 1 X div 2 E 0 0 X div 2< F 0 X:= X div 2; {S + X Y = x y 1 X E 0 0 X < F 0 {S + X Y = x y 1 X E 0 odd(χ) Καν. Total while {S + Y + (X 1) Y = x y 0 X 1 < E 0 S:= S+Y; {S + (X 1) Y = x y 0 X 1 < E 0 X:= X-1 {S + X Y = x y 0 X < E 0 {S + X Y = x y X = 0 Καν. Total while {S = x y Άσκηση 4 Θέλουμε να προσθέσουμε στη γλώσσα WHILE (διαφάνεια 9 5), εντολές της μορφής: repeat C until B Οι εντολές αυτές εκτελούνται ως εξής: (1) Εκτέλεσε την εντολή C (2) Υπολόγισε την τιμή της έκφρασης Β, έστω b (3) Αν b = false τότε επέστεψε στο βήμα (1) (4) Διαφορετικά, η εκτέλεση της εντολής τερματίζει και η ροή του προγράμματος προχωρεί στην επόμενη εντολή (αν υπάρχει). (α) Να προτείνετε κανόνα για την ανάλυση προδιαγραφών της εντολής repeat υπό την έννοια της μερικής ορθότητας. Σύμφωνα με την επεξήγηση, η εντολή repeat C until B μπορεί να διατυπωθεί ως: C; while B{C Λύσεις Σειράς Προβλημάτων 5 Χειμερινό Εξάμηνο 2016 Σελίδα 5
Η πιο πάνω ισοδυναμία μας επιτρέπει να προτείνουμε κανόνα για την ανάλυση προδιαγραφών για την εντολή for ως εξής: { C { η, { η B C { η repeat { repeat C until B { η B Σύμφωνα με τον κανόνα για να αποδείξουμε ότι μια εντολή repeat ξεκινώντας με την προσυνθήκη φ θα μας οδηγήσει στη μετασυνθήκη η Β, πρέπει πρώτα να αποδείξουμε ότι η πρώτη εκτέλεση του κορμού C με προσυνθήκη φ θα μας οδηγήσει σε ικανοποίηση του η ({φ C {η) ενώ, παρόμοια, κάθε επόμενη εκτέλεση του βρόχου, η οποία προφανώς γίνεται υπό την συνθήκη του Β, θα διατηρήσει την ορθότητα του η, δηλαδή {η Β C {η. Με άλλα λόγια η συνθήκη η αποτελεί μια αμετάβλητη συνθήκη για τον βρόχο. Εντούτοις παρατηρούμε ότι ο πιο πάνω κανόνας απαιτεί την απόδειξη δύο διαφορετικών προδιαγραφών για τον κορμό του βρόχου C. Για απλότητα, μπορούμε να αποδώσουμε τον κανόνα ως εξής: { C { η ( η B) { repeat C until B { η B (β) Να χρησιμοποιήσετε τον κανόνα σας από το μέρος (α) για να αποδείξετε την ορθότητα της πιο κάτω προδιαγραφής υπό την έννοια της μερικής ορθότητας. Η απόδειξη έχει ως εξής, όπου στον εξωτερικό βρόχο χρησιμοποιούμε ως αμετάβλητη συνθήκη την S = (x X) y Y= y και στον εσωτερικό βρόχο την S = (x X) y + R Y= y. {X = x Y= y {0 = (x X y Y= y S:= 0; {S = (x X y Y= y repeat {S = (x X y Y= y Χ 0 Αμ. Συνθήκη & Άρνηση φρουρού R:= 0; {S = (x X y + R Y= y repeat {S = (x X y + R Y= y R Y Αμ. Συνθήκη & Άρνηση φρουρού {S + 1 = (x X y + R + 1 Y= y S:= S+1; {S = (x X y + R + 1 Y= y R:= R+1 {S = (x X y + R Y= y until R = Y {S = (x X y + R Y= y R = Y Καν. repeat {S = (x X + 1 y Y= y X:= X-1 {S = (x X y Y= y until X = 0 {S = (x X y Y= y X = 0 Καν. repeat {S = x y Λύσεις Σειράς Προβλημάτων 5 Χειμερινό Εξάμηνο 2016 Σελίδα 6