Domanda

Si consideri un rapporto upgrades:

relazione ordine incompleto

Ho bisogno di fare in modo che upgrades non può essere circolare. Come posso fare che in Lega?

È stato utile?

Soluzione

E 'sufficiente far rispettare transitività e 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
}

Altri suggerimenti

Dal tuo esempio, deduco che la relazione upgrades non è destinato ad essere transitiva: nell'esempio, una spada di diamante aggiorna una spada di pietra, e una spada di pietra Aggiornamenti una spada di legno, ma la coppia WoodSword -> DiamondSword non è nella relazione upgrades.

Quindi, ciò che si vuole dire è qualcosa di simile

fact upgrades_acyclic {
  no x : univ | x in x.^upgrades
}

Alcuni modellisti preferiscono la formulazione più sintetica in termini di relazioni:

fact upgrades_acyclic { no ^upgrades & iden }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top