Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Timeouts are broken #946

Closed
bclement-ocp opened this issue Nov 17, 2023 · 10 comments
Closed

Timeouts are broken #946

bclement-ocp opened this issue Nov 17, 2023 · 10 comments
Assignees

Comments

@bclement-ocp
Copy link
Collaborator

It looks like some of the recent changes (I'd guess either #829 or #861 is the source) have broken timeout support badly. The core of the issue is that, since timeouts can occur at any allocation point and satML uses imperative state, it is deeply incorrect to keep using a satML solver after a timeout, because it can be in an arbitrary intermediate state that has no guarantee to be valid.

It looks like we can, because the satML solver is wrapped in a "persistent" satML-frontend, but in fact the frontend just shares the imperative state (a design flaw in itself, but mostly irrelevant here).

When a timeout is reached, we cannot keep the model around at all. This is probably also the case with step limits, so tagging @Stevendeo who has been looking at that. In both cases I don't think we have a choice but to throw the model away.

There are multiple places where this has an impact:

  • The model_gen_on_timeout logic cannot be used for satML
  • Whenever transforming a Timeout exception into an I_dont_know, we cannot keep the same satML environment, as it might be in an invalid state. I think that the only thing we can do in the current architecture is return an empty model, but we do need to be careful that that empty model does not contain any assertions. Alternatively, we can have a new Invalid status instead of Unknown to keep track of that.

On /data/smtlib/2022/QF_BV/sage/app12/bench_4308.smt2 with --timelimit 1 I get the crash below. Removing the conversions from Util.Timeout to I_dont_know in the satML-frontend fixes the issue.

; File "/tmp/bench_4308.smt2", line 50, characters 1-7280: Timeout (0.9999) (65380 steps)
[Error](and
  1[T@0] [index=207 | lit:(= .?___let41 [|0000000000000000|]@T2_10408)] vpremise={{}}
  2[T@0] [index=206 | lit:(= .?___let40 (int2bv[32] (+ (bv2nat T4_11167) (bv2nat [|00000000000000000000000000000100|]))))] vpremise={{}}
  3[T@0] [index=205 | lit:(= (.?___let39 .?___let41, .?___let40) (int2bv[32] (+ (bv2nat .?___let40) (% (+ (% (+ (% (+ (% (+ (bv2nat .?___let40) (bv2nat [|00000000000000000000000000111101|])) 4294967296) (bv2nat .?___let41)) 4294967296) (bv2nat [|0000000000000000|]@T2_10410)) 4294967296) (% (- 4294967296 (bv2nat .?___let40)) 4294967296)) 4294967296))))] vpremise={{}}
  4[T@0] [index=204 | lit:(= .?___let38 [|0000000000000000|]@T2_10473)] vpremise={{}}
  5[T@0] [index=203 | lit:(= (.?___let37 (.?___let39 .?___let41, .?___let40)) (int2bv[32] (+ (bv2nat (.?___let39 .?___let41, .?___let40)) (bv2nat [|00000000000000000000000000000100|]))))] vpremise={{}}
  6[T@0] [index=202 | lit:(= (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))) (int2bv[32] (+ (bv2nat (.?___let37 (.?___let39 .?___let41, .?___let40))) (% (+ (% (+ (% (+ (% (+ (bv2nat (.?___let37 (.?___let39 .?___let41, .?___let40))) (bv2nat [|00000000000000000000000000110101|])) 4294967296) (bv2nat .?___let38)) 4294967296) (bv2nat [|0000000000000000|]@T2_10475)) 4294967296) (% (- 4294967296 (bv2nat (.?___let37 (.?___let39 .?___let41, .?___let40)))) 4294967296)) 4294967296))))] vpremise={{}}
  7[T@0] [index=201 | lit:(= .?___let35 [|0000000000000000|]@T2_10530)] vpremise={{}}
  8[T@0] [index=200 | lit:(= (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))) (int2bv[32] (+ (bv2nat (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))) (bv2nat [|00000000000000000000000000000100|]))))] vpremise={{}}
  9[T@0] [index=199 | lit:(= (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))) (int2bv[32] (+ (bv2nat (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))) (% (+ (% (+ (% (+ (% (+ (bv2nat (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))) (bv2nat [|00000000000000000000000001000110|])) 4294967296) (bv2nat .?___let35)) 4294967296) (bv2nat [|0000000000000000|]@T2_10532)) 4294967296) (% (- 4294967296 (bv2nat (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))) 4294967296)) 4294967296))))] vpremise={{}}
  10[T@0] [index=198 | lit:(= .?___let32 [|0000000000000000|]@T2_10604)] vpremise={{}}
  11[T@0] [index=197 | lit:(= (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))) (int2bv[32] (+ (bv2nat (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))) (bv2nat [|00000000000000000000000000000100|]))))] vpremise={{}}
  12[T@0] [index=196 | lit:(= (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))) (int2bv[32] (+ (bv2nat (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))) (% (+ (% (+ (% (+ (% (+ (bv2nat (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))) (bv2nat [|00000000000000000000000000111011|])) 4294967296) (bv2nat .?___let32)) 4294967296) (bv2nat [|0000000000000000|]@T2_10606)) 4294967296) (% (- 4294967296 (bv2nat (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))) 4294967296)) 4294967296))))] vpremise={{}}
  13[T@0] [index=195 | lit:(= .?___let29 [|0000000000000000|]@T2_10667)] vpremise={{}}
  14[T@0] [index=194 | lit:(= (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))) (int2bv[32] (+ (bv2nat (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))) (bv2nat [|00000000000000000000000000000100|]))))] vpremise={{}}
  15[T@0] [index=193 | lit:(= (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))) (int2bv[32] (+ (bv2nat (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))) (% (+ (% (+ (% (+ (% (+ (bv2nat (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))) (bv2nat [|00000000000000000000000000111111|])) 4294967296) (bv2nat .?___let29)) 4294967296) (bv2nat [|0000000000000000|]@T2_10669)) 4294967296) (% (- 4294967296 (bv2nat (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))) 4294967296)) 4294967296))))] vpremise={{}}
  16[T@0] [index=192 | lit:(= (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))) (int2bv[32] (+ (bv2nat (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))) (bv2nat [|00000000000000000000000000000100|]))))] vpremise={{}}
  (or
    17[F@0] [index=1 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    18[T->0/C1] [index=191 | lit:(= [|00000000|] (.?___let77 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))] vpremise={{}}
  )
  (or
    -17[T@0] [index=1 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    19 [index=-1 | lit:(= [|00000001|] (.?___let77 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))] vpremise={{}}
  )
  20[T@0] [index=189 | lit:(= (.?___let25 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let77 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))) 4294967296))))] vpremise={{}}
  (or
    21[F@0] [index=2 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    22[T->0/C4] [index=188 | lit:(= [|00000000|] (.?___let76 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))))] vpremise={{}}
  )
  (or
    -21[T@0] [index=2 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    23 [index=-1 | lit:(= [|00000001|] (.?___let76 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))))] vpremise={{}}
  )
  24[T@0] [index=186 | lit:(= (.?___let24 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let76 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))))) 4294967296))))] vpremise={{}}
  25[T@0] [index=185 | lit:(= (.?___let23 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))) (int2bv[32] (+ (bv2nat (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))) (bv2nat [|00000000000000000000000000101010|]))))] vpremise={{}}
  26[T@0] [index=184 | lit:(= .?___let22 [|0000000000000000|]@T2_10734)] vpremise={{}}
  27[T@0] [index=183 | lit:(= (.?___let21 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) (int2bv[32] (+ (bv2nat (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) (bv2nat [|00000000000000000000000000101010|]))))] vpremise={{}}
  (or
    28[F@0] [index=3 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    29[T->0/C7] [index=182 | lit:(= [|00000000|] (.?___let75 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))] vpremise={{}}
  )
  (or
    -28[T@0] [index=3 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    30 [index=-1 | lit:(= [|00000001|] (.?___let75 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))] vpremise={{}}
  )
  31[T@0] [index=180 | lit:(= (.?___let20 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let75 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))) 4294967296))))] vpremise={{}}
  (or
    32[F@0] [index=4 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    33[T->0/C10] [index=179 | lit:(= [|00000000|] (.?___let74 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))] vpremise={{}}
  )
  (or
    -32[T@0] [index=4 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    34 [index=-1 | lit:(= [|00000001|] (.?___let74 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))] vpremise={{}}
  )
  35[T@0] [index=177 | lit:(= (.?___let19 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let74 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))) 4294967296))))] vpremise={{}}
  36[T@0] [index=176 | lit:(= (.?___let18 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))) (int2bv[32] (+ (bv2nat (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))) (bv2nat [|00000000000000000000000000101010|]))))] vpremise={{}}
  (or
    37[F@0] [index=5 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let23 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    38[T->0/C13] [index=175 | lit:(= [|00000000|] (.?___let73 (.?___let23 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))] vpremise={{}}
  )
  (or
    -37[T@0] [index=5 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let23 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    39 [index=-1 | lit:(= [|00000001|] (.?___let73 (.?___let23 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))] vpremise={{}}
  )
  40[T@0] [index=173 | lit:(= (.?___let17 (.?___let23 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let73 (.?___let23 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))) 4294967296))))] vpremise={{}}
  (or
    41[F@0] [index=6 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    42[T->0/C16] [index=172 | lit:(= [|00000000|] (.?___let72 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))] vpremise={{}}
  )
  (or
    -41[T@0] [index=6 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    43 [index=-1 | lit:(= [|00000001|] (.?___let72 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))] vpremise={{}}
  )
  44[T@0] [index=170 | lit:(= (.?___let16 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let72 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))) 4294967296))))] vpremise={{}}
  (or
    45[F@0] [index=7 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    46[T->0/C19] [index=169 | lit:(= [|00000000|] (.?___let71 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))] vpremise={{}}
  )
  (or
    -45[T@0] [index=7 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    47 [index=-1 | lit:(= [|00000001|] (.?___let71 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))] vpremise={{}}
  )
  48[T@0] [index=167 | lit:(= (.?___let15 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let71 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) 4294967296))))] vpremise={{}}
  49[T@0] [index=166 | lit:(= (.?___let14 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))) (int2bv[32] (+ (bv2nat (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))) (bv2nat [|00000000000000000000000000101010|]))))] vpremise={{}}
  (or
    50[F@0] [index=8 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let21 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    51[T->0/C22] [index=165 | lit:(= [|00000000|] (.?___let70 (.?___let21 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))))] vpremise={{}}
  )
  (or
    -50[T@0] [index=8 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let21 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    52 [index=-1 | lit:(= [|00000001|] (.?___let70 (.?___let21 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))))] vpremise={{}}
  )
  53[T@0] [index=163 | lit:(= (.?___let13 (.?___let21 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let70 (.?___let21 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))))) 4294967296))))] vpremise={{}}
  (or
    54[F@0] [index=9 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let39 .?___let41, .?___let40))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    55[T->0/C25] [index=162 | lit:(= [|00000000|] (.?___let69 (.?___let39 .?___let41, .?___let40)))] vpremise={{}}
  )
  (or
    -54[T@0] [index=9 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let39 .?___let41, .?___let40))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    56 [index=-1 | lit:(= [|00000001|] (.?___let69 (.?___let39 .?___let41, .?___let40)))] vpremise={{}}
  )
  57[T@0] [index=160 | lit:(= (.?___let12 (.?___let39 .?___let41, .?___let40)) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let69 (.?___let39 .?___let41, .?___let40)))) 4294967296))))] vpremise={{}}
  (or
    58[F@0] [index=10 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let37 (.?___let39 .?___let41, .?___let40)))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    59[T->0/C28] [index=159 | lit:(= [|00000000|] (.?___let68 (.?___let37 (.?___let39 .?___let41, .?___let40))))] vpremise={{}}
  )
  (or
    -58[T@0] [index=10 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let37 (.?___let39 .?___let41, .?___let40)))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    60 [index=-1 | lit:(= [|00000001|] (.?___let68 (.?___let37 (.?___let39 .?___let41, .?___let40))))] vpremise={{}}
  )
  61[T@0] [index=157 | lit:(= (.?___let11 (.?___let37 (.?___let39 .?___let41, .?___let40))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let68 (.?___let37 (.?___let39 .?___let41, .?___let40))))) 4294967296))))] vpremise={{}}
  62[T@0] [index=156 | lit:(= (.?___let10 .?___let40) (int2bv[32] (+ (bv2nat .?___let40) (bv2nat [|00000000000000000000000000101010|]))))] vpremise={{}}
  (or
    63[F@0] [index=11 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let18 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    64[T->0/C31] [index=155 | lit:(= [|00000000|] (.?___let67 (.?___let18 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))] vpremise={{}}
  )
  (or
    -63[T@0] [index=11 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let18 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    65 [index=-1 | lit:(= [|00000001|] (.?___let67 (.?___let18 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))] vpremise={{}}
  )
  66[T@0] [index=153 | lit:(= (.?___let9 (.?___let18 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let67 (.?___let18 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))) 4294967296))))] vpremise={{}}
  (or
    67[F@0] [index=12 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    68[T->0/C34] [index=152 | lit:(= [|00000000|] (.?___let66 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))] vpremise={{}}
  )
  (or
    -67[T@0] [index=12 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    69 [index=-1 | lit:(= [|00000001|] (.?___let66 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))] vpremise={{}}
  )
  70[T@0] [index=150 | lit:(= (.?___let8 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let66 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))) 4294967296))))] vpremise={{}}
  (or
    71[F@0] [index=13 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    72[T->0/C37] [index=149 | lit:(= [|00000000|] (.?___let65 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))] vpremise={{}}
  )
  (or
    -71[T@0] [index=13 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    73 [index=-1 | lit:(= [|00000001|] (.?___let65 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))] vpremise={{}}
  )
  74[T@0] [index=147 | lit:(= (.?___let7 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let65 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))) 4294967296))))] vpremise={{}}
  75[T@0] [index=146 | lit:(= (.?___let6 (.?___let37 (.?___let39 .?___let41, .?___let40))) (int2bv[32] (+ (bv2nat (.?___let37 (.?___let39 .?___let41, .?___let40))) (bv2nat [|00000000000000000000000000101010|]))))] vpremise={{}}
  (or
    76[F@0] [index=14 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let14 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    77[T->0/C40] [index=145 | lit:(= [|00000000|] (.?___let64 (.?___let14 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))] vpremise={{}}
  )
  (or
    -76[T@0] [index=14 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let14 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    78 [index=-1 | lit:(= [|00000001|] (.?___let64 (.?___let14 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))] vpremise={{}}
  )
  79[T@0] [index=143 | lit:(= (.?___let5 (.?___let14 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let64 (.?___let14 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))) 4294967296))))] vpremise={{}}
  (or
    80[F@0] [index=15 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let10 .?___let40))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    81[T->0/C43] [index=142 | lit:(= [|00000000|] (.?___let63 (.?___let10 .?___let40)))] vpremise={{}}
  )
  (or
    -80[T@0] [index=15 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let10 .?___let40))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    82 [index=-1 | lit:(= [|00000001|] (.?___let63 (.?___let10 .?___let40)))] vpremise={{}}
  )
  83[T@0] [index=140 | lit:(= (.?___let4 (.?___let10 .?___let40)) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let63 (.?___let10 .?___let40)))) 4294967296))))] vpremise={{}}
  (or
    84[F@0] [index=16 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat T4_11167)) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    85[T->0/C46] [index=139 | lit:(= [|00000000|] .?___let62)] vpremise={{}}
  )
  (or
    -84[T@0] [index=16 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat T4_11167)) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    86 [index=-1 | lit:(= [|00000001|] .?___let62)] vpremise={{}}
  )
  87[T@0] [index=137 | lit:(= .?___let3 (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@.?___let62)) 4294967296))))] vpremise={{}}
  (or
    88[F@0] [index=17 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat .?___let40)) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    89[T->0/C49] [index=136 | lit:(= [|00000000|] (.?___let61 .?___let40))] vpremise={{}}
  )
  (or
    -88[T@0] [index=17 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat .?___let40)) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    90 [index=-1 | lit:(= [|00000001|] (.?___let61 .?___let40))] vpremise={{}}
  )
  91[T@0] [index=134 | lit:(= (.?___let2 .?___let40) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let61 .?___let40))) 4294967296))))] vpremise={{}}
  (or
    92[F@0] [index=18 | lit:(<= (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let6 (.?___let37 (.?___let39 .?___let41, .?___let40))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    93[T->0/C52] [index=133 | lit:(= [|00000000|] (.?___let60 (.?___let6 (.?___let37 (.?___let39 .?___let41, .?___let40)))))] vpremise={{}}
  )
  (or
    -92[T@0] [index=18 | lit:(> (% (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat (.?___let6 (.?___let37 (.?___let39 .?___let41, .?___let40))))) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
    94 [index=-1 | lit:(= [|00000001|] (.?___let60 (.?___let6 (.?___let37 (.?___let39 .?___let41, .?___let40)))))] vpremise={{}}
  )
  95[T@0] [index=131 | lit:(= (.?___let1 (.?___let6 (.?___let37 (.?___let39 .?___let41, .?___let40)))) (int2bv[32] (+ (bv2nat [|11111111111111111111111111111111|]) (% (- 4294967296 (bv2nat [|000000000000000000000000|]@(.?___let60 (.?___let6 (.?___let37 (.?___let39 .?___let41, .?___let40)))))) 4294967296))))] vpremise={{}}
  96[T@0] [index=19 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))))] vpremise={{}}
  -97[T@0] [index=130 | lit:(not (= [|11111111111111111111111111111111|] (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))))] vpremise={{}}
  98[T@0] [index=20 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))] vpremise={{}}
  -99[T@0] [index=129 | lit:(not (= [|11111111111111111111111111111111|] (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))] vpremise={{}}
  -100[T@0] [index=128 | lit:(not (= [|11111111111111111111111111111111|] (.?___let21 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))))] vpremise={{}}
  101[T@0] [index=21 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))] vpremise={{}}
  -102[T@0] [index=127 | lit:(not (= [|11111111111111111111111111111111|] (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))] vpremise={{}}
  103[T@0] [index=126 | lit:(= [|00000000000000000000000000000000|] .?___let22)] vpremise={{}}
  104[T@0] [index=22 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))] vpremise={{}}
  -105[T@0] [index=125 | lit:(not (= [|11111111111111111111111111111111|] (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))] vpremise={{}}
  -106[T@0] [index=124 | lit:(not (= [|11111111111111111111111111111111|] (.?___let23 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))] vpremise={{}}
  107[T@0] [index=23 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let24 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))))] vpremise={{}}
  108[T@0] [index=123 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let24 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))) 1))] vpremise={{}}
  109[T@0] [index=24 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))] vpremise={{}}
  -110[T@0] [index=122 | lit:(not (= [|11111111111111111111111111111111|] (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))] vpremise={{}}
  111[T@0] [index=121 | lit:(= [|00000000000000000000000000000000|] .?___let29)] vpremise={{}}
  112[T@0] [index=25 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let25 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))))] vpremise={{}}
  113[T@0] [index=120 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let25 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) 1))] vpremise={{}}
  114[T@0] [index=26 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let13 (.?___let21 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))))))] vpremise={{}}
  115[T@0] [index=119 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let13 (.?___let21 (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))))) 1))] vpremise={{}}
  116[T@0] [index=27 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))] vpremise={{}}
  -117[T@0] [index=118 | lit:(not (= [|11111111111111111111111111111111|] (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))] vpremise={{}}
  -118[T@0] [index=117 | lit:(not (= [|11111111111111111111111111111111|] (.?___let14 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))] vpremise={{}}
  119[T@0] [index=28 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let15 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))] vpremise={{}}
  120[T@0] [index=116 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let15 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))) 1))] vpremise={{}}
  121[T@0] [index=29 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))] vpremise={{}}
  -122[T@0] [index=115 | lit:(not (= [|11111111111111111111111111111111|] (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))] vpremise={{}}
  123[T@0] [index=114 | lit:(= [|00000000000000000000000000000000|] .?___let32)] vpremise={{}}
  124[T@0] [index=30 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let16 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))] vpremise={{}}
  125[T@0] [index=113 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let16 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))) 1))] vpremise={{}}
  126[T@0] [index=31 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let17 (.?___let23 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))))] vpremise={{}}
  127[T@0] [index=112 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let17 (.?___let23 (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) 1))] vpremise={{}}
  128[T@0] [index=32 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))] vpremise={{}}
  -129[T@0] [index=111 | lit:(not (= [|11111111111111111111111111111111|] (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))] vpremise={{}}
  -130[T@0] [index=110 | lit:(not (= [|11111111111111111111111111111111|] (.?___let18 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))] vpremise={{}}
  131[T@0] [index=33 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let19 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))] vpremise={{}}
  132[T@0] [index=109 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let19 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))) 1))] vpremise={{}}
  133[T@0] [index=34 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let37 (.?___let39 .?___let41, .?___let40))))] vpremise={{}}
  -134[T@0] [index=108 | lit:(not (= [|11111111111111111111111111111111|] (.?___let37 (.?___let39 .?___let41, .?___let40))))] vpremise={{}}
  135[T@0] [index=107 | lit:(= [|00000000000000000000000000000000|] .?___let35)] vpremise={{}}
  136[T@0] [index=35 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let20 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))] vpremise={{}}
  137[T@0] [index=106 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let20 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))) 1))] vpremise={{}}
  138[T@0] [index=36 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let5 (.?___let14 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))] vpremise={{}}
  139[T@0] [index=105 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let5 (.?___let14 (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))) 1))] vpremise={{}}
  140[T@0] [index=37 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let39 .?___let41, .?___let40)))] vpremise={{}}
  -141[T@0] [index=104 | lit:(not (= [|11111111111111111111111111111111|] (.?___let39 .?___let41, .?___let40)))] vpremise={{}}
  -142[T@0] [index=103 | lit:(not (= [|11111111111111111111111111111111|] (.?___let6 (.?___let37 (.?___let39 .?___let41, .?___let40)))))] vpremise={{}}
  143[T@0] [index=38 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let7 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))] vpremise={{}}
  144[T@0] [index=102 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let7 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))) 1))] vpremise={{}}
  145[T@0] [index=39 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat .?___let40))] vpremise={{}}
  -146[T@0] [index=101 | lit:(not (= [|11111111111111111111111111111111|] .?___let40))] vpremise={{}}
  147[T@0] [index=100 | lit:(= [|00000000000000000000000000000000|] .?___let38)] vpremise={{}}
  148[T@0] [index=40 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let8 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))] vpremise={{}}
  149[T@0] [index=99 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let8 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))) 1))] vpremise={{}}
  150[T@0] [index=41 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let9 (.?___let18 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))] vpremise={{}}
  151[T@0] [index=98 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let9 (.?___let18 (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))) 1))] vpremise={{}}
  -152[T@0] [index=97 | lit:(not (= T4_11167 [|11111111111111111111111111111111|]))] vpremise={{}}
  153[T@0] [index=96 | lit:(<= (bv2nat T4_11167) (bv2nat [|00000000000000000010101110001111|]))] vpremise={{}}
  -154[T@0] [index=95 | lit:(not (= T4_11167 [|00000000000000000010101110001111|]))] vpremise={{}}
  155[T@0] [index=42 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat T4_11167))] vpremise={{}}
  -156[T@0] [index=94 | lit:(not (= [|11111111111111111111111111111111|] (.?___let10 .?___let40)))] vpremise={{}}
  157[T@0] [index=43 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let11 (.?___let37 (.?___let39 .?___let41, .?___let40)))))] vpremise={{}}
  158[T@0] [index=93 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let11 (.?___let37 (.?___let39 .?___let41, .?___let40)))) 1))] vpremise={{}}
  159[T@0] [index=92 | lit:(= [|00000000000000000000000000000000|] .?___let41)] vpremise={{}}
  160[T@0] [index=44 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let12 (.?___let39 .?___let41, .?___let40))))] vpremise={{}}
  161[T@0] [index=91 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let12 (.?___let39 .?___let41, .?___let40))) 1))] vpremise={{}}
  162[T@0] [index=45 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let1 (.?___let6 (.?___let37 (.?___let39 .?___let41, .?___let40))))))] vpremise={{}}
  163[T@0] [index=90 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let1 (.?___let6 (.?___let37 (.?___let39 .?___let41, .?___let40))))) 1))] vpremise={{}}
  164[T@0] [index=46 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let2 .?___let40)))] vpremise={{}}
  165[T@0] [index=89 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let2 .?___let40)) 1))] vpremise={{}}
  166[T@0] [index=47 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat .?___let3))] vpremise={{}}
  167[T@0] [index=88 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat .?___let3) 1))] vpremise={{}}
  168[T@0] [index=48 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (bv2nat (.?___let4 (.?___let10 .?___let40))))] vpremise={{}}
  169[T@0] [index=87 | lit:(<= (bv2nat [|00000000000000000000000000000000|]) (- (bv2nat (.?___let4 (.?___let10 .?___let40))) 1))] vpremise={{}}
  170[T@0] [index=86 | lit:(= T2_10408 (bvor (int2bv[16] (* (bv2nat [|00000000|]@T1_10409) **(2,(bv2nat [|0000000000001000|])))) [|00000000|]@T1_10408))] vpremise={{}}
  171[T@0] [index=85 | lit:(= T2_10410 (bvor (int2bv[16] (* (bv2nat [|00000000|]@T1_10411) **(2,(bv2nat [|0000000000001000|])))) [|00000000|]@T1_10410))] vpremise={{}}
  172[T@0] [index=84 | lit:(= T2_10473 (bvor (int2bv[16] (* (bv2nat [|00000000|]@T1_10474) **(2,(bv2nat [|0000000000001000|])))) [|00000000|]@T1_10473))] vpremise={{}}
  173[T@0] [index=83 | lit:(= T2_10475 (bvor (int2bv[16] (* (bv2nat [|00000000|]@T1_10476) **(2,(bv2nat [|0000000000001000|])))) [|00000000|]@T1_10475))] vpremise={{}}
  174[T@0] [index=82 | lit:(= T2_10530 (bvor (int2bv[16] (* (bv2nat [|00000000|]@T1_10531) **(2,(bv2nat [|0000000000001000|])))) [|00000000|]@T1_10530))] vpremise={{}}
  175[T@0] [index=81 | lit:(= T2_10532 (bvor (int2bv[16] (* (bv2nat [|00000000|]@T1_10533) **(2,(bv2nat [|0000000000001000|])))) [|00000000|]@T1_10532))] vpremise={{}}
  176[T@0] [index=80 | lit:(= T2_10604 (bvor (int2bv[16] (* (bv2nat [|00000000|]@T1_10605) **(2,(bv2nat [|0000000000001000|])))) [|00000000|]@T1_10604))] vpremise={{}}
  177[T@0] [index=79 | lit:(= T2_10606 (bvor (int2bv[16] (* (bv2nat [|00000000|]@T1_10607) **(2,(bv2nat [|0000000000001000|])))) [|00000000|]@T1_10606))] vpremise={{}}
  178[T@0] [index=78 | lit:(= T2_10667 (bvor (int2bv[16] (* (bv2nat [|00000000|]@T1_10668) **(2,(bv2nat [|0000000000001000|])))) [|00000000|]@T1_10667))] vpremise={{}}
  179[T@0] [index=77 | lit:(= T2_10669 (bvor (int2bv[16] (* (bv2nat [|00000000|]@T1_10670) **(2,(bv2nat [|0000000000001000|])))) [|00000000|]@T1_10669))] vpremise={{}}
  180[T@0] [index=76 | lit:(= T2_10734 (bvor (int2bv[16] (* (bv2nat [|00000000|]@T1_10735) **(2,(bv2nat [|0000000000001000|])))) [|00000000|]@T1_10734))] vpremise={{}}
  181[T@0] [index=75 | lit:(= T2_10736 (bvor (int2bv[16] (* (bv2nat [|00000000|]@T1_10737) **(2,(bv2nat [|0000000000001000|])))) [|00000000|]@T1_10736))] vpremise={{}}
  182[T@0] [index=74 | lit:(= T4_11167 (bvor (int2bv[32] (* (bv2nat (bvor (int2bv[32] (* (bv2nat (bvor (int2bv[32] (* (bv2nat [|000000000000000000000000|]@T1_11170) **(2,(bv2nat [|00000000000000000000000000001000|])))) [|000000000000000000000000|]@T1_11169)) **(2,(bv2nat [|00000000000000000000000000001000|])))) [|000000000000000000000000|]@T1_11168)) **(2,(bv2nat [|00000000000000000000000000001000|])))) [|000000000000000000000000|]@T1_11167))] vpremise={{}}
  (or
    (and
      183[F@0] [index=49 | lit:(<= (% (+ (bv2nat (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) (% (+ (% (+ (% (+ (% (+ (bv2nat (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) (bv2nat [|00000000000000000000000001000000|])) 4294967296) (bv2nat .?___let22)) 4294967296) (bv2nat [|0000000000000000|]@T2_10736)) 4294967296) (% (- 4294967296 (bv2nat (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))) 4294967296)) 4294967296)) 4294967296) (- (bv2nat [|00000000000000000000000000000000|]) 1))] vpremise={{}}
      184 [index=-1 | lit:(= [|00000000000000000000000000000000|]^{31,31} (int2bv[32] (+ (bv2nat (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) (% (+ (% (+ (% (+ (% (+ (bv2nat (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) (bv2nat [|00000000000000000000000001000000|])) 4294967296) (bv2nat .?___let22)) 4294967296) (bv2nat [|0000000000000000|]@T2_10736)) 4294967296) (% (- 4294967296 (bv2nat (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))) 4294967296)) 4294967296)))^{31,31})] vpremise={{}}
    )
    (and
      185[T@0] [index=50 | lit:(= [|0|] [|00000000000000000000000000000000|]^{31,31})] vpremise={{}}
      186[T->0/C57] [index=73 | lit:(= [|1|] (int2bv[32] (+ (bv2nat (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) (% (+ (% (+ (% (+ (% (+ (bv2nat (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40))))))))))) (bv2nat [|00000000000000000000000001000000|])) 4294967296) (bv2nat .?___let22)) 4294967296) (bv2nat [|0000000000000000|]@T2_10736)) 4294967296) (% (- 4294967296 (bv2nat (.?___let26 (.?___let27 .?___let29, (.?___let28 (.?___let30 .?___let32, (.?___let31 (.?___let33 .?___let35, (.?___let34 (.?___let36 .?___let38, (.?___let37 (.?___let39 .?___let41, .?___let40)))))))))))) 4294967296)) 4294967296)))^{31,31})] vpremise={{}}
    )
  )
) not found in env.conj

