Como alguém pode expressar que um relacionamento não deve ser cíclico?
-
25-09-2019 - |
Pergunta
Considere a upgrades
relação:
Eu preciso ter certeza disso upgrades
não pode ser circular. Como posso fazer isso em liga?
Solução
É suficiente aplicar a transitividade e a anti -reflexividade.
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
}
Outras dicas
Do seu exemplo, eu deduzi que o upgrades
A relação não se destina a ser transitiva: no exemplo, uma espada de diamante atualiza uma espada de pedra e uma espada de pedra atualiza uma espada de madeira, mas a espada de madeira -> Diamondsword não está no upgrades
relação.
Então, o que você quer dizer é algo como
fact upgrades_acyclic {
no x : univ | x in x.^upgrades
}
Alguns modeladores preferem a formulação mais sucinta em termos de relações:
fact upgrades_acyclic { no ^upgrades & iden }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow