Tenir compte d'une relation upgrades
:Comment peut-on exprimer qu'une relation ne doit pas être cyclique?
je dois vous assurer que upgrades
ne peut pas être circulaire. Comment puis-je faire cela en alliage?
Tenir compte d'une relation upgrades
:Comment peut-on exprimer qu'une relation ne doit pas être cyclique?
je dois vous assurer que upgrades
ne peut pas être circulaire. Comment puis-je faire cela en alliage?
Il suffit d'imposer la transitivité et l'antiréflexivité.
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
}
Puis-je suggérer une syntaxe * pointfree *? Votre premier fait peut être écrit comme «no upgrades & iden», et votre deuxième fait peut être écrit comme «upgrades.upgrades in upgrades». – afsantos
votre exemple, je déduis que le upgrades
rapport ne vise pas à être transitif: dans l'exemple, une épée de diamant à niveau une épée de pierre, et une épée en pierre à niveau une épée en bois, mais la paire WoodSword - > DiamondSword n'est pas dans la relation upgrades
.
Donc 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 }
Merci d'avoir signalé mon erreur. Depuis que presque deux ans se sont écoulés depuis que j'ai posé cette question, je ne me souviens plus de ce que je travaillais réellement, que je ne veuille ou non vraiment pas de transitivité. Donc je ne sais pas si c'est un problème avec ma question ou ma réponse D: – badp
Pour d'autres lecteurs, il y a une question à laquelle le site cela appartient. N'hésitez pas à donner des conseils à ce sujet aussi. – jcolebrand