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

如何为Alloy模型三元关系设置约束:限制Event.rule_properties的Rule归属

解决方案

你无法在Event的字段声明中直接使用rulesets.rules来约束值域,因为Alloy不支持在字段类型定义里引用同一sig的其他字段的派生集合。正确的做法是通过fact添加全局约束:

sig Factor {}
sig Rule { rule : some Factor }
sig RuleSet { rules : some Rule }
sig EventRuleProperty {}
 
sig Event {
       rulesets : some RuleSet,
       rule_properties :  RuleSet -> Rule -> EventRuleProperty
}

fact RulePropertyValidity {
  all e : Event, rs : e.rulesets, r : Rule, prop : EventRuleProperty |
    (rs -> r -> prop) in e.rule_properties implies r in rs.rules
}

约束解释

  • 遍历所有事件e、该事件包含的规则集rs、任意规则r和属性prop
  • 只要rs->r->prop属于e的rule_properties关系,就强制要求r必须是rs包含的规则(r in rs.rules)

简化写法(可选)

如果想让约束更完整,还可以额外确保关联的规则集本身属于当前事件的规则集列表:

fact RulePropertyValidity {
  all e : Event, rs : RuleSet, r : Rule, prop : EventRuleProperty |
    (rs -> r -> prop) in e.rule_properties implies (rs in e.rulesets and r in rs.rules)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:55:17