Следующие работы для меня. (Предупреждение: я не видел этого в официальной документации. Это может означать, что есть другие, более эффективные способы сделать это. Или что я не выглядел достаточно сложно.)
Мы хотим проверить, подразумевает ли [] <> p && [] <> q
<> (p && q)
, (Это не так.)
Напишите тривиальный процесс P
, который может выполнять все переходы и написать заявку как свойство LTL A
.
bool p; bool q;
active proctype P() {
do :: d_step { p = false; q = false }
:: d_step { p = false; q = true }
:: d_step { p = true; q = false }
:: d_step { p = true; q = true }
od
}
ltl A { (([] <> p) && ([] <> q)) -> <> (p && q) }
(EDIT 1-ноября-2016: это может быть неправильным, потому что мы могли бы быть пропущены некоторые переходы из-за скрытого начального состояния, см how to make a non-initialised variable in Spin?)
Затем поместите это в файл check.pml
и
spin -a check.pml
cc pan.c -o pan
./pan -a -n
./pan -r check.pml.trail -v
показана модель отрицания претензии (в конечном счете, периодический след, где p
и q
являются истинными бесконечно часто, но p && q
никогда не бывает).
Двойная проверка: измените вывод в претензии на <> (p || q)
, тогда нет встречного экзамена, доказывающего, что импликация действительна.
В вашем случае иск составляет ! (f && g)
(они никогда не должны быть истинными одновременно).
Возможно, существует какой-то умный способ сделать код для тривиального процесса меньше.
Кроме того, третья команда на самом деле ./pan -a -i -n
(-i
, чтобы найти кратчайший пример), но она дает предупреждение. И он находит более короткий цикл.
Большое спасибо за помощь. Я тестировал с требованием ([] (p && q)) && (<>! (P)), где f является [] (p && q), а g является <>! (P). Для меня эти два LTL противоречивы, потому что! P будет противоречить [] p. Когда я тестировал SPIN, покажу мне сообщение: «Ошибка: утверждение нарушено spin: текст неудачного утверждения: assert (! (! ((P && q))))» и не показал мне контрпример. Я делаю что-то неправильно? – Georgia
Запускаете ли вы это из командной строки (как я писал) или в ispin или каком-то другом графическом интерфейсе? – d8d0d65b3f7cf42
Я бегу от ispin GUI ... – Georgia