cuplv / verivita

Dynamic verification using callbacks
2 stars 1 forks source link

Bug in the simulation encoding #217

Closed smover closed 6 years ago

smover commented 6 years ago

The simulation encoding may model more traces than the one that is simulated.

The issue happen when there are more callbacks in the trace that do not contain any callin. In that case the encoding cannot distinguish between the two callbacks, with the consequence that another trace (different from the original one) may be simulated.

The encoding is more permissive, so we can say that a trace can be simulated while in reality it is not the case.

For example, the trace

[1] [CB] [ENTRY] void m1() (1) 
[1] [CB] [EXIT] void m1() (1) 
[1] [CB] [ENTRY] void m2() (1) 
[1] [CB] [EXIT] void m2() (1) 

with the specification: SPEC [CB] [ENTRY] [Z] void m1() |- [CB] [ENTRY] [M] void m2()

cannot be simulated, because m1 disable m2 and m1 must be executed before. The current encoding can "simulate" the trace (in reality, visiting the sequence m2, m1).

Technically, the current encoding of simulation does not predicate on the message labels but on the transitions and enabled state.