-
Notifications
You must be signed in to change notification settings - Fork 2
/
dll_entails_lspre.sb.smt2
59 lines (45 loc) · 1.07 KB
/
dll_entails_lspre.sb.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
(set-logic QF_SHID)
(set-info :source | Songbird - https://songbird-prover.github.io/ |)
(set-info :smt-lib-version 2)
(set-info :category "crafted")
(set-info :status unsat)
;; singleton heap
(declare-sort Refnode 0)
(declare-datatypes
((node 0))
(((c_node (next Refnode) (prev Refnode)))))
(declare-heap (Refnode node))
;; heap predicates
(define-fun-rec dll ((hd_2 Refnode) (p_3 Refnode) (tl_4 Refnode) (n_5 Refnode)) Bool
(or
(and
(pto hd_2 (c_node n_5 p_3))
(= hd_2 tl_4))
(exists
((x_6 Refnode))
(sep
(pto hd_2 (c_node x_6 p_3))
(dll x_6 hd_2 tl_4 n_5)))))
;; heap predicates
(define-fun-rec ls_pre ((x_7 Refnode) (y_8 Refnode)) Bool
(or
(and
(_ emp Refnode node)
(= x_7 y_8))
(exists
((anon_9 Refnode) (u_10 Refnode))
(sep
(pto x_7 (c_node anon_9 u_10))
(ls_pre u_10 y_8)))))
(check-sat)
;; entailment: dll(x,y,z,t) |- ls_pre(z,y)
(declare-const x Refnode)
(declare-const y Refnode)
(declare-const z Refnode)
(declare-const t Refnode)
(assert
(dll x y z t))
(assert
(not
(ls_pre z y)))
(check-sat)