The meaning of lambda terms  
 is given by computation rules. 
The basic rule,
called  beta reduction ,
is that 
 reduces to 
; for example,
 reduces to 
.
The strategy for computing applications 
 is involves reducing
f until it has the form 
,
then computing 
.
This method of computing with noncanonical forms 
 is called
 head reduction  or  lazy evaluation , and
it is not the only possible way to compute.
For example, we might reduce f to 
 and then continue
to perform reductions in the body b.
Such steps might constitute computational optimizations of functions.
Another possibility is to reduce a first until it reaches canonical
form before performing the beta reductions.
This corresponds to  call--by--value computation
in a programming language.
In Nuprl we use lazy evaluation, although for the simple calculus of typed lambda terms it is immaterial how we reduce. Any reduction sequence will terminate---this is the strong normalization result [Tait 67,Stenlund 72]---and any sequence results in the same value according to the Church--Rosser theorem [Church 51,Stenlund 72]. Of course, the number of steps taken to reach this form may vary considerably depending on the order of reduction.