代码之家  ›  专栏  ›  技术社区  ›  badp

一个人怎么能表示一个关系不能是循环的呢?

  •  2
  • badp  · 技术社区  · 15 年前

    考虑 upgrades 关系:

    Incomplete order relationship

    我要确保 升级 不能是循环的。我怎么能用合金做呢?

    2 回复  |  直到 15 年前
        1
  •  3
  •   badp    15 年前

    它足以加强传递性和反反射性。

    fact {
      no a: Item | a in a.upgrades
    }
    
    fact{
      all a,b,c: Item |
      a in b.upgrades and b in c.upgrades implies
      a in c.upgrades
    }
    
        2
  •  2
  •   C. M. Sperberg-McQueen    13 年前

    从你的例子中,我推断 upgrades 关系并不具有可传递性:例如,钻石剑升级石剑,石剑升级木剑,但对木剑->钻石剑不在 升级 关系。

    所以你想说的是

    fact upgrades_acyclic {
      no x : univ | x in x.^upgrades
    }
    

    一些建模者更喜欢在关系方面更简洁的公式:

    fact upgrades_acyclic { no ^upgrades & iden }
    
    推荐文章