【问题标题】:About a type specifier in NuSMV (error: invalid subrange)关于 NuSMV 中的类型说明符(错误:无效子范围)
【发布时间】:2015-09-12 15:58:30
【问题描述】:

在最后一段,用户手册 2.5 的第 23 页(我使用的是 2.5.4):

"类型说明符可以由两个用..分隔的表达式给出()。 这两个表达式都必须计算为常量整数,并且 可能 包含定义和模块形式参数的名称。例如,-1 - P1 .. 5 + D1,其中P1指的是一个模块形参,D1指的是一个 定义。 P1 和 D1 都必须可以静态评估为整数常量。”

我已经测试了许多不同的示例来运行类似的东西,但我做不到 最后。这是其中之一:

MODULE main
VAR
    third_party : third_party;
    alice : alice(third_party.n); 

MODULE third_party
FROZENVAR
    p : 0..1000;
    q : 0..1000;
DEFINE 
    n := p * q;

MODULE alice(n)
FROZENVAR
    r :  1 .. n;

或类似的东西:

MODULE main
FROZENVAR
        p : 0..1000;
        q : 0..1000;
VAR
alice : alice(n);
    DEFINE 
        n := p * q;
MODULE alice(n)
    FROZENVAR
        r :  1 .. n;

错误是“无效的子范围 1 .. n”

有人可以帮我吗?你能给我举个例子,类型说明符包含定义和模块形式参数的名称并正确运行吗?

确实,这段代码是 fiat-shamir 协议的一部分,我正在对不同的 n 值(n 不能是常量整数)测试 ctl,并寻找反例。

【问题讨论】:

    标签: static-analysis model-checking


    【解决方案1】:

    问题是third_party.n 不是静态可评估的。这取决于third_party.pthird_party.q 的值,它们都是可变的。因此,该模块不会使用可静态计算的表达式进行实例化。

    一个可行的例子是:

    MODULE main
    VAR
        third_party : third_party;
        alice : alice(third_party.n); 
    
    MODULE third_party
    FROZENVAR
        p : 0..1000;
        q : 0..1000;
    DEFINE 
        n := 10 * 10;
    
    MODULE alice(n)
    FROZENVAR
        r :  1 .. n;
    

    【讨论】:

    • 谢谢。这个例子工作正常,但我需要做第一个或这样的: MODULE main VAR p : 0..1000; q:0:1000;定义 n := p * q; VAR r : 1..n; s : 1 .. n;你有什么想法去做这份工作或第一个工作吗?这段代码是协议的一部分(fiat-shamir),参数 n 不能是一个常量整数,我正在这个协议上测试一个 ctl 上不同的 n 值,我想找到一个反例......非常感谢
    • 不可能一次性检查所有 n 的属性,因为这个 n 会影响模型的大小。我认为唯一的解决方案是为每个 n 生成一个模型(手动或使用程序),然后使用 NuSMV 检查它们中的每一个。
    • 谢谢 thomas... 但我认为手动检查是不可能的,因为 p 和 q 是大整数。而且模型检查最重要的工具之一是检查所有可能的找到 ctl 或 ltl 的反例的价值...我很困惑...我在互联网上找不到由 NuSMV 建模的类似协议...您是否通过 musmv 建模了协议?跨度>
    • 我没有在 NuSMV 中建模协议,只是一些简单的铁路系统和单人谜题。是的,模型检查是关于检查所有可能的执行,但通常不是检查所有模型参数的某些属性。有一些工具可以进行参数模型检查(例如 PARAM)。如果你想证明这个算法不安全,那么写一个数学证明可能会更容易。
    猜你喜欢
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    相关资源
    最近更新 更多