Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 5 Αξιωματική Σημασιολογία και Απόδειξη Ορθότητας Προγραμμάτων.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 5 Αξιωματική Σημασιολογία και Απόδειξη Ορθότητας Προγραμμάτων."— Μεταγράφημα παρουσίασης:

1 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 5 Αξιωματική Σημασιολογία και Απόδειξη Ορθότητας Προγραμμάτων Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης

2 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 2 Εισαγωγή Τα προγράμματα μιας (κλασικής) γλώσσας προγραμματισμού αποτελούνται από εντολές (ανάθεσης, επανάληψης κλπ) Βασικός σκοπός του κεφαλαίου αυτού είναι η μελέτη της τεχνικής των Floyd- Hoare για απόδειξη ορθότητας τέτοιων προγραμμάτων.

3 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 3 Κανόνες Το συντακτικό που θα εξετασθεί είναι το: C ::= skip | ( C ) | i := E | C o ; C 1 | while B do C | if B then C o else C 1

4 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 4 Τεχνική Floyd - Hoare Ο C.A.R. Hoare εισήγαγε τον συμβολισμό για τον καθορισμό του τι κάνει ένα πρόγραμμα: {P} C {Q} όπου C είναι το πρόγραμμα της γλώσσας που μελετάται και P και Q συνθήκες, που σχετίζονται με μεταβλητές που χρησιμοποιεί το C

5 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 5 Συνθήκη Αποτελεί έκφραση μιας απλής λογικής γλώσσας – Περιέχει μεταβλητές του προγράμματος, σταθερές, λογικούς τελεστές κλπ Όταν προηγείται μιας εντολής περιγράφει περιορισμούς για μεταβλητές του προγράμματος σε εκείνο το σημείο Όταν ακολουθεί εντολή περιγράφει τους νέους περιορισμούς για τις μεταβλητές, μετά την εκτέλεση της εντολής Εκφράσεις της μορφής {P} C {Q} ονομάζονται προδιαγραφές (specifications)

6 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 6 Ορισμός 5.1 Μία προδιαγραφή {P} C {Q} είναι αληθής εάν όταν το C εκτελείται σε μία κατάσταση που ικανοποιεί τη συνθήκη P και αν η εκτέλεση του C τερματίζει, τότε στην κατάσταση στην οποία καταλήγει το πρόγραμμα, ικανοποιείται η συνθήκη Q

7 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 7 Ορισμός 5.1 Οι προδιαγραφές ονομάζονται και τύποι μερικής ορθότητας διότι η απόδειξη του ότι ένα πρόγραμμα τερματίζει θεωρείται ξεχωριστή διαδικασία, που πρέπει να εξετάσει ο προγραμματιστής, για να είναι βέβαιος για την ορθότητα του προγράμματος του.

8 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 8 Παράδειγμα 5.1 Η προδιαγραφή: { Χ = 1 } Χ:= Χ + 1{ Χ = 2 } είναι αληθής. Το σύμβολο = είναι η γνωστή μας μαθηματική ισότητα.

9 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 9 Παράδειγμα 5.2 Η προδιαγραφή: { Χ = 1 } Y:= Χ { Y = 1 } είναι αληθής.

10 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 10 Παράδειγμα 5.3 Η προδιαγραφή: { Χ = 1 } Y:= Χ + 1{ X = 2 } είναι ψευδής.

11 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 11 Παράδειγμα 5.4 Η προδιαγραφή: { Χ = x  Y = y} R:= Χ ; X := Y ; Y:= R{ X = y  Y = x } είναι αληθής. Οι μεταβλητές x και y, που εμφανίζονται στις συνθήκες, αλλά όχι στην εντολή, ονομάζονται βοηθητικές μεταβλητές. Σκοπός τους είναι να δώσουν όνομα στις αρχικές τιμές των Χ και Υ αντίστοιχα.

12 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 12 Παράδειγμα 5.5 Η προδιαγραφή: { true}C{Q} Είναι αληθής, εάν όταν το πρόγραμμα C τερματίζει, ισχύει η συνθήκη Q.

13 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 13 Παράδειγμα 5.6 Η προδιαγραφή: {P} C {true} είναι πάντα αληθής για κάθε αρχική συνθήκη Ρ και κάθε εντολή C.

14 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 14 Τεχνική Floyd-Hoare Δημιουργία τυπικών αποδείξεων για προδιαγραφές προγραμμάτων – Χρήση  αξιωμάτων και κανόνων εξαγωγής συμπερασμάτων, που υποστηρίζει η τεχνική  θεωρημάτων κλασσικών μαθηματικών