; [Debug][Satml_frontend][unsat] Raised at AltErgoLib__Satml_frontend.Make.atoms_from_lazy_greedy.aux in file "src/lib/reasoners/satml_frontend.ml", line 667, characters 12-24
Called from Stdlib__Map.Make.fold in file "map.ml", line 321, characters 19-42
Called from AltErgoLib__Satml_frontend.Make.atoms_from_lazy_greedy in file "src/lib/reasoners/satml_frontend.ml", line 673, characters 6-109
Called from AltErgoLib__Satml_frontend.Make.instantiation.(fun) in file "src/lib/reasoners/satml_frontend.ml", line 974, characters 15-62
Called from Stdlib__List.fold_left in file "list.ml", line 121, characters 24-34
Called from AltErgoLib__Satml_frontend.Make.unsat_rec in file "src/lib/reasoners/satml_frontend.ml", line 1178, characters 27-58
Called from AltErgoLib__Satml_frontend.Make.unsat_rec_prem in file "src/lib/reasoners/satml_frontend.ml", line 1214, characters 6-31
Called from AltErgoLib__Satml_frontend.Make.unsat in file "src/lib/reasoners/satml_frontend.ml", line 1324, characters 6-41
File "src/lib/reasoners/satml_frontend.ml", line 667, characters 12-18: Assertion failed
Fatal error: exception File "src/lib/reasoners/satml_frontend.ml", line 1342, characters 6-12: Assertion failed
Raised at AltErgoLib__Satml_frontend.Make.unsat in file "src/lib/reasoners/satml_frontend.ml", line 1342, characters 6-18
Called from AltErgoLib__Frontend.Make.internal_query in file "src/lib/frontend/frontend.ml", line 395, characters 20-389
Called from AltErgoLib__Frontend.Make.process_decl in file "src/lib/frontend/frontend.ml", line 460, characters 20-65
Called from Stdlib__List.fold_left in file "list.ml", line 121, characters 24-34
Called from Alt_ergo_common__Solving_loop.main.solve.(fun) in file "src/bin/common/solving_loop.ml", line 173, characters 8-139
Called from Alt_ergo_common__Solving_loop.main.(fun) in file "src/bin/common/solving_loop.ml", line 806, characters 10-112
Called from Alt_ergo_common__Solving_loop.main.d_fe.(fun) in file "src/bin/common/solving_loop.ml" (inlined), line 962, characters 24-54
Called from Alt_ergo_common__Solving_loop.main.d_fe.(fun).op_i.(fun) in file "src/bin/common/solving_loop.ml", line 955, characters 49-55
Called from Dolmen_loop__Pipeline.Make.eval_op in file "src/loop/pipeline.ml", line 87, characters 8-17
Re-raised at Alt_ergo_common__Solving_loop.main.handle_exn in file "src/bin/common/solving_loop.ml", line 377, characters 18-54
Called from Dolmen_loop__Pipeline.Make.run in file "src/loop/pipeline.ml", line 187, characters 20-44
Called from Alt_ergo_common__Solving_loop.main.d_fe.(fun) in file "src/bin/common/solving_loop.ml", line 956, characters 8-340
Called from Stdlib__Fun.protect in file "fun.ml", line 33, characters 8-15
Re-raised at Stdlib__Fun.protect in file "fun.ml", line 38, characters 6-52
Called from Alt_ergo_common__Solving_loop.main.d_fe in file "src/bin/common/solving_loop.ml", line 930, characters 6-1023
Re-raised at Alt_ergo_common__Solving_loop.main.handle_exn in file "src/bin/common/solving_loop.ml", line 377, characters 18-54
Called from Alt_ergo_common__Solving_loop.main.d_fe in file "src/bin/common/solving_loop.ml", line 968, characters 13-35
Called from Dune__exe__Main_text in file "src/bin/text/main_text.ml", line 49, characters 2-22
@Stevendeo
Copy link
Collaborator

