¿Cómo se puede expresar que una relación no debe ser cíclico?
-
25-09-2019 - |
Pregunta
Considere una relación upgrades
:
necesito para asegurarse de que upgrades
no puede ser circular. ¿Cómo puedo hacer que en aleación?
Solución
Es suficiente para hacer cumplir transitividad y 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
}
Otros consejos
A partir de su ejemplo, deduzco que la relación upgrades
no pretende ser transitiva: en el ejemplo, una espada de diamantes actualiza una espada de piedra, y una espada de piedra actualizaciones de una espada de madera, pero la pareja WoodSword -> DiamondSword no es en la relación upgrades
.
Así que lo que se quiere decir es algo así como
fact upgrades_acyclic {
no x : univ | x in x.^upgrades
}
Algunos modelistas prefieren la formulación más sintética en términos de relaciones:
fact upgrades_acyclic { no ^upgrades & iden }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow