Comment peut-on exprimer qu'une relation ne doit pas être cyclique?
-
25-09-2019 - |
Question
Considérons une relation upgrades
:
Je dois vous assurer que upgrades
ne peut pas être circulaire. Comment puis-je faire cela en alliage?
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