-
Notifications
You must be signed in to change notification settings - Fork 2
/
els-03.smt2
72 lines (56 loc) · 1.05 KB
/
els-03.smt2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
(set-logic QF_SHIDLIA)
(set-info :source |
Quang Loc Le.
|)
(set-info :smt-lib-version 2.6)
(set-info :category "crafted")
(set-info :status unsat)
(set-info :version "2018-06-22")
; Sorts for locations, one by cell sort
(declare-sort RefSll_t 0)
; Types of cells in the heap
(declare-datatypes (
(Sll_t 0)
) (
((c_Sll_t (next RefSll_t) ))
)
)
; Type of heap
(declare-heap (RefSll_t Sll_t)
)
; User defined predicate
(define-fun-rec els ((in RefSll_t)(len1 Int)) Bool
(or
(and
(= in (as nil RefSll_t))
(= len1 0)
(_ emp RefSll_t Sll_t)
)
(exists ((u1 RefSll_t)(u2 RefSll_t)(len3 Int))
(and
(= len1 (+ len3 2 ) )
(sep
(pto in (c_Sll_t u1 ))
(pto u1 (c_Sll_t u2 ))
(els u2 len3 )
)
)
)
)
)
(check-sat)
;; variables
(declare-const u_emp RefSll_t)
(declare-const t_emp RefSll_t)
(declare-const n1 Int)
(declare-const n2 Int)
(assert
(and
(= n1 (+ n2 n2 1) )
(sep
(els u_emp n1)
(els t_emp n2)
)
)
)
(check-sat)