Assume you have a source program P. It is possible to transform P into an equivalent program P by reformatting P (by adding or deleting spaces, tabs, and line breaks), systematically renaming its variables (for example, changing all occurrences of sum to total), and reordering the definition of variables and subroutines.
Although P and P' are equivalent, they may well look very different. How could a compiler be modified to compare two programs and determine if they are equivalent (or very similar)? In what circumstances would such a tool be useful?