15 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 15 Διαφορά Αξιωμάτων και Κανόνων Αξίωμα είναι μία λογική πρόταση για την οποία υποθέτουμε ότι είναι αληθής Κανόνας εξαγωγής συμπερασμάτων είναι μία μέθοδος, που χρησιμοποιείται για να δείξουμε ότι μία προδιαγραφή είναι αληθής με την υπόθεση ότι άλλες προδιαγραφές είναι αληθείς

16 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 16 Αξίωμα του skip Η εντολή skip δε μεταβάλλει οποιαδήποτε συνθήκη ισχύει πριν από την εκτέλεση της {P} skip {P}

17 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 17 Κανόνας των παρενθέσεων Εάν ισχύει το {P} C {R} τότε μπορούμε να εξάγουμε ως συμπέρασμα και το {P} (C) {R}

18 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 18 Αξίωμα Εντολής Ανάθεσης Αναπαριστά το γεγονός ότι η τιμή μιας μεταβλητής V μετά από την εκτέλεση της εντολής ανάθεσης V:=E ισούται με την τιμή της έκφρασης Ε στην κατάσταση πριν την εκτέλεση της εντολής.

19 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 19 Αξίωμα Εντολής Ανάθεσης Το αξίωμα είναι: {Ρ[Ε/V]} V := E {P} Όπου V μεταβλητή, Ε έκφραση, Ρ συνθήκη και Ρ[Ε/V] το αποτέλεσμα της αντικατάστασης όλων των εμφανίσεων της μεταβλητής V στην Ρ με Ε.

20 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 20 Παράδειγμα 5.7 Εφαρμογή του αξιώματος της Εντολής Ανάθεσης {Χ+1 = n+1} X := X+1 {X = n+1} Όπως και {Ε=Ε} Χ:= Ε {Χ=Ε} αν το Χ δεν εμφανίζεται στο Ε

21 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 21 Μορφή Μία συχνή παρανόηση είναι ότι το αξίωμα Ανάθεσης θα έπρεπε να είναι: {Ρ}V:=E{P[Ε/V]} Είναι όμως λανθασμένο, γιατί θα έδινε προδιαγραφές: {X=0}X:=1{1=0} Το (σωστό) αξίωμα Ανάθεσης δεν ισχύει (σε αυτή τη μορφή) για πιο πολύπλοκες προστακτικές γλώσσες προγραμματισμού.

22 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 22 Κανόνας Ενδυνάμωσης της Προσυνθήκης Εάν ισχύει το P  R καθώς και το {R}C{Q} τότε μπορούμε να εξάγουμε ως συμπέρασμα και το {Ρ}C{Q}

23 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 23 Παράδειγμα 5.8 {Χ+1 = n+1} X := X+1{X = n+1} Επίσης και (Χ+1= n+1)  (X=n) Επομένως με βάση τον Κανόνα της Ενδυνάμωσης της Προσυνθήκης, εξάγουμε ως συμπέρασμα {Χ= n} X := X+1{X = n+1} Η n είναι η βοηθητική μεταβλητή για συσχετισμό τιμών στην κατάσταση πριν και μετά την εκτέλεση εντολής

24 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 24 Κανόνας Αποδυνάμωσης της Μετασυνθήκης Εάν ισχύει το {Ρ}C{R} καθώς και το R  Q τότε μπορούμε να εξάγουμε ως συμπέρασμα και το {Ρ}C{Q}

25 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 25 Παράδειγμα 5.9 Με χρήση του αξιώματος της Εντολής Ανάθεσης έχουμε: {R=X ∧ 0=0}Q:=0{R=X ∧ Q=0} Από τα κλασσικά μαθηματικά γνωρίζουμε (R=X)  (R=X ∧ 0=0) Με χρήση του κανόνα Ενδυνάμωσης της Προσυνθήκης έχουμε {R=X}Q:=0{R=X ∧ Q=0)

26 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 26 Παράδειγμα 5.9 Με χρήση πάλι απλών μαθηματικών έχουμε (R=X ∧ Q=0)  (R=X+Υ ⅹ Q) Με χρήση του κανόνα Αποδυνάμωσης της Μετασυνθήκης έχουμε {R=X}Q:=0{R=X+Υ ⅹ Q) Οι κανόνες Ενδυνάμωσης και Αποδυνάμωσης ονομάζονται και κανόνες Συνεπαγωγής

27 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 27 Κανόνες Σύζευξης και Διάζευξης Εάν ισχύει το {Ρ 1 }C{Q 1 } καθώς και το {Ρ 2 }C{Q 2 } τότε μπορούμε να εξάγουμε ως συμπέρασμα και το {Ρ 1 ∧ P 2 }C{Q 1 ∧ Q 2 } Εάν ισχύει το {Ρ 1 }C{Q 1 } καθώς και το {Ρ 2 }C{Q 2 } τότε μπορούμε να εξάγουμε ως συμπέρασμα και το {Ρ 1  P 2 }C{Q 1  Q 2 }

