Alloy:How定义两个模块之间的关系而不出现模块依赖错误?

Alloy:How to define the relations between two modules without the module dependency error?

之前我定义了两个简单的签名,这样我就可以知道这个轮子是哪辆车了。

sig Car{
     wheels: some Wheel
     }

sig Wheel{ 
    BelongCar:one Car,
}{
    BelongCar=this.~@wheels
}

但是,当我将它们放入不同的模块时,分析器会报错"Circular dependency in module import"。那么在没有模块依赖错误的情况下,我应该如何定义 Car 和 Wheels 之间的关系呢?

\in C.als
module C
open W

sig Car{
     wheels: some Wheel
     }


\in W.als
module W
open C
sig Wheel{ 
    BelongCar:one Car,
}{
    BelongCar=this.~@wheels
}

如错误所述,您尝试从模块 C 打开模块 W,而模块 C 又打开模块 W,后者...

为了避免这种情况,我可以直接看到 3 个解决方案:

  1. 在单个模块中定义 wheel 和 car(因为这两个概念密切相关)

  1. 在第三个模块中定义汽车和车轮之间的关系。

    • 模块C中汽车底盘的概念(没有车轮的概念)
    • 在模块W中定义了轮子的概念
    • 在模块 X(打开 C 和 W)中,您可以将您的汽车概念定义为由底盘和车轮组成。

  1. 只需删除 Wheel 签名的 BelongCar 字段,因为您可以从 ~wheels 轻松获取此信息...

如果您告诉我们更多您的要求,我们可能会更好地帮助您。你到底为什么要把这两个概念分成两个独立的模块?