Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

Created January 20, 2015 13:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/8f8b6cad40e7b3c2b471 to your computer and use it in GitHub Desktop.
Save anonymous/8f8b6cad40e7b3c2b471 to your computer and use it in GitHub Desktop.
(get-info :version)
; (:version "4.3.2")
; (set-option :print-success true) ; Boogie: false
(set-option :global-decls true) ; Boogie: default
(set-option :auto_config false) ; Usually a good idea
(set-option :smt.mbqi false)
(set-option :model false)
(set-option :model.v2 true)
; (set-option :produce-models true)
; (set-option :model.compact true)
(set-option :smt.phase_selection 0)
(set-option :smt.restart_strategy 0)
(set-option :smt.restart_factor |1.5|)
(set-option :smt.arith.random_initial_value true)
(set-option :smt.case_split 3)
(set-option :smt.delay_units true)
(set-option :smt.delay_units_threshold 16)
(set-option :nnf.sk_hack true)
(set-option :smt.qi.eager_threshold 100)
(set-option :smt.qi.cost "(+ weight generation)")
(set-option :type_check true)
(set-option :smt.bv.reflect true)
(set-option :sat.random_seed 0)
; (set-option :combined_solver.solver2_timeout 100)
; (set-option :smt.refine_inj_axioms false)
(declare-datatypes () ((
$Snap $Snap.unit
($Snap.combine ($Snap.first $Snap) ($Snap.second $Snap)))))
(declare-sort $Ref)
(declare-const $Ref.null $Ref)
(define-sort $Perm () Real)
(define-const $Perm.Write $Perm 1.0)
(define-const $Perm.No $Perm 0.0)
(define-fun $Perm.isValidVar ((p $Perm)) Bool
(<= $Perm.No p))
(define-fun $Perm.isReadVar ((p $Perm) (ub $Perm)) Bool
(and ($Perm.isValidVar p)
(not (= p $Perm.No))
(< p $Perm.Write)))
(define-fun $Perm.min ((p1 $Perm) (p2 $Perm)) Real
(ite (<= p1 p2) p1 p2))
(define-fun $Math.min ((a Int) (b Int)) Int
(ite (<= a b) a b))
(define-fun $Math.clip ((a Int)) Int
(ite (< a 0) 0 a))
(push) ; 1
(declare-sort $Seq<$Ref>)
(declare-sort $Seq<Int>)
(declare-sort $Set<$Seq<$Ref>>)
(declare-sort $Set<Int>)
(declare-sort $Set<$Ref>)
(declare-sort $FVF<$Ref>)
(declare-sort $FVF<$Seq<$Ref>>)
(declare-sort $FVF<Int>)
; /dafny_axioms/sets_declarations_dafny.smt2 [Seq[Ref]]
(declare-fun $Set.in ($Seq<$Ref> $Set<$Seq<$Ref>>) Bool)
(declare-fun $Set.card ($Set<$Seq<$Ref>>) Int)
(declare-fun $Set.empty<$Seq<$Ref>> () $Set<$Seq<$Ref>>)
(declare-fun $Set.singleton ($Seq<$Ref>) $Set<$Seq<$Ref>>)
(declare-fun $Set.unionone ($Set<$Seq<$Ref>> $Seq<$Ref>) $Set<$Seq<$Ref>>)
(declare-fun $Set.union ($Set<$Seq<$Ref>> $Set<$Seq<$Ref>>) $Set<$Seq<$Ref>>)
(declare-fun $Set.disjoint ($Set<$Seq<$Ref>> $Set<$Seq<$Ref>>) Bool)
(declare-fun $Set.difference ($Set<$Seq<$Ref>> $Set<$Seq<$Ref>>) $Set<$Seq<$Ref>>)
(declare-fun $Set.intersection ($Set<$Seq<$Ref>> $Set<$Seq<$Ref>>) $Set<$Seq<$Ref>>)
(declare-fun $Set.subset ($Set<$Seq<$Ref>> $Set<$Seq<$Ref>>) Bool)
(declare-fun $Set.equal ($Set<$Seq<$Ref>> $Set<$Seq<$Ref>>) Bool)
; /dafny_axioms/sets_declarations_dafny.smt2 [Int]
(declare-fun $Set.in (Int $Set<Int>) Bool)
(declare-fun $Set.card ($Set<Int>) Int)
(declare-fun $Set.empty<Int> () $Set<Int>)
(declare-fun $Set.singleton (Int) $Set<Int>)
(declare-fun $Set.unionone ($Set<Int> Int) $Set<Int>)
(declare-fun $Set.union ($Set<Int> $Set<Int>) $Set<Int>)
(declare-fun $Set.disjoint ($Set<Int> $Set<Int>) Bool)
(declare-fun $Set.difference ($Set<Int> $Set<Int>) $Set<Int>)
(declare-fun $Set.intersection ($Set<Int> $Set<Int>) $Set<Int>)
(declare-fun $Set.subset ($Set<Int> $Set<Int>) Bool)
(declare-fun $Set.equal ($Set<Int> $Set<Int>) Bool)
; /dafny_axioms/sets_declarations_dafny.smt2 [Ref]
(declare-fun $Set.in ($Ref $Set<$Ref>) Bool)
(declare-fun $Set.card ($Set<$Ref>) Int)
(declare-fun $Set.empty<$Ref> () $Set<$Ref>)
(declare-fun $Set.singleton ($Ref) $Set<$Ref>)
(declare-fun $Set.unionone ($Set<$Ref> $Ref) $Set<$Ref>)
(declare-fun $Set.union ($Set<$Ref> $Set<$Ref>) $Set<$Ref>)
(declare-fun $Set.disjoint ($Set<$Ref> $Set<$Ref>) Bool)
(declare-fun $Set.difference ($Set<$Ref> $Set<$Ref>) $Set<$Ref>)
(declare-fun $Set.intersection ($Set<$Ref> $Set<$Ref>) $Set<$Ref>)
(declare-fun $Set.subset ($Set<$Ref> $Set<$Ref>) Bool)
(declare-fun $Set.equal ($Set<$Ref> $Set<$Ref>) Bool)
; /dafny_axioms/sequences_declarations_dafny.smt2 [Ref]
(declare-fun $Seq.length ($Seq<$Ref>) Int)
(declare-fun $Seq.empty<$Ref> () $Seq<$Ref>)
(declare-fun $Seq.singleton ($Ref) $Seq<$Ref>)
(declare-fun $Seq.build ($Seq<$Ref> $Ref) $Seq<$Ref>)
(declare-fun $Seq.index ($Seq<$Ref> Int) $Ref)
(declare-fun $Seq.append ($Seq<$Ref> $Seq<$Ref>) $Seq<$Ref>)
(declare-fun $Seq.update ($Seq<$Ref> Int $Ref) $Seq<$Ref>)
(declare-fun $Seq.contains ($Seq<$Ref> $Ref) Bool)
(declare-fun $Seq.take ($Seq<$Ref> Int) $Seq<$Ref>)
(declare-fun $Seq.drop ($Seq<$Ref> Int) $Seq<$Ref>)
(declare-fun $Seq.equal ($Seq<$Ref> $Seq<$Ref>) Bool)
(declare-fun $Seq.sameuntil ($Seq<$Ref> $Seq<$Ref> Int) Bool)
; /dafny_axioms/sequences_declarations_dafny.smt2 [Int]
(declare-fun $Seq.length ($Seq<Int>) Int)
(declare-fun $Seq.empty<Int> () $Seq<Int>)
(declare-fun $Seq.singleton (Int) $Seq<Int>)
(declare-fun $Seq.build ($Seq<Int> Int) $Seq<Int>)
(declare-fun $Seq.index ($Seq<Int> Int) Int)
(declare-fun $Seq.append ($Seq<Int> $Seq<Int>) $Seq<Int>)
(declare-fun $Seq.update ($Seq<Int> Int Int) $Seq<Int>)
(declare-fun $Seq.contains ($Seq<Int> Int) Bool)
(declare-fun $Seq.take ($Seq<Int> Int) $Seq<Int>)
(declare-fun $Seq.drop ($Seq<Int> Int) $Seq<Int>)
(declare-fun $Seq.equal ($Seq<Int> $Seq<Int>) Bool)
(declare-fun $Seq.sameuntil ($Seq<Int> $Seq<Int> Int) Bool)
; /dafny_axioms/sequences_int_declarations_dafny.smt2
(declare-fun $Seq.range (Int Int) $Seq<Int>)
(assert true)
; /field_value_functions_declarations.smt2 [dst: Seq[Ref]]
(declare-fun $FVF.domain_dst ($FVF<$Seq<$Ref>>) $Set<$Ref>)
(declare-fun $FVF.lookup_dst ($FVF<$Seq<$Ref>> $Ref) $Seq<$Ref>)
; /field_value_functions_declarations.smt2 [src: Seq[Ref]]
(declare-fun $FVF.domain_src ($FVF<$Seq<$Ref>>) $Set<$Ref>)
(declare-fun $FVF.lookup_src ($FVF<$Seq<$Ref>> $Ref) $Seq<$Ref>)
; /field_value_functions_declarations.smt2 [Integer_value: Int]
(declare-fun $FVF.domain_Integer_value ($FVF<Int>) $Set<$Ref>)
(declare-fun $FVF.lookup_Integer_value ($FVF<Int> $Ref) Int)
; /dafny_axioms/sequences_axioms_dafny.smt2 [Ref]
(assert (forall ((s $Seq<$Ref>) ) (! (<= 0 ($Seq.length s))
:pattern ( ($Seq.length s))
)))
(assert (= ($Seq.length $Seq.empty<$Ref>) 0))
(assert (forall ((s $Seq<$Ref>) ) (! (=> (= ($Seq.length s) 0) (= s $Seq.empty<$Ref>))
:pattern ( ($Seq.length s))
)))
(assert (forall ((t $Ref) ) (! (= ($Seq.length ($Seq.singleton t)) 1)
:pattern ( ($Seq.length ($Seq.singleton t)))
)))
(assert (forall ((s $Seq<$Ref>) (v $Ref) ) (! (= ($Seq.length ($Seq.build s v)) (+ 1 ($Seq.length s)))
:pattern ( ($Seq.length ($Seq.build s v)))
)))
(assert (forall ((s $Seq<$Ref>) (i Int) (v $Ref) ) (! (and
(=> (= i ($Seq.length s)) (= ($Seq.index ($Seq.build s v) i) v))
(=> (not (= i ($Seq.length s))) (= ($Seq.index ($Seq.build s v) i) ($Seq.index s i))))
:pattern ( ($Seq.index ($Seq.build s v) i))
)))
(assert (forall ((s0 $Seq<$Ref>) (s1 $Seq<$Ref>) ) (! (= ($Seq.length ($Seq.append s0 s1)) (+ ($Seq.length s0) ($Seq.length s1)))
:pattern ( ($Seq.length ($Seq.append s0 s1)))
)))
(assert (forall ((t $Ref) ) (! (= ($Seq.index ($Seq.singleton t) 0) t)
:pattern ( ($Seq.index ($Seq.singleton t) 0))
)))
(assert (forall ((s0 $Seq<$Ref>) (s1 $Seq<$Ref>) (n Int) ) (! (and
(=> (< n ($Seq.length s0)) (= ($Seq.index ($Seq.append s0 s1) n) ($Seq.index s0 n)))
(=> (<= ($Seq.length s0) n) (= ($Seq.index ($Seq.append s0 s1) n) ($Seq.index s1 (- n ($Seq.length s0))))))
:pattern ( ($Seq.index ($Seq.append s0 s1) n))
)))
(assert (forall ((s $Seq<$Ref>) (i Int) (v $Ref) ) (! (=> (and
(<= 0 i)
(< i ($Seq.length s))) (= ($Seq.length ($Seq.update s i v)) ($Seq.length s)))
:pattern ( ($Seq.length ($Seq.update s i v)))
)))
(assert (forall ((s $Seq<$Ref>) (i Int) (v $Ref) (n Int) ) (! (=> (and
(<= 0 n)
(< n ($Seq.length s))) (and
(=> (= i n) (= ($Seq.index ($Seq.update s i v) n) v))
(=> (not (= i n)) (= ($Seq.index ($Seq.update s i v) n) ($Seq.index s n)))))
:pattern ( ($Seq.index ($Seq.update s i v) n))
)))
(assert (forall ((s $Seq<$Ref>) (x $Ref) ) (! (and
(=> ($Seq.contains s x) (exists ((i Int) ) (! (and
(<= 0 i)
(< i ($Seq.length s))
(= ($Seq.index s i) x))
:pattern ( ($Seq.index s i))
)))
(=> (exists ((i Int) ) (! (and
(<= 0 i)
(< i ($Seq.length s))
(= ($Seq.index s i) x))
:pattern ( ($Seq.index s i))
)) ($Seq.contains s x)))
:pattern ( ($Seq.contains s x))
)))
(assert (forall ((x $Ref) ) (! (not ($Seq.contains $Seq.empty<$Ref> x))
:pattern ( ($Seq.contains $Seq.empty<$Ref> x))
)))
(assert (forall ((s0 $Seq<$Ref>) (s1 $Seq<$Ref>) (x $Ref) ) (! (and
(=> ($Seq.contains ($Seq.append s0 s1) x) (or
($Seq.contains s0 x)
($Seq.contains s1 x)))
(=> (or
($Seq.contains s0 x)
($Seq.contains s1 x)) ($Seq.contains ($Seq.append s0 s1) x)))
:pattern ( ($Seq.contains ($Seq.append s0 s1) x))
)))
(assert (forall ((s $Seq<$Ref>) (v $Ref) (x $Ref) ) (! (and
(=> ($Seq.contains ($Seq.build s v) x) (or
(= v x)
($Seq.contains s x)))
(=> (or
(= v x)
($Seq.contains s x)) ($Seq.contains ($Seq.build s v) x)))
:pattern ( ($Seq.contains ($Seq.build s v) x))
)))
(assert (forall ((s $Seq<$Ref>) (n Int) (x $Ref) ) (! (and
(=> ($Seq.contains ($Seq.take s n) x) (exists ((i Int) ) (! (and
(<= 0 i)
(< i n)
(< i ($Seq.length s))
(= ($Seq.index s i) x))
:pattern ( ($Seq.index s i))
)))
(=> (exists ((i Int) ) (! (and
(<= 0 i)
(< i n)
(< i ($Seq.length s))
(= ($Seq.index s i) x))
:pattern ( ($Seq.index s i))
)) ($Seq.contains ($Seq.take s n) x)))
:pattern ( ($Seq.contains ($Seq.take s n) x))
)))
(assert (forall ((s $Seq<$Ref>) (n Int) (x $Ref) ) (! (and
(=> ($Seq.contains ($Seq.drop s n) x) (exists ((i Int) ) (! (and
(<= 0 n)
(<= n i)
(< i ($Seq.length s))
(= ($Seq.index s i) x))
:pattern ( ($Seq.index s i))
)))
(=> (exists ((i Int) ) (! (and
(<= 0 n)
(<= n i)
(< i ($Seq.length s))
(= ($Seq.index s i) x))
:pattern ( ($Seq.index s i))
)) ($Seq.contains ($Seq.drop s n) x)))
:pattern ( ($Seq.contains ($Seq.drop s n) x))
)))
(assert (forall ((s0 $Seq<$Ref>) (s1 $Seq<$Ref>) ) (! (and
(=> ($Seq.equal s0 s1) (and
(= ($Seq.length s0) ($Seq.length s1))
(forall ((j Int) ) (! (=> (and
(<= 0 j)
(< j ($Seq.length s0))) (= ($Seq.index s0 j) ($Seq.index s1 j)))
:pattern ( ($Seq.index s0 j))
:pattern ( ($Seq.index s1 j))
))))
(=> (and
(= ($Seq.length s0) ($Seq.length s1))
(forall ((j Int) ) (! (=> (and
(<= 0 j)
(< j ($Seq.length s0))) (= ($Seq.index s0 j) ($Seq.index s1 j)))
:pattern ( ($Seq.index s0 j))
:pattern ( ($Seq.index s1 j))
))) ($Seq.equal s0 s1)))
:pattern ( ($Seq.equal s0 s1))
)))
(assert (forall ((a $Seq<$Ref>) (b $Seq<$Ref>) ) (! (=> ($Seq.equal a b) (= a b))
:pattern ( ($Seq.equal a b))
)))
(assert (forall ((s0 $Seq<$Ref>) (s1 $Seq<$Ref>) (n Int) ) (! (and
(=> ($Seq.sameuntil s0 s1 n) (forall ((j Int) ) (! (=> (and
(<= 0 j)
(< j n)) (= ($Seq.index s0 j) ($Seq.index s1 j)))
:pattern ( ($Seq.index s0 j))
:pattern ( ($Seq.index s1 j))
)))
(=> (forall ((j Int) ) (! (=> (and
(<= 0 j)
(< j n)) (= ($Seq.index s0 j) ($Seq.index s1 j)))
:pattern ( ($Seq.index s0 j))
:pattern ( ($Seq.index s1 j))
)) ($Seq.sameuntil s0 s1 n)))
:pattern ( ($Seq.sameuntil s0 s1 n))
)))
(assert (forall ((s $Seq<$Ref>) (n Int) ) (! (=> (<= 0 n) (and
(=> (<= n ($Seq.length s)) (= ($Seq.length ($Seq.take s n)) n))
(=> (< ($Seq.length s) n) (= ($Seq.length ($Seq.take s n)) ($Seq.length s)))))
:pattern ( ($Seq.length ($Seq.take s n)))
)))
(assert (forall ((s $Seq<$Ref>) (n Int) (j Int) ) (! (=> (and
(<= 0 j)
(< j n)
(< j ($Seq.length s))) (= ($Seq.index ($Seq.take s n) j) ($Seq.index s j)))
:pattern ( ($Seq.index ($Seq.take s n) j))
)))
(assert (forall ((s $Seq<$Ref>) (n Int) ) (! (=> (<= 0 n) (and
(=> (<= n ($Seq.length s)) (= ($Seq.length ($Seq.drop s n)) (- ($Seq.length s) n)))
(=> (< ($Seq.length s) n) (= ($Seq.length ($Seq.drop s n)) 0))))
:pattern ( ($Seq.length ($Seq.drop s n)))
)))
(assert (forall ((s $Seq<$Ref>) (n Int) (j Int) ) (! (=> (and
(<= 0 n)
(<= 0 j)
(< j (- ($Seq.length s) n))) (= ($Seq.index ($Seq.drop s n) j) ($Seq.index s (+ j n))))
:pattern ( ($Seq.index ($Seq.drop s n) j))
)))
(assert (forall ((s $Seq<$Ref>) (i Int) (v $Ref) (n Int) ) (! (=> (and
(<= 0 i)
(< i n)
(<= n ($Seq.length s))) (= ($Seq.take ($Seq.update s i v) n) ($Seq.update ($Seq.take s n) i v)))
:pattern ( ($Seq.take ($Seq.update s i v) n))
)))
(assert (forall ((s $Seq<$Ref>) (i Int) (v $Ref) (n Int) ) (! (=> (and
(<= n i)
(< i ($Seq.length s))) (= ($Seq.take ($Seq.update s i v) n) ($Seq.take s n)))
:pattern ( ($Seq.take ($Seq.update s i v) n))
)))
(assert (forall ((s $Seq<$Ref>) (i Int) (v $Ref) (n Int) ) (! (=> (and
(<= 0 n)
(<= n i)
(< i ($Seq.length s))) (= ($Seq.drop ($Seq.update s i v) n) ($Seq.update ($Seq.drop s n) (- i n) v)))
:pattern ( ($Seq.drop ($Seq.update s i v) n))
)))
(assert (forall ((s $Seq<$Ref>) (i Int) (v $Ref) (n Int) ) (! (=> (and
(<= 0 i)
(< i n)
(< n ($Seq.length s))) (= ($Seq.drop ($Seq.update s i v) n) ($Seq.drop s n)))
:pattern ( ($Seq.drop ($Seq.update s i v) n))
)))
(assert (forall ((s $Seq<$Ref>) (v $Ref) (n Int) ) (! (=> (and
(<= 0 n)
(<= n ($Seq.length s))) (= ($Seq.drop ($Seq.build s v) n) ($Seq.build ($Seq.drop s n) v)))
:pattern ( ($Seq.drop ($Seq.build s v) n))
)))
(assert (forall ((s $Seq<$Ref>) (n Int) ) (! (=> (= n 0) (= ($Seq.drop s n) s))
:pattern ( ($Seq.drop s n))
)))
(assert (forall ((s $Seq<$Ref>) (n Int) ) (! (=> (= n 0) (= ($Seq.take s n) $Seq.empty<$Ref>))
:pattern ( ($Seq.take s n))
)))
(assert (forall ((s $Seq<$Ref>) (m Int) (n Int) ) (! (=> (and
(<= 0 m)
(<= 0 n)
(<= (+ m n) ($Seq.length s))) (= ($Seq.drop ($Seq.drop s m) n) ($Seq.drop s (+ m n))))
:pattern ( ($Seq.drop ($Seq.drop s m) n))
)))
(assert (forall ((x $Ref) (y $Ref)) (!
(iff
($Seq.contains ($Seq.singleton x) y)
(= x y))
:pattern (($Seq.contains ($Seq.singleton x) y))
)))
; /dafny_axioms/sequences_axioms_dafny.smt2 [Int]
(assert (forall ((s $Seq<Int>) ) (! (<= 0 ($Seq.length s))
:pattern ( ($Seq.length s))
)))
(assert (= ($Seq.length $Seq.empty<Int>) 0))
(assert (forall ((s $Seq<Int>) ) (! (=> (= ($Seq.length s) 0) (= s $Seq.empty<Int>))
:pattern ( ($Seq.length s))
)))
(assert (forall ((t Int) ) (! (= ($Seq.length ($Seq.singleton t)) 1)
:pattern ( ($Seq.length ($Seq.singleton t)))
)))
(assert (forall ((s $Seq<Int>) (v Int) ) (! (= ($Seq.length ($Seq.build s v)) (+ 1 ($Seq.length s)))
:pattern ( ($Seq.length ($Seq.build s v)))
)))
(assert (forall ((s $Seq<Int>) (i Int) (v Int) ) (! (and
(=> (= i ($Seq.length s)) (= ($Seq.index ($Seq.build s v) i) v))
(=> (not (= i ($Seq.length s))) (= ($Seq.index ($Seq.build s v) i) ($Seq.index s i))))
:pattern ( ($Seq.index ($Seq.build s v) i))
)))
(assert (forall ((s0 $Seq<Int>) (s1 $Seq<Int>) ) (! (= ($Seq.length ($Seq.append s0 s1)) (+ ($Seq.length s0) ($Seq.length s1)))
:pattern ( ($Seq.length ($Seq.append s0 s1)))
)))
(assert (forall ((t Int) ) (! (= ($Seq.index ($Seq.singleton t) 0) t)
:pattern ( ($Seq.index ($Seq.singleton t) 0))
)))
(assert (forall ((s0 $Seq<Int>) (s1 $Seq<Int>) (n Int) ) (! (and
(=> (< n ($Seq.length s0)) (= ($Seq.index ($Seq.append s0 s1) n) ($Seq.index s0 n)))
(=> (<= ($Seq.length s0) n) (= ($Seq.index ($Seq.append s0 s1) n) ($Seq.index s1 (- n ($Seq.length s0))))))
:pattern ( ($Seq.index ($Seq.append s0 s1) n))
)))
(assert (forall ((s $Seq<Int>) (i Int) (v Int) ) (! (=> (and
(<= 0 i)
(< i ($Seq.length s))) (= ($Seq.length ($Seq.update s i v)) ($Seq.length s)))
:pattern ( ($Seq.length ($Seq.update s i v)))
)))
(assert (forall ((s $Seq<Int>) (i Int) (v Int) (n Int) ) (! (=> (and
(<= 0 n)
(< n ($Seq.length s))) (and
(=> (= i n) (= ($Seq.index ($Seq.update s i v) n) v))
(=> (not (= i n)) (= ($Seq.index ($Seq.update s i v) n) ($Seq.index s n)))))
:pattern ( ($Seq.index ($Seq.update s i v) n))
)))
(assert (forall ((s $Seq<Int>) (x Int) ) (! (and
(=> ($Seq.contains s x) (exists ((i Int) ) (! (and
(<= 0 i)
(< i ($Seq.length s))
(= ($Seq.index s i) x))
:pattern ( ($Seq.index s i))
)))
(=> (exists ((i Int) ) (! (and
(<= 0 i)
(< i ($Seq.length s))
(= ($Seq.index s i) x))
:pattern ( ($Seq.index s i))
)) ($Seq.contains s x)))
:pattern ( ($Seq.contains s x))
)))
(assert (forall ((x Int) ) (! (not ($Seq.contains $Seq.empty<Int> x))
:pattern ( ($Seq.contains $Seq.empty<Int> x))
)))
(assert (forall ((s0 $Seq<Int>) (s1 $Seq<Int>) (x Int) ) (! (and
(=> ($Seq.contains ($Seq.append s0 s1) x) (or
($Seq.contains s0 x)
($Seq.contains s1 x)))
(=> (or
($Seq.contains s0 x)
($Seq.contains s1 x)) ($Seq.contains ($Seq.append s0 s1) x)))
:pattern ( ($Seq.contains ($Seq.append s0 s1) x))
)))
(assert (forall ((s $Seq<Int>) (v Int) (x Int) ) (! (and
(=> ($Seq.contains ($Seq.build s v) x) (or
(= v x)
($Seq.contains s x)))
(=> (or
(= v x)
($Seq.contains s x)) ($Seq.contains ($Seq.build s v) x)))
:pattern ( ($Seq.contains ($Seq.build s v) x))
)))
(assert (forall ((s $Seq<Int>) (n Int) (x Int) ) (! (and
(=> ($Seq.contains ($Seq.take s n) x) (exists ((i Int) ) (! (and
(<= 0 i)
(< i n)
(< i ($Seq.length s))
(= ($Seq.index s i) x))
:pattern ( ($Seq.index s i))
)))
(=> (exists ((i Int) ) (! (and
(<= 0 i)
(< i n)
(< i ($Seq.length s))
(= ($Seq.index s i) x))
:pattern ( ($Seq.index s i))
)) ($Seq.contains ($Seq.take s n) x)))
:pattern ( ($Seq.contains ($Seq.take s n) x))
)))
(assert (forall ((s $Seq<Int>) (n Int) (x Int) ) (! (and
(=> ($Seq.contains ($Seq.drop s n) x) (exists ((i Int) ) (! (and
(<= 0 n)
(<= n i)
(< i ($Seq.length s))
(= ($Seq.index s i) x))
:pattern ( ($Seq.index s i))
)))
(=> (exists ((i Int) ) (! (and
(<= 0 n)
(<= n i)
(< i ($Seq.length s))
(= ($Seq.index s i) x))
:pattern ( ($Seq.index s i))
)) ($Seq.contains ($Seq.drop s n) x)))
:pattern ( ($Seq.contains ($Seq.drop s n) x))
)))
(assert (forall ((s0 $Seq<Int>) (s1 $Seq<Int>) ) (! (and
(=> ($Seq.equal s0 s1) (and
(= ($Seq.length s0) ($Seq.length s1))
(forall ((j Int) ) (! (=> (and
(<= 0 j)
(< j ($Seq.length s0))) (= ($Seq.index s0 j) ($Seq.index s1 j)))
:pattern ( ($Seq.index s0 j))
:pattern ( ($Seq.index s1 j))
))))
(=> (and
(= ($Seq.length s0) ($Seq.length s1))
(forall ((j Int) ) (! (=> (and
(<= 0 j)
(< j ($Seq.length s0))) (= ($Seq.index s0 j) ($Seq.index s1 j)))
:pattern ( ($Seq.index s0 j))
:pattern ( ($Seq.index s1 j))
))) ($Seq.equal s0 s1)))
:pattern ( ($Seq.equal s0 s1))
)))
(assert (forall ((a $Seq<Int>) (b $Seq<Int>) ) (! (=> ($Seq.equal a b) (= a b))
:pattern ( ($Seq.equal a b))
)))
(assert (forall ((s0 $Seq<Int>) (s1 $Seq<Int>) (n Int) ) (! (and
(=> ($Seq.sameuntil s0 s1 n) (forall ((j Int) ) (! (=> (and
(<= 0 j)
(< j n)) (= ($Seq.index s0 j) ($Seq.index s1 j)))
:pattern ( ($Seq.index s0 j))
:pattern ( ($Seq.index s1 j))
)))
(=> (forall ((j Int) ) (! (=> (and
(<= 0 j)
(< j n)) (= ($Seq.index s0 j) ($Seq.index s1 j)))
:pattern ( ($Seq.index s0 j))
:pattern ( ($Seq.index s1 j))
)) ($Seq.sameuntil s0 s1 n)))
:pattern ( ($Seq.sameuntil s0 s1 n))
)))
(assert (forall ((s $Seq<Int>) (n Int) ) (! (=> (<= 0 n) (and
(=> (<= n ($Seq.length s)) (= ($Seq.length ($Seq.take s n)) n))
(=> (< ($Seq.length s) n) (= ($Seq.length ($Seq.take s n)) ($Seq.length s)))))
:pattern ( ($Seq.length ($Seq.take s n)))
)))
(assert (forall ((s $Seq<Int>) (n Int) (j Int) ) (! (=> (and
(<= 0 j)
(< j n)
(< j ($Seq.length s))) (= ($Seq.index ($Seq.take s n) j) ($Seq.index s j)))
:pattern ( ($Seq.index ($Seq.take s n) j))
)))
(assert (forall ((s $Seq<Int>) (n Int) ) (! (=> (<= 0 n) (and
(=> (<= n ($Seq.length s)) (= ($Seq.length ($Seq.drop s n)) (- ($Seq.length s) n)))
(=> (< ($Seq.length s) n) (= ($Seq.length ($Seq.drop s n)) 0))))
:pattern ( ($Seq.length ($Seq.drop s n)))
)))
(assert (forall ((s $Seq<Int>) (n Int) (j Int) ) (! (=> (and
(<= 0 n)
(<= 0 j)
(< j (- ($Seq.length s) n))) (= ($Seq.index ($Seq.drop s n) j) ($Seq.index s (+ j n))))
:pattern ( ($Seq.index ($Seq.drop s n) j))
)))
(assert (forall ((s $Seq<Int>) (i Int) (v Int) (n Int) ) (! (=> (and
(<= 0 i)
(< i n)
(<= n ($Seq.length s))) (= ($Seq.take ($Seq.update s i v) n) ($Seq.update ($Seq.take s n) i v)))
:pattern ( ($Seq.take ($Seq.update s i v) n))
)))
(assert (forall ((s $Seq<Int>) (i Int) (v Int) (n Int) ) (! (=> (and
(<= n i)
(< i ($Seq.length s))) (= ($Seq.take ($Seq.update s i v) n) ($Seq.take s n)))
:pattern ( ($Seq.take ($Seq.update s i v) n))
)))
(assert (forall ((s $Seq<Int>) (i Int) (v Int) (n Int) ) (! (=> (and
(<= 0 n)
(<= n i)
(< i ($Seq.length s))) (= ($Seq.drop ($Seq.update s i v) n) ($Seq.update ($Seq.drop s n) (- i n) v)))
:pattern ( ($Seq.drop ($Seq.update s i v) n))
)))
(assert (forall ((s $Seq<Int>) (i Int) (v Int) (n Int) ) (! (=> (and
(<= 0 i)
(< i n)
(< n ($Seq.length s))) (= ($Seq.drop ($Seq.update s i v) n) ($Seq.drop s n)))
:pattern ( ($Seq.drop ($Seq.update s i v) n))
)))
(assert (forall ((s $Seq<Int>) (v Int) (n Int) ) (! (=> (and
(<= 0 n)
(<= n ($Seq.length s))) (= ($Seq.drop ($Seq.build s v) n) ($Seq.build ($Seq.drop s n) v)))
:pattern ( ($Seq.drop ($Seq.build s v) n))
)))
(assert (forall ((s $Seq<Int>) (n Int) ) (! (=> (= n 0) (= ($Seq.drop s n) s))
:pattern ( ($Seq.drop s n))
)))
(assert (forall ((s $Seq<Int>) (n Int) ) (! (=> (= n 0) (= ($Seq.take s n) $Seq.empty<Int>))
:pattern ( ($Seq.take s n))
)))
(assert (forall ((s $Seq<Int>) (m Int) (n Int) ) (! (=> (and
(<= 0 m)
(<= 0 n)
(<= (+ m n) ($Seq.length s))) (= ($Seq.drop ($Seq.drop s m) n) ($Seq.drop s (+ m n))))
:pattern ( ($Seq.drop ($Seq.drop s m) n))
)))
(assert (forall ((x Int) (y Int)) (!
(iff
($Seq.contains ($Seq.singleton x) y)
(= x y))
:pattern (($Seq.contains ($Seq.singleton x) y))
)))
; /dafny_axioms/sequences_int_axioms_dafny.smt2
(assert (forall ((min Int) (max Int) ) (! (and
(=> (< min max) (= ($Seq.length ($Seq.range min max)) (- max min)))
(=> (<= max min) (= ($Seq.length ($Seq.range min max)) 0)))
:pattern ( ($Seq.length ($Seq.range min max)))
)))
(assert (forall ((min Int) (max Int) (j Int) ) (! (=> (and
(<= 0 j)
(< j (- max min))) (= ($Seq.index ($Seq.range min max) j) (+ min j)))
:pattern ( ($Seq.index ($Seq.range min max) j))
)))
(assert (forall ((min Int) (max Int) (v Int) ) (! (and
(=> ($Seq.contains ($Seq.range min max) v) (and
(<= min v)
(< v max)))
(=> (and
(<= min v)
(< v max)) ($Seq.contains ($Seq.range min max) v)))
:pattern ( ($Seq.contains ($Seq.range min max) v))
)))
; /dafny_axioms/sets_axioms_dafny.smt2 [Seq[Ref]]
(assert (forall ((s $Set<$Seq<$Ref>>)) (!
(<= 0 ($Set.card s))
:pattern (($Set.card s))
)))
(assert (forall ((o $Seq<$Ref>)) (!
(not ($Set.in o $Set.empty<$Seq<$Ref>>))
:pattern (($Set.in o $Set.empty<$Seq<$Ref>>))
)))
(assert (forall ((s $Set<$Seq<$Ref>>)) (!
(and
(iff
(= ($Set.card s) 0)
(= s $Set.empty<$Seq<$Ref>>))
(implies
(not (= ($Set.card s) 0))
(exists ((x $Seq<$Ref>)) (!
($Set.in x s)
:pattern (($Set.in x s))
))))
:pattern (($Set.card s))
)))
(assert (forall ((r $Seq<$Ref>)) (!
($Set.in r ($Set.singleton r))
:pattern (($Set.in r ($Set.singleton r)))
)))
(assert (forall ((r $Seq<$Ref>) (o $Seq<$Ref>)) (!
(iff
($Set.in o ($Set.singleton r))
(= r o))
:pattern (($Set.in o ($Set.singleton r)))
)))
(assert (forall ((r $Seq<$Ref>)) (!
(= ($Set.card ($Set.singleton r)) 1)
:pattern (($Set.card ($Set.singleton r)))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (x $Seq<$Ref>) (o $Seq<$Ref>)) (!
(iff
($Set.in o ($Set.unionone a x))
(or
(= o x)
($Set.in o a)))
:pattern (($Set.in o ($Set.unionone a x)))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (x $Seq<$Ref>)) (!
($Set.in x ($Set.unionone a x))
:pattern (($Set.in x ($Set.unionone a x)))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (x $Seq<$Ref>) (y $Seq<$Ref>)) (!
(=>
($Set.in y a)
($Set.in y ($Set.unionone a x)))
:pattern (($Set.in y a) ($Set.in y ($Set.unionone a x)))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (x $Seq<$Ref>)) (!
(=>
($Set.in x a)
(= ($Set.card ($Set.unionone a x)) ($Set.card a)))
:pattern (($Set.card ($Set.unionone a x)))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (x $Seq<$Ref>)) (!
(=>
(not ($Set.in x a))
(= ($Set.card ($Set.unionone a x)) (+ ($Set.card a) 1)))
:pattern (($Set.card ($Set.unionone a x)))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>) (o $Seq<$Ref>)) (!
(iff
($Set.in o ($Set.union a b))
(or
($Set.in o a)
($Set.in o b)))
:pattern (($Set.in o ($Set.union a b)))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>) (y $Seq<$Ref>)) (!
(=>
($Set.in y a)
($Set.in y ($Set.union a b)))
:pattern (($Set.in y ($Set.union a b)) ($Set.in y a))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>) (y $Seq<$Ref>)) (!
(=>
($Set.in y b)
($Set.in y ($Set.union a b)))
:pattern (($Set.in y ($Set.union a b)) ($Set.in y b))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>) (o $Seq<$Ref>)) (!
(iff
($Set.in o ($Set.intersection a b))
(and
($Set.in o a)
($Set.in o b)))
:pattern (($Set.in o ($Set.intersection a b)))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>)) (!
(=
($Set.union ($Set.union a b) b)
($Set.union a b))
:pattern (($Set.union ($Set.union a b) b))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>)) (!
(=
($Set.union a ($Set.union a b))
($Set.union a b))
:pattern (($Set.union a ($Set.union a b)))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>)) (!
(=
($Set.intersection ($Set.intersection a b) b)
($Set.intersection a b))
:pattern (($Set.intersection ($Set.intersection a b) b))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>)) (!
(=
($Set.intersection a ($Set.intersection a b))
($Set.intersection a b))
:pattern (($Set.intersection a ($Set.intersection a b)))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>)) (!
(=
(+
($Set.card ($Set.union a b))
($Set.card ($Set.intersection a b)))
(+
($Set.card a)
($Set.card b)))
:pattern (($Set.card ($Set.union a b)))
:pattern (($Set.card ($Set.intersection a b)))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>) (o $Seq<$Ref>)) (!
(iff
($Set.in o ($Set.difference a b))
(and
($Set.in o a)
(not ($Set.in o b))))
:pattern (($Set.in o ($Set.difference a b)))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>) (y $Seq<$Ref>)) (!
(=>
($Set.in y b)
(not ($Set.in y ($Set.difference a b))))
:pattern (($Set.in y ($Set.difference a b)) ($Set.in y b))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>)) (!
(iff
($Set.subset a b)
(forall ((o $Seq<$Ref>)) (!
(=>
($Set.in o a)
($Set.in o b))
:pattern (($Set.in o a))
:pattern (($Set.in o b))
)))
:pattern (($Set.subset a b))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>)) (!
(iff
($Set.equal a b)
(forall ((o $Seq<$Ref>)) (!
(iff
($Set.in o a)
($Set.in o b))
:pattern (($Set.in o a))
:pattern (($Set.in o b))
)))
:pattern (($Set.equal a b))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>)) (!
(=>
($Set.equal a b)
(= a b))
:pattern (($Set.equal a b))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>)) (!
(iff
($Set.disjoint a b)
(forall ((o $Seq<$Ref>)) (!
(or
(not ($Set.in o a))
(not ($Set.in o b)))
:pattern (($Set.in o a))
:pattern (($Set.in o b))
)))
:pattern (($Set.disjoint a b))
)))
(assert (forall ((a $Set<$Seq<$Ref>>) (b $Set<$Seq<$Ref>>)) (!
(and
(=
(+
(+
($Set.card ($Set.difference a b))
($Set.card ($Set.difference b a)))
($Set.card ($Set.intersection a b)))
($Set.card ($Set.union a b)))
(=
($Set.card ($Set.difference a b))
(-
($Set.card a)
($Set.card ($Set.intersection a b)))))
:pattern (($Set.card ($Set.difference a b)) ($Set.card ($Set.intersection a b)))
)))
; /dafny_axioms/sets_axioms_dafny.smt2 [Int]
(assert (forall ((s $Set<Int>)) (!
(<= 0 ($Set.card s))
:pattern (($Set.card s))
)))
(assert (forall ((o Int)) (!
(not ($Set.in o $Set.empty<Int>))
:pattern (($Set.in o $Set.empty<Int>))
)))
(assert (forall ((s $Set<Int>)) (!
(and
(iff
(= ($Set.card s) 0)
(= s $Set.empty<Int>))
(implies
(not (= ($Set.card s) 0))
(exists ((x Int)) (!
($Set.in x s)
:pattern (($Set.in x s))
))))
:pattern (($Set.card s))
)))
(assert (forall ((r Int)) (!
($Set.in r ($Set.singleton r))
:pattern (($Set.in r ($Set.singleton r)))
)))
(assert (forall ((r Int) (o Int)) (!
(iff
($Set.in o ($Set.singleton r))
(= r o))
:pattern (($Set.in o ($Set.singleton r)))
)))
(assert (forall ((r Int)) (!
(= ($Set.card ($Set.singleton r)) 1)
:pattern (($Set.card ($Set.singleton r)))
)))
(assert (forall ((a $Set<Int>) (x Int) (o Int)) (!
(iff
($Set.in o ($Set.unionone a x))
(or
(= o x)
($Set.in o a)))
:pattern (($Set.in o ($Set.unionone a x)))
)))
(assert (forall ((a $Set<Int>) (x Int)) (!
($Set.in x ($Set.unionone a x))
:pattern (($Set.in x ($Set.unionone a x)))
)))
(assert (forall ((a $Set<Int>) (x Int) (y Int)) (!
(=>
($Set.in y a)
($Set.in y ($Set.unionone a x)))
:pattern (($Set.in y a) ($Set.in y ($Set.unionone a x)))
)))
(assert (forall ((a $Set<Int>) (x Int)) (!
(=>
($Set.in x a)
(= ($Set.card ($Set.unionone a x)) ($Set.card a)))
:pattern (($Set.card ($Set.unionone a x)))
)))
(assert (forall ((a $Set<Int>) (x Int)) (!
(=>
(not ($Set.in x a))
(= ($Set.card ($Set.unionone a x)) (+ ($Set.card a) 1)))
:pattern (($Set.card ($Set.unionone a x)))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>) (o Int)) (!
(iff
($Set.in o ($Set.union a b))
(or
($Set.in o a)
($Set.in o b)))
:pattern (($Set.in o ($Set.union a b)))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>) (y Int)) (!
(=>
($Set.in y a)
($Set.in y ($Set.union a b)))
:pattern (($Set.in y ($Set.union a b)) ($Set.in y a))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>) (y Int)) (!
(=>
($Set.in y b)
($Set.in y ($Set.union a b)))
:pattern (($Set.in y ($Set.union a b)) ($Set.in y b))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>) (o Int)) (!
(iff
($Set.in o ($Set.intersection a b))
(and
($Set.in o a)
($Set.in o b)))
:pattern (($Set.in o ($Set.intersection a b)))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>)) (!
(=
($Set.union ($Set.union a b) b)
($Set.union a b))
:pattern (($Set.union ($Set.union a b) b))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>)) (!
(=
($Set.union a ($Set.union a b))
($Set.union a b))
:pattern (($Set.union a ($Set.union a b)))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>)) (!
(=
($Set.intersection ($Set.intersection a b) b)
($Set.intersection a b))
:pattern (($Set.intersection ($Set.intersection a b) b))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>)) (!
(=
($Set.intersection a ($Set.intersection a b))
($Set.intersection a b))
:pattern (($Set.intersection a ($Set.intersection a b)))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>)) (!
(=
(+
($Set.card ($Set.union a b))
($Set.card ($Set.intersection a b)))
(+
($Set.card a)
($Set.card b)))
:pattern (($Set.card ($Set.union a b)))
:pattern (($Set.card ($Set.intersection a b)))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>) (o Int)) (!
(iff
($Set.in o ($Set.difference a b))
(and
($Set.in o a)
(not ($Set.in o b))))
:pattern (($Set.in o ($Set.difference a b)))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>) (y Int)) (!
(=>
($Set.in y b)
(not ($Set.in y ($Set.difference a b))))
:pattern (($Set.in y ($Set.difference a b)) ($Set.in y b))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>)) (!
(iff
($Set.subset a b)
(forall ((o Int)) (!
(=>
($Set.in o a)
($Set.in o b))
:pattern (($Set.in o a))
:pattern (($Set.in o b))
)))
:pattern (($Set.subset a b))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>)) (!
(iff
($Set.equal a b)
(forall ((o Int)) (!
(iff
($Set.in o a)
($Set.in o b))
:pattern (($Set.in o a))
:pattern (($Set.in o b))
)))
:pattern (($Set.equal a b))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>)) (!
(=>
($Set.equal a b)
(= a b))
:pattern (($Set.equal a b))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>)) (!
(iff
($Set.disjoint a b)
(forall ((o Int)) (!
(or
(not ($Set.in o a))
(not ($Set.in o b)))
:pattern (($Set.in o a))
:pattern (($Set.in o b))
)))
:pattern (($Set.disjoint a b))
)))
(assert (forall ((a $Set<Int>) (b $Set<Int>)) (!
(and
(=
(+
(+
($Set.card ($Set.difference a b))
($Set.card ($Set.difference b a)))
($Set.card ($Set.intersection a b)))
($Set.card ($Set.union a b)))
(=
($Set.card ($Set.difference a b))
(-
($Set.card a)
($Set.card ($Set.intersection a b)))))
:pattern (($Set.card ($Set.difference a b)) ($Set.card ($Set.intersection a b)))
)))
; /dafny_axioms/sets_axioms_dafny.smt2 [Ref]
(assert (forall ((s $Set<$Ref>)) (!
(<= 0 ($Set.card s))
:pattern (($Set.card s))
)))
(assert (forall ((o $Ref)) (!
(not ($Set.in o $Set.empty<$Ref>))
:pattern (($Set.in o $Set.empty<$Ref>))
)))
(assert (forall ((s $Set<$Ref>)) (!
(and
(iff
(= ($Set.card s) 0)
(= s $Set.empty<$Ref>))
(implies
(not (= ($Set.card s) 0))
(exists ((x $Ref)) (!
($Set.in x s)
:pattern (($Set.in x s))
))))
:pattern (($Set.card s))
)))
(assert (forall ((r $Ref)) (!
($Set.in r ($Set.singleton r))
:pattern (($Set.in r ($Set.singleton r)))
)))
(assert (forall ((r $Ref) (o $Ref)) (!
(iff
($Set.in o ($Set.singleton r))
(= r o))
:pattern (($Set.in o ($Set.singleton r)))
)))
(assert (forall ((r $Ref)) (!
(= ($Set.card ($Set.singleton r)) 1)
:pattern (($Set.card ($Set.singleton r)))
)))
(assert (forall ((a $Set<$Ref>) (x $Ref) (o $Ref)) (!
(iff
($Set.in o ($Set.unionone a x))
(or
(= o x)
($Set.in o a)))
:pattern (($Set.in o ($Set.unionone a x)))
)))
(assert (forall ((a $Set<$Ref>) (x $Ref)) (!
($Set.in x ($Set.unionone a x))
:pattern (($Set.in x ($Set.unionone a x)))
)))
(assert (forall ((a $Set<$Ref>) (x $Ref) (y $Ref)) (!
(=>
($Set.in y a)
($Set.in y ($Set.unionone a x)))
:pattern (($Set.in y a) ($Set.in y ($Set.unionone a x)))
)))
(assert (forall ((a $Set<$Ref>) (x $Ref)) (!
(=>
($Set.in x a)
(= ($Set.card ($Set.unionone a x)) ($Set.card a)))
:pattern (($Set.card ($Set.unionone a x)))
)))
(assert (forall ((a $Set<$Ref>) (x $Ref)) (!
(=>
(not ($Set.in x a))
(= ($Set.card ($Set.unionone a x)) (+ ($Set.card a) 1)))
:pattern (($Set.card ($Set.unionone a x)))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>) (o $Ref)) (!
(iff
($Set.in o ($Set.union a b))
(or
($Set.in o a)
($Set.in o b)))
:pattern (($Set.in o ($Set.union a b)))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>) (y $Ref)) (!
(=>
($Set.in y a)
($Set.in y ($Set.union a b)))
:pattern (($Set.in y ($Set.union a b)) ($Set.in y a))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>) (y $Ref)) (!
(=>
($Set.in y b)
($Set.in y ($Set.union a b)))
:pattern (($Set.in y ($Set.union a b)) ($Set.in y b))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>) (o $Ref)) (!
(iff
($Set.in o ($Set.intersection a b))
(and
($Set.in o a)
($Set.in o b)))
:pattern (($Set.in o ($Set.intersection a b)))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>)) (!
(=
($Set.union ($Set.union a b) b)
($Set.union a b))
:pattern (($Set.union ($Set.union a b) b))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>)) (!
(=
($Set.union a ($Set.union a b))
($Set.union a b))
:pattern (($Set.union a ($Set.union a b)))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>)) (!
(=
($Set.intersection ($Set.intersection a b) b)
($Set.intersection a b))
:pattern (($Set.intersection ($Set.intersection a b) b))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>)) (!
(=
($Set.intersection a ($Set.intersection a b))
($Set.intersection a b))
:pattern (($Set.intersection a ($Set.intersection a b)))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>)) (!
(=
(+
($Set.card ($Set.union a b))
($Set.card ($Set.intersection a b)))
(+
($Set.card a)
($Set.card b)))
:pattern (($Set.card ($Set.union a b)))
:pattern (($Set.card ($Set.intersection a b)))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>) (o $Ref)) (!
(iff
($Set.in o ($Set.difference a b))
(and
($Set.in o a)
(not ($Set.in o b))))
:pattern (($Set.in o ($Set.difference a b)))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>) (y $Ref)) (!
(=>
($Set.in y b)
(not ($Set.in y ($Set.difference a b))))
:pattern (($Set.in y ($Set.difference a b)) ($Set.in y b))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>)) (!
(iff
($Set.subset a b)
(forall ((o $Ref)) (!
(=>
($Set.in o a)
($Set.in o b))
:pattern (($Set.in o a))
:pattern (($Set.in o b))
)))
:pattern (($Set.subset a b))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>)) (!
(iff
($Set.equal a b)
(forall ((o $Ref)) (!
(iff
($Set.in o a)
($Set.in o b))
:pattern (($Set.in o a))
:pattern (($Set.in o b))
)))
:pattern (($Set.equal a b))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>)) (!
(=>
($Set.equal a b)
(= a b))
:pattern (($Set.equal a b))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>)) (!
(iff
($Set.disjoint a b)
(forall ((o $Ref)) (!
(or
(not ($Set.in o a))
(not ($Set.in o b)))
:pattern (($Set.in o a))
:pattern (($Set.in o b))
)))
:pattern (($Set.disjoint a b))
)))
(assert (forall ((a $Set<$Ref>) (b $Set<$Ref>)) (!
(and
(=
(+
(+
($Set.card ($Set.difference a b))
($Set.card ($Set.difference b a)))
($Set.card ($Set.intersection a b)))
($Set.card ($Set.union a b)))
(=
($Set.card ($Set.difference a b))
(-
($Set.card a)
($Set.card ($Set.intersection a b)))))
:pattern (($Set.card ($Set.difference a b)) ($Set.card ($Set.intersection a b)))
)))
; /field_value_functions_axioms.smt2 [dst: Seq[Ref]]
(assert (forall ((vs $FVF<$Seq<$Ref>>) (ws $FVF<$Seq<$Ref>>)) (!
(implies
(and
($Set.equal ($FVF.domain_dst vs) ($FVF.domain_dst ws))
(forall ((x $Ref)) (!
(implies
($Set.in x ($FVF.domain_dst vs))
(= ($FVF.lookup_dst vs x) ($FVF.lookup_dst ws x)))
:pattern (($FVF.lookup_dst vs x) ($FVF.lookup_dst ws x)))))
(= vs ws))
:pattern (($FVF.domain_dst vs) ($FVF.domain_dst ws)))))
; /field_value_functions_axioms.smt2 [src: Seq[Ref]]
(assert (forall ((vs $FVF<$Seq<$Ref>>) (ws $FVF<$Seq<$Ref>>)) (!
(implies
(and
($Set.equal ($FVF.domain_src vs) ($FVF.domain_src ws))
(forall ((x $Ref)) (!
(implies
($Set.in x ($FVF.domain_src vs))
(= ($FVF.lookup_src vs x) ($FVF.lookup_src ws x)))
:pattern (($FVF.lookup_src vs x) ($FVF.lookup_src ws x)))))
(= vs ws))
:pattern (($FVF.domain_src vs) ($FVF.domain_src ws)))))
; /field_value_functions_axioms.smt2 [Integer_value: Int]
(assert (forall ((vs $FVF<Int>) (ws $FVF<Int>)) (!
(implies
(and
($Set.equal ($FVF.domain_Integer_value vs) ($FVF.domain_Integer_value ws))
(forall ((x $Ref)) (!
(implies
($Set.in x ($FVF.domain_Integer_value vs))
(= ($FVF.lookup_Integer_value vs x) ($FVF.lookup_Integer_value ws x)))
:pattern (($FVF.lookup_Integer_value vs x) ($FVF.lookup_Integer_value ws x)))))
(= vs ws))
:pattern (($FVF.domain_Integer_value vs) ($FVF.domain_Integer_value ws)))))
; Declaring additional sort wrappers
(declare-fun $SortWrappers.$PermTo$Snap ($Perm) $Snap)
(declare-fun $SortWrappers.$SnapTo$Perm ($Snap) $Perm)
(assert (forall ((x $Perm)) (!
(= x ($SortWrappers.$SnapTo$Perm($SortWrappers.$PermTo$Snap x)))
:pattern (($SortWrappers.$PermTo$Snap x))
)))
(declare-fun $SortWrappers.$RefTo$Snap ($Ref) $Snap)
(declare-fun $SortWrappers.$SnapTo$Ref ($Snap) $Ref)
(assert (forall ((x $Ref)) (!
(= x ($SortWrappers.$SnapTo$Ref($SortWrappers.$RefTo$Snap x)))
:pattern (($SortWrappers.$RefTo$Snap x))
)))
(declare-fun $SortWrappers.BoolTo$Snap (Bool) $Snap)
(declare-fun $SortWrappers.$SnapToBool ($Snap) Bool)
(assert (forall ((x Bool)) (!
(= x ($SortWrappers.$SnapToBool($SortWrappers.BoolTo$Snap x)))
:pattern (($SortWrappers.BoolTo$Snap x))
)))
(declare-fun $SortWrappers.IntTo$Snap (Int) $Snap)
(declare-fun $SortWrappers.$SnapToInt ($Snap) Int)
(assert (forall ((x Int)) (!
(= x ($SortWrappers.$SnapToInt($SortWrappers.IntTo$Snap x)))
:pattern (($SortWrappers.IntTo$Snap x))
)))
; Declaring additional sort wrappers
(declare-fun $SortWrappers.$Seq<Int>To$Snap ($Seq<Int>) $Snap)
(declare-fun $SortWrappers.$SnapTo$Seq<Int> ($Snap) $Seq<Int>)
(assert (forall ((x $Seq<Int>)) (!
(= x ($SortWrappers.$SnapTo$Seq<Int>($SortWrappers.$Seq<Int>To$Snap x)))
:pattern (($SortWrappers.$Seq<Int>To$Snap x))
)))
(declare-fun $SortWrappers.$Seq<$Ref>To$Snap ($Seq<$Ref>) $Snap)
(declare-fun $SortWrappers.$SnapTo$Seq<$Ref> ($Snap) $Seq<$Ref>)
(assert (forall ((x $Seq<$Ref>)) (!
(= x ($SortWrappers.$SnapTo$Seq<$Ref>($SortWrappers.$Seq<$Ref>To$Snap x)))
:pattern (($SortWrappers.$Seq<$Ref>To$Snap x))
)))
; Declaring additional sort wrappers
(declare-fun $SortWrappers.$Set<$Ref>To$Snap ($Set<$Ref>) $Snap)
(declare-fun $SortWrappers.$SnapTo$Set<$Ref> ($Snap) $Set<$Ref>)
(assert (forall ((x $Set<$Ref>)) (!
(= x ($SortWrappers.$SnapTo$Set<$Ref>($SortWrappers.$Set<$Ref>To$Snap x)))
:pattern (($SortWrappers.$Set<$Ref>To$Snap x))
)))
(declare-fun $SortWrappers.$Set<Int>To$Snap ($Set<Int>) $Snap)
(declare-fun $SortWrappers.$SnapTo$Set<Int> ($Snap) $Set<Int>)
(assert (forall ((x $Set<Int>)) (!
(= x ($SortWrappers.$SnapTo$Set<Int>($SortWrappers.$Set<Int>To$Snap x)))
:pattern (($SortWrappers.$Set<Int>To$Snap x))
)))
(declare-fun $SortWrappers.$Set<$Seq<$Ref>>To$Snap ($Set<$Seq<$Ref>>) $Snap)
(declare-fun $SortWrappers.$SnapTo$Set<$Seq<$Ref>> ($Snap) $Set<$Seq<$Ref>>)
(assert (forall ((x $Set<$Seq<$Ref>>)) (!
(= x ($SortWrappers.$SnapTo$Set<$Seq<$Ref>>($SortWrappers.$Set<$Seq<$Ref>>To$Snap x)))
:pattern (($SortWrappers.$Set<$Seq<$Ref>>To$Snap x))
)))
; Declaring additional sort wrappers
(declare-fun $SortWrappers.$FVF<Int>To$Snap ($FVF<Int>) $Snap)
(declare-fun $SortWrappers.$SnapTo$FVF<Int> ($Snap) $FVF<Int>)
(assert (forall ((x $FVF<Int>)) (!
(= x ($SortWrappers.$SnapTo$FVF<Int>($SortWrappers.$FVF<Int>To$Snap x)))
:pattern (($SortWrappers.$FVF<Int>To$Snap x))
)))
(declare-fun $SortWrappers.$FVF<$Seq<$Ref>>To$Snap ($FVF<$Seq<$Ref>>) $Snap)
(declare-fun $SortWrappers.$SnapTo$FVF<$Seq<$Ref>> ($Snap) $FVF<$Seq<$Ref>>)
(assert (forall ((x $FVF<$Seq<$Ref>>)) (!
(= x ($SortWrappers.$SnapTo$FVF<$Seq<$Ref>>($SortWrappers.$FVF<$Seq<$Ref>>To$Snap x)))
:pattern (($SortWrappers.$FVF<$Seq<$Ref>>To$Snap x))
)))
(declare-fun $SortWrappers.$FVF<$Ref>To$Snap ($FVF<$Ref>) $Snap)
(declare-fun $SortWrappers.$SnapTo$FVF<$Ref> ($Snap) $FVF<$Ref>)
(assert (forall ((x $FVF<$Ref>)) (!
(= x ($SortWrappers.$SnapTo$FVF<$Ref>($SortWrappers.$FVF<$Ref>To$Snap x)))
:pattern (($SortWrappers.$FVF<$Ref>To$Snap x))
)))
; Preamble end
; ------------------------------------------------------------
; ------------------------------------------------------------
; Declaring program functions
; ---------- main_main ----------
(declare-const this@1 $Ref)
(declare-const tcount@2 Int)
(declare-const gsize@3 Int)
(declare-const tid@4 Int)
(declare-const gid@5 Int)
(declare-const lid@6 Int)
(declare-const __last_barrier@7 Int)
(declare-const k@8 Int)
(declare-const half@9 Int)
(declare-const offset@10 Int)
(push) ; 2
; [eval] 0 <= tid
(assert (<= 0 tid@4))
; [eval] tid < tcount
(assert (< tid@4 tcount@2))
; [eval] tid == lid
(assert (= tid@4 lid@6))
; [eval] tcount == gsize
(assert (= tcount@2 gsize@3))
; [eval] gid == 0
(assert (= gid@5 0))
(assert (not (= this@1 $Ref.null)))
(declare-const $k@11 $Perm)
(assert ($Perm.isValidVar $k@11))
(assert ($Perm.isReadVar $k@11 $Perm.Write))
(declare-const $t@12 $Seq<$Ref>)
; [eval] |this.src| == gsize
; [eval] |this.src|
; (push) ; 3
; (assert (not (not (= $k@11 $Perm.No))))
; (check-sat)
; ; unsat
; ; 0.00s
; (pop) ; 3
(assert (not (= $k@11 $Perm.No)))
(assert (= ($Seq.length $t@12) gsize@3))
(declare-const $k@13 $Perm)
(assert ($Perm.isValidVar $k@13))
(assert ($Perm.isReadVar $k@13 $Perm.Write))
(declare-const $t@14 $Seq<$Ref>)
; [eval] |this.dst| == gsize
; [eval] |this.dst|
(push) ; 3 ; [XXX]
(assert (not (not (= $k@13 $Perm.No))))
(check-sat)
; unsat
; 0.00s
(pop) ; 3
; (echo "unsat")
(assert (not (= $k@13 $Perm.No)))
(assert (= ($Seq.length $t@14) gsize@3))
; [eval] 4 <= gsize
(assert (<= 4 gsize@3))
; [eval] gsize % 2 == 0
; [eval] gsize % 2
(push) ; 3
(assert (not (not (= 2 0))))
(check-sat)
; unsat
; 0.00s
(pop) ; 3
(assert (= (mod gsize@3 2) 0))
(declare-const i@15 Int)
(push) ; 3
; [eval] (i in [0..gsize))
; [eval] [0..gsize)
(assert ($Seq.contains ($Seq.range 0 gsize@3) i@15))
; [eval] this.src[i]
(push) ; 4
(assert (not (not (= gsize@3 0))))
(check-sat)
; unsat
; 0.00s
(pop) ; 4
(pop) ; 3
(declare-const $t@16 $FVF<Int>)
(declare-fun inv@17 ($Ref) Int)
(assert (forall ((r $Ref)) (!
(implies
($Seq.contains ($Seq.range 0 gsize@3) i@15)
(= ($Seq.index $t@12 (inv@17 r)) r))
:pattern (($Seq.index $t@12 (inv@17 r))))))
(assert (forall ((i@15 Int)) (!
(implies
($Seq.contains ($Seq.range 0 gsize@3) i@15)
(= (inv@17 ($Seq.index $t@12 i@15)) i@15))
:pattern ((inv@17 ($Seq.index $t@12 i@15)))
; :pattern (($Seq.contains ($Seq.range 0 gsize@3) i@15))
)))
(assert (forall ((x Int) (y Int)) (!
(implies
(and
($Seq.contains ($Seq.range 0 gsize@3) x)
($Seq.contains ($Seq.range 0 gsize@3) y)
(= ($Seq.index $t@12 x) ($Seq.index $t@12 y)))
(= x y))
:pattern (($Seq.index $t@12 x) ($Seq.index $t@12 y)))))
(assert (forall ((i@15 Int)) (!
(implies
(and
($Seq.contains ($Seq.range 0 gsize@3) i@15)
(< $Perm.No (/ (to_real 1) (to_real gsize@3))))
(not (= ($Seq.index $t@12 i@15) $Ref.null)))
:pattern (($Seq.index $t@12 i@15)))))
(assert (forall ((i@15 Int)) (!
(iff
($Set.in ($Seq.index $t@12 i@15) ($FVF.domain_Integer_value $t@16))
($Seq.contains ($Seq.range 0 gsize@3) i@15))
:pattern (($FVF.lookup_Integer_value $t@16 ($Seq.index $t@12 i@15))))))
(assert (< $Perm.No (/ (to_real 1) (to_real gsize@3))))
; [eval] this.dst[tid]
(assert (not (= ($Seq.index $t@14 tid@4) $Ref.null)))
(declare-const $t@18 Int)
(declare-const vs@19 $FVF<Int>)
(assert (and
(= ($FVF.lookup_Integer_value vs@19 ($Seq.index $t@14 tid@4)) $t@18)
($Set.equal
($FVF.domain_Integer_value vs@19)
($Set.singleton ($Seq.index $t@14 tid@4)))))
(push) ; 3
; [eval] 0 <= tid
; [eval] tid < tcount
; [eval] tid == lid
; [eval] tcount == gsize
; [eval] gid == 0
(declare-const $k@20 $Perm)
(assert ($Perm.isValidVar $k@20))
(assert ($Perm.isReadVar $k@20 $Perm.Write))
(declare-const $t@21 $Seq<$Ref>)
; [eval] |this.src| == gsize
; [eval] |this.src|
; (push) ; 4
; (assert (not (not (= $k@20 $Perm.No))))
; (check-sat)
; ; unsat
; ; 0.00s
; (pop) ; 4
(assert (not (= $k@20 $Perm.No)))
(assert (= ($Seq.length $t@21) gsize@3))
(declare-const $k@22 $Perm)
(assert ($Perm.isValidVar $k@22))
(assert ($Perm.isReadVar $k@22 $Perm.Write))
(declare-const $t@23 $Seq<$Ref>)
; [eval] |this.dst| == gsize
; [eval] |this.dst|
; (push) ; 4
; (assert (not (not (= $k@22 $Perm.No))))
; (check-sat)
; ; unsat
; ; 0.00s
; (pop) ; 4
(assert (not (= $k@22 $Perm.No)))
(assert (= ($Seq.length $t@23) gsize@3))
; [eval] 4 <= gsize
; [eval] gsize % 2 == 0
; [eval] gsize % 2
; (push) ; 4
; (assert (not (not (= 2 0))))
; (check-sat)
; ; unsat
; ; 0.00s
; (pop) ; 4
(declare-const i@24 Int)
(push) ; 4
; [eval] (i in [0..gsize))
; [eval] [0..gsize)
(assert ($Seq.contains ($Seq.range 0 gsize@3) i@24))
; [eval] this.src[i]
(push) ; 5
(assert (not (not (= gsize@3 0))))
(check-sat)
; unsat
; 0.00s
(pop) ; 5
(pop) ; 4
(declare-const $t@25 $FVF<Int>)
(declare-fun inv@26 ($Ref) Int)
(assert (forall ((r $Ref)) (!
(implies
($Seq.contains ($Seq.range 0 gsize@3) i@24)
(= ($Seq.index $t@21 (inv@26 r)) r))
:pattern (($Seq.index $t@21 (inv@26 r))))))
(assert (forall ((i@24 Int)) (!
(implies
($Seq.contains ($Seq.range 0 gsize@3) i@24)
(= (inv@26 ($Seq.index $t@21 i@24)) i@24))
; :pattern (($Seq.contains ($Seq.range 0 gsize@3) i@24))
:pattern ((inv@26 ($Seq.index $t@21 i@24))))))
(assert (forall ((x Int) (y Int)) (!
(implies
(and
($Seq.contains ($Seq.range 0 gsize@3) x)
($Seq.contains ($Seq.range 0 gsize@3) y)
(= ($Seq.index $t@21 x) ($Seq.index $t@21 y)))
(= x y))
:pattern (($Seq.index $t@21 x) ($Seq.index $t@21 y)))))
(assert (forall ((i@24 Int)) (!
(implies
(and
($Seq.contains ($Seq.range 0 gsize@3) i@24)
(< $Perm.No (/ (to_real 1) (to_real gsize@3))))
(not (= ($Seq.index $t@21 i@24) $Ref.null)))
:pattern (($Seq.index $t@21 i@24)))))
(assert (forall ((i@24 Int)) (!
(iff
($Set.in ($Seq.index $t@21 i@24) ($FVF.domain_Integer_value $t@25))
($Seq.contains ($Seq.range 0 gsize@3) i@24))
:pattern (($FVF.lookup_Integer_value $t@25 ($Seq.index $t@21 i@24))))))
; [eval] this.src == old(this.src)
; [eval] old(this.src)
(assert ($Seq.equal $t@21 $t@12))
; [eval] this.dst == old(this.dst)
; [eval] old(this.dst)
(assert ($Seq.equal $t@23 $t@14))
; [eval] tid == 0
(push) ; 4
(assert (not (not (= tid@4 0))))
(check-sat)
; unknown
; 0.00s
(pop) ; 4
(push) ; 4
(assert (not (= tid@4 0)))
(check-sat)
; unknown
; 0.00s
(pop) ; 4
(push) ; 4
; [then-branch 1] tid@4 == 0
(assert (= tid@4 0))
; [eval] this.dst[0]
(assert (not (= ($Seq.index $t@23 0) $Ref.null)))
(declare-const $t@27 Int)
(declare-const vs@28 $FVF<Int>)
(assert (and
(= ($FVF.lookup_Integer_value vs@28 ($Seq.index $t@23 0)) $t@27)
($Set.equal
($FVF.domain_Integer_value vs@28)
($Set.singleton ($Seq.index $t@23 0)))))
; [eval] (tid == 0 ? (forall i: Int :: (0 <= i) && (i < tcount) ==> (this.dst[0].Integer_value >= this.src[i].Integer_value)) : true)
; [eval] tid == 0
(push) ; 5
(assert (not (not (= tid@4 0))))
(check-sat)
; unknown
; 0.00s
(pop) ; 5
(push) ; 5
; [then-branch 2] tid@4 == 0
; [eval] (forall i: Int :: (0 <= i) && (i < tcount) ==> (this.dst[0].Integer_value >= this.src[i].Integer_value))
(declare-const i@29 Int)
(push) ; 6
; [eval] (0 <= i) && (i < tcount) ==> (this.dst[0].Integer_value >= this.src[i].Integer_value)
; [eval] (0 <= i) && (i < tcount)
; [eval] 0 <= i
(push) ; 7
(push) ; 8
(assert (not (not (<= 0 i@29))))
(check-sat)
; unknown
; 0.00s
(pop) ; 8
(push) ; 8
(assert (not (<= 0 i@29)))
(check-sat)
; unknown
; 0.00s
(pop) ; 8
(push) ; 8
; [then-branch 3] 0 <= i@29
(assert (<= 0 i@29))
; [eval] i < tcount
(pop) ; 8
(push) ; 8
; [else-branch 3] !0 <= i@29
(assert (not (<= 0 i@29)))
(pop) ; 8
(pop) ; 7
(push) ; 7
(push) ; 8
(assert (not (not (and (<= 0 i@29) (< i@29 tcount@2)))))
(check-sat)
; unknown
; 0.00s
(pop) ; 8
(push) ; 8
(assert (not (and (<= 0 i@29) (< i@29 tcount@2))))
(check-sat)
; unknown
; 0.00s
(pop) ; 8
(push) ; 8
; [then-branch 4] 0 <= i@29 && i@29 < tcount@2
(assert (and (<= 0 i@29) (< i@29 tcount@2)))
; [eval] this.dst[0].Integer_value >= this.src[i].Integer_value
; [eval] this.dst[0]
(push) ; 9
(assert (not (<
$Perm.No
(+
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@26 ($Seq.index $t@23 0)))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
$Perm.Write))))
(check-sat)
; unsat
; 0.00s
(pop) ; 9
(declare-const fvf@30 $FVF<Int>)
(assert (implies
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@26 ($Seq.index $t@23 0)))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@30 ($Seq.index $t@23 0))
($FVF.lookup_Integer_value $t@25 ($Seq.index $t@23 0)))))
(assert (=
($FVF.lookup_Integer_value fvf@30 ($Seq.index $t@23 0))
($FVF.lookup_Integer_value vs@28 ($Seq.index $t@23 0))))
(assert ($Set.equal
($FVF.domain_Integer_value fvf@30)
($Set.union
($FVF.domain_Integer_value vs@28)
($FVF.domain_Integer_value $t@25))))
; [eval] this.src[i]
(push) ; 9
(assert (not (not (= ($Seq.index $t@21 i@29) $Ref.null))))
(check-sat)
; unsat
; 0.00s
(pop) ; 9
(push) ; 9
(assert (not (<
$Perm.No
(+
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@26 ($Seq.index $t@21 i@29)))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite (= ($Seq.index $t@21 i@29) ($Seq.index $t@23 0)) $Perm.Write $Perm.No)))))
(check-sat)
; unsat
; 0.00s
(pop) ; 9
(declare-const fvf@31 $FVF<Int>)
(assert (forall ((i@29 Int)) (!
(implies
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@26 ($Seq.index $t@21 i@29)))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29))
($FVF.lookup_Integer_value $t@25 ($Seq.index $t@21 i@29))))
:pattern (($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29)))
:pattern (($FVF.lookup_Integer_value $t@25 ($Seq.index $t@21 i@29))))))
(assert (forall ((i@29 Int)) (!
(implies
(= ($Seq.index $t@21 i@29) ($Seq.index $t@23 0))
(=
($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29))
($FVF.lookup_Integer_value vs@28 ($Seq.index $t@21 i@29))))
:pattern (($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29)))
:pattern (($FVF.lookup_Integer_value vs@28 ($Seq.index $t@21 i@29))))))
(assert ($Set.equal
($FVF.domain_Integer_value fvf@31)
($Set.union
($FVF.domain_Integer_value vs@28)
($FVF.domain_Integer_value $t@25))))
(pop) ; 8
(push) ; 8
; [else-branch 4] !0 <= i@29 && i@29 < tcount@2
(assert (not (and (<= 0 i@29) (< i@29 tcount@2))))
(pop) ; 8
(pop) ; 7
(assert ($Set.equal
($FVF.domain_Integer_value fvf@31)
($Set.union
($FVF.domain_Integer_value vs@28)
($FVF.domain_Integer_value $t@25))))
(assert (forall ((i@29 Int)) (!
(implies
(= ($Seq.index $t@21 i@29) ($Seq.index $t@23 0))
(=
($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29))
($FVF.lookup_Integer_value vs@28 ($Seq.index $t@21 i@29))))
:pattern (($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29)))
:pattern (($FVF.lookup_Integer_value vs@28 ($Seq.index $t@21 i@29))))))
(assert (forall ((i@29 Int)) (!
(implies
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@26 ($Seq.index $t@21 i@29)))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29))
($FVF.lookup_Integer_value $t@25 ($Seq.index $t@21 i@29))))
:pattern (($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29)))
:pattern (($FVF.lookup_Integer_value $t@25 ($Seq.index $t@21 i@29))))))
(assert ($Set.equal
($FVF.domain_Integer_value fvf@30)
($Set.union
($FVF.domain_Integer_value vs@28)
($FVF.domain_Integer_value $t@25))))
(assert (=
($FVF.lookup_Integer_value fvf@30 ($Seq.index $t@23 0))
($FVF.lookup_Integer_value vs@28 ($Seq.index $t@23 0))))
(assert (implies
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@26 ($Seq.index $t@23 0)))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@30 ($Seq.index $t@23 0))
($FVF.lookup_Integer_value $t@25 ($Seq.index $t@23 0)))))
(pop) ; 6
(assert ($Set.equal
($FVF.domain_Integer_value fvf@31)
($Set.union
($FVF.domain_Integer_value vs@28)
($FVF.domain_Integer_value $t@25))))
(assert (forall ((i@29 Int)) (!
(implies
(= ($Seq.index $t@21 i@29) ($Seq.index $t@23 0))
(=
($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29))
($FVF.lookup_Integer_value vs@28 ($Seq.index $t@21 i@29))))
:pattern (($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29)))
:pattern (($FVF.lookup_Integer_value vs@28 ($Seq.index $t@21 i@29))))))
(assert (forall ((i@29 Int)) (!
(implies
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@26 ($Seq.index $t@21 i@29)))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29))
($FVF.lookup_Integer_value $t@25 ($Seq.index $t@21 i@29))))
:pattern (($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29)))
:pattern (($FVF.lookup_Integer_value $t@25 ($Seq.index $t@21 i@29))))))
(assert ($Set.equal
($FVF.domain_Integer_value fvf@30)
($Set.union
($FVF.domain_Integer_value vs@28)
($FVF.domain_Integer_value $t@25))))
(assert (=
($FVF.lookup_Integer_value fvf@30 ($Seq.index $t@23 0))
($FVF.lookup_Integer_value vs@28 ($Seq.index $t@23 0))))
(assert (implies
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@26 ($Seq.index $t@23 0)))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@30 ($Seq.index $t@23 0))
($FVF.lookup_Integer_value $t@25 ($Seq.index $t@23 0)))))
(pop) ; 5
; [dead else-branch 2] tid@4 != 0
(assert (ite
(= tid@4 0)
(and
(implies
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@26 ($Seq.index $t@23 0)))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@30 ($Seq.index $t@23 0))
($FVF.lookup_Integer_value $t@25 ($Seq.index $t@23 0))))
(=
($FVF.lookup_Integer_value fvf@30 ($Seq.index $t@23 0))
($FVF.lookup_Integer_value vs@28 ($Seq.index $t@23 0)))
($Set.equal
($FVF.domain_Integer_value fvf@30)
($Set.union
($FVF.domain_Integer_value vs@28)
($FVF.domain_Integer_value $t@25)))
(forall ((i@29 Int)) (!
(implies
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@26 ($Seq.index $t@21 i@29)))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29))
($FVF.lookup_Integer_value $t@25 ($Seq.index $t@21 i@29))))
:pattern (($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29)))
:pattern (($FVF.lookup_Integer_value $t@25 ($Seq.index $t@21 i@29)))))
(forall ((i@29 Int)) (!
(implies
(= ($Seq.index $t@21 i@29) ($Seq.index $t@23 0))
(=
($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29))
($FVF.lookup_Integer_value vs@28 ($Seq.index $t@21 i@29))))
:pattern (($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29)))
:pattern (($FVF.lookup_Integer_value vs@28 ($Seq.index $t@21 i@29)))))
($Set.equal
($FVF.domain_Integer_value fvf@31)
($Set.union
($FVF.domain_Integer_value vs@28)
($FVF.domain_Integer_value $t@25))))
true))
(declare-const $deadElse@32 Bool)
(assert (ite
(= tid@4 0)
(forall ((i@29 Int)) (!
(implies
(and (<= 0 i@29) (< i@29 tcount@2))
(>=
($FVF.lookup_Integer_value fvf@30 ($Seq.index $t@23 0))
($FVF.lookup_Integer_value fvf@31 ($Seq.index $t@21 i@29))))
:pattern (($Seq.index $t@21 i@29))))
$deadElse@32))
(pop) ; 4
(push) ; 4
; [else-branch 1] tid@4 != 0
(assert (not (= tid@4 0)))
; [eval] (tid == 0 ? (forall i: Int :: (0 <= i) && (i < tcount) ==> (this.dst[0].Integer_value >= this.src[i].Integer_value)) : true)
; [eval] tid == 0
(push) ; 5
(assert (not (= tid@4 0)))
(check-sat)
; unknown
; 0.00s
(pop) ; 5
; [dead then-branch 5] tid@4 == 0
(push) ; 5
; [else-branch 5] tid@4 != 0
(pop) ; 5
(declare-const $deadThen@33 Bool)
(assert (ite (= tid@4 0) $deadThen@33 true))
(pop) ; 4
(pop) ; 3
(push) ; 3
; [exec]
; __last_barrier := 0
; [exec]
; half := gsize \ 2
; [eval] gsize \ 2
(push) ; 4
(assert (not (not (= 2 0))))
(check-sat)
; unsat
; 0.00s
(pop) ; 4
; [exec]
; offset := (tid == 0 ? 0 : half)
; [eval] (tid == 0 ? 0 : half)
; [eval] tid == 0
(push) ; 4
(assert (not (not (= tid@4 0))))
(check-sat)
; unknown
; 0.00s
(pop) ; 4
(push) ; 4
(assert (not (= tid@4 0)))
(check-sat)
; unknown
; 0.00s
(pop) ; 4
(push) ; 4
; [then-branch 6] tid@4 == 0
(assert (= tid@4 0))
(pop) ; 4
(push) ; 4
; [else-branch 6] tid@4 != 0
(assert (not (= tid@4 0)))
(pop) ; 4
(assert (ite (= tid@4 0) true (not (= tid@4 0))))
; [eval] tid < 2
(push) ; 4
(assert (not (not (< tid@4 2))))
(check-sat)
; unknown
; 0.00s
(pop) ; 4
(push) ; 4
(assert (not (< tid@4 2)))
(check-sat)
; unknown
; 0.00s
(pop) ; 4
(push) ; 4
; [then-branch 7] tid@4 < 2
(assert (< tid@4 2))
; [exec]
; this.dst[tid].Integer_value := this.src[offset].Integer_value
; [eval] this.dst[tid]
; [eval] this.src[offset]
(push) ; 5
(assert (not (not (= ($Seq.index $t@12 (ite (= tid@4 0) 0 (div gsize@3 2))) $Ref.null))))
(check-sat)
; unsat
; 0.00s
(pop) ; 5
(push) ; 5
(assert (not (<
$Perm.No
(+
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@17 ($Seq.index $t@12 (ite (= tid@4 0) 0 (div gsize@3 2)))))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(=
($Seq.index $t@12 (ite (= tid@4 0) 0 (div gsize@3 2)))
($Seq.index $t@14 tid@4))
$Perm.Write
$Perm.No)))))
(check-sat)
; unsat
; 0.00s
(pop) ; 5
(declare-const fvf@34 $FVF<Int>)
(assert (implies
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@17 ($Seq.index $t@12 (ite (= tid@4 0) 0 (div gsize@3 2)))))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@34 ($Seq.index
$t@12
(ite (= tid@4 0) 0 (div gsize@3 2))))
($FVF.lookup_Integer_value $t@16 ($Seq.index
$t@12
(ite (= tid@4 0) 0 (div gsize@3 2)))))))
(assert (implies
(=
($Seq.index $t@12 (ite (= tid@4 0) 0 (div gsize@3 2)))
($Seq.index $t@14 tid@4))
(=
($FVF.lookup_Integer_value fvf@34 ($Seq.index
$t@12
(ite (= tid@4 0) 0 (div gsize@3 2))))
($FVF.lookup_Integer_value vs@19 ($Seq.index
$t@12
(ite (= tid@4 0) 0 (div gsize@3 2)))))))
(assert ($Set.equal
($FVF.domain_Integer_value fvf@34)
($Set.union
($FVF.domain_Integer_value vs@19)
($FVF.domain_Integer_value $t@16))))
(declare-const sk@35 $Ref)
(declare-const vs@36 $FVF<Int>)
(push) ; 5
(assert (not (forall ((r $Ref)) (!
(=
(-
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
(ite
(= r ($Seq.index $t@14 tid@4))
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
$Perm.No)
))))
(check-sat)
; unsat
; 0.00s
(pop) ; 5
(push) ; 5
(assert (not (=
(-
(ite (= sk@35 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite (= sk@35 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
(ite
(= sk@35 ($Seq.index $t@14 tid@4))
(ite (= sk@35 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
$Perm.No)))
(check-sat)
; unsat
; 0.00s
(pop) ; 5
(assert (forall ((sk@35 $Ref)) (!
(implies
(= sk@35 ($Seq.index $t@14 tid@4))
(=
($FVF.lookup_Integer_value vs@36 sk@35)
($FVF.lookup_Integer_value vs@19 sk@35)))
:pattern (($FVF.lookup_Integer_value vs@36 sk@35))
:pattern (($FVF.lookup_Integer_value vs@19 sk@35)))))
(assert (forall ((sk@35 $Ref)) (!
(implies
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 sk@35))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value vs@36 sk@35)
($FVF.lookup_Integer_value $t@16 sk@35)))
:pattern (($FVF.lookup_Integer_value vs@36 sk@35))
:pattern (($FVF.lookup_Integer_value $t@16 sk@35)))))
(assert ($Set.equal
($FVF.domain_Integer_value vs@36)
($Set.union
($FVF.domain_Integer_value $t@16)
($FVF.domain_Integer_value vs@19))))
(declare-const vs@37 $FVF<Int>)
(assert (and
(=
($FVF.lookup_Integer_value vs@37 ($Seq.index $t@14 tid@4))
($FVF.lookup_Integer_value fvf@34 ($Seq.index
$t@12
(ite (= tid@4 0) 0 (div gsize@3 2)))))
($Set.equal
($FVF.domain_Integer_value vs@37)
($Set.singleton ($Seq.index $t@14 tid@4)))))
; [exec]
; k := 0
; [exec]
; assert this.dst[tid].Integer_value >= this.src[offset].Integer_value
; [eval] this.dst[tid].Integer_value >= this.src[offset].Integer_value
; [eval] this.dst[tid]
(push) ; 5
(assert (not (<
$Perm.No
(+
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 ($Seq.index $t@14 tid@4)))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
$Perm.Write))))
(check-sat)
; unsat
; 0.00s
(pop) ; 5
(declare-const fvf@38 $FVF<Int>)
(assert (implies
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 ($Seq.index $t@14 tid@4)))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@38 ($Seq.index $t@14 tid@4))
($FVF.lookup_Integer_value $t@16 ($Seq.index $t@14 tid@4)))))
(assert (=
($FVF.lookup_Integer_value fvf@38 ($Seq.index $t@14 tid@4))
($FVF.lookup_Integer_value vs@37 ($Seq.index $t@14 tid@4))))
(assert ($Set.equal
($FVF.domain_Integer_value fvf@38)
($Set.union
($FVF.domain_Integer_value vs@37)
($FVF.domain_Integer_value $t@16))))
; [eval] this.src[offset]
(push) ; 5
(assert (not (not (= ($Seq.index $t@12 (ite (= tid@4 0) 0 (div gsize@3 2))) $Ref.null))))
(check-sat)
; unsat
; 0.00s
(pop) ; 5
(push) ; 5
(assert (not (<
$Perm.No
(+
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@17 ($Seq.index $t@12 (ite (= tid@4 0) 0 (div gsize@3 2)))))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(=
($Seq.index $t@12 (ite (= tid@4 0) 0 (div gsize@3 2)))
($Seq.index $t@14 tid@4))
$Perm.Write
$Perm.No)))))
(check-sat)
; unsat
; 0.00s
(pop) ; 5
(declare-const fvf@39 $FVF<Int>)
(assert (implies
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@17 ($Seq.index $t@12 (ite (= tid@4 0) 0 (div gsize@3 2)))))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@39 ($Seq.index
$t@12
(ite (= tid@4 0) 0 (div gsize@3 2))))
($FVF.lookup_Integer_value $t@16 ($Seq.index
$t@12
(ite (= tid@4 0) 0 (div gsize@3 2)))))))
(assert (implies
(=
($Seq.index $t@12 (ite (= tid@4 0) 0 (div gsize@3 2)))
($Seq.index $t@14 tid@4))
(=
($FVF.lookup_Integer_value fvf@39 ($Seq.index
$t@12
(ite (= tid@4 0) 0 (div gsize@3 2))))
($FVF.lookup_Integer_value vs@37 ($Seq.index
$t@12
(ite (= tid@4 0) 0 (div gsize@3 2)))))))
(assert ($Set.equal
($FVF.domain_Integer_value fvf@39)
($Set.union
($FVF.domain_Integer_value vs@37)
($FVF.domain_Integer_value $t@16))))
(push) ; 5
(assert (not (>=
($FVF.lookup_Integer_value fvf@38 ($Seq.index $t@14 tid@4))
($FVF.lookup_Integer_value fvf@39 ($Seq.index
$t@12
(ite (= tid@4 0) 0 (div gsize@3 2)))))))
(check-sat)
; unsat
; 0.00s
(pop) ; 5
(assert (>=
($FVF.lookup_Integer_value fvf@38 ($Seq.index $t@14 tid@4))
($FVF.lookup_Integer_value fvf@39 ($Seq.index
$t@12
(ite (= tid@4 0) 0 (div gsize@3 2))))))
; [exec]
; assert this.dst[tid].Integer_value >= this.src[offset + 0].Integer_value
; [eval] this.dst[tid].Integer_value >= this.src[offset + 0].Integer_value
; [eval] this.dst[tid]
(push) ; 5
(assert (not (<
$Perm.No
(+
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 ($Seq.index $t@14 tid@4)))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
$Perm.Write))))
(check-sat)
; unsat
; 0.00s
(pop) ; 5
(declare-const fvf@40 $FVF<Int>)
; [eval] this.src[offset + 0]
; [eval] offset + 0
(push) ; 5
(assert (not (not (= ($Seq.index $t@12 (ite (= tid@4 0) 0 (div gsize@3 2))) $Ref.null))))
(check-sat)
; unsat
; 0.00s
(pop) ; 5
(push) ; 5
(assert (not (<
$Perm.No
(+
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@17 ($Seq.index $t@12 (ite (= tid@4 0) 0 (div gsize@3 2)))))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(=
($Seq.index $t@12 (ite (= tid@4 0) 0 (div gsize@3 2)))
($Seq.index $t@14 tid@4))
$Perm.Write
$Perm.No)))))
(check-sat)
; unsat
; 0.00s
(pop) ; 5
(declare-const fvf@41 $FVF<Int>)
; [exec]
; assert (forall i: Int :: (0 <= i) && (i < k) ==> (this.dst[tid].Integer_value >= this.src[offset + i].Integer_value))
; [eval] (forall i: Int :: (0 <= i) && (i < k) ==> (this.dst[tid].Integer_value >= this.src[offset + i].Integer_value))
(declare-const i@42 Int)
(push) ; 5
; [eval] (0 <= i) && (i < k) ==> (this.dst[tid].Integer_value >= this.src[offset + i].Integer_value)
; [eval] (0 <= i) && (i < k)
; [eval] 0 <= i
(push) ; 6
(push) ; 7
(assert (not (not (<= 0 i@42))))
(check-sat)
; unknown
; 0.01s
(pop) ; 7
(push) ; 7
(assert (not (<= 0 i@42)))
(check-sat)
; unknown
; 0.01s
(pop) ; 7
(push) ; 7
; [then-branch 8] 0 <= i@42
(assert (<= 0 i@42))
; [eval] i < k
(pop) ; 7
(push) ; 7
; [else-branch 8] !0 <= i@42
(assert (not (<= 0 i@42)))
(pop) ; 7
(pop) ; 6
(push) ; 6
(push) ; 7
(assert (not (not (and (<= 0 i@42) (< i@42 0)))))
(check-sat)
; unsat
; 0.00s
(pop) ; 7
(push) ; 7
(assert (not (and (<= 0 i@42) (< i@42 0))))
(check-sat)
; unknown
; 0.01s
(pop) ; 7
; [dead then-branch 9] 0 <= i@42 && i@42 < 0
(push) ; 7
; [else-branch 9] !0 <= i@42 && i@42 < 0
(assert (not (and (<= 0 i@42) (< i@42 0))))
(pop) ; 7
(pop) ; 6
(pop) ; 5
(push) ; 5
(assert (not (forall ((i@42 Int)) (!
true
))))
(check-sat)
; unsat
; 0.00s
(pop) ; 5
(assert (forall ((i@42 Int)) (!
true
)))
; loop at max-two-range.sil,53:5
(declare-const k@43 Int)
(push) ; 5
; Verify loop body
(declare-const $t@44 $Snap)
(declare-const $t@45 $Snap)
(assert (= $t@44 ($Snap.combine $t@45 $Snap.unit)))
(declare-const $t@46 $Snap)
(assert (= $t@45 ($Snap.combine $t@46 $Snap.unit)))
(declare-const $t@47 $Snap)
(assert (= $t@46 ($Snap.combine $t@47 $Snap.unit)))
(declare-const $t@48 $Snap)
(declare-const $t@49 Int)
(assert (= $t@47 ($Snap.combine $t@48 ($SortWrappers.IntTo$Snap $t@49))))
(declare-const $t@50 $Snap)
(declare-const $t@51 $Snap)
(assert (= $t@48 ($Snap.combine $t@50 $t@51)))
(declare-const $t@52 $Snap)
(assert (= $t@50 ($Snap.combine $t@52 $Snap.unit)))
(declare-const $t@53 $Snap)
(declare-const $t@54 $FVF<Int>)
(assert (= $t@52 ($Snap.combine $t@53 ($SortWrappers.$FVF<Int>To$Snap $t@54))))
(declare-const $t@55 $Snap)
(assert (= $t@53 ($Snap.combine $t@55 $Snap.unit)))
(declare-const $t@56 $Snap)
(assert (= $t@55 ($Snap.combine $t@56 $Snap.unit)))
(declare-const $t@57 $Snap)
(assert (= $t@56 ($Snap.combine $t@57 $Snap.unit)))
(declare-const $t@58 $Snap)
(assert (= $t@57 ($Snap.combine $t@58 $Snap.unit)))
(declare-const $t@59 $Seq<$Ref>)
(declare-const $t@60 $Seq<$Ref>)
(assert (=
$t@58
($Snap.combine
($SortWrappers.$Seq<$Ref>To$Snap $t@59)
($SortWrappers.$Seq<$Ref>To$Snap $t@60))))
(declare-const $t@61 $Seq<$Ref>)
(assert (=
($SortWrappers.$Seq<$Ref>To$Snap $t@59)
($Snap.combine ($SortWrappers.$Seq<$Ref>To$Snap $t@61) $Snap.unit)))
(declare-const $t@62 $Seq<$Ref>)
(assert (=
($SortWrappers.$Seq<$Ref>To$Snap $t@61)
($Snap.combine $Snap.unit ($SortWrappers.$Seq<$Ref>To$Snap $t@62))))
; [eval] (0 <= tid) && (tid < tcount) && (tid == lid) && (tcount == gsize) && (gid == 0)
; [eval] (0 <= tid) && (tid < tcount) && (tid == lid) && (tcount == gsize)
; [eval] (0 <= tid) && (tid < tcount) && (tid == lid)
; [eval] (0 <= tid) && (tid < tcount)
; [eval] 0 <= tid
(push) ; 6
(push) ; 7
(assert (not (not (<= 0 tid@4))))
(check-sat)
; unknown
; 0.01s
(pop) ; 7
(push) ; 7
; [then-branch 10] 0 <= tid@4
; [eval] tid < tcount
(pop) ; 7
; [dead else-branch 10] !0 <= tid@4
(pop) ; 6
(push) ; 6
(push) ; 7
(assert (not (not (and (<= 0 tid@4) (< tid@4 tcount@2)))))
(check-sat)
; unknown
; 0.01s
(pop) ; 7
(push) ; 7
(assert (not (and (<= 0 tid@4) (< tid@4 tcount@2))))
(check-sat)
; unsat
; 0.00s
(pop) ; 7
(push) ; 7
; [then-branch 11] 0 <= tid@4 && tid@4 < tcount@2
(assert (and (<= 0 tid@4) (< tid@4 tcount@2)))
; [eval] tid == lid
(pop) ; 7
; [dead else-branch 11] !0 <= tid@4 && tid@4 < tcount@2
(pop) ; 6
(push) ; 6
(push) ; 7
(assert (not (not (and (and (<= 0 tid@4) (< tid@4 tcount@2)) (= tid@4 lid@6)))))
(check-sat)
; unknown
; 0.01s
(pop) ; 7
(push) ; 7
(assert (not (and (and (<= 0 tid@4) (< tid@4 tcount@2)) (= tid@4 lid@6))))
(check-sat)
; unsat
; 0.00s
(pop) ; 7
(push) ; 7
; [then-branch 12] 0 <= tid@4 && tid@4 < tcount@2 && tid@4 == lid@6
(assert (and (and (<= 0 tid@4) (< tid@4 tcount@2)) (= tid@4 lid@6)))
; [eval] tcount == gsize
(pop) ; 7
; [dead else-branch 12] !0 <= tid@4 && tid@4 < tcount@2 && tid@4 == lid@6
(pop) ; 6
(push) ; 6
(push) ; 7
(assert (not (not
(and
(and (and (<= 0 tid@4) (< tid@4 tcount@2)) (= tid@4 lid@6))
(= tcount@2 gsize@3)))))
(check-sat)
; unknown
; 0.01s
(pop) ; 7
(push) ; 7
(assert (not (and
(and (and (<= 0 tid@4) (< tid@4 tcount@2)) (= tid@4 lid@6))
(= tcount@2 gsize@3))))
(check-sat)
; unsat
; 0.00s
(pop) ; 7
(push) ; 7
; [then-branch 13] 0 <= tid@4 && tid@4 < tcount@2 && tid@4 == lid@6 && tcount@2 == gsize@3
(assert (and
(and (and (<= 0 tid@4) (< tid@4 tcount@2)) (= tid@4 lid@6))
(= tcount@2 gsize@3)))
; [eval] gid == 0
(pop) ; 7
; [dead else-branch 13] !0 <= tid@4 && tid@4 < tcount@2 && tid@4 == lid@6 && tcount@2 == gsize@3
(pop) ; 6
(assert (and
(and
(and (and (<= 0 tid@4) (< tid@4 tcount@2)) (= tid@4 lid@6))
(= tcount@2 gsize@3))
(= gid@5 0)))
(declare-const $k@63 $Perm)
(assert ($Perm.isValidVar $k@63))
(assert ($Perm.isReadVar $k@63 $Perm.Write))
; [eval] |this.src| == gsize
; [eval] |this.src|
(push) ; 6
(assert (not (not (= $k@63 $Perm.No))))
(check-sat)
; unsat
; 0.00s
(pop) ; 6
(assert (not (= $k@63 $Perm.No)))
(assert (= ($Seq.length $t@62) gsize@3))
(declare-const $k@64 $Perm)
(assert ($Perm.isValidVar $k@64))
(assert ($Perm.isReadVar $k@64 $Perm.Write))
; [eval] |this.dst| == gsize
; [eval] |this.dst|
(push) ; 6
(assert (not (not (= $k@64 $Perm.No))))
(check-sat)
; unsat
; 0.00s
(pop) ; 6
(assert (not (= $k@64 $Perm.No)))
(assert (= ($Seq.length $t@60) gsize@3))
; [eval] 4 <= gsize
; [eval] gsize % 2 == 0
; [eval] gsize % 2
(push) ; 6
(assert (not (not (= 2 0))))
(check-sat)
; unsat
; 0.00s
(pop) ; 6
; [eval] offset == (tid == 0 ? 0 : half)
; [eval] (tid == 0 ? 0 : half)
; [eval] tid == 0
(push) ; 6
(assert (not (not (= tid@4 0))))
(check-sat)
; unknown
; 0.01s
(pop) ; 6
(push) ; 6
(assert (not (= tid@4 0)))
(check-sat)
; unknown
; 0.01s
(pop) ; 6
(push) ; 6
; [then-branch 14] tid@4 == 0
(assert (= tid@4 0))
(pop) ; 6
(push) ; 6
; [else-branch 14] tid@4 != 0
(assert (not (= tid@4 0)))
(pop) ; 6
(declare-const i@65 Int)
(push) ; 6
; [eval] (i in [0..gsize))
; [eval] [0..gsize)
(assert ($Seq.contains ($Seq.range 0 gsize@3) i@65))
; [eval] this.src[i]
(push) ; 7
(assert (not (not (= gsize@3 0))))
(check-sat)
; unsat
; 0.00s
(pop) ; 7
(pop) ; 6
(declare-fun inv@66 ($Ref) Int)
(assert (forall ((r $Ref)) (!
(implies
($Seq.contains ($Seq.range 0 gsize@3) i@65)
(= ($Seq.index $t@62 (inv@66 r)) r))
:pattern (($Seq.index $t@62 (inv@66 r))))))
(assert (forall ((i@65 Int)) (!
(implies
($Seq.contains ($Seq.range 0 gsize@3) i@65)
(= (inv@66 ($Seq.index $t@62 i@65)) i@65))
; :pattern (($Seq.contains ($Seq.range 0 gsize@3) i@65))
:pattern ((inv@66 ($Seq.index $t@62 i@65))))))
(assert (forall ((x Int) (y Int)) (!
(implies
(and
($Seq.contains ($Seq.range 0 gsize@3) x)
($Seq.contains ($Seq.range 0 gsize@3) y)
(= ($Seq.index $t@62 x) ($Seq.index $t@62 y)))
(= x y))
:pattern (($Seq.index $t@62 x) ($Seq.index $t@62 y)))))
(assert (forall ((i@65 Int)) (!
(implies
(and
($Seq.contains ($Seq.range 0 gsize@3) i@65)
(< $Perm.No (/ (to_real 1) (to_real gsize@3))))
(not (= ($Seq.index $t@62 i@65) $Ref.null)))
:pattern (($Seq.index $t@62 i@65)))))
(assert (forall ((i@65 Int)) (!
(iff
($Set.in ($Seq.index $t@62 i@65) ($FVF.domain_Integer_value $t@54))
($Seq.contains ($Seq.range 0 gsize@3) i@65))
:pattern (($FVF.lookup_Integer_value $t@54 ($Seq.index $t@62 i@65))))))
; [eval] false || (__last_barrier == 0)
(push) ; 6
(push) ; 7
(assert (not false))
(check-sat)
; unknown
; 0.01s
(pop) ; 7
(push) ; 7
; [then-branch 15] True
; [eval] __last_barrier == 0
(pop) ; 7
; [dead else-branch 15] False
(pop) ; 6
; [eval] __last_barrier == 1
(push) ; 6
(assert (not (not (= 0 1))))
(check-sat)
; unsat
; 0.00s
(pop) ; 6
(push) ; 6
(assert (not (= 0 1)))
(check-sat)
; unknown
; 0.01s
(pop) ; 6
; [dead then-branch 16] 0 == 1
(push) ; 6
; [else-branch 16] 0 != 1
(assert (not (= 0 1)))
; [eval] __last_barrier == 0
(push) ; 7
(assert (not false))
(check-sat)
; unknown
; 0.01s
(pop) ; 7
(push) ; 7
; [then-branch 17] True
; [eval] this.dst[tid]
(assert (not (= ($Seq.index $t@60 tid@4) $Ref.null)))
(declare-const vs@67 $FVF<Int>)
(assert (and
(= ($FVF.lookup_Integer_value vs@67 ($Seq.index $t@60 tid@4)) $t@49)
($Set.equal
($FVF.domain_Integer_value vs@67)
($Set.singleton ($Seq.index $t@60 tid@4)))))
; [eval] (0 <= k) && (k <= half)
; [eval] 0 <= k
(push) ; 8
(push) ; 9
(assert (not (not (<= 0 k@43))))
(check-sat)
; unknown
; 0.02s
(pop) ; 9
(push) ; 9
(assert (not (<= 0 k@43)))
(check-sat)
; unknown
; 0.02s
(pop) ; 9
(push) ; 9
; [then-branch 18] 0 <= k@43
(assert (<= 0 k@43))
; [eval] k <= half
(pop) ; 9
(push) ; 9
; [else-branch 18] !0 <= k@43
(assert (not (<= 0 k@43)))
(pop) ; 9
(pop) ; 8
(assert (and (<= 0 k@43) (<= k@43 (div gsize@3 2))))
; [eval] (forall i: Int :: (0 <= i) && (i < k) ==> (this.dst[tid].Integer_value >= this.src[offset + i].Integer_value))
(declare-const i@68 Int)
(push) ; 8
; [eval] (0 <= i) && (i < k) ==> (this.dst[tid].Integer_value >= this.src[offset + i].Integer_value)
; [eval] (0 <= i) && (i < k)
; [eval] 0 <= i
(push) ; 9
(push) ; 10
(assert (not (not (<= 0 i@68))))
(check-sat)
; unknown
; 0.02s
(pop) ; 10
(push) ; 10
(assert (not (<= 0 i@68)))
(check-sat)
; unknown
; 0.02s
(pop) ; 10
(push) ; 10
; [then-branch 19] 0 <= i@68
(assert (<= 0 i@68))
; [eval] i < k
(pop) ; 10
(push) ; 10
; [else-branch 19] !0 <= i@68
(assert (not (<= 0 i@68)))
(pop) ; 10
(pop) ; 9
(push) ; 9
(push) ; 10
(assert (not (not (and (<= 0 i@68) (< i@68 k@43)))))
(check-sat)
; unknown
; 0.02s
(pop) ; 10
(push) ; 10
(assert (not (and (<= 0 i@68) (< i@68 k@43))))
(check-sat)
; unknown
; 0.02s
(pop) ; 10
(push) ; 10
; [then-branch 20] 0 <= i@68 && i@68 < k@43
(assert (and (<= 0 i@68) (< i@68 k@43)))
; [eval] this.dst[tid].Integer_value >= this.src[offset + i].Integer_value
; [eval] this.dst[tid]
(push) ; 11
(assert (not (<
$Perm.No
(+
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@66 ($Seq.index $t@60 tid@4)))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
$Perm.Write))))
(check-sat)
; unsat
; 0.00s
(pop) ; 11
(declare-const fvf@69 $FVF<Int>)
(assert (implies
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@66 ($Seq.index $t@60 tid@4)))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@69 ($Seq.index $t@60 tid@4))
($FVF.lookup_Integer_value $t@54 ($Seq.index $t@60 tid@4)))))
(assert (=
($FVF.lookup_Integer_value fvf@69 ($Seq.index $t@60 tid@4))
($FVF.lookup_Integer_value vs@67 ($Seq.index $t@60 tid@4))))
(assert ($Set.equal
($FVF.domain_Integer_value fvf@69)
($Set.union
($FVF.domain_Integer_value vs@67)
($FVF.domain_Integer_value $t@54))))
; [eval] this.src[offset + i]
; [eval] offset + i
(push) ; 11
(assert (not (not
(= ($Seq.index $t@62 (+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)) $Ref.null))))
(check-sat)
; unsat
; 0.01s
(pop) ; 11
(push) ; 11
(assert (not (<
$Perm.No
(+
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@66 ($Seq.index $t@62 (+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68))))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(=
($Seq.index $t@62 (+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68))
($Seq.index $t@60 tid@4))
$Perm.Write
$Perm.No)))))
(check-sat)
; unsat
(pop) ; 11
(declare-const fvf@70 $FVF<Int>)
(assert (forall ((i@68 Int)) (!
(implies
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@66 ($Seq.index $t@62 (+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68))))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@70 ($Seq.index
$t@62
(+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)))
($FVF.lookup_Integer_value $t@54 ($Seq.index
$t@62
(+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)))))
)))
(assert (forall ((i@68 Int)) (!
(implies
(=
($Seq.index $t@62 (+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68))
($Seq.index $t@60 tid@4))
(=
($FVF.lookup_Integer_value fvf@70 ($Seq.index
$t@62
(+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)))
($FVF.lookup_Integer_value vs@67 ($Seq.index
$t@62
(+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)))))
)))
(assert ($Set.equal
($FVF.domain_Integer_value fvf@70)
($Set.union
($FVF.domain_Integer_value vs@67)
($FVF.domain_Integer_value $t@54))))
(pop) ; 10
(push) ; 10
; [else-branch 20] !0 <= i@68 && i@68 < k@43
(assert (not (and (<= 0 i@68) (< i@68 k@43))))
(pop) ; 10
(pop) ; 9
(assert ($Set.equal
($FVF.domain_Integer_value fvf@70)
($Set.union
($FVF.domain_Integer_value vs@67)
($FVF.domain_Integer_value $t@54))))
(assert (forall ((i@68 Int)) (!
(implies
(=
($Seq.index $t@62 (+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68))
($Seq.index $t@60 tid@4))
(=
($FVF.lookup_Integer_value fvf@70 ($Seq.index
$t@62
(+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)))
($FVF.lookup_Integer_value vs@67 ($Seq.index
$t@62
(+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)))))
)))
(assert (forall ((i@68 Int)) (!
(implies
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@66 ($Seq.index $t@62 (+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68))))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@70 ($Seq.index
$t@62
(+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)))
($FVF.lookup_Integer_value $t@54 ($Seq.index
$t@62
(+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)))))
)))
(assert ($Set.equal
($FVF.domain_Integer_value fvf@69)
($Set.union
($FVF.domain_Integer_value vs@67)
($FVF.domain_Integer_value $t@54))))
(assert (=
($FVF.lookup_Integer_value fvf@69 ($Seq.index $t@60 tid@4))
($FVF.lookup_Integer_value vs@67 ($Seq.index $t@60 tid@4))))
(assert (implies
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@66 ($Seq.index $t@60 tid@4)))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@69 ($Seq.index $t@60 tid@4))
($FVF.lookup_Integer_value $t@54 ($Seq.index $t@60 tid@4)))))
(pop) ; 8
(assert ($Set.equal
($FVF.domain_Integer_value fvf@70)
($Set.union
($FVF.domain_Integer_value vs@67)
($FVF.domain_Integer_value $t@54))))
(assert (forall ((i@68 Int)) (!
(implies
(=
($Seq.index $t@62 (+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68))
($Seq.index $t@60 tid@4))
(=
($FVF.lookup_Integer_value fvf@70 ($Seq.index
$t@62
(+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)))
($FVF.lookup_Integer_value vs@67 ($Seq.index
$t@62
(+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)))))
)))
(assert (forall ((i@68 Int)) (!
(implies
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@66 ($Seq.index $t@62 (+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68))))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@70 ($Seq.index
$t@62
(+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)))
($FVF.lookup_Integer_value $t@54 ($Seq.index
$t@62
(+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)))))
)))
(assert ($Set.equal
($FVF.domain_Integer_value fvf@69)
($Set.union
($FVF.domain_Integer_value vs@67)
($FVF.domain_Integer_value $t@54))))
(assert (=
($FVF.lookup_Integer_value fvf@69 ($Seq.index $t@60 tid@4))
($FVF.lookup_Integer_value vs@67 ($Seq.index $t@60 tid@4))))
(assert (implies
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@66 ($Seq.index $t@60 tid@4)))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value fvf@69 ($Seq.index $t@60 tid@4))
($FVF.lookup_Integer_value $t@54 ($Seq.index $t@60 tid@4)))))
(assert (forall ((i@68 Int)) (!
(implies
(and (<= 0 i@68) (< i@68 k@43))
(>=
($FVF.lookup_Integer_value fvf@69 ($Seq.index $t@60 tid@4))
($FVF.lookup_Integer_value fvf@70 ($Seq.index
$t@62
(+ (ite (= tid@4 0) 0 (div gsize@3 2)) i@68)))))
)))
; [eval] k < half
(assert (< k@43 (div gsize@3 2)))
(check-sat)
; unknown
; [exec]
; inhale false
(pop) ; 7
; [dead else-branch 17] False
(pop) ; 6
(pop) ; 5
(push) ; 5
; Establish loop invariant
; [eval] 0 <= tid
; [eval] tid < tcount
; [eval] tid == lid
; [eval] tcount == gsize
; [eval] gid == 0
(declare-const $k@71 $Perm)
(assert ($Perm.isValidVar $k@71))
(assert ($Perm.isReadVar $k@71 $Perm.Write))
(assert (< $k@71 $k@11))
; [eval] |this.src| == gsize
; [eval] |this.src|
(declare-const $k@72 $Perm)
(assert ($Perm.isValidVar $k@72))
(assert ($Perm.isReadVar $k@72 $Perm.Write))
(assert (< $k@72 $k@13))
; [eval] |this.dst| == gsize
; [eval] |this.dst|
; [eval] 4 <= gsize
; [eval] gsize % 2 == 0
; [eval] gsize % 2
(push) ; 6
(assert (not (not (= 2 0))))
(check-sat)
; unsat
; 0.00s
(pop) ; 6
; [eval] offset == (tid == 0 ? 0 : half)
; [eval] (tid == 0 ? 0 : half)
; [eval] tid == 0
(push) ; 6
(assert (not (not (= tid@4 0))))
(check-sat)
; unknown
; 0.01s
(pop) ; 6
(push) ; 6
(assert (not (= tid@4 0)))
(check-sat)
; unknown
; 0.01s
(pop) ; 6
(push) ; 6
; [then-branch 21] tid@4 == 0
(assert (= tid@4 0))
(pop) ; 6
(push) ; 6
; [else-branch 21] tid@4 != 0
(assert (not (= tid@4 0)))
(pop) ; 6
(declare-const i@73 Int)
(declare-const vs@74 $FVF<$Seq<$Ref>>)
(assert (and
($Seq.equal ($FVF.lookup_src vs@74 this@1) $t@12)
($Set.equal ($FVF.domain_src vs@74) ($Set.singleton this@1))))
; [eval] (i in [0..gsize))
; [eval] [0..gsize)
(push) ; 6
(assert (not (not ($Seq.contains ($Seq.range 0 gsize@3) i@73))))
(check-sat)
; unknown
(pop) ; 6
(assert ($Seq.contains ($Seq.range 0 gsize@3) i@73))
(push) ; 6
(assert (not (not (= gsize@3 0))))
(check-sat)
; unsat
; 0.00s
(pop) ; 6
(push) ; 6
(assert (not (or
(= (/ (to_real 1) (to_real gsize@3)) $Perm.No)
(< $Perm.No (/ (to_real 1) (to_real gsize@3))))))
(check-sat)
; unsat
; 0.00s
(pop) ; 6
; [eval] this.src[i]
(push) ; 6
(assert (not (< $Perm.No $k@11)))
(check-sat)
; unsat
; 0.00s
(pop) ; 6
(declare-const fvf@75 $FVF<$Seq<$Ref>>)
(push) ; 6
(assert (not (< $Perm.Write (/ (to_real 2) (to_real gsize@3)))))
(check-sat)
; unknown
; 0.02s
(pop) ; 6
(push) ; 6
(assert (not (forall ((x Int) (y Int)) (!
(implies
(and
($Seq.contains ($Seq.range 0 gsize@3) x)
($Seq.contains ($Seq.range 0 gsize@3) y)
(=
($Seq.index ($FVF.lookup_src vs@74 this@1) x)
($Seq.index ($FVF.lookup_src vs@74 this@1) y)))
(= x y))
:pattern (($Seq.index ($FVF.lookup_src vs@74 this@1) x) ($Seq.index
($FVF.lookup_src vs@74 this@1)
y))))))
(check-sat)
; unsat
; 0.00s
(pop) ; 6
(declare-fun inv@76 ($Ref) Int)
(assert (forall ((r $Ref)) (!
(implies
($Seq.contains ($Seq.range 0 gsize@3) i@73)
(= ($Seq.index ($FVF.lookup_src vs@74 this@1) (inv@76 r)) r))
:pattern (($Seq.index ($FVF.lookup_src vs@74 this@1) (inv@76 r))))))
(assert (forall ((i@73 Int)) (!
(implies
($Seq.contains ($Seq.range 0 gsize@3) i@73)
(= (inv@76 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73)) i@73))
:pattern ((inv@76 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73)))
; :pattern (($Seq.contains ($Seq.range 0 gsize@3) i@73))
)))
(declare-const vs@77 $FVF<Int>)
(push) ; 6
(assert (not (forall ((r $Ref)) (!
(=
(-
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite
; (and (<= 0 (inv@76 r)) (< (inv@76 r) gsize@3))
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(= r ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
$Perm.No)
))))
(check-sat)
; unknown
; 0.01s
(pop) ; 6
(push) ; 6
(assert (not (=
(-
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@76 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73)))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
($Perm.min
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@76 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73)))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(=
($Seq.index ($FVF.lookup_src vs@74 this@1) i@73)
($Seq.index $t@14 tid@4))
$Perm.Write
$Perm.No)))
$Perm.No)))
(check-sat)
; unknown
(pop) ; 6
(push) ; 6
(assert (not (forall ((r $Ref)) (!
(=
(-
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
($Perm.min
(-
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
($Perm.min
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(= r ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
(ite
(= r ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
$Perm.No)))
$Perm.No)
))))
(check-sat)
; unknown
; 0.02s
(pop) ; 6
(push) ; 6
(assert (not (=
(-
(-
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@76 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73)))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
($Perm.min
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@76 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73)))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(=
($Seq.index ($FVF.lookup_src vs@74 this@1) i@73)
($Seq.index $t@14 tid@4))
$Perm.Write
$Perm.No)))
($Perm.min
(-
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@76 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73)))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
($Perm.min
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@76 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73)))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(=
($Seq.index ($FVF.lookup_src vs@74 this@1) i@73)
($Seq.index $t@14 tid@4))
$Perm.Write
$Perm.No)))
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@17 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73)))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)))
$Perm.No)))
(check-sat)
; unsat
; 0.00s
(pop) ; 6
(assert (forall ((i@73 Int)) (!
(implies
(= ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73) ($Seq.index $t@14 tid@4))
(=
($FVF.lookup_Integer_value vs@77 ($Seq.index
($FVF.lookup_src vs@74 this@1)
i@73))
($FVF.lookup_Integer_value vs@37 ($Seq.index
($FVF.lookup_src vs@74 this@1)
i@73))))
:pattern (($FVF.lookup_Integer_value vs@77 ($Seq.index
($FVF.lookup_src vs@74 this@1)
i@73)))
:pattern (($FVF.lookup_Integer_value vs@37 ($Seq.index
($FVF.lookup_src vs@74 this@1)
i@73))))))
(assert (forall ((i@73 Int)) (!
(implies
(ite
($Seq.contains
($Seq.range 0 gsize@3)
(inv@17 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73)))
(< $Perm.No (/ (to_real 1) (to_real gsize@3)))
false)
(=
($FVF.lookup_Integer_value vs@77 ($Seq.index
($FVF.lookup_src vs@74 this@1)
i@73))
($FVF.lookup_Integer_value $t@16 ($Seq.index
($FVF.lookup_src vs@74 this@1)
i@73))))
:pattern (($FVF.lookup_Integer_value vs@77 ($Seq.index
($FVF.lookup_src vs@74 this@1)
i@73)))
:pattern (($FVF.lookup_Integer_value $t@16 ($Seq.index
($FVF.lookup_src vs@74 this@1)
i@73))))))
(assert ($Set.equal
($FVF.domain_Integer_value vs@77)
($Set.union
($FVF.domain_Integer_value $t@16)
($FVF.domain_Integer_value vs@37))))
; [eval] false || (__last_barrier == 0)
(push) ; 6
(push) ; 7
(assert (not false))
(check-sat)
; unknown
; 0.02s
(pop) ; 7
; (push) ; 7
; ; [then-branch 22] True
; ; [eval] __last_barrier == 0
; (pop) ; 7
; [dead else-branch 22] False
(pop) ; 6
; [eval] __last_barrier == 1
; (push) ; 6
; (assert (not (not (= 0 1))))
; (check-sat)
; ; unsat
; ; 0.00s
; (pop) ; 6
; (push) ; 6
; (assert (not (= 0 1)))
; (check-sat)
; ; unknown
; ; 0.02s
; (pop) ; 6
; [dead then-branch 23] 0 == 1
(push) ; 6
; [else-branch 23] 0 != 1
(assert (not (= 0 1)))
; [eval] __last_barrier == 0
(push) ; 7
(assert (not false))
(check-sat)
; unknown
; 0.02s
(pop) ; 7
(push) ; 7
; [then-branch 24] True
; [eval] this.dst[tid]
(declare-const sk@78 $Ref)
(declare-const vs@79 $FVF<Int>)
(push) ; 8
(assert (not (forall ((r $Ref)) (!
(=
(-
(-
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(= r ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
($Perm.min
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
(ite
(= r ($Seq.index $t@14 tid@4))
(-
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(= r ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
$Perm.No)))
$Perm.No)
))))
(check-sat)
; unsat
(pop) ; 8
(push) ; 8
(assert (not (=
(-
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
(ite
(= sk@78 ($Seq.index $t@14 tid@4))
(-
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 sk@78))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(= sk@78 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
$Perm.No)))
$Perm.No)))
(check-sat)
; unknown
; 0.04s
(pop) ; 8
(push) ; 8
(assert (not (forall ((r $Ref)) (!
(=
(-
(-
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
($Perm.min
(-
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
($Perm.min
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(= r ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
(ite
(= r ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
$Perm.No)))
($Perm.min
(-
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
(ite
(= r ($Seq.index $t@14 tid@4))
(-
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(= r ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
$Perm.No)))
(ite
(= r ($Seq.index $t@14 tid@4))
(-
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
($Perm.min
(-
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
($Perm.min
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(= r ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite (= r ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
(ite
(= r ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 r))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
$Perm.No)))
$Perm.No)))
$Perm.No)
))))
(check-sat)
; unknown
; 0.03s
(pop) ; 8
(push) ; 8
(assert (not (=
(-
(-
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
(ite
(= sk@78 ($Seq.index $t@14 tid@4))
(-
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 sk@78))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(= sk@78 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
$Perm.No)))
($Perm.min
(-
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
(ite
(= sk@78 ($Seq.index $t@14 tid@4))
(-
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 sk@78))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(= sk@78 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
$Perm.No)))
(ite
(= sk@78 ($Seq.index $t@14 tid@4))
(-
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 sk@78))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
($Perm.min
(-
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 sk@78))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
($Perm.min
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 sk@78))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(= sk@78 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
(ite
(= sk@78 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 sk@78))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
$Perm.No)))
$Perm.No)))
$Perm.No)))
(check-sat)
; unsat
(pop) ; 8
(assert (forall ((sk@78 $Ref)) (!
(implies
(<
$Perm.No
(-
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
($Perm.min
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 sk@78))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(= sk@78 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No))))
(=
($FVF.lookup_Integer_value vs@79 sk@78)
($FVF.lookup_Integer_value vs@37 sk@78)))
:pattern (($FVF.lookup_Integer_value vs@79 sk@78))
:pattern (($FVF.lookup_Integer_value vs@37 sk@78)))))
(assert (forall ((sk@78 $Ref)) (!
(implies
(<
$Perm.No
(-
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 sk@78))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
($Perm.min
(-
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 sk@78))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
($Perm.min
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@76 sk@78))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
(ite
(= sk@78 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite (= sk@78 ($Seq.index $t@14 tid@4)) $Perm.Write $Perm.No)
$Perm.No)))
(ite
(= sk@78 ($Seq.index ($FVF.lookup_src vs@74 this@1) i@73))
(ite
($Seq.contains ($Seq.range 0 gsize@3) (inv@17 sk@78))
(/ (to_real 1) (to_real gsize@3))
$Perm.No)
$Perm.No))))
(=
($FVF.lookup_Integer_value vs@79 sk@78)
($FVF.lookup_Integer_value $t@16 sk@78)))
:pattern (($FVF.lookup_Integer_value vs@79 sk@78))
:pattern (($FVF.lookup_Integer_value $t@16 sk@78)))))
(assert ($Set.equal
($FVF.domain_Integer_value vs@79)
($Set.union
($FVF.domain_Integer_value $t@16)
($FVF.domain_Integer_value vs@37))))
; [eval] (0 <= k) && (k <= half)
; [eval] 0 <= k
(push) ; 8
(push) ; 9
(assert (not false))
(echo "This might take a while. Or not.")
(check-sat)
; unknown
; 0.11s
(pop) ; 9
(get-info :all-statistics)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment