Pregunta

Considere una relación upgrades:

relación de orden Incompleto

necesito para asegurarse de que upgrades no puede ser circular. ¿Cómo puedo hacer que en aleación?

¿Fue útil?

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