Not all theorems are interesting computationally, of course.
Recall the  rootf function defined in the preceding chapter;
 rootf(n) returns the unique integer i such that if n<0
then i=0 and otherwise 
.
Now consider the following two theorems, where  square(x)
is defined as  rootf(x)*rootf(x)=x in int. 
        Thm1 >>all x:int. square(x) | ~ square(x).
        Thm2 >>all x:int. square(x) vel ~ square(x).
The first theorem can be proved by introducing x and applying the
 rootf function to x.
We can prove that either  rootf(x)*rootf(x)=x in int or not
by using the arithmetic rule,  arith; the proof yields a
decision  procedure identifying which case holds.
From a proof of  Thm1, then, we can extract a function which will decide
whether an integer is a square , namely
 
The second theorem has a trivial proof.  We simply use the fact that
 P vel ~ P holds for any proposition P and take  rootf(x)*rootf(x)=x in int
as P.  However, there is no interesting computational content  to this
result; we do not obtain from it a procedure to decide whether x is a
square.  (The interested reader should prove this theorem and display
its computational content.)