| Next | You can't get there from here | 35 | 
        sub calculates_squares {
          my $code = shift;
          ... returns true if and only if $code is a function
              for computing squares ...
        }
Why can't we write this?
Because if we could write calculates_squares, we could use it to write this:
        sub halts {
          my ($source_code, $input) = @_;
          my $newcode = 'sub { my $n = shift;
                                my $f = eval "CODE";
                                $f->("INPUT");
                                return $n * $n;
                               }';
          $newcode =~ s/CODE/$source_code/;
          $newcode =~ s/INPUT/$input/;
          return calculates_squares($newcode);
        }        
$newcode is a program to calculate squares...
But only if the call $f->("...") would halt
If we could recognize squaring functions, we could recognize halting functions too
We can't recognize halting functions
Therefore, we can't recognize squaring functions
| Next |  | Copyright © 2005 M. J. Dominus |