如何在 NuSMV 中创建简单的 Kripke 模型?

2023-12-02

我目前正在做一些LTL(线性时间时序逻辑)和CTL(计算树逻辑)的理论研究。我是 NuSMV 的新手,我很难创建一个简单的 Kripke 结构。

我的结构是 M = (S, R, L) 其中 S = {s0, s1, s2} 是可能状态的集合,R 是转移关系,使得: s0 -> s1, s0 -> s2, s1 -> s0、s1 -> s2 和 s2 -> s2,L 是每个状态的标记函数,定义为:L(s0) = {p, q}、L(s1) = {q, r} 和 L( s2) = {r}。我使用 Huth 和 Ryan 的计算机科学教科书中的逻辑中描述的符号。我尝试过以下两个代码:

第一个代码:

MODULE main
VAR
    p : boolean;
    q : boolean;
    r : boolean;
    state : {s0, s1, s2};

ASSIGN
    init(state) := s0;
    next(state) := 
        case
            state = s0          : {s1, s2};
            state = s1          : {s2};
            state = s2          : {s2};
        esac;

    init(p) := TRUE; 
    init(q) := TRUE;
    init(r) := FALSE;

    next(p) :=
        case
            state = s1 | state = s2     : FALSE;
        esac;
    next(q) :=
        case
            state = s1                  : TRUE;
            state = s2                  : FALSE;
        esac;
    next(r) :=
        case
            state = s1                  : FALSE;
            state = s2                  : TRUE;
        esac;

SPEC
    p & q

第二个代码:

MODULE main
VAR
    p : boolean;
    q : boolean;
    r : boolean;
    state : {s0, s1, s2};

ASSIGN
    init(state) := s0;
    next(state) := 
        case
            state = s0          : {s1, s2};
            state = s1          : {s2};
            state = s2          : {s2};
        esac;

    init(p) := TRUE; 
    init(q) := TRUE;
    init(r) := FALSE;

    next(p) := !p;
    next(q) :=
        case
            state = s0 & next(state) = s1   : q;
            state = s0 & next(state) = s2   : !q;
            state = s1 & next(state) = s0   : q;
            state = s1 & next(state) = s2   : !q;
        esac;
    next(r) :=
        case
            state = s0 & next(state) = s1   : r;
            state = s0 & next(state) = s2   : r;
            state = s1 & next(state) = s0   : !r;
            state = s1 & next(state) = s2   : r;
        esac;

LTLSPEC
    p & q

出了点问题,我收到了这样的消息:“案例条件并不详尽”。这是什么意思?我该如何解决我的问题?


因为您必须为每种情况输入其“默认值”。 第一个代码:

MODULE main
VAR
    p : boolean;
    q : boolean;
    r : boolean;
    state : {s0, s1, s2};

ASSIGN
    init(state) := s0;
    next(state) := 
    case
        state = s0          : {s1, s2};
        state = s1          : {s2};
        state = s2          : {s2};
        TRUE                : state;
    esac;

   init(p) := TRUE; 
   init(q) := TRUE;
   init(r) := FALSE;

   next(p) :=
    case
        state = s1 | state = s2     : FALSE;
    esac;
   next(q) :=
    case
        state = s1                  : TRUE;
        state = s2                  : FALSE;
        TRUE                        : q;
    esac;
   next(r) :=
    case
        state = s1                  : FALSE;
        state = s2                  : TRUE;
        TRUE                        : r;
    esac;

SPEC
    p & q

和第二个代码:

MODULE main
VAR
p : boolean;
q : boolean;
r : boolean;
state : {s0, s1, s2};

ASSIGN
init(state) := s0;
next(state) := 
    case
        state = s0          : {s1, s2};
        state = s1          : {s2};
        state = s2          : {s2};
        TRUE                : state;
    esac;

init(p) := TRUE; 
init(q) := TRUE;
init(r) := FALSE;

next(p) := !p;
next(q) :=
    case
        state = s0 & next(state) = s1   : q;
        state = s0 & next(state) = s2   : !q;
        state = s1 & next(state) = s0   : q;
        state = s1 & next(state) = s2   : !q;
        TRUE                            : q;
    esac;
next(r) :=
    case
        state = s0 & next(state) = s1   : r;
        state = s0 & next(state) = s2   : r;
        state = s1 & next(state) = s0   : !r;
        state = s1 & next(state) = s2   : r;
        TRUE                            : r;
    esac;