28 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 28 Κανόνας Σύνθετων Εντολών Αφορά εντολές της μορφής C 1 ;C 2 Εάν ισχύουν τα {P} C 1 {Q} και {Q} C 2 {R} μπορούμε να εξάγουμε το συμπέρασμα {P} C 1 ; C 2 {R}

29 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 29 Παράδειγμα 5.10 Με χρήση του αξιώματος της εντολής ανάθεσης μπορούμε να εξάγουμε ότι ισχύουν τα ακόλουθα: { Χ = x  Y = y } R:= Χ { R = x  Y = y } { R = x  Y = y } X:= Y { R = x  X = y } { R = x  X = y } Y:= R { Y = x  X = y }

30 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 30 Παράδειγμα 5.10 Από τα δύο πρώτα και με βάση τον κανόνα των Σύνθετων Εντολών μπορούμε να εξάγουμε ότι ισχύουν τα ακόλουθα: {Χ = x  Y = y} R:= Χ ; X:=Y {R = x  X = y} Τα παραπάνω δίνουν {Χ = x  Y = y} R:= X; X:=Y ; Y:=R {Y = x  X = y}

31 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 31 Κανόνας του if Εάν ισχύει {P  S} C 1 {Q} καθώς και {P  not S} C 2 {Q} τότε μπορούμε να εξάγουμε ως συμπέρασμα το {P} if S then C 1 else C 2 {Q}

32 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 32 Παράδειγμα 5.11 Με χρήση του κανόνα του if καθώς και άλλους προηγούμενους κανόνες και αξιώματα η προδιαγραφή {y>1} if (x>0) then (y:= y-1) else (y := y+1) {y>0} είναι αληθής

33 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 33 Κανόνας του while Αν γνωρίζουμε ότι {P  S} C {P} τότε μπορούμε να εξάγουμε ως συμπέρασμα ότι {P} while S do C{P  not S} Η συνθήκη P ονομάζεται αμετάβλητη συνθήκη διότι εξακολουθεί και ισχύει και μετά το τέλος της εκτέλεσης της εντολής while.

34 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 34 Κανόνας του while - 2 Ο κανόνας του while λέει ότι εάν P είναι μία αμετάβλητη συνθήκη του σώματος μιας εντολής while (όταν ισχύει και η συνθήκη S) τότε η P είναι μία αμετάβλητη συνθήκη ολόκληρης της εντολής while.

35 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 35 Παράδειγμα 5.12 Έστω ότι θέλουμε να αποδείξουμε: {true} R:=X; Q:=0; while (Y<= R) do (R:=R-Y; Q:=Q+1) {R

36 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 36 Παράδειγμα 5.12 Απόδειξη Πρώτα θα δείξουμε ότι: {true}R:=X; Q:=0{X=R+Y ⅹ Q)} και μετά {X=R+(Y ⅹ Q)} while Y<=R do (R:=R-Y;Q:=Q+1) {X=R+ (Y ⅹ Q)  not (Y  R)}

37 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 37 Παράδειγμα 5.12 Η πρώτη αποδεικνύεται εύκολα. Για τη δεύτερη θα δείξουμε πρώτα ότι: {X=R+(Y ⅹ Q)}R:=R-Y;Q:=Q+1{X=R+ (Y ⅹ Q)} Με βάση το Αξίωμα Εντολής Ανάθεσης {X=(R-Υ)+Υ+(Y ⅹ Q)}R:=R-Y{X=R+Υ+ (Y ⅹ Q)} Και επίσης με βάση το ίδιο αξίωμα: {X=R+(Y ⅹ (Q+1))}Q:=Q+1{X=R+ (Y ⅹ Q)} Με χρήση του Κανόνα Σύνθετων Εντολών {X=R+(Y ⅹ Q)}R:=R-Y;Q:=Q+1{X=R+ (Y ⅹ Q)}

38 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 38 Παράδειγμα 5.12 Με χρήση του Κανόνα Ενδυνάμωσης της Προσυνθήκης {(X=R+(Y ⅹ Q))  (Υ  R)}R:=R-Y;Q:=Q+1{X=R+ (Y ⅹ Q)} Με εφαρμογή του Κανόνα του While θα πάρουμε το ζητούμενο αποτέλεσμα

39 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 39 Παράδειγμα Έστω το πρόγραμμα: j=0; i=k; while (i

40 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 40 Παράδειγμα Βρείτε μια invariant για το while loop ij k0 k+11 k+22 ……

41 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 41 Λύση Προφανώς i-j=k είναι μία invariant. Για να το δείξουμε τυπικά, αρκεί να δείξουμε ότι: {(i-j=k)  (i

42 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 42 Παράδειγμα Κ:=Ν; s:=1; while (K>0) do s:= A * s; K:=K-1; end Θέλουμε να δείξουμε ότι: {Ν>0 and A  0} P { s=A N } P

43 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 43 Λύση Πως βρίσκουμε τις αμετάβλητες συνθήκες; Δοκιμάζουμε τον κώδικα για μικρούς αριθμούς πχ Α=2, Ν=5 ΚssA K

44 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 44 Λύση Μία αμετάβλητη συνθήκη, που θα μπορούσαμε να χρησιμοποιήσουμε είναι η: s * A K = A N Βλέπουμε επίσης ότι μία άλλη αμετάβλητη συνθήκη φαίνεται να είναι η: Κ  0, διότι {(Κ  0)  (Κ>0)}s = A * s, K:=K-1{Κ  0} Επομένως διαλέγουμε ως invariant τη συνθήκη: (s * A K = A N )  (Κ  0)

45 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 45 Λύση Δείχνουμε καταρχήν ότι: {(s * A K = A N )  (Κ  0)  (Κ>0)}s:=A * s; K:=K-1{(s * A K = A N )  (Κ  0)} Ή ισοδύναμα {(s * A K = A N )  (Κ>0)}s:=A * s; K:=K-1{(s * A K = A N )  (Κ  0)} Έχουμε: {(s * A K-1 = A N )  (Κ -1  0)}κ:=K-1{(s * A K = A N )  (Κ  0)}

46 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 46 Λύση Επίσης {(Α * s * A K-1 = A N )  (Κ-1  0)}s:=A * s; {(s * A K-1 = A N )  (Κ-1  0)} Δηλαδή {(s * A K = A N )  (Κ>0)}s:=A * s; K:=K-1{(s * A K = A N )  (Κ  0)} Επομένως θα έχουμε για όλο το WHILE: {(s * A K = A N )  (Κ  0)} WHILE….END{(s * A K = A N )  (Κ  0)  (K>0)} Όμως: {(s * A K = A N )  (Κ =0)}  s = A N {(s * A K = A N )  (Κ =0)}

47 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 47 Λύση Με αποδυνάμωση της μετασυνθήκης έχουμε: {(s * A K = A N )  (Κ  0)} WHILE….END{(s = A N )} Μας μένει να δείξουμε ότι: {Ν>0  Α  0)} Κ:=Ν; s:=1 {(s * A K = A N )  (Κ  0)} Ξεκινώντας από το δεύτερο έχουμε: {(A K = A N )  (Κ  0)} s:=1{(s * A K = A N )  (Κ  0)} Το πρώτο δίνει: {(A Ν = A N )  (Ν  0)} κ:=Ν{(A K = A N )  (Κ  0)} TRUE

48 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 48 Λύση Όμως: (Ν>0  Α  0)  Ν  0 Επομένως το ζητούμενο ισχύει.

49 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 49 Παράδειγμα Έστω το πρόγραμμα: count :=n; fact :=1; while (count !=0) do fact :=fact * count; count := count – 1; end Θέλουμε να δείξουμε ότι: {n  0} P {fact =n!} P

50 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 50 Λύση Δοκιμάζουμε μερικές τιμές: Γενικά count! * fact = n! countfact n1 n-1n n-2(n-1) * n n-3(n-2) * (n-1) * n

51 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 51 Λύση Το παραπάνω όταν τελειώσει το loop δίνει 0! * fact = n! που είναι αυτό, που θέλουμε. Διαλέγουμε λοιπόν ως invariant το: Μένει να εξετάσουμε αν είναι invariant (count ! * fact = n!)  (count  0)

52 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 52 Λύση {(count ! * fact = n!)  (count  0)  (count  0)} fact = fact * count; count=count –1; {(count ! * fact = n!)  (count  0)} Μπορούμε να το εξετάσουμε αρχίζοντας από το τέλος προς την αρχή count >0

53 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 53 Λύση {(count-1) ! * (fact = n!)  (count  1)} count:=count-1{(count ! * fact = n!)  (count  0)} {((count-1) ! * count * fact = n!)  (count  1)} fact:=fact * count{((count-1) ! * fact = n!)  (count  1)} Επομένως μπορούμε να εξάγουμε το συμπέρασμα ότι: {(count ! * fact = n!)  (count  0)}WHILE…END{{(count ! * fact = n!)  (count  0)  (count=0)} (count ! * fact = n!)^(count >0) fact = n!

54 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 54 Λύση Το μόνο, που μένει είναι να δείξουμε: { n  0} count :=n; fact:=1 ; {(count! * fact=n!)  (count  0)} Το οποίο είναι απλό: {(count! =n!)  (count  0)}fact:=1{(count! * fact=n!)  (count  0)} {(n!=n!)  (n  0)}count:=n{(count!=n!)  (count  0)}


Κατέβασμα ppt "Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 5 Αξιωματική Σημασιολογία και Απόδειξη Ορθότητας Προγραμμάτων."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google