Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.30 KB | None | 0 0
  1. sig Event {}
  2.  
  3. pred event_convexity[t:Trace] {
  4. // If (e1,e2) and (e2,e3) are in the trace, then so is (e2,e2).
  5. all e1,e2,e3 : Event {
  6. ((e1 -> e2) in t.arrow and (e2 -> e3) in t.arrow)
  7. implies (e2 -> e2) in t.arrow
  8. }
  9. }
  10.  
  11. sig Trace {
  12. arrow : Event -> Event,
  13. input : Event -> Event,
  14. output : Event -> Event,
  15. internal : set Event
  16. } {
  17.  
  18. // define internal events
  19. internal = univ . (iden & arrow)
  20.  
  21. // inputs and outputs are special kinds of arrows
  22. (input + output) in arrow
  23.  
  24. // inputs are arrows from external events to internal events
  25. input = arrow & ((Event - internal) -> internal)
  26.  
  27. // outputs are arrows from internal events to external events
  28. output = arrow & (internal -> (Event - internal))
  29.  
  30. // there are no arrows from external events to external events
  31. no (arrow & ((Event - internal) -> (Event - internal)))
  32.  
  33. // the trace must satisfy "event convexity"
  34. event_convexity[this]
  35. }
  36.  
  37. pred p[t:Trace] {
  38. // To make things interesting: there must be at least one "input" arrow.
  39. (some a : t.arrow | a in t.input)
  40. }
  41.  
  42. // Ask Alloy for a trace with up to two events
  43. run p for 2 Event, 1 Trace
  44.  
  45. /*
  46. * Next step: "Arrow Convexity"
  47. * If e1 and e2 are events in the trace on the same object
  48. * then they must be linked via a chain of "vertical" arrows
  49. * all of which are in the trace.
  50. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement