🚧 Setup for 5.5
This commit is contained in:
parent
009dfdcae1
commit
a4ee4fe4d3
3 changed files with 245 additions and 0 deletions
|
|
@ -6627,3 +6627,156 @@ Omitted.
|
||||||
well-ordering principle for the integers.
|
well-ordering principle for the integers.
|
||||||
|
|
||||||
Omitted.
|
Omitted.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Exercise Set 5.5**
|
||||||
|
|
||||||
|
Page 346
|
||||||
|
|
||||||
|
Exercises 1-5 contain a while loop and a predicate. In each case show that if
|
||||||
|
the predicate is true before entry to the loop, then it is also true after exit
|
||||||
|
from the loop.
|
||||||
|
|
||||||
|
1.
|
||||||
|
|
||||||
|
loop:
|
||||||
|
|
||||||
|
$\text{\textbf{while}} (m \geq 0 \text{ and } m \leq 100)\\ \ \ \ \ m := m + 1\\ \ \ \ \ n := n - 1\\ \text{\textbf{end while}}$
|
||||||
|
|
||||||
|
predicate: $m + n = 100$
|
||||||
|
|
||||||
|
2.
|
||||||
|
|
||||||
|
loop:
|
||||||
|
|
||||||
|
$\text{\textbf{while}} (m \geq 0 \text{ and } m \leq 100)\\ \ \ \ \ m := m + 4\\ \ \ \ \ n := n - 2\\ \text{\textbf{end while}}$
|
||||||
|
|
||||||
|
predicate: $m + n \text{ is odd}$
|
||||||
|
|
||||||
|
3.
|
||||||
|
|
||||||
|
loop:
|
||||||
|
|
||||||
|
$\text{\textbf{while}} (m \geq 0 \text{ and } m \leq 100)\\ \ \ \ \ m := 3 \cdot m\\ \ \ \ \ n := 5 \cdot n\\ \text{\textbf{end while}}$
|
||||||
|
|
||||||
|
predicate: $m^3 > n^2$
|
||||||
|
|
||||||
|
4.
|
||||||
|
|
||||||
|
loop:
|
||||||
|
|
||||||
|
$\text{\textbf{while}} (n \geq 0 \text{ and } n \leq 100)\\ \ \ \ \ n := n + 1\\ \text{\textbf{end while}}$
|
||||||
|
|
||||||
|
predicate: $2^n < (n + 2)!$
|
||||||
|
|
||||||
|
5.
|
||||||
|
|
||||||
|
loop:
|
||||||
|
|
||||||
|
$\text{\textbf{while}} (n \geq 3 \text{ and } n \leq 100)\\ \ \ \ \ n := n + 1\\ \text{\textbf{end while}}$
|
||||||
|
|
||||||
|
predicate: $2n + 1 \leq 2^n$
|
||||||
|
|
||||||
|
Exercises 6-9 each contain a while loop annotated with a pre-and a
|
||||||
|
post-condition and also a loop invariant. In each case, use the loop invariant
|
||||||
|
theorem to prove the correctness of the loop with respect to the pre-and
|
||||||
|
post-conditions.
|
||||||
|
|
||||||
|
6. _[Pre-condition: $m$ is a nonnegative integer, $x$ is a real number, $i = 0$,
|
||||||
|
and $\text{exp} = 1$.]_
|
||||||
|
|
||||||
|
$\text{\textbf{while}} (i \neq m)\\ \ \ \ \ 1. \text{exp} := \text{exp} \cdot x\\ \ \ \ \ 2. i := i + 1\\ \text{\textbf{end while}}$
|
||||||
|
|
||||||
|
_[Post-condition: $\text{exp} = x^m$]_
|
||||||
|
|
||||||
|
loop invariant: $I(n)$ is "$\text{exp} = x^n$ and $i = n$."
|
||||||
|
|
||||||
|
7. _[Pre-condition: $\text{largest} = A[1]$ and $i = 1$]_
|
||||||
|
|
||||||
|
$\text{\textbf{while}} (i \neq m)\\ \ \ \ \ 1. i := i + 1\\ \ \ \ \ 2. \text{\textbf{if}} A[i] > \text{largest \textbf{then } \text{largest}} := A[i]\\ \text{\textbf{end while}}$
|
||||||
|
|
||||||
|
_[Post-condition:
|
||||||
|
$\text{largest} = \text{maximum value of } A[1], A[2], \dots, A[m]$]_
|
||||||
|
|
||||||
|
loop invariant: $I(n)$ is
|
||||||
|
"$\text{largest} = \text{maximum value of } A[1], A[2], \dots, A[n + 1]$ and
|
||||||
|
$i = n + 1$."
|
||||||
|
|
||||||
|
8. _[Pre-condition: $\text{sum} = A[1]$ and $i = 1$]_
|
||||||
|
|
||||||
|
$\text{\textbf{while}} (i \neq m)\\ \ \ \ \ 1. i := i + 1\\ \ \ \ \ 2. \text{sum} := \text{sum} + A[i]\\ \text{\textbf{end while}}$
|
||||||
|
|
||||||
|
_[Post condition: $\text{sum} = A[1] + A[2] + \dots + A[m]$]_
|
||||||
|
|
||||||
|
loop invariant: $I(n)$ is "$i = n + 1$ and
|
||||||
|
$\text{sum} = A[1] + A[2] + \dots + A[n + 1]$."
|
||||||
|
|
||||||
|
9. _[Pre-condition: $a = A$ and $A$ is a positive integer.]_
|
||||||
|
|
||||||
|
$\text{\textbf{while}} (a > 0)\\ \ \ \ \ a := a - 2\\ \text{\textbf{end while}}$
|
||||||
|
|
||||||
|
_[Post-condition: $a = 0$ if $A$ is even and $a = -1$ if $A$ is odd.]_
|
||||||
|
|
||||||
|
loop invariant: $I(n)$ is "Both $a$ and $A$ are even integers or both are odd
|
||||||
|
integers and, in either case, $a \geq -1$."
|
||||||
|
|
||||||
|
10. Prove correctness of the **while** loop of Algorithm 4.10.3 (in exercise 27
|
||||||
|
of Exercise Set 4.10) with respect to the following pre- and
|
||||||
|
post-conditions:
|
||||||
|
|
||||||
|
_Pre-condition:_ $A$ and $B$ are positive integers, $a = A$, and $b = B$.
|
||||||
|
|
||||||
|
_Post-condition:_ One of $a$ or $b$ is zero and the other is nonzero. Whichever
|
||||||
|
is nonzero equals $\text{gcd}(A, B)$.
|
||||||
|
|
||||||
|
Use the loop invariant
|
||||||
|
|
||||||
|
$I(n)$
|
||||||
|
|
||||||
|
"(1) $a$ and $b$ are nonnegative integers with
|
||||||
|
$\text{gcd}(a, b) = \text{gcd}(A, B)$,
|
||||||
|
|
||||||
|
(2) at most one of $a$ and $b$ equals $0$,
|
||||||
|
|
||||||
|
(3) $0 \leq a + b \leq A + B - n$."
|
||||||
|
|
||||||
|
11. The following **while** loop implements a way to multiply two numbers that
|
||||||
|
was developed by the ancient Egyptians.
|
||||||
|
|
||||||
|
_[Pre-condition: $A$ and $B$ are positive integers, $x = A$, $y = B$, and
|
||||||
|
$\text{product} = 0$.]_
|
||||||
|
|
||||||
|
$\text{\textbf{while}} (y \neq 0)\\ \ \ \ \ r := y \mod 2\\ \ \ \ \ \text{\textbf{if }} r = 0\\ \ \ \ \ \ \ \ \ \text{\textbf{then do }}\\ \ \ \ \ \ \ \ \ \ \ \ \ x := 2 \cdot x\\ \ \ \ \ \ \ \ \ \ \ \ \ y := y \text{ div } 2\\ \ \ \ \ \ \ \ \ \text{\textbf{end do}}\\ \ \ \ \ \text{\textbf{if }} r = 1\\ \ \ \ \ \ \ \ \ \text{\textbf{then do }}\\ \ \ \ \ \ \ \ \ \ \ \ \ \text{product} := \text{product } + x\\ \ \ \ \ \ \ \ \ \ \ \ \ y := y - 1\\ \ \ \ \ \ \ \ \ \text{\textbf{end do}}\\ \text{\textbf{end while}}$
|
||||||
|
|
||||||
|
_[Post-condition: $\text{product } = A \cdot B$]_
|
||||||
|
|
||||||
|
a. Make a trace table to show that the algorithm gives the correct answer for
|
||||||
|
multiplying $A = 13 \text{ times } B = 18$.
|
||||||
|
|
||||||
|
b. Prove the correctness of this loop with respect to its pre-and
|
||||||
|
post-conditions by using the loop invariant
|
||||||
|
|
||||||
|
$I(n)$: "$xy + \text{ product} = A \cdot B$"
|
||||||
|
|
||||||
|
12. The following sentence could be added to the loop invariant for the
|
||||||
|
Euclidean algorithm:
|
||||||
|
|
||||||
|
There exist integers $u$, $v$, $s$, and $t$ such that $a = uA + vB$ and
|
||||||
|
$b = sA + tB$.
|
||||||
|
|
||||||
|
a. Show that this sentence is a loop invariant for
|
||||||
|
|
||||||
|
$\text{\textbf{while}} (b \neq 0)\\ \ \ \ \ r := a \mod b\\ \ \ \ \ a := b\\ \ \ \ \ b := r\\ \text{\textbf{end while}}$
|
||||||
|
|
||||||
|
b. Show that if initially $a = A$ and $b = B$, then sentence (5.5.12) is true
|
||||||
|
before the first iteration of the loop.
|
||||||
|
|
||||||
|
c. Explain how the correctness proof for the Euclidean algorithm together with
|
||||||
|
the results of (a) and (b) above allow you to conclude that given any integers
|
||||||
|
$A$ and $B$ with $A > B \geq 0$, there exist integers $u$ and $v$ so that
|
||||||
|
$\text{gcd}(A, B) = uA + vB$.
|
||||||
|
|
||||||
|
d. By actually calculating $u$, $v$, $s$, and $t$ at each stage of execution of
|
||||||
|
the Euclidean algorithm, find integers $u$ and $v$ so that
|
||||||
|
$\text{gcd}(330, 156) = 330u + 156v$.
|
||||||
|
|
|
||||||
|
|
@ -908,3 +908,64 @@ The preceding arguments prove that there exists integers $r$ and $q$ for which
|
||||||
$$ n = dq + r \text{ and } 0 \leq r < d $$
|
$$ n = dq + r \text{ and } 0 \leq r < d $$
|
||||||
|
|
||||||
_[as was to be shown.]_
|
_[as was to be shown.]_
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Page 339
|
||||||
|
|
||||||
|
**Definition**
|
||||||
|
|
||||||
|
A loop is defined as **correct with respect to its pre- and post-conditions**
|
||||||
|
if, and only if, whenever the algorithm variables satisfy the pre-condition for
|
||||||
|
the loop and the loop terminates after a finite number of steps, the algorithm
|
||||||
|
variables satisfy the post-condition for the loop.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Page 340
|
||||||
|
|
||||||
|
**Theorem 5.5.1 Loop Invariant Theorem**
|
||||||
|
|
||||||
|
Let a **while** loop with guard $G$ be given, together with pre- and
|
||||||
|
post-conditions that are predicates in the algorithm variables. Also let a
|
||||||
|
predicate $I(n)$, called the **loop invariant**, be given. If the following four
|
||||||
|
properties are true, then the loop is correct with respect to its pre- and
|
||||||
|
post-conditions.
|
||||||
|
|
||||||
|
**I. Basis Property:** The pre-condition for the loop implies that $I(0)$ is
|
||||||
|
true before the first iteration of the loop.
|
||||||
|
|
||||||
|
**II. Inductive Property:** For every integer $k \geq 0$, if the guard $G$ and
|
||||||
|
the loop invariant $I(k)$ are both true before an iteration of the loop, then
|
||||||
|
$I(k + 1)$ is true after an iteration of the loop.
|
||||||
|
|
||||||
|
**III. Eventual Falsity of Guard:** After a finite number of iterations of the
|
||||||
|
loop, the guard $G$ becomes false.
|
||||||
|
|
||||||
|
**IV. Correctness of the Post-Condition:** If $N$ is the least number of
|
||||||
|
iterations after which $G$ is false and $I(N)$ is true, then the values of the
|
||||||
|
algorithm variables will be as specified in the post-condition of the loop.
|
||||||
|
|
||||||
|
**Proof:**
|
||||||
|
|
||||||
|
The loop invariant theorem follows easily from the principle of mathematical
|
||||||
|
induction. Assume that $I(n)$ is a predicate that satisfies properties I-IV of
|
||||||
|
the loop invariant theorem. _[We will prove that the loop is correct with
|
||||||
|
respect to its pre- and post-conditions.]_ Properties I and II are the basis and
|
||||||
|
inductive steps needed to prove the truth of the following statement:
|
||||||
|
|
||||||
|
For every integer $n \geq 0$, if the **while** loop iterates $n$ times, then
|
||||||
|
$I(n)$ is true.
|
||||||
|
|
||||||
|
Thus, by the principle of mathematical induction, since both I and II are true,
|
||||||
|
statement (5.5.1) is also true.
|
||||||
|
|
||||||
|
Property III says that the guard $G$ eventually becomes false. At that point the
|
||||||
|
loop will have been iterated some number, say $N$, of times. Since $I(n)$ is
|
||||||
|
true after the $n$th iteration for every $n \geq 0$, then $I(n)$ is true after
|
||||||
|
the $N$th iteration. That is, after the $N$th iteration the guard is false and
|
||||||
|
$I(N)$ is true. But this is the hypothesis of property IV, which is an if-then
|
||||||
|
statement. Since statement IV is true (by assumption) and its hypothesis is true
|
||||||
|
(by the argument just given), it follows (by modus ponens) that its conclusion
|
||||||
|
is also true. That is, the values of all algorithm variables after execution of
|
||||||
|
the loop are as specified in the post-condition for the loop.
|
||||||
|
|
|
||||||
|
|
@ -96,3 +96,34 @@ $a$; $k$; $P(k + 1)$
|
||||||
than or equal to every _____, then _____.
|
than or equal to every _____, then _____.
|
||||||
|
|
||||||
one integer; integer in $S$; $S$ contains a least element.
|
one integer; integer in $S$; $S$ contains a least element.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Test Yourself**
|
||||||
|
|
||||||
|
Page 346
|
||||||
|
|
||||||
|
1. A pre-condition for an algorithm is _____ and a post-condition for an
|
||||||
|
algorithm is _____.
|
||||||
|
|
||||||
|
2. A loop is defined as correct with respect to its pre- and post-conditions if,
|
||||||
|
and only if, whenever the algorithm variables satisfy the pre-condition for
|
||||||
|
the loop and the loop terminates after a finite number of steps, then _____.
|
||||||
|
|
||||||
|
3. For each iteration of a loop, if a loop invariant is true before iteration of
|
||||||
|
the loop, then _____.
|
||||||
|
|
||||||
|
4. Given a **while** loop with guard $G$ and a predicate $I(n)$ if the following
|
||||||
|
four properties are true, then the loop is correct with respect to its pre-
|
||||||
|
and post-conditions:
|
||||||
|
|
||||||
|
(a) The pre-condition for the loop implies that _____ before the first iteration
|
||||||
|
of the loop.
|
||||||
|
|
||||||
|
(b) For every integer $k \geq 0$, if the guard $G$ and the predicate $I(k)$ are
|
||||||
|
both true before an iteration of the loop, then _____.
|
||||||
|
|
||||||
|
\(c\) After a finite number of iterations of the loop, _____.
|
||||||
|
|
||||||
|
(d) If $N$ is the least number of iterations after which $G$ is false and $I(N)$
|
||||||
|
is true, then the values of the algorithm variables will be as specified _____.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue