Advertisement
Guest User

Untitled

a guest
Aug 2nd, 2015
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.18 KB | None | 0 0
  1. open util/ordering[Aika] as A
  2. sig Aika{}
  3.  
  4. abstract sig Olio{}
  5. abstract sig Toimija extends Olio{perusOikeudet:set Viesti}
  6.  
  7. sig Käyttäjä extends Toimija{}
  8. {perusOikeudet={v:(Lue+Kirjoita)|v.lähettäjä=this and v.kohde.omistaja=this}
  9. +{v:Käännä| v.lähettäjä=this}}
  10. one sig Kääntäjä extends Toimija{}
  11. {no perusOikeudet}
  12.  
  13. abstract sig Viesti
  14. {lähettäjä:Toimija, kohde:Olio, aika:Aika,siirtoOikeudet:set Viesti}
  15. {this in Oikat[lähettäjä]
  16. siirtoOikeudet in Oikat[lähettäjä]}
  17.  
  18. fun Oikat[t:Toimija] : set Viesti {
  19. {v:Viesti|v in t.perusOikeudet
  20. or (some v2:Viesti| v2.kohde=t and v in v2.siirtoOikeudet)}
  21. }
  22.  
  23. sig Lue,Kirjoita extends Viesti
  24. {}
  25. {kohde in Tiedosto}
  26.  
  27. sig LisääLoppuun extends Kirjoita{}
  28.  
  29. sig Käännä extends Viesti
  30. {sorsa:Tiedosto, binääri:Tiedosto}
  31. {kohde=Kääntäjä and lähettäjä in Käyttäjä}
  32.  
  33. sig Tiedosto extends Olio{}
  34.  
  35. sig KäyttäjänTiedosto extends Tiedosto{omistaja:Käyttäjä}
  36. //one sig Loki extends Tiedosto{}
  37.  
  38. /*
  39. fact Aluksi{
  40. let t0=A/first[] |
  41. no v:Viesti | v.aika=t0
  42. }*/
  43.  
  44. fact Askel{
  45. all t:Aika |
  46. let t1=A/next[t] |
  47. {
  48. (no k:Käännä | k.aika = t) =>
  49. (all v:Viesti | v.aika=t1 => v.lähettäjä in (Käyttäjä))
  50. else (all k:Käännä | AjaKääntäjä[k])
  51. }
  52. }
  53.  
  54. pred AjaKääntäjä[k:Käännä]{
  55. let t1 = A/next[k.aika] |
  56. {
  57. // some v:LisääLoppuun | v.aika=t1 and v.lähettäjä = Kääntäjä and v.kohde=Loki
  58. some v:Kirjoita - LisääLoppuun | v.aika=t1 and v.kohde=k.binääri and
  59. v in Oikat[Kääntäjä]
  60. some v:Lue | v.aika=t1 and v.kohde=k.sorsa and
  61. v in Oikat[Kääntäjä]
  62. }
  63. }
  64.  
  65. //assert LogiinVainLisätään{
  66. // all v:Viesti | v.kohde = Loki => (v in LisääLoppuun) }
  67.  
  68. assert VainKäyttäjäMuuttaa{
  69. some Käyttäjä =>
  70. all t:KäyttäjänTiedosto | (some v:Viesti|v.kohde=t) =>
  71. (some v2:Viesti|v2.lähettäjä=t.omistaja and t in v2.(kohde+sorsa+binääri))
  72. }
  73.  
  74. pred Show {one Käännä and #Käyttäjä>1 and #KäyttäjänTiedosto>1}
  75. check VainKäyttäjäMuuttaa for 9
  76. run Show for 8
  77. run AjaKääntäjä for 7 but exactly 2 KäyttäjänTiedosto
  78. //check LogiinVainLisätään for 5
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement