A solution to Exercise 2.9:

Some preliminary definitions:

`(upper-bound (make-interval a b)) = a [1]`

(lower-bound (make-interval a b)) = b [2]

```
```(width i) = (/ (- (upper-bound i) (lower-bound i)) 2) [3]

`(add i1 i2) = (make-interval (+ (upper-bound i1) (upper-bound i2))`

(+ (lower-bound i1) (lower-bound i2))) [4]

Rearranging [3]:

`(* 2 (width i)) = (- (upper-bound i) (lower-bound i))`

(+ (* 2 (width i)) (lower-bound i)) = (upper-bound i) [5]

From [3]:

`(width (add i1 i2)) = (/ (- (upper-bound (add i1 i2))`

(lower-bound (add i1 i2)))

2)

Simplifying with [1], [2] and [4]:

`(width (add i1 i2)) = (/ (- (+ (upper-bound i1)`

(upper-bound i2))

(+ (lower-bound i1)

(lower-bound i2)))

2)

Substituting in [5]:

` = (/ (- (+ (+ (* 2 (width i1)) (lower-bound i1))`

(+ (* 2 (width i2)) (lower-bound i2)))

(+ (lower-bound i1)

(lower-bound i2)))

2)

```
```

` = (/ (- (+ (* 2 (width i1)) (* 2 (width i2))`

(lower-bound i1)

(lower-bound i2))

(+ (lower-bound i1)

(lower-bound i2)))

2)

All the (lower-bound x)s cancel out, leaving:

` = (/ (+ (* 2 (width i1))`

(* 2 (width i2)))

2)

So do the 2s:

`(width (add i1 i2)) = (+ (width i1) (width i2))`

Clearly the width of the sum is a function only of the width of the operands.