LTLSPEC
    p & q
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 NuSMV 中创建简单的 Kripke 模型? 的相关文章

  • Azure Data Lake Analytics:使用 U-SQL 合并重叠的持续时间

    我想使用 U SQL 从放置在 Azure Data Lake Store 中的 CSV 数据中删除重叠的持续时间 并合并这些行 数据集包含每个记录的开始时间和结束时间以及几个其他属性 这是一个例子 Start Time End Time
  • Sqlldr 接受 1 种日期格式

    我有一个动态生成控制文件的sql脚本文件 它接受日期格式为 mm dd yyyy 的日期字段 sqlldr 正在从 csv 文件加载日期 但它也接受日期格式 例如 mm dd yyyy 或 mm dd yyyy 我如何让它只接受 MM DD
  • Cypher Neo4J - 使用 MERGE 进行 CASE 表达

    我正在尝试根据特定条件在 Cypher 中实现逻辑 CASE声明 我会创建一些节点和关系 代码如下 MATCH g Game PLAYER gt u User r1 AT gt b1 Block NEXT gt b2 Block WHERE
  • 如何在foreach循环中每5次迭代后定义html标签

    我只是想知道如何定义 HTML 标签 br 在 foreach 循环中每 5 次迭代之后 这是我的代码 div class item main div class item a href title div class overlaid d
  • 解决8字谜题的有效方法是什么?

    8 拼图是一块有 9 个位置的方板 由 8 个编号的图块和一个间隙填充 在任何时候 与间隙相邻的图块都可以移动到间隙中 从而创建新的间隙位置 换句话说 间隙可以与相邻 水平和垂直 的图块交换 游戏的目标是从任意配置的图块开始 然后移动它们以
  • Prolog 中的关联列表

    我正在序言中做关联列表 我看到了这个主题 但我不明白代码 Prolog 中的关联列表 https stackoverflow com questions 50069875 associative lists in prolog 要检查列表是
  • 计算插件依赖关系

    我需要创建一个具有依赖项支持的插件系统 但我不确定解决依赖项的最佳方法 这些插件都将从基类派生出来 每个都有自己的execute 方法 在每个插件类中 我计划创建一个dependencies属性作为它所依赖的所有其他插件的列表 加载插件时
  • 直觉类型理论的组合逻辑等价物是什么?

    我最近完成了一门以 Haskell 和 Agda 一种依赖类型函数编程语言 为特色的大学课程 并且想知道是否有可能用组合逻辑代替其中的 lambda 演算 在 Haskell 中 使用 S 和 K 组合器似乎可以实现这一点 从而使其成为无点
  • tinyXML 元素访问的运行时错误

    昨天是我的第一次尝试 我试图在以下 new xml 文件中捕获变量 time
  • 序言,复制列表

    我试图掌握一些基本的序言 但在这个过程中有点挣扎 具体来说 我正在尝试遍历项目列表并将其逐项复制到新列表中 我可以让它反转 但我发现不反转会更棘手 我一直在尝试以下操作 copy L R accCp L R accCp R accCp H
  • 是否可以通过在页面上获取三个点来校正页面尺寸?

    我正在研究纠正页面 图像 的宽度 高度和角度的逻辑 点r1 r2 r3在正确图像上 点d1 d2 d3是当前图像上的对应点 我尝试了多种方法并最终解决了这个问题 public System Drawing Bitmap CorrectFil
  • 所得税计算的编程逻辑

    谁能帮我为我们的办公室员工工资税表创建 PHP 或 mysql 代码 这是我们税收监管的基础 If salary is gt 0 and lt 150 it will be 0 Nill If salary is gt 151 and lt
  • 找到三元组中间值的最快方法?

    给定的是一个由三个数值组成的数组 我想知道这三个数值的中间值 问题是 最快的方法是什么找到三者的中间点 我的方法是这种模式 因为有三个数字 所以有六种排列 if array randomIndexA gt array randomIndex
  • Python:pyswip 输出返回 Atom 和 Functor

    基于一些较旧的post https stackoverflow com questions 63890053 prolog define logical operator in prolog as placeholder for other
  • 为什么 IQueryable.All() 在空集合上返回 true?

    所以我今天遇到了一种情况 一些生产代码失败正是因为一个方法的执行完全按照记录在 MSDN 中 http msdn microsoft com en us library bb534754 aspx 为我没有阅读文档而感到羞耻 然而 我仍然摸
  • python 构建动态增长的真值表

    我的问题很简单 如何在Python中以优雅的方式构建动态增长的真值表 for n 3 for p in False True for q in False True for r in False True print 0 1 2 forma
  • C++:检查括号和方括号在字符串中是否平衡(逻辑问题)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 检查字符串中的每个 是否都满足 或 检查字符串中的每个 是否与 或 匹配 例如 您永远不能拥有像这样的字符串 a a a a a 但是
  • 找到 O(n) 中所有成员都在列表中的最大区间 [重复]

    这个问题在这里已经有答案了 我在一次采访中被问到这个问题 给定一个整数列表 我们如何找到其所有成员都在给定列表中的最大区间 例如 给定列表 1 3 5 7 4 6 10 那么答案将是 3 7 因为它具有 3 到 7 之间的所有元素 我试图回
  • 按位运算的替代方法

    设想 我说有 4 个复选框 用户可以以任意组合选择这些复选框 他们也有权不选择任何一个复选框 我必须将这 4 个选项存储到一列中 我认为最好的选择是使用二进制表示形式存储 option1 has the constant value 1 o
  • 非成员规则在 Prolog 中无法按预期工作

    我正在尝试在 Prolog 中创建一个迷宫程序 其目的是找到一条从迷宫起点到迷宫中心点 m 的路线 迷宫由使用四种颜色之一连接的正方形组成 蓝色 绿色 紫色或橙色 从起点到中心的路线遵循四种颜色的重复图案 我创建了以下代码 link2 A

随机推荐