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.)