1. A method for detecting constructs in computer program source code in a manner that is independent of underlying source code variations used to implement the source code constructs, the method comprising: (a) converting a first computer source code file into a fact set in a mathematical notation that supports direct expression of semantic reliances between elements of source code and is suitable for inputting into an automated inference engine; (b) accessing a catalog including elemental design patterns and constructs composed of elemental design patterns for identifying predetermined source code constructs, wherein the elemental design patterns and the constructs in the catalog are independent of source code semantic tags; (c) accessing a set of rules in the mathematical notation usable by the automated inference engine to identify relationships between source code constructs; and (d) inputting the fact set, the catalog, and the rules to the automated inference engine and identifying constructs present in the first computer program source code file.
1. A method for detecting constructs in computer program source code in a manner that is independent of underlying source code variations used to implement the source code constructs, the method comprising: (a) converting a first computer source code file into a fact set in a mathematical notation that supports direct expression of semantic reliances between elements of source code and is suitable for inputting into an automated inference engine; (b) accessing a catalog including elemental design patterns and constructs composed of elemental design patterns for identifying predetermined source code constructs, wherein the elemental design patterns and the constructs in the catalog are independent of source code semantic tags; (c) accessing a set of rules in the mathematical notation usable by the automated inference engine to identify relationships between source code constructs; and (d) inputting the fact set, the catalog, and the rules to the automated inference engine and identifying constructs present in the first computer program source code file. 10. The method of claim 1 wherein identifying patterns present in the first computer program source code file includes applying the automated inference engine to different versions of the first computer program source code file, identifying patterns as new aspects are added or deleted from the first computer program source code file, and using the patterns identified for the different versions to determine whether original program intent has been preserved.