我必须在NuSMV中创建一个Kripke结构,我必须检查一些属性。
有人帮帮我吗?结构和属性(LTL,CTL和CTL *)在图片中。
这里有一个结构和属性:
http://cl.ly/image/1x0b1v3E0P0D/Screen%20Shot%202014-10-16%20at%2016.52.34.png
答案 0 :(得分:2)
据我所知,NuSMV只处理LTL和CTL公式(见NuSMV in Wikipedia)。问题1-3中的公式是CTL公式,因此可以通过NuSMV进行模型检查。然而,问题4和& 5是CTL *公式,因此我们不能直接将它们用作NuSMV 的输入。您还需要了解所有CTL *公式的集合是所有LTL和CTL公式的并集的正确超集。这个条件意味着一些CTL *公式没有等效的LTL或CTL公式(见CTL* in Wikipedia)。您的Kripke结构可以通过以下代码在NuSMV中定义:
MODULE main
VAR
p : boolean;
q : boolean;
r : boolean;
state : {s0,s1,s2,s3,s4};
ASSIGN
init (state) := s0;
next (state) :=
case
state = s0 : {s1, s2};
state = s1 : {s1, s2};
state = s2 : {s1, s2, s3};
state = s3 : {s1, s4};
state = s4 : {s4};
TRUE : state;
esac;
init (p) := FALSE;
init (q) := FALSE;
init (r) := FALSE;
next(p) :=
case
state = s1 | state = s2 | state = s3 | state = s4 : TRUE;
TRUE : p;
esac;
next(q) :=
case
state = s1 | state = s2 : TRUE;
state = s3 | state = s4 : FALSE;
TRUE : q;
esac;
next(r) :=
case
state = s3 : TRUE;
state = s1 | state = s2 | state = s4 : FALSE;
TRUE : r;
esac;
SPEC
EG p;
SPEC
AG p;
SPEC
EF (AG p);
当然,在NuSMV中还有另一种定义Kripke结构的方法,但我认为这是最简单的方法之一。 (无论如何,感谢帮助我my problem)。
问题4中的公式& 5,这是我的答案。
公式 AF [p U EG(p - > q)] 的格式为 AF [\ phi] ,其中 \ phi 是LTL公式 p U EG(p-> q)。由于在Kripke模型中满足LTL公式 \ phi ,如果从s0开始的每个路径都满足 \ phi ,那么我们翻译 AF [p U EG(p - > q)] 进入 AF A [p U EG(p - > q)] 。
通过类似的论证,我们将 EG [((p& q)| r)U(r U AG p)] 翻译成 EG [A((p& q) | r)UA(r U AG p)] 。
答案 1 :(得分:2)
我为您的Kripke结构找到了一个更简单,看似更可靠的NuSMV代码。感谢LEFT JOIN NULL vs. NOT IN vs NOT EXISTS对dejvuth的回答。代码如下
MODULE main
VAR
state : {s0,s1,s2,s3,s4};
ASSIGN
init(state) := s0;
next(state):=
case
state = s0 : {s1,s2};
state = s1 : {s1,s2};
state = s2 : {s1,s2,s3};
state = s3 : {s1,s4};
state = s4 : {s4};
esac;
DEFINE
p := state = s1 | state = s2 | state = s3 | state = s4;
q := state = s1 | state = s2;
r := state = s3;
SPEC
EG p;
SPEC
AG p;
SPEC
EF (AG p);