“…This implies that the possible solution to program verification problem is either by abstract interpretation to simplify the given proof obligation, or by interactive manner to acquire some oracles during verification, or by developing specific methods for specific verification problems which are decidable. Following the above three lines, there are various techniques to program verification that have been well established so far, e.g., the abstraction-based techniques [11] such as static program analysis [12,16] and program typing [13,19], theorem-proving based deductive methods [20,21], model-checking [4,5,6,24], etc. The main disadvantage of the abstraction-based techniques is that complicated properties cannot be dealt with well because complicated properties closely interwind with the actual executions of a program, but normally in abstract executions of the program lots of useful information will be lost.…”