Indeed, I have independently reached the same error when implementing the steps limit (#936).

bclement-ocp added a commit to bclement-ocp/alt-ergo that referenced this issue Nov 17, 2023
This is a hotfix while we figure out a proper way forward for
OCamlPro#946 so that Alt-Ergo doesn't
randomly crash due to timeouts in the meantime.
Halbaroth pushed a commit that referenced this issue Nov 20, 2023
This is a hotfix while we figure out a proper way forward for
#946 so that Alt-Ergo doesn't
randomly crash due to timeouts in the meantime.
@Stevendeo Stevendeo self-assigned this Nov 27, 2023
@Stevendeo
Copy link
Collaborator

From the outside, we should not be able to use an environment that is in an invalid state (unknown reason = Timeout or StepLimit).
From the inside however, we can do some ugly stuff. Instead of throwing the model away, is to try anyway to produce a model and cleanly catch any exception. In that case, we should heavily document why we are allowing to work on a possibly invalid environment.

@bclement-ocp
Copy link
Collaborator Author

From the inside however, we can do some ugly stuff. Instead of throwing the model away, is to try anyway to produce a model and cleanly catch any exception. In that case, we should heavily document why we are allowing to work on a possibly invalid environment.

This requires that invalid environments would necessarily throw an exception when doing something incorrect, and would not be able to silently return an incorrect model (or, worse, to incorrectly report unsat, which we can do during model generation — but we could also disable that after a timeout). This might be true, but without combing the code to check, I'm not sure it is the case.

Hm. I am thinking that we might be able to do something by blocking the timeout signal while mutating the SAT (and re-instating it before doing theory propagation). This would allow to have "safe points" inside the SAT to raise the timeout exception, ensuring that we can't end up in an invalid state (along with a "hard" timeout that would bypass that, I guess). I have been looking at the satml module recently while investigating #901; I think I can try to write up a patch doing that.

@bclement-ocp
Copy link
Collaborator Author

Although actually I am not sure this would be very smart, because #798 intend to introduce (backtrackable) mutable state in the theory as well 🙃 What we can definitely do is have a "soft" timeout variant that we check periodically (e.g. after each propagation) instead of using a signal, which would be safe to resume from (but also we might overstep a bit).

To my knowledge this is how other solvers (at least Z3 and CVC5) do things — there is both a "hard" timeout similar to the one that we currently have that just kills the solver, and a "soft" timeout similar to what I describe above.

@Stevendeo
Copy link
Collaborator

silently return an incorrect model (or, worse, to incorrectly report unsat

It would not return silently an incorrect model, as the unknown reason would still be Timeout. We can warn the user that the model may be invalid in that case.
As for reporting unsat, we would not if we catch every exception, as the way satml works now to report such information is with the IUnsat exception.

I am thinking that we might be able to do something by blocking the timeout signal while mutating the SAT

This looks very dangerous considering there may be a large set of side effects to perform in order to have a consistent environment and there is no easy way to bound the calculation time of these effects (maybe I'm wrong, but I have a bad feeling about this).

@Stevendeo
Copy link
Collaborator

I think I can try to write up a patch doing that.

I will maybe wait for this before starting to work on this issue

@bclement-ocp
Copy link
Collaborator Author

silently return an incorrect model (or, worse, to incorrectly report unsat

It would not return silently an incorrect model, as the unknown reason would still be Timeout. We can warn the user that the model may be invalid in that case. As for reporting unsat, we would not if we catch every exception, as the way satml works now to report such information is with the IUnsat exception.

That is true, it should work. I don't think we would need an additional warning, either. Hm. I think in the abstract I would prefer using a soft timer (i.e. regularly checking that we have not overstepped the limit) because it feels more stable (does not depend on whether the timeout was reached within a small critical section) but it is also more work, so your suggestion is probably better in the current situation.

This looks very dangerous considering there may be a large set of side effects to perform in order to have a consistent environment and there is no easy way to bound the calculation time of these effects (maybe I'm wrong, but I have a bad feeling about this).

To be clear I was not proposing we only do this, but to do it as part of a two-timers scenario (so that if the "outer" time limit is exceeded we just full stop everything as we do currently). But as I said above, if we go for a two-timers scenario, explicit checking of the soft timer is better.

I think I can try to write up a patch doing that.
I will maybe wait for this before starting to work on this issue

This was an offer but I did not start working on it, and we have since determined that it was not the way forward, so go ahead!

@Stevendeo
Copy link
Collaborator

We can warn the user that the model may be invalid in that case

Actually, we should always warn the user if we don't test the model, as there is no guarantee the model is sound (though I agree the model after timeout has less chance to be sound than a model computed in time)

@bclement-ocp
Copy link
Collaborator Author

Actually, we should always warn the user if we don't test the model, as there is no guarantee the model is sound (though I agree the model after timeout has less chance to be sound than a model computed in time)

The user is warned by the fact that we reply "unknown" and not "sat", though. There are no requirements on models produced after an "unknown" reply; the SMT-LIB states explicitly page 64 that "The model A is required to satisfy all currently asserted
formulas and current assumptions only if the most recent check command reported sat."

Stevendeo added a commit to Stevendeo/alt-ergo that referenced this issue Nov 27, 2023
Timeouts were disabled in satml_frontend (check OCamlPro#946); this PR re-enables
them with a generic exception catcher wrapping calls to a possibly invalid
environment.
@Stevendeo Stevendeo mentioned this issue Nov 27, 2023
@bclement-ocp
Copy link
Collaborator Author

Following discussion at the users' club meeting: we should implement a soft timeout. The right place to check for the soft timeout is probably roughly where we increment the step counters.

(Taking this one)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants