Wie kann man ausdrücken, dass eine Beziehung nicht zyklisch sein muss?
-
25-09-2019 - |
Frage
Betrachten wir eine upgrades
Beziehung:
Ich muss sicherstellen, dass upgrades
nicht kreisförmig sein kann. Wie kann ich das in der Legierung?
Lösung
Es ist ausreichend, Transitivität und antireflexivity zu erzwingen.
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
}
Andere Tipps
Von Ihrem Beispiel folgere ich, dass die upgrades
Beziehung nicht transitiv sein soll: im Beispiel ein Diamanten Schwert einen Stein Schwert aktualisiert, und ein Stein Schwert wertet ein hölzernes Schwert, aber das Paar WoodSword -> DiamondSword ist nicht in der upgrades
Beziehung.
Also, was Sie sagen wollen, ist so etwas wie
fact upgrades_acyclic {
no x : univ | x in x.^upgrades
}
bevorzugen Einige Modellierer die prägnante Formulierung in Bezug auf die Beziehungen:
fact upgrades_acyclic { no ^upgrades & iden }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow