Transcript Chapter 3

Chapter 3 - 1
Construction Techniques
1
Section 3.1 Inductively Defined Sets
• To define a set S inductively is to do three
things:
• Basis: Specify one or more elements of S.
• Induction: Specify one or more rules to construct
elements of S from existing elements of S.
• Closure: Specify that no other elements are in S
(always assumed).
• Note: The basis elements and the induction
rules are called constructors.
2
Example 1
• Find an inductive definition for S = {3, 16,
29, 42, …}.
• Solution: Basis: 3 ∈ S.
Induction: If x ∈ S then x + 13 ∈ S.
• The constructors are 3 and the operation
of adding 13.
• Also, without closure, many sets would
satisfy the basis and induction rule. e.g., 3
∈ Z and x ∈ Z implies x + 13 ∈ Z.
3
Example 2
• Find an inductive definition for S = {3, 4, 5, 8, 9,
12, 16, 17, 20, 24, 33,…}.
• Solution: To simplify things we might try to
“divide and conquer” by writing S as the union of
more familiar sets as follows:
S = {3, 5, 9, 17, 33, …} ⋃ {4, 8, 12, 16, 20, 24,
…}.
• Basis: 3, 4 ∈ S.
• Induction: If x ∈ S then (if x is odd then 2x – 1 ∈
S else x + 4 ∈ S).
4
Example 3
• Describe the set S defined inductively as
follows:
• Basis: 2 ∈ S;
• Induction: x ∈ S implies x ± 3 ∈ S.
• Solution: S = {2, 5, 8, 11, … } ⋃ {–1, –4, –
7, –10, … }.
5
Example 4
• Find an inductive definition for S = {٨, ac,
aacc, aaaccc, …} = {ancn | n ∈ N}.
• Solution: Basis: ٨ ∈ S.
Induction: If x ∈ S then axc ∈ S.
6
Example 5
• Find an inductive definition for S = {an+1bcn
| n ∈ N}.
• Solution: Basis: ab ∈ S.
• Induction: If x ∈ S then axc ∈ S.
7
Example 6
• Describe the set S defined by:
– Basis: a, b ∈ S
– Induction: x ∈ S implies ƒ(x) ∈ S.
• Solution: S = {a, ƒ(a), ƒ(ƒ(a)), …} ⋃ {b,
ƒ(b), ƒ(ƒ(b)), …}, which could also be
written as
S = {ƒn(a) | n ∈ N} ⋃ {ƒn(b) | n ∈ N} = {ƒn(x)
| x ∈ {a, b} and n ∈ N}.
8
Example 7
• Describe the set S defined by:
– Basis: < 0 > ∈ S
– Induction: x ∈ S implies cons(1, x) ∈ S.
• Solution: S = {< 0 >, < 1, 0 >, <1, 1, 0 >,
…}.
9
Infix notation
• cons(h, t) = h :: t. Associate to the right.
e.g., x :: y :: z = x :: (y :: z).
• Example 8. Find an inductive definition for
S = {<>, <a, b >, <a, b, a, b >, …}.
• Solution:
– Basis: <> ∈ S.
– Induction: x ∈ S implies a :: b :: x ∈ S.
10
Example 9
• Find an inductive definition for S = {<>,
<<>>, <<<>>>, …}.
• Solution: Basis: <> ∈ S.
Induction: x ∈ S implies x :: <> ∈ S.
11
Notation for Binary Trees
• Let t(L, x, R) denote the tree with root x,
left subtree L, and right subtree R. Let <>
denote the empty binary tree. If T = t(L, x,
R), then root(T) = x, left(T) = L, and
right(T) = R.
12
Example 10
• Describe the set S defined inductively as follows:
– Basis: t(<>, •, <>) ∈ S.
– Induction: T ∈ S implies t(T, •, t(<>, •, <>)) ∈ S.
• Solution (picture): The first few trees constructed
from the definition are pictured as follows:
and so on.
13
Example 11
• Find an inductive definition for the set S of binary
trees indicated by the following picture.
and so on.
• Solution: Basis: t(<>, •, <>) ∈ S.
Induction: T ∈ S implies
t(t(left(T), •, <>), •, t(<>, •, right(T))) ∈ S.
14
Example 12
• Find an inductive definition for the set S =
{a}* × N.
• Solution: Basis: (٨, 0) ∈ S.
Induction: (s, n) ∈ S implies
(as, n), (s, n + 1) ∈ S.
15
Example 13
• Find an inductive definition for the set S = {(x, –y) | x, y ∈ N and x ≥
y}.
• Solution: To get an idea about S we can write out a few tuples:
(0, 0), (1, 0), (1, –1), (2, 0), (2, –1), (2, –2), and so on.
We can also get an idea about S by graphing a few points, as
indicated in the picture.
One solution can be written as follows:
– Basis: (0, 0) ∈ S.
– Induction: (x, y) ∈ S implies (x + 1, y), (x + 1, y – 1) ∈ S.
Notice that this definition constructs some repeated points.
For example, (2, –1) is constructed twice.
16
Quiz (2 minutes)
• Try to find a solution that does not construct
repeated elements.
• Solution: We might use two separate rules. One
rule to construct the diagonal points and one
rule to construct horizontal lines that start at the
diagonal points.
– Basis: (0, 0) ∈ S.
– Induction:
1. (x, y) ∈ S implies (x + 1, y) ∈ S.
2. (x, –x) ∈ S implies (x + 1, – (x + 1)) ∈ S.
17
Section 3.2 Recursively Defined
Functions and Procedures
• A function f is recursively defined if at least
one value f(x) is defined in terms of
another value f(y), where x ≠ y. Similarly, a
procedure P is recursively defined if the
action of P(x) is defined in terms of
another action P(y), where x ≠ y.
18
Technique for recursive definitions
• Technique for recursive definitions when
the argument domain is inductively
defined.
1. Specify a value f(x), or action P(x), for
each basis element x of S.
2. Specify rules that, for each inductively
defined element x in S, define the value
f(x), or action P(x), in terms of previously
defined values of f or actions of P.
19
Example 1
• Find a recursive definition for the function f: N → N
defined by
f(n) = 0 + 3 + 6 + … + 3n.
• Solution: Notice that N is an inductively defined set: 0 ∈
N; n ∈ N implies n + 1 ∈ N. So we need to give f(0) a
value in N and we need to define f(n + 1) in terms of f(n).
The given definition of f tells us to set f(0) = 0. To
discover a definition for f(n + 1) we can write
f(n + 1) = (0 + 3 + 6 + … + 3n) + 3(n + 1)
= f(n) + 3(n + 1).
So we have a recursive definition for f
– f(0) = 0
– f(n + 1) = f(n) + 3(n + 1).
20
Two alternative definitions
• f(0) = 0
f(n) = f(n - 1) + 3n (n > 0).
• (if-then-else form):
f(n) = if n = 0 then 0 else f(n - 1) + 3n.
21
Example 2
• Find a recursive definition for cat : A* × A* → A* defined by cat(s, t) =
st.
• Solution: Notice that A* is inductively defined: ٨ ∈ A*; a ∈ A and x ∈
A* imply ax ∈ A*,
where ax denotes the string version of cons. We can define cat
recursively using the first argument. The definition of cat gives cat(٨,
t) = ٨t = t. For the recursive part we can write
cat(ax, t) = axt = a(xt) = acat(x, t).
So we have a definition:
– cat(٨, t) = t
– cat(ax, t) = acat(x, t).
• If-then-else form using head and tail for strings:
cat(s, t) = if s = ٨ then t else head(s)cat(tail(s), t).
22
Example 3
• Find a definition for f: lists(Q) → Q defined by f(<x1, …, xn>) = x1 + …
+ xn.
• Solution: The set lists(Q) is inductively defined:
<> ∈ lists(Q); h ∈ Q and t ∈ lists(Q) imply h :: t ∈ lists(Q).
To discover a recursive definition, we can use the definition of f as
follows:
f(<x1, …, xn>) = x1 + … + xn
= x1 + (x2 + … + xn)
= x1 + f(<x2, … , xn>)
= head(<x1, …, xn>) + f(tail(<x1, …, xn>).
So if we let f(<>) = 0, we have a recursive definition:
– f(<>) = 0
– f(h :: t) = h + f(t).
• If-then-else form: f(L) = if L = <> then 0 else head(L) + f(tail(L)).
23
Example 4
• Given f: N → N defined recursively by
– f(0) = 0
– f(1) = 0
– f(x + 2) = 1 + f(x).
The if-then-else form for f can be written as follows:
f(x) = if x = 0 or x = 1 then 0 else 1 + f(x - 2).
What does f do?
• Answer: List a few values to get the idea. For example,
map(f, <0, 1, 2, 3, 4, 5, 6, 7, 8, 9>) = <0, 0, 1, 1, 2, 2, 3,
3, 4, 4>.
So f(x) returns the floor of x/2. i.e., f(x) = ⌊x/2⌋.
24
Example 5
• Find a recursive definition for f: lists(Q) → Q defined by
f(<x1, …, xn>) = x1x2 + x2x3 + … + xn-1xn.
• Solution: Let f(<>) = 0 and f(<x>) = 0. Then for n ≥ 2 we
can write
f(<x1, …, xn>) = x1x2 + (x2x3 + … + xn-1xn) = x1x2 + f(<x2,
…, xn>).
So we have the following recursive definition.
– f(<>) = 0
– f(<x>) = 0
– f(h :: t) = h • head(t) + f(t).
• If-then-else form:
f(L) = if L = <> or tail(L) = <> then 0 else head(L) •
head(tail(L)) + f(tail(L)).
25
Example 6
• Find a recursive definition for isin : A ×
lists(A) → {true, false} where isin(x, L)
means that x is in the list L.
• Solution: isin(x, <>) = false
isin(x, x :: t) = true
isin(x, h :: t) = isin(x, t).
• If-then-else form:
isin(x, L) = if L = <> then false else if x =
head(L) then true else isin(x, tail(L)).
26
Example 7
• Find a recursive definition for sub : lists(A) ×
lists(A) → {true, false} where sub(L, M) means
the elements of L are elements of M.
• Solution: sub(<>, M) = true
sub(h :: t, M) = if isin(h, M)
then sub(t, M) else false.
• If-then-else form:
sub(L, M) = if L = <> then true else if
isin(head(L), M) then sub(tail(L), M) else false.
27
Example 8
• Find a recursive definition for intree : Q ×
binSearchTrees(Q) → {true, false} where intree(x, T)
means x is in the binary search tree T.
• Solution: intree(x, <>) = false
intree(x, tree(L, x, R)) = true
intree(x, tree(L, y, R)) = if x < y then intree(x, L)
else intree(x, R).
• If-then-else form:
intree(x, T) = if T = <> then false
else if x = root(T) then true
else if x < root(T) then intree(x, left(T))
else intree(x, right(T)).
28
Traversing Binary Trees
• The three standard procedures to traverse a
binary tree are defined recursively as follows:
• preorder(T): if T ≠ <> then visit root(T);
preorder(left(T)); preorder(right(T)) fi.
• inorder(T): if T ≠ <> then inorder(left(T)); visit
root(T); inorder(right(T)) fi
• postorder(T): if T ≠ <> then postorder(left(T));
postorder(right(T)); visit root(T) fi.
29
Example 9
• Traverse the following tree in each of the
three orders.
a
• Solution:
c
b
– Preorder: a b c d e
– Inorder: b a d c e
d
e
– Postorder: b d e c a
30
Example 10
• Find a recursive definition for post :
binaryTrees(A) → lists(A) where post(T) is the
list of nodes from a postorder traversal of T.
• Solution: post(<>) = <>
post(tree(L, x, R)) =
cat(post(L), cat(post(R), <x >))
where cat concatenates two lists and can be
defined by,
– cat(<>, L) = L
– cat(h :: t, L) = h :: cat(t, L).
31
Example 11
• Find a recursive definition for ƒ :
binaryTrees(Q) → Q where ƒ(T) is the sum
of the nodes in T.
• Solution: ƒ( <>) = 0
ƒ(tree(L, x, R)) = x + ƒ(L) + ƒ(R).
32
Infinite Sequences
• We can construct recursive definitions for infinite
sequences by defining a value ƒ(x) in terms of x
and ƒ(y) for some value y in the sequence.
• Example 12. Suppose we want to represent the
infinite sequence ƒ(x) = <x, x2, x4, x8, … >.
• Solution: Use the definition to discover a solution
as follows:
ƒ(x) = <x, x2, x4, x8, …>
= x :: <x2, x4, x8, …>
= x :: ƒ(x2).
So define ƒ(x) = x :: ƒ(x2).
33
More examples
• Example 13. What sequence is defined by g(x, k) = xk :: g(x, k + 1)?
• Answer: g(x, k) = xk :: g(x, k + 1)
= xk :: xk+1 :: g(x, k + 2)
=…
= < xk, xk+1, xk+2, … >.
• Example 14. How do we obtain the sequence <x, x3, x5, x7, … >?
• A Solution. Define ƒ(x) = h(x, 1), where
h(x, k) = xk :: h(x, k + 2).
• Example 15. How do we obtain the sequence <1, x2, x4, x6, x8, … >?
• A Solution: Use h(x, 0) from Example 14.
34
The End of Chapter 3 - 1
35