Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model checking 如何在NuSMV中创建kripke的结构?_Model Checking - Fatal编程技术网

Model checking 如何在NuSMV中创建kripke的结构?

Model checking 如何在NuSMV中创建kripke的结构?,model-checking,Model Checking,我必须在NuSMV中创建Kripke的结构,并且我必须检查一些属性 有人帮我吗?结构和属性(LTL、CTL和CTL*)如图所示 这里有一个结构和属性: 据我所知,NuSMV只处理LTL和CTL公式(请参阅)。问题1-3中的公式是CTL公式,因此NuSMV可以对其进行模型检查。然而,问题4和5中的公式是CTL*公式,因此我们不能直接将它们用作NuSMV的输入。您还需要了解,所有CTL*公式的集是所有LTL和CTL公式并集的正确超集。此条件意味着某些CTL*公式没有等效的LTL或CTL公式(请参阅)

我必须在NuSMV中创建Kripke的结构,并且我必须检查一些属性

有人帮我吗?结构和属性(LTL、CTL和CTL*)如图所示

这里有一个结构和属性:


据我所知,NuSMV只处理LTL和CTL公式(请参阅)。问题1-3中的公式是CTL公式,因此NuSMV可以对其进行模型检查。然而,问题4和5中的公式是CTL*公式,因此我们不能直接将它们用作NuSMV的输入。您还需要了解,所有CTL*公式的集是所有LTL和CTL公式并集的正确超集。此条件意味着某些CTL*公式没有等效的LTL或CTL公式(请参阅)。您的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结构的方法,但我认为这是最简单的方法之一。(无论如何,谢谢你帮我)

关于问题4和5中的公式,这里是我的答案

公式AF[PUEG(p->q)]的形式为AF[\phi],其中\phi是LTL公式PUEG(p->q)。由于LTL公式\phi在Kripke模型中是满足的,如果对于从s0开始的每条路径,我们都满足\phi,那么我们将AF[PUEG(p->q)]转换为AFA[PUEG(p->q)]


通过类似的论证,我们将EG[((p&q)| r)U(r U AG p)]转换为EG[A((p&q)| r)U A(r U AG p)]

,据我所知,NuSMV只处理LTL和CTL公式(请参阅)。问题1-3中的公式是CTL公式,因此NuSMV可以对其进行模型检查。然而,问题4和5中的公式是CTL*公式,因此我们不能直接将它们用作NuSMV的输入。您还需要了解,所有CTL*公式的集是所有LTL和CTL公式并集的正确超集。此条件意味着某些CTL*公式没有等效的LTL或CTL公式(请参阅)。您的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结构的方法,但我认为这是最简单的方法之一。(无论如何,谢谢你帮我)

关于问题4和5中的公式,这里是我的答案

公式AF[PUEG(p->q)]的形式为AF[\phi],其中\phi是LTL公式PUEG(p->q)。由于LTL公式\phi在Kripke模型中是满足的,如果对于从s0开始的每条路径,我们都满足\phi,那么我们将AF[PUEG(p->q)]转换为AFA[PUEG(p->q)]


通过类似的论证,我们将EG[((p&q)| r)U(ru AG p)]转换为EG[A((p&q)| r)U A(ru AG p)]

我发现了一个更简单、似乎更可靠的NuSMV代码。谢谢你的回答。代码如下

     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);

我为您的Kripke结构找到了一个更简单、看起来更可靠的NuSMV代码。谢谢你的回答。代码如下

     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);

非常感谢你!你救了我和我的考试!我在写这个公式时遇到了一些问题,比如[A((p&q)| r)U A(r U AG p)],因为NuSMV发现了一些解析错误,但这不是问题!我还必须在NuSMV中制作dekker的三个版本。。我讨厌这些东西!非常感谢你!当然,NuSMV会为这样的公式产生解析器错误。如前所述,公式EG[(p&q)| r)U(r U AG p)]是一个CTL*公式。虽然一些CTL*公式可以使用路径量词A或E转换为CTL,但我建议您用数学方法检查语义(即使用铅笔和纸)。我推荐Huth和Ryan()的教科书。好的,谢谢!我还有最后一个问题。。请救救我!非常感谢你!你救了我和我的考试!我在写这个公式时遇到了一些问题,比如[A((p&q)| r)U A(r U AG p)],因为NuSMV发现了一些解析错误,但这不是问题!我还必须在NuSMV中制作dekker的三个版本。。我讨厌这些东西!非常感谢你!当然,NuSMV会为这样的公式产生解析器错误。如前所述,公式EG[(p&q)| r)U(r U AG p)]是一个CTL*公式。虽然一些CTL*公式可以使用路径量词A或E转换为CTL,但我建议您用数学方法检查语义(即使用铅笔和纸)。我推荐Huth和Ryan()的教科书。好的,谢谢!我还有最后一个问题。。请救救我!