The Associativity of App

Observe that, for the particular a, b, and c above,
(app (app a b) c) returns the same thing as (app a (app b c)).
Perhaps app is associative. Of course, to be associative means
that the above property must hold for all values of a, b, and c,
not just the ones tested above.

Wouldn't it be cool if you could type

ACL2!>(equal (app (app a b) c)(app a (app b c)))

and have ACL2 compute the value T? Well, you can't! If you try
it, you'll get an error message! The message says we can't evaluate
that form because it contains free variables, i.e., variables
not given values. Click here to see the
message.

We cannot evaluate a form on an infinite number of cases. But we can
prove that a form is a theorem and hence know that it will always
evaluate to true.