Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.91 KB | None | 0 0
  1. #define SIZEOF(i) dom[i].length
  2. #define OFFTOP(i, off) dom[i].disc[SIZEOF(i) - off]
  3. #define TOP(i) OFFTOP(i, 1)
  4.  
  5. #define CAN_MOVE(src, dst) \
  6. SIZEOF(src) > 0 && \
  7. (SIZEOF(dst) == 0 || TOP(src) < TOP(dst))
  8.  
  9. #define MOVE(src, dst) \
  10. atomic { \
  11. printf("%d: %d -> %d\n", TOP(src), src, dst); \
  12. OFFTOP(dst, 0) = TOP(src); \
  13. SIZEOF(dst)++; \
  14. SIZEOF(src)-- \
  15. }
  16.  
  17. typedef Stick {
  18. byte disc[4];
  19. byte length;
  20. };
  21.  
  22. Stick dom[3];
  23.  
  24. active proctype P() {
  25. do
  26. :: CAN_MOVE(0, 1) -> MOVE(0, 1)
  27. :: CAN_MOVE(0, 2) -> MOVE(0, 2)
  28. :: CAN_MOVE(1, 0) -> MOVE(1, 0)
  29. :: CAN_MOVE(1, 2) -> MOVE(1, 2)
  30. :: CAN_MOVE(2, 0) -> MOVE(2, 0)
  31. :: CAN_MOVE(2, 1) -> MOVE(2, 1)
  32. od
  33. }
  34.  
  35. init {
  36. dom[0].length = 4;
  37. dom[0].disc[0] = 4;
  38. dom[0].disc[1] = 3;
  39. dom[0].disc[2] = 2;
  40. dom[0].disc[3] = 1;
  41. }
  42.  
  43. ltl goal { !<>(SIZEOF(1) == 4) }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement