1. A method for implementing a data type system for use with a computer language, comprising the steps of: accessing a computer language document using a programming language, wherein the programming language defines a plurality of complex data types and subtypes that specify whether data elements within the document are in a correct form; creating a minimized deterministic finite state automata for use with the data types and subtypes used by the programming language, wherein the finite state automata includes states that represent language data types, and transitions between the states, and wherein each of the transitions includes a symbol of the alphabet of the minimized deterministic finite state automata; augmenting the minimized deterministic finite state automata with additional transitions that include secondary symbols, wherein each of the secondary symbols corresponds in the programming language to a subtype of one of the data types; and using the augmented minimized deterministic finite state automata with automata algorithms that include intersection and union, to compare and determine if data types and subtypes in the document are one of equal, subsets or intersect.