You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Atelier B规范报错:二元运算符左操作数应为序列问题排查

解决B规范中"Lhs of binary operator should be a sequence"报错

问题根源分析

  • 类型断言错误:你的不变式中backlog = iseq(ORDERS)写法错误。iseq(ORDERS)(等价于SEQ(ORDERS))是所有ORDERS元素组成的有限序列的集合,而backlog是一个具体的序列实例,属于这个集合,应该用成员运算符∈代替等于=。
  • 初始化赋值错误:初始化时backlog := iseq(ORDERS)是把整个序列集合赋值给backlog变量,但backlog要求是单个序列,正确的初始值应该是空序列[]。
  • 不变式违反风险:part_quantity初始值设为0,但你的不变式明确要求part_quantity >= 200,这会在初始化阶段直接违反不变式,需要将初始值改为符合要求的数值(比如200)。

修正后的代码

MACHINE
    stock(ORDER, order_limit)
CONSTRAINTS
    order_limit: NAT1
SETS
    PART_COSTS;
    PARTS;
    ORDERS
    
CONSTANTS
    backlog_limit
PROPERTIES 
    backlog_limit: NAT1 & backlog_limit <= 20
VARIABLES
    limit,
    backlog,
    part_quantity
INVARIANT 
    backlog ∈ SEQ(ORDERS) & limit : NAT1 & card(backlog) <= limit & limit <= 20 &
    part_quantity : NAT1 & part_quantity >= 200
INITIALISATION
    limit := order_limit || backlog := [] || part_quantity := 200
OPERATIONS

     receiveorder(order) =
        PRE 
            order : ORDER & limit > card(backlog)
        THEN
            backlog := backlog <- order
        END
END

内容的提问来源于stack exchange,提问作者Jack Goodwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:25:26