Предположим, я кодирую модель в NuSMV, которая запускается в состоянии S1. Я хочу проверить условие в этой программе проверки модели, достигну ли я в конечном итоге состояния S70 при любых обстоятельствах. Теперь визуализируйте модель NuSMV, которую я закодировал, как показано ниже:
Из вышеизложенного очевидно, что в конечном итоге будет достигнут S70, но это может занять гораздо больше, чем 70 временных шагов. Почему? Потому что вы можете перейти к S2, затем к S3, а затем вместо перехода к S4 снова вернуться к S2, и этот шаблон повторяется, скажем, 100 раз. Такие возможности учитываются программным обеспечением NuSMV также для подтверждения того, что S70 обязательно будет достигнут.
Проблема в том, что NuSMV сказал, что S70 не будет достигнут, и сгенерировал контрпример, который точно такой:
S1->S2->S3->S2
Итак, контрпример — это как раз эти 4 шага. Но я поражен тем, что NuSMV не может понять, что этот тупик со временем будет разрешен. Почему я получаю неинтуитивный результат?
Может быть шанс, что автоматы, которые я показываю на рисунке, — это то, что я хочу, чтобы мой код NuSMV представлял, но я неправильно закодировал одну или две строки, но я так не думаю. Иначе как бы NuSMV мог понять, что он может перейти с S2 на S3. Если он может вычислить, что можно перейти от S2 к S3, то зачем заканчивать приведенный выше контрпример на S2?
Может кто-нибудь объяснить?