Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.67 KB | None | 0 0
  1. Type Neighbours is
  2. Imports
  3. ref: BOOLEAN
  4. ref: INTEGER
  5. ref: STRING
  6.  
  7. Sorts
  8. new element
  9. new line
  10. new neighbours
  11.  
  12. Operators
  13. ctor: _1 : -> element
  14. ctor: _2 : -> element
  15. ctor: _3 : -> element
  16. ctor: _4 : -> element
  17. ctor: __ : -> element
  18. ctor: x : -> element
  19.  
  20. oper: mkline : element element element element element element element -> line
  21. oper: mkpuzzle : line line line line line line line -> neighbours
  22. oper: columns : neighbours -> neighbours
  23. oper: testelem : element element -> Bool
  24. oper: testelemX : element element element -> Bool
  25. oper: testline : line -> Bool
  26. oper: testlineX : line -> Bool
  27. oper: testpuzzlelines : neighbours -> Bool
  28. oper: testpuzzlelinesX : neighbours -> Bool
  29. oper: testpuzzle : neighbours -> Bool
  30. oper: elemToInt : element -> Int
  31. oper: boardWrittenValid : element element element -> String
  32.  
  33. Variables
  34. var p : neighbours
  35.  
  36. var vl1 : line
  37. var nl1 : line
  38. var vl2 : line
  39. var nl2 : line
  40. var vl3 : line
  41. var nl3 : line
  42. var vl4 : line
  43.  
  44. var e1 : element
  45. var n1 : element
  46. var e2 : element
  47. var n2 : element
  48. var e3 : element
  49. var n3 : element
  50. var e4 : element
  51.  
  52. var e11 : element
  53. var e12 : element
  54. var e13 : element
  55. var e14 : element
  56. var e15 : element
  57. var e16 : element
  58. var e17 : element
  59. var e21 : element
  60. var e22 : element
  61. var e23 : element
  62. var e24 : element
  63. var e25 : element
  64. var e26 : element
  65. var e27 : element
  66. var e31 : element
  67. var e32 : element
  68. var e33 : element
  69. var e34 : element
  70. var e35 : element
  71. var e36 : element
  72. var e37 : element
  73. var e41 : element
  74. var e42 : element
  75. var e43 : element
  76. var e44 : element
  77. var e45 : element
  78. var e46 : element
  79. var e47 : element
  80. var e51 : element
  81. var e52 : element
  82. var e53 : element
  83. var e54 : element
  84. var e55 : element
  85. var e56 : element
  86. var e57 : element
  87. var e61 : element
  88. var e62 : element
  89. var e63 : element
  90. var e64 : element
  91. var e65 : element
  92. var e66 : element
  93. var e67 : element
  94. var e71 : element
  95. var e72 : element
  96. var e73 : element
  97. var e74 : element
  98. var e75 : element
  99. var e76 : element
  100. var e77 : element
  101. Axioms
  102. axiom: elemToInt(_1()) = 1
  103. axiom: elemToInt(_2()) = 2
  104. axiom: elemToInt(_3()) = 3
  105. axiom: elemToInt(_4()) = 4
  106.  
  107. axiom: columns(mkpuzzle(mkline(:e11, :e12, :e13, :e14, :e15, :e16, :e17), mkline(:e21, :e22, :e23, :e24, :e25, :e26, :e27), mkline(:e31, :e32, :e33, :e34, :e35, :e36, :e37), mkline(:e41, :e42, :e43, :e44, :e45, :e46, :e47), mkline(:e51, :e52, :e53, :e54, :e55, :e56, :e57), mkline(:e61, :e62, :e63, :e64, :e65, :e66, :e67), mkline(:e71, :e72, :e73, :e74, :e75, :e76, :e77))) = mkpuzzle(mkline(:e11, :e21, :e31, :e41, :e51, :e61, :e71), mkline(:e12, :e22, :e32, :e42, :e52, :e62, :e72), mkline(:e13, :e23, :e33, :e43, :e53, :e62, :e73), mkline(:e14, :e24, :e34, :e44, :e54, :e64, :e74), mkline(:e15, :e25, :e35, :e45, :e55, :e65, :e75), mkline(:e16, :e26, :e36, :e46, :e56, :e66, :e76), mkline(:e17, :e27, :e37, :e47, :e57, :e67, :e77))
  108.  
  109. axiom: testelem(:e1, :n1) = Or(Equal(:e1, __()), Or(Equal(:n1, __()), Not(Equal(:e1, :n1))))
  110.  
  111. axiom: testline(mkline(:e1, :n1, :e2, :n2, :e3, :n3, :e4)) = And(testelem(:e1, :e2), And(testelem(:e1, :e3), And(testelem(:e1, :e4), And(testelem(:e2, :e3), And(testelem(:e2, :e4), testelem(:e3, :e4))))))
  112.  
  113. axiom: testpuzzlelines(mkpuzzle(:vl1, :nl1, :vl2, :nl2, :vl3, :nl3, :vl4)) = And(testline(:vl1), And(testline(:vl2), And(testline(:vl3), testline(:vl4))))
  114.  
  115. axiom: testelemX(:e1, :n1, :e2) = If_Then_Else(Equal(:n1, x()), Or(Equal(SUB(elemToInt(:e1), 1), elemToInt(:e2)), Or(Equal(SUB(elemToInt(:e2), 1), elemToInt(:e1)), Or(Equal(:e1, __()), Equal(:e2, __())))), Not(Or(Equal(SUB(elemToInt(:e1), 1), elemToInt(:e2)), Equal(SUB(elemToInt(:e2), 1), elemToInt(:e1)))))
  116.  
  117. axiom: boardWrittenValid(:e1, :n1, :e2) = If_Then_Else(Or(Equal(elemToInt(:n1), 1), Or(Equal(elemToInt(:n1), 2), Or(Equal(elemToInt(:n1), 3), Equal(elemToInt(:n1), 4)))), "Board is written in unvalid", "Board is written in valid")
  118.  
  119. axiom: testlineX(mkline(:e1, :n1, :e2, :n2, :e3, :n3, :e4)) = And(testelemX(:e1, :n1, :e2), And(testelemX(:e2, :n2, :e3), testelemX(:e3, :n3, :e4)))
  120.  
  121. axiom: testpuzzlelinesX(mkpuzzle(:vl1, :nl1, :vl2, :nl2, :vl3, :nl3, :vl4)) = And(testlineX(:vl1), And(testlineX(:vl2), And(testlineX(:vl3), testlineX(:vl4))))
  122.  
  123. axiom: testpuzzle(:p) = And(testpuzzlelines(:p), And(testpuzzlelines(columns(:p)), And(testpuzzlelinesX(:p), testpuzzlelinesX(columns(:p)))))
  124.  
  125. Reductions
  126. reduce : columns(mkpuzzle(mkline(_1(), _1(), _2(), __(), _3(), x(), _4()), mkline(x(), __(), __(), __(), __(), __(), __()), mkline(_1(), __(), _2(), __(), _3(), x(), _4()), mkline(__(), __(), __(), __(), __(), __(), __()), mkline(_1(), __(), _2(), __(), _3(), x(), _4()), mkline(__(), __(), __(), __(), __(), __(), __()), mkline(_1(), __(), _2(), __(), _3(), x(), _4())))
  127.  
  128. reduce : testelem(_1(), _2())
  129. reduce : testelem(_2(), _1())
  130. reduce : testelem(_2(), _2())
  131.  
  132. reduce : testline(mkline(_1(), __(), _2(), __(), _3(), x(), _2()))
  133.  
  134. reduce : testpuzzlelines(mkpuzzle(mkline(_1(), _1(), _2(), __(), _3(), x(), _4()), mkline(x(), __(), __(), __(), __(), __(), __()), mkline(_1(), __(), _2(), __(), _3(), x(), _4()), mkline(__(), __(), __(), __(), __(), __(), __()), mkline(_1(), __(), _2(), __(), _3(), x(), _4()), mkline(__(), __(), __(), __(), __(), __(), __()), mkline(_1(), __(), _2(), __(), _3(), x(), _4())))
  135. reduce : testelemX(_1(), x(), _2())
  136. reduce : testelemX(_2(), x(), _1())
  137. reduce : testelemX(_1(), __(), _2())
  138. reduce : testelemX(_2(), __(), _1())
  139. reduce : testelemX(_1(), x(), _3())
  140. reduce : testelemX(_3(), x(), _1())
  141. reduce : testelemX(_1(), __(), _3())
  142. reduce : testelemX(_3(), __(), _1())
  143.  
  144. reduce : testlineX(mkline(_1(), __(), _2(), __(), _3(), x(), _2()))
  145.  
  146. reduce : testpuzzlelinesX(mkpuzzle(mkline(_1(), _1(), _2(), __(), _3(), x(), _4()), mkline(x(), __(), __(), __(), __(), __(), __()), mkline(_1(), __(), _2(), __(), _3(), x(), _4()), mkline(__(), __(), __(), __(), __(), __(), __()), mkline(_1(), __(), _2(), __(), _3(), x(), _4()), mkline(__(), __(), __(), __(), __(), __(), __()), mkline(_1(), __(), _2(), __(), _3(), x(), _4())))
  147. reduce : testpuzzle(mkpuzzle(mkline(_4(), __(), _2(), x(), _3(), __(), _1()), mkline(__(), __(), x(), __(), x(), __(), __()), mkline(_1(), __(), _3(), x(), _2(), __(), _4()), mkline(x(), __(), x(), __(), x(), __(), x()), mkline(_2(), __(), _4(), __(), _1(), __(), _3()), mkline(x(), __(), __(), __(), __(), __(), x()), mkline(_3(), __(), _1(), __(), _4(), __(), _2())))
  148. reduce : testpuzzle(mkpuzzle(mkline(_4(), __(), __(), x(), __(), x(), __()), mkline(x(), __(), x(), __(), x(), __(), x()), mkline(__(), x(), __(), x(), __(), __(), _4()), mkline(__(), __(), __(), __(), __(), __(), __()), mkline(__(), __(), __(), x(), __(), x(), __()), mkline(x(), x(), x(), x(), x(), x(), x()), mkline(__(), x(), __(), x(), __(), __(), __())))
  149. reduce : testpuzzle(mkpuzzle(mkline(_4(), __(), __(), x(), __(), x(), __()), mkline(x(), __(), x(), __(), x(), __(), x()), mkline(__(), x(), __(), x(), __(), __(), _4()), mkline(__(), __(), __(), __(), __(), __(), __()), mkline(__(), __(), _1(), x(), _2(), x(), _3()), mkline(x(), x(), x(), x(), x(), x(), x()), mkline(_1(), x(), _2(), x(), _3(), __(), __())))
  150. reduce : If_Then_Else(Or(Equal(elemToInt(_1()), 1), Or(Equal(elemToInt(_1()), 2), Or(Equal(elemToInt(_1()), 3), Equal(elemToInt(_1()), 4)))), "Board is written unvalid", "Board is written valid")
  151. reduce : boardWrittenValid(_1(), _1(), _2())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement