(set-option :print-success false)
(set-info :smt-lib-version 2.0)
(set-option :AUTO_CONFIG false)
(set-option :MODEL_HIDE_UNUSED_PARTITIONS false)
(set-option :MODEL_V2 true)
(set-option :ASYNC_COMMANDS false)
(set-option :PHASE_SELECTION 0)
(set-option :RESTART_STRATEGY 0)
(set-option :RESTART_FACTOR |1.5|)
(set-option :ARITH_RANDOM_INITIAL_VALUE true)
(set-option :CASE_SPLIT 3)
(set-option :DELAY_UNITS true)
(set-option :DELAY_UNITS_THRESHOLD 16)
(set-option :NNF_SK_HACK true)
(set-option :MBQI false)
(set-option :QI_EAGER_THRESHOLD 100)
(set-option :QI_COST |"(+ weight generation)"|)
(set-option :TYPE_CHECK true)
(set-option :BV_REFLECT true)
; done setting options
; Boogie universal background predicate
; Copyright (c) 2004-2010, Microsoft Corp.
(set-info :category "industrial")
(declare-sort |T@U| 0)
(declare-sort |T@T| 0)
(declare-fun int_div (Int Int) Int)
(declare-fun int_mod (Int Int) Int)
(declare-fun UOrdering2 (|T@U| |T@U|) Bool)
(declare-fun UOrdering3 (|T@T| |T@U| |T@U|) Bool)
(declare-fun tickleBool (Bool) Bool)
(assert (and (tickleBool true) (tickleBool false)))
(declare-fun Ctor (T@T) Int)
(declare-fun intType () T@T)
(declare-fun boolType () T@T)
(declare-fun int_2_U (Int) T@U)
(declare-fun U_2_int (T@U) Int)
(declare-fun type (T@U) T@T)
(declare-fun bool_2_U (Bool) T@U)
(declare-fun U_2_bool (T@U) Bool)
(declare-fun f (Int) Int)
(declare-fun D () Int)
(declare-fun MapType0Type (T@T T@T) T@T)
(declare-fun MapType0TypeInv0 (T@T) T@T)
(declare-fun MapType0TypeInv1 (T@T) T@T)
(declare-fun MapType0Select (T@U T@U) T@U)
(declare-fun MapType0Store (T@U T@U T@U) T@U)
(declare-fun M () T@U)
(declare-fun %lbl%+92 () Bool)
(declare-fun a () Int)
(declare-fun c () Int)
(declare-fun b () Int)
(declare-fun %lbl%@193 () Bool)
(declare-fun t () Int)
(declare-fun %lbl%+127 () Bool)
(assert (and
(= (Ctor intType) 0)
(= (Ctor boolType) 1)
(forall ((arg0 Int) ) (! (= (U_2_int (int_2_U arg0)) arg0)
:qid |typeInv:U_2_int|
:pattern ( (int_2_U arg0))
))
(forall ((x T@U) ) (! (=> (= (type x) intType) (= (int_2_U (U_2_int x)) x))
:qid |cast:U_2_int|
:pattern ( (U_2_int x))
))
(forall ((arg0@@0 Int) ) (! (= (type (int_2_U arg0@@0)) intType)
:qid |funType:int_2_U|
:pattern ( (int_2_U arg0@@0))
))
(forall ((arg0@@1 Bool) ) (! (= (U_2_bool (bool_2_U arg0@@1)) arg0@@1)
:qid |typeInv:U_2_bool|
:pattern ( (bool_2_U arg0@@1))
))
(forall ((x@@0 T@U) ) (! (=> (= (type x@@0) boolType) (= (bool_2_U (U_2_bool x@@0)) x@@0))
:qid |cast:U_2_bool|
:pattern ( (U_2_bool x@@0))
))
(forall ((arg0@@2 Bool) ) (! (= (type (bool_2_U arg0@@2)) boolType)
:qid |funType:bool_2_U|
:pattern ( (bool_2_U arg0@@2))
))))
(assert (forall ((x@@1 T@U) ) (! (UOrdering2 x@@1 x@@1)
:qid |bg:subtype-refl|
:no-pattern (U_2_int x@@1)
:no-pattern (U_2_bool x@@1)
)))
(assert (forall ((x@@2 T@U) (y T@U) (z T@U) ) (! (let ((alpha (type x@@2)))
(=> (and
(= (type y) alpha)
(= (type z) alpha)
(UOrdering2 x@@2 y)
(UOrdering2 y z)) (UOrdering2 x@@2 z)))
:qid |bg:subtype-trans|
:pattern ( (UOrdering2 x@@2 y) (UOrdering2 y z))
)))
(assert (forall ((x@@3 T@U) (y@@0 T@U) ) (! (let ((alpha@@0 (type x@@3)))
(=> (= (type y@@0) alpha@@0) (=> (and
(UOrdering2 x@@3 y@@0)
(UOrdering2 y@@0 x@@3)) (= x@@3 y@@0))))
:qid |bg:subtype-antisymm|
:pattern ( (UOrdering2 x@@3 y@@0) (UOrdering2 y@@0 x@@3))
)))
(assert (forall ((n Int) ) (! (= (f n) (* n D))
:qid |multipli.3:16|
:skolemid |0|
:pattern ( (f n))
)))
(assert (and
(forall ((arg0@@3 T@T) (arg1 T@T) ) (! (= (Ctor (MapType0Type arg0@@3 arg1)) 2)
:qid |ctor:MapType0Type|
))
(forall ((arg0@@4 T@T) (arg1@@0 T@T) ) (! (= (MapType0TypeInv0 (MapType0Type arg0@@4 arg1@@0)) arg0@@4)
:qid |typeInv:MapType0TypeInv0|
:pattern ( (MapType0Type arg0@@4 arg1@@0))
))
(forall ((arg0@@5 T@T) (arg1@@1 T@T) ) (! (= (MapType0TypeInv1 (MapType0Type arg0@@5 arg1@@1)) arg1@@1)
:qid |typeInv:MapType0TypeInv1|
:pattern ( (MapType0Type arg0@@5 arg1@@1))
))
(forall ((arg0@@6 T@U) (arg1@@2 T@U) ) (! (let ((aVar1 (MapType0TypeInv1 (type arg0@@6))))
(= (type (MapType0Select arg0@@6 arg1@@2)) aVar1))
:qid |funType:MapType0Select|
:pattern ( (MapType0Select arg0@@6 arg1@@2))
))
(forall ((arg0@@7 T@U) (arg1@@3 T@U) (arg2 T@U) ) (! (let ((aVar1@@0 (type arg2)))
(let ((aVar0 (type arg1@@3)))
(= (type (MapType0Store arg0@@7 arg1@@3 arg2)) (MapType0Type aVar0 aVar1@@0))))
:qid |funType:MapType0Store|
:pattern ( (MapType0Store arg0@@7 arg1@@3 arg2))
))
(forall ((m T@U) (x0 T@U) (val T@U) ) (! (let ((aVar1@@1 (MapType0TypeInv1 (type m))))
(=> (= (type val) aVar1@@1) (= (MapType0Select (MapType0Store m x0 val) x0) val)))
:qid |mapAx0:MapType0Select|
:weight 0
))
(forall ((val@@0 T@U) (m@@0 T@U) (x0@@0 T@U) (y0 T@U) ) (! (or
(= x0@@0 y0)
(= (MapType0Select (MapType0Store m@@0 x0@@0 val@@0) y0) (MapType0Select m@@0 y0)))
:qid |mapAx1:MapType0Select:0|
:weight 0
))
(forall ((val@@1 T@U) (m@@1 T@U) (x0@@1 T@U) (y0@@0 T@U) ) (! (or
true
(= (MapType0Select (MapType0Store m@@1 x0@@1 val@@1) y0@@0) (MapType0Select m@@1 y0@@0)))
:qid |mapAx2:MapType0Select|
:weight 0
))
(= (type M) (MapType0Type intType intType))))
(push 1)
(set-info :boogie-vc-id test)
(assert (not
(let ((anon0_correct (=> (! (and %lbl%+92 true) :lblpos +92) (=> (and
(< 0 a)
(< (* 1000 a) (f 1))) (=> (and
(< 0 c)
(< (* 1000 c) (f 1))
(= (* (f 100) b) (* a c))) (and
(! (or %lbl%@193 (> (U_2_int (MapType0Select M (int_2_U t))) 0)) :lblneg @193)
(=> (> (U_2_int (MapType0Select M (int_2_U t))) 0) true)))))))
(let ((PreconditionGeneratedEntry_correct (=> (! (and %lbl%+127 true) :lblpos +127) anon0_correct)))
PreconditionGeneratedEntry_correct))
))
(check-sat)