Come si può esprimere che un rapporto non deve essere ciclico?
-
25-09-2019 - |
Domanda
Si consideri un rapporto upgrades
:
Ho bisogno di fare in modo che upgrades
non può essere circolare. Come posso fare che in Lega?
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