Comment peut-on exprimer qu'une relation ne doit pas être cyclique?

StackOverflow https://stackoverflow.com/questions/4206790

  •  25-09-2019
  •  | 
  •  

Question

Considérons une relation upgrades:

Incomplete relation d'ordre

Je dois vous assurer que upgrades ne peut pas être circulaire. Comment puis-je faire cela en alliage?

Était-ce utile?

La solution

Il suffit d'appliquer transitivité et antireflexivity.

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
}

Autres conseils

De votre exemple, je déduis que la relation upgrades ne vise pas à être transitif: dans l'exemple, une épée de diamant à niveau une épée de pierre, et une épée de pierre mises à jour une épée de bois, mais la paire WoodSword -> DiamondSword est pas dans la relation upgrades.

Alors qu'est-ce que vous voulez dire est quelque chose comme

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

Certains modélisateurs préfèrent la formulation plus succincte en termes de relations:

fact upgrades_acyclic { no ^upgrades & iden }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top