Como alguém pode expressar que um relacionamento não deve ser cíclico?

StackOverflow https://stackoverflow.com/questions/4206790

  •  25-09-2019
  •  | 
  •  

Pergunta

Considere a upgrades relação:

Incomplete order relationship

Eu preciso ter certeza disso upgrades não pode ser circular. Como posso fazer isso em liga?

Foi útil?

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