1. A memory coupled to a processor, the memory having stored thereon computer executable instructions causing the processor to execute a process, the process comprising: translating a program code to a logical representation that includes type-safety assertions by asserting at least one type-safety invariant at one or more program points of the logical representation, wherein the at least one type-safety invariant states that a memory location is well-typed such that a value at the memory location corresponds to a type declared for the memory location, and wherein the type-safety assertions include a portion containing user-defined types input directly into the logical representation, and wherein the translating of the program code comprises translating the program code other than the user-defined types into the logical representation; generating a verification condition from the translated program code; if the generated verification condition includes one or more universal quantifiers, removing the one or more universal quantifiers from the generated verification condition; and executing a decision procedure to prove or disprove the generated verification condition.