1. (set-option :print-success false)
  2. (set-info :smt-lib-version 2.0)
  3. (set-option :AUTO_CONFIG false)
  4. (set-option :MODEL_HIDE_UNUSED_PARTITIONS false)
  5. (set-option :MODEL_V2 true)
  6. (set-option :ASYNC_COMMANDS false)
  7. (set-option :PHASE_SELECTION 0)
  8. (set-option :RESTART_STRATEGY 0)
  9. (set-option :RESTART_FACTOR |1.5|)
  10. (set-option :ARITH_RANDOM_INITIAL_VALUE true)
  11. (set-option :CASE_SPLIT 3)
  12. (set-option :DELAY_UNITS true)
  13. (set-option :DELAY_UNITS_THRESHOLD 16)
  14. (set-option :NNF_SK_HACK true)
  15. (set-option :MBQI false)
  16. (set-option :QI_EAGER_THRESHOLD 100)
  17. (set-option :QI_COST |"(+ weight generation)"|)
  18. (set-option :TYPE_CHECK true)
  19. (set-option :BV_REFLECT true)
  20. ; done setting options
  21.  
  22. ; Boogie universal background predicate
  23. ; Copyright (c) 2004-2010, Microsoft Corp.
  24. (set-info :category "industrial")
  25. (declare-sort |T@U| 0)
  26. (declare-sort |T@T| 0)
  27. (declare-fun int_div (Int Int) Int)
  28. (declare-fun int_mod (Int Int) Int)
  29. (declare-fun UOrdering2 (|T@U| |T@U|) Bool)
  30. (declare-fun UOrdering3 (|T@T| |T@U| |T@U|) Bool)
  31.  
  32. (declare-fun tickleBool (Bool) Bool)
  33. (assert (and (tickleBool true) (tickleBool false)))
  34. (declare-fun Ctor (T@T) Int)
  35. (declare-fun intType () T@T)
  36. (declare-fun boolType () T@T)
  37. (declare-fun int_2_U (Int) T@U)
  38. (declare-fun U_2_int (T@U) Int)
  39. (declare-fun type (T@U) T@T)
  40. (declare-fun bool_2_U (Bool) T@U)
  41. (declare-fun U_2_bool (T@U) Bool)
  42. (declare-fun MapType0Type (T@T T@T) T@T)
  43. (declare-fun MapType0TypeInv0 (T@T) T@T)
  44. (declare-fun MapType0TypeInv1 (T@T) T@T)
  45. (declare-fun MapType0Select (T@U T@U) T@U)
  46. (declare-fun MapType0Store (T@U T@U T@U) T@U)
  47. (declare-fun M () T@U)
  48. (declare-fun %lbl%+83 () Bool)
  49. (declare-fun a () Int)
  50. (declare-fun D () Int)
  51. (declare-fun c () Int)
  52. (declare-fun b () Int)
  53. (declare-fun %lbl%@177 () Bool)
  54. (declare-fun t () Int)
  55. (declare-fun %lbl%+111 () Bool)
  56. (assert (and
  57. (= (Ctor intType) 0)
  58. (= (Ctor boolType) 1)
  59. (forall ((arg0 Int) ) (! (= (U_2_int (int_2_U arg0)) arg0)
  60. :qid |typeInv:U_2_int|
  61. :pattern ( (int_2_U arg0))
  62. ))
  63. (forall ((x T@U) ) (! (=> (= (type x) intType) (= (int_2_U (U_2_int x)) x))
  64. :qid |cast:U_2_int|
  65. :pattern ( (U_2_int x))
  66. ))
  67. (forall ((arg0@@0 Int) ) (! (= (type (int_2_U arg0@@0)) intType)
  68. :qid |funType:int_2_U|
  69. :pattern ( (int_2_U arg0@@0))
  70. ))
  71. (forall ((arg0@@1 Bool) ) (! (= (U_2_bool (bool_2_U arg0@@1)) arg0@@1)
  72. :qid |typeInv:U_2_bool|
  73. :pattern ( (bool_2_U arg0@@1))
  74. ))
  75. (forall ((x@@0 T@U) ) (! (=> (= (type x@@0) boolType) (= (bool_2_U (U_2_bool x@@0)) x@@0))
  76. :qid |cast:U_2_bool|
  77. :pattern ( (U_2_bool x@@0))
  78. ))
  79. (forall ((arg0@@2 Bool) ) (! (= (type (bool_2_U arg0@@2)) boolType)
  80. :qid |funType:bool_2_U|
  81. :pattern ( (bool_2_U arg0@@2))
  82. ))))
  83. (assert (forall ((x@@1 T@U) ) (! (UOrdering2 x@@1 x@@1)
  84. :qid |bg:subtype-refl|
  85. :no-pattern (U_2_int x@@1)
  86. :no-pattern (U_2_bool x@@1)
  87. )))
  88. (assert (forall ((x@@2 T@U) (y T@U) (z T@U) ) (! (let ((alpha (type x@@2)))
  89. (=> (and
  90. (= (type y) alpha)
  91. (= (type z) alpha)
  92. (UOrdering2 x@@2 y)
  93. (UOrdering2 y z)) (UOrdering2 x@@2 z)))
  94. :qid |bg:subtype-trans|
  95. :pattern ( (UOrdering2 x@@2 y) (UOrdering2 y z))
  96. )))
  97. (assert (forall ((x@@3 T@U) (y@@0 T@U) ) (! (let ((alpha@@0 (type x@@3)))
  98. (=> (= (type y@@0) alpha@@0) (=> (and
  99. (UOrdering2 x@@3 y@@0)
  100. (UOrdering2 y@@0 x@@3)) (= x@@3 y@@0))))
  101. :qid |bg:subtype-antisymm|
  102. :pattern ( (UOrdering2 x@@3 y@@0) (UOrdering2 y@@0 x@@3))
  103. )))
  104. (assert (and
  105. (forall ((arg0@@3 T@T) (arg1 T@T) ) (! (= (Ctor (MapType0Type arg0@@3 arg1)) 2)
  106. :qid |ctor:MapType0Type|
  107. ))
  108. (forall ((arg0@@4 T@T) (arg1@@0 T@T) ) (! (= (MapType0TypeInv0 (MapType0Type arg0@@4 arg1@@0)) arg0@@4)
  109. :qid |typeInv:MapType0TypeInv0|
  110. :pattern ( (MapType0Type arg0@@4 arg1@@0))
  111. ))
  112. (forall ((arg0@@5 T@T) (arg1@@1 T@T) ) (! (= (MapType0TypeInv1 (MapType0Type arg0@@5 arg1@@1)) arg1@@1)
  113. :qid |typeInv:MapType0TypeInv1|
  114. :pattern ( (MapType0Type arg0@@5 arg1@@1))
  115. ))
  116. (forall ((arg0@@6 T@U) (arg1@@2 T@U) ) (! (let ((aVar1 (MapType0TypeInv1 (type arg0@@6))))
  117. (= (type (MapType0Select arg0@@6 arg1@@2)) aVar1))
  118. :qid |funType:MapType0Select|
  119. :pattern ( (MapType0Select arg0@@6 arg1@@2))
  120. ))
  121. (forall ((arg0@@7 T@U) (arg1@@3 T@U) (arg2 T@U) ) (! (let ((aVar1@@0 (type arg2)))
  122. (let ((aVar0 (type arg1@@3)))
  123. (= (type (MapType0Store arg0@@7 arg1@@3 arg2)) (MapType0Type aVar0 aVar1@@0))))
  124. :qid |funType:MapType0Store|
  125. :pattern ( (MapType0Store arg0@@7 arg1@@3 arg2))
  126. ))
  127. (forall ((m T@U) (x0 T@U) (val T@U) ) (! (let ((aVar1@@1 (MapType0TypeInv1 (type m))))
  128. (=> (= (type val) aVar1@@1) (= (MapType0Select (MapType0Store m x0 val) x0) val)))
  129. :qid |mapAx0:MapType0Select|
  130. :weight 0
  131. ))
  132. (forall ((val@@0 T@U) (m@@0 T@U) (x0@@0 T@U) (y0 T@U) ) (! (or
  133. (= x0@@0 y0)
  134. (= (MapType0Select (MapType0Store m@@0 x0@@0 val@@0) y0) (MapType0Select m@@0 y0)))
  135. :qid |mapAx1:MapType0Select:0|
  136. :weight 0
  137. ))
  138. (forall ((val@@1 T@U) (m@@1 T@U) (x0@@1 T@U) (y0@@0 T@U) ) (! (or
  139. true
  140. (= (MapType0Select (MapType0Store m@@1 x0@@1 val@@1) y0@@0) (MapType0Select m@@1 y0@@0)))
  141. :qid |mapAx2:MapType0Select|
  142. :weight 0
  143. ))
  144. (= (type M) (MapType0Type intType intType))))
  145. (push 1)
  146. (set-info :boogie-vc-id test)
  147. (assert (not
  148. (let ((anon0_correct (=> (! (and %lbl%+83 true) :lblpos +83) (=> (and
  149. (< 0 a)
  150. (< (* 1000 a) (* 1 D))) (=> (and
  151. (< 0 c)
  152. (< (* 1000 c) (* 1 D))
  153. (= (* (* 100 D) b) (* a c))) (and
  154. (! (or %lbl%@177 (> (U_2_int (MapType0Select M (int_2_U t))) 0)) :lblneg @177)
  155. (=> (> (U_2_int (MapType0Select M (int_2_U t))) 0) true)))))))
  156. (let ((PreconditionGeneratedEntry_correct (=> (! (and %lbl%+111 true) :lblpos +111) anon0_correct)))
  157. PreconditionGeneratedEntry_correct))
  158. ))
  159. (check-sat)
  160. (get-info :reason-unknown)
  161. (labels)
  162. (assert %lbl%@177)
  163. (check-sat)
  164. (pop 1)