loop invariants announcements for this lecture
play

Loop Invariants Announcements for This Lecture Assignments Prelim - PowerPoint PPT Presentation

Lecture 23 Loop Invariants Announcements for This Lecture Assignments Prelim 2 A6 due in one week Tonight , 7:30-9pm Dataset should be done AJ (Uris G01) Get on track this weekend KZ (Statler Aud)


  1. Lecture 23 Loop Invariants

  2. Announcements for This Lecture Assignments Prelim 2 • A6 due in one week • Tonight , 7:30-9pm § Dataset should be done § A–J (Uris G01) § Get on track this weekend § K–Z (Statler Aud) § Next Week : ClusterGroup § SDS received e-mail • A7 will be last assignment • Make-up is Monday § Will vote on the due date § Only if submitted conflict § Posted before Thanksgiving § Also received e-mail • There is lab next week • Graded by the weekend § No lab week of Turkey Day § Returned early next week 11/12/15 Loop Invariants 2

  3. Recall: Important Terminology • assertion : true-false statement placed in a program to assert that it is true at that point § Can either be a comment , or an assert command • invariant : assertion supposed to "always" be true § If temporarily invalidated, must make it true again § Example : class invariants and class methods • loop invariant : assertion supposed to be true before and after each iteration of the loop • iteration of a loop : one execution of its body 11/12/15 Loop Invariants 3

  4. Assertions versus Asserts • Assertions prevent bugs # x is the sum of 1..n § Help you keep track of Comment form what you are doing The root of the assertion. • Also track down bugs of all bugs! § Make it easier to check x ? n 1 belief/code mismatches • The assert statement is x ? n 3 a (type of) assertion § One you are enforcing x ? n 0 § Cannot always convert a comment to an assert 11/12/15 Loop Invariants 4

  5. Preconditions & Postconditions n precondition 1 2 3 4 5 6 7 8 # x = sum of 1..n-1 x contains the sum of these (6) x = x + n n = n + 1 # x = sum of 1..n-1 n 1 2 3 4 5 6 7 8 postcondition x contains the sum of these (10) • Precondition: assertion placed before a segment Relationship Between Two • Postcondition: assertion If precondition is true, then postcondition will be true placed after a segment 11/12/15 Loop Invariants 5

  6. Solving a Problem precondition # x = sum of 1..n What statement do you put here to make the n = n + 1 postcondition true? # x = sum of 1..n postcondition A: x = x + 1 B: x = x + n C: x = x + n+1 D: None of the above E: I don’t know 11/12/15 Loop Invariants 6

  7. Solving a Problem precondition # x = sum of 1..n What statement do you put here to make the n = n + 1 postcondition true? # x = sum of 1..n postcondition A: x = x + 1 B: x = x + n Remember the new value of n C: x = x + n+1 D: None of the above E: I don’t know 11/12/15 Loop Invariants 7

  8. Invariants: Assertions That Do Not Change • Loop Invariant : an assertion that is true before and after each iteration (execution of repetend) x = 0; i = 2 i = 2 while i <= 5: x = x + i*i # invariant i = i +1 # x = sum of squares of 2..5 true i <= 5 x = x + i*i Invariant: false x = sum of squares of 2..i-1 i = i +1 in terms of the range of integers The loop processes the range 2..5 that have been processed so far 11/12/15 Loop Invariants 8

  9. Invariants: Assertions That Do Not Change x 0 x = 0; i = 2 # Inv: x = sum of squares of 2..i-1 i ? while i <= 5: x = x + i*i i = 2 i = i +1 # Post: x = sum of squares of 2..5 # invariant Integers that have been processed: true i <= 5 Range 2..i-1: x = x + i*i false i = i +1 The loop processes the range 2..5 11/12/15 Loop Invariants 9

  10. Invariants: Assertions That Do Not Change x 0 x = 0; i = 2 # Inv: x = sum of squares of 2..i-1 ✗ i ? 2 while i <= 5: x = x + i*i i = 2 i = i +1 # Post: x = sum of squares of 2..5 # invariant Integers that have been processed: true i <= 5 Range 2..i-1: 2..1 (empty) x = x + i*i false i = i +1 The loop processes the range 2..5 11/12/15 Loop Invariants 10

  11. Invariants: Assertions That Do Not Change ✗ x 0 4 x = 0; i = 2 # Inv: x = sum of squares of 2..i-1 ✗ ✗ i ? 2 3 while i <= 5: x = x + i*i i = 2 i = i +1 # Post: x = sum of squares of 2..5 # invariant Integers that have been processed: 2 true i <= 5 Range 2..i-1: 2..1 (empty) x = x + i*i 2..2 false i = i +1 The loop processes the range 2..5 11/12/15 Loop Invariants 11

  12. Invariants: Assertions That Do Not Change ✗ ✗ x 0 4 13 x = 0; i = 2 # Inv: x = sum of squares of 2..i-1 ✗ ✗ ✗ i ? 2 3 4 while i <= 5: x = x + i*i i = 2 i = i +1 # Post: x = sum of squares of 2..5 # invariant Integers that have been processed: 2 , 3 true i <= 5 Range 2..i-1: 2..1 (empty) x = x + i*i 2..2 2..3 false i = i +1 The loop processes the range 2..5 11/12/15 Loop Invariants 12

  13. Invariants: Assertions That Do Not Change ✗ ✗ ✗ x 0 4 13 29 x = 0; i = 2 # Inv: x = sum of squares of 2..i-1 ✗ ✗ ✗ ✗ i ? 2 3 4 5 while i <= 5: x = x + i*i i = 2 i = i +1 # Post: x = sum of squares of 2..5 # invariant Integers that have been processed: 2 , 3 , 4 true i <= 5 Range 2..i-1: 2..1 (empty) x = x + i*i 2..4 2..3 2..2 false i = i +1 The loop processes the range 2..5 11/12/15 Loop Invariants 13

  14. Invariants: Assertions That Do Not Change ✗ ✗ ✗ ✗ x 0 4 13 29 54 x = 0; i = 2 # Inv: x = sum of squares of 2..i-1 ✗ ✗ ✗ ✗ ✗ i ? 2 3 4 5 6 while i <= 5: x = x + i*i i = 2 i = i +1 # Post: x = sum of squares of 2..5 # invariant Integers that have been processed: 2 , 3 , 4 , 5 true i <= 5 Range 2..i-1: 2..1 (empty) x = x + i*i 2..5 2..4 2..3 2..2 false i = i +1 The loop processes the range 2..5 11/12/15 Loop Invariants 14

  15. Invariants: Assertions That Do Not Change ✗ ✗ ✗ ✗ x 0 4 13 29 54 x = 0; i = 2 # Inv: x = sum of squares of 2..i-1 ✗ ✗ ✗ ✗ ✗ i ? 2 3 4 5 6 while i <= 5: x = x + i*i i = 2 i = i +1 # Post: x = sum of squares of 2..5 # invariant Integers that have been processed: 2 , 3 , 4 , 5 true i <= 5 Range 2..i-1: 2..1 (empty) x = x + i*i 2..2 2..3 2..4 2..5 false Invariant was always true just i = i +1 before test of loop condition. So it’s true when loop terminates The loop processes the range 2..5 15

  16. Designing Integer while -loops # Process integers in a..b Command to do something # inv: integers in a..k-1 have been processed k = a while k <= b: process integer k k = k + 1 # post: integers in a..b have been processed Equivalent postcondition invariant true Process k init cond false k= k +1; invariant 11/12/15 Loop Invariants 16

  17. Designing Integer while -loops 1. Recognize that a range of integers b..c has to be processed 2. Write the command and equivalent postcondition 3. Write the basic part of the while-loop 4. Write loop invariant 5. Figure out any initialization 6. Implement the repetend (process k) 11/12/15 Loop Invariants 17

  18. Designing Integer while -loops 1. Recognize that a range of integers b..c has to be processed 2. Write the command and equivalent postcondition 3. Write the basic part of the while-loop 4. Write loop invariant 5. Figure out any initialization 6. Implement the repetend (process k) # Process b..c # Postcondition: range b..c has been processed 11/12/15 Loop Invariants 18

  19. Designing Integer while -loops 1. Recognize that a range of integers b..c has to be processed 2. Write the command and equivalent postcondition 3. Write the basic part of the while-loop 4. Write loop invariant 5. Figure out any initialization 6. Implement the repetend (process k) # Process b..c while k <= c: k = k + 1 # Postcondition: range b..c has been processed 11/12/15 Loop Invariants 19

  20. Designing Integer while -loops 1. Recognize that a range of integers b..c has to be processed 2. Write the command and equivalent postcondition 3. Write the basic part of the while-loop 4. Write loop invariant 5. Figure out any initialization 6. Implement the repetend (process k) # Process b..c # Invariant: range b..k-1 has been processed while k <= c: k = k + 1 # Postcondition: range b..c has been processed 11/12/15 Loop Invariants 20

  21. Designing Integer while -loops 1. Recognize that a range of integers b..c has to be processed 2. Write the command and equivalent postcondition 3. Write the basic part of the while-loop 4. Write loop invariant 5. Figure out any initialization 6. Implement the repetend (process k) # Process b..c Initialize variables (if necessary) to make invariant true # Invariant: range b..k-1 has been processed while k <= c: # Process k k = k + 1 # Postcondition: range b..c has been processed 11/12/15 Loop Invariants 21

  22. Finding an Invariant Command to do something # Make b True if n is prime, False otherwise # b is True if no int in 2..n-1 divides n, False otherwise Equivalent postcondition What is the invariant? 11/12/15 Loop Invariants 22

  23. Finding an Invariant Command to do something # Make b True if n is prime, False otherwise while k < n: # Process k; k = k +1 # b is True if no int in 2..n-1 divides n, False otherwise Equivalent postcondition What is the invariant? 11/12/15 Loop Invariants 23

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend