Equational Reasoning

Consider these functions:

let twice f x = f (f x)
let compose f g x = f (g x)

We have that twice h x = h (h x), because both sides would evaluate to the same value. Indeed, twice h x -->* h (h x) in the substitution model, and from there some value would be produced (given definitions for h and x). Likewise, compose h h x = h (h x). Thus we have:

twice h x = h (h x) = compose h h x

Therefore can conclude that twice h x = compose h h x. And by extensionality we can simplify that equality: Since twice h x = compose h h x holds for all x, we can conclude twice h = compose h h.

As another example, suppose we define an infix operator for function composition:

let (<<) = compose

Then we can prove that composition is associative, using equational reasoning:

Theorem: (f << g) << h  =  f << (g << h)

Proof: By extensionality, we need to show 
  ((f << g) << h) x  =  (f << (g << h)) x
for an arbitrary x.

  ((f << g) << h) x 
= (f << g) (h x)
= f (g (h x))

and 

  (f << (g << h)) x
= f ((g << h) x)
= f (g (h x))

So ((f << g) << h) x = f (g (h x)) = (f << (g << h)) x.

QED

All of the steps in the equational proof above follow from evaluation. Another format for writing the proof would provide hints as to why each step is valid:

  ((f << g) << h) x 
=   { evaluation of << }
  (f << g) (h x)
=   { evaluation of << }
  f (g (h x))

and

  (f << (g << h)) x
=   { evaluation of << }
  f ((g << h) x)
=   { evaluation of << }
  f (g (h x))

results matching ""

    No results matching ""