Wie kann man ausdrücken, dass eine Beziehung nicht zyklisch sein muss?

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

  •  25-09-2019
  •  | 
  •  

Frage

Betrachten wir eine upgrades Beziehung:

Incomplete Ordnung Beziehung

Ich muss sicherstellen, dass upgrades nicht kreisförmig sein kann. Wie kann ich das in der Legierung?

War es hilfreich?

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
scroll top