trace

definition

assume a fixed set of statements Σ. A trace τ is a sequence of statements, i.e.

for  and 

如果将视作字母表,语句st视作letter,则trace就是这个字母表上的word,即

trace的定义和状态无关,两者是独立的。当然,对程序而言,其接受的trace集合需要满足语法上一些约束(严格的说是控制流),但和其语义没有关系。只有在进行验证,考虑trace的正确性时时,才考虑trace的语义。

correctness of a trace

trace的正确性是语义性质,这需要额外的定义。既然trace是语句的序列,一般用Hoare三元组来定义。

假设有一个预知的三元组的集合,这样的三元组定义了一个单独的语句的正确性。此外,有一对固定的公式(取决于具体的验证问题)。一个trace 是正确的,即是成立的。

infeasibility

a trace is infeasible iff {true}{false}

in other words:

in whatever valuation of the program variables the execution starts, one of the assume statements in the sequence cannot be executed

Thus, infeasibility implies (any) correctness. 这个性质的重要性在于,一般来说,一个程序 如果的确是正确的,那么其正确的、feasible的control flow trace不是regular的。但是,其所有正确的control flow trace(包括infeasible的)是regular的。因此,将infeasible的trace考虑为正确的trace,是验证能够进行的条件。

另外,如果程序本身不是正确的,那么即使是其正确的那部份control flow trace也不一定是regular的。

关于以上事实可以这么理解:程序被当作自动机的情况下,本身就是有限状态的。所以,如果程序的确是正确的,那么其接受的当然是正规语言,而且其接受的trace里当然也包括了那些infeasible的。

特别的,如果选择分别为true和false,则infeasibility和正确性是等价的。比如说,要证明某个error location不可达,则将其设置为程序的终止状态。