File: bcv-searchStackFrame-only-suffix-matters.lisp

package info (click to toggle)
acl2 8.6%2Bdfsg-2
  • links: PTS
  • area: main
  • in suites: trixie
  • size: 1,111,420 kB
  • sloc: lisp: 17,818,294; java: 125,359; python: 28,122; javascript: 23,458; cpp: 18,851; ansic: 11,569; perl: 7,678; xml: 5,591; sh: 3,976; makefile: 3,833; ruby: 2,633; yacc: 1,126; ml: 763; awk: 295; csh: 233; lex: 197; php: 178; tcl: 49; asm: 23; haskell: 17
file content (127 lines) | stat: -rw-r--r-- 4,628 bytes parent folder | download | duplicates (2)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
(in-package "BCV")
(include-book "typechecker")
(include-book "typechecker-ext")
(include-book "typechecker-simple")
(include-book "bcv-base")

;----------------------------------------------------------------------


(defthm if-found-pc-in-suffix-found-in-stackmaps
  (implies (and (is-suffix stack-maps1 stack-maps)
                (strictly-ordered (extract-frame-pc stack-maps))
                (member pc (extract-frame-pc stack-maps1)))
           (member pc (extract-frame-pc stack-maps))))

(defthm is-suffix-is-suffix-extract-frame-pc
  (implies (is-suffix stack-maps1 stack-maps)
           (is-suffix (extract-frame-pc stack-maps1)
                      (extract-frame-pc stack-maps))))



(defthm prefix-member-equal
  (implies (and (ordered (extract-frame-pc l1))
                (isstackmapframe x)
                (<= (mapOffset (getMap (car l1))) y)
                (< (mapOffset (getMap x)) (mapOffset (getMap (car l1)))))
           (equal (searchStackFrame y (cons x l1))
                  (searchStackFrame y l1)))
  :hints (("Goal" :in-theory (disable isstackmapframe 
                                      getMap
                                      mapFrame
                                      mapOffset))))


(defun prefix-less-stack-maps (v l)
  (if (endp l) nil
    (if (< (mapOffset (getMap (car l))) v)
        (cons (car l) (prefix-less-stack-maps v (cdr l)))
      nil)))

(defun all-stack-map (l)
  (if (endp l)
      t
    (and (isstackmapframe (car l))
         (all-stack-map (cdr l)))))
         

(defthm searchStackFrame-equal-if-append-prefix-less 
  (implies (and (<= v pc)
                (all-stack-map l2))
           (equal (searchStackFrame pc (append (prefix-less-stack-maps v l2)
                                               l1))
                  (searchStackFrame pc l1)))
  :hints (("Goal" :do-not '(generalize)
           :in-theory (disable isstackmapframe 
                               getMap
                               mapFrame
                               mapOffset))))

(defun extract-frame-pc-2 (l2)
  (if (endp l2) nil
    (cons (mapOffset (getMap (car l2)))
          (extract-frame-pc-2 (cdr l2)))))
  

(defthm strictly-ordered-is-suffix-reduce
  (implies (and (strictly-ordered (extract-frame-pc-2 l2))
                (is-suffix l1 l2)
                (consp l1))
           (equal (append (prefix-less-stack-maps (mapOffset (getMap (car l1))) l2)
                          l1)
                  l2))
  :hints (("Goal" :do-not '(generalize)
           :induct (is-suffix l1 l2)
           :in-theory (disable isstackmapframe 
                               getMap
                               mapFrame
                               mapOffset))))

(defthm is-suffix-member-x
  (implies (and (IS-SUFFIX L1 L2)
                (member x l1))
           (member x l2)))


(defthm all-stack-map-stack-map-wrap
  (all-stack-map (stack-map-wrap anylist)))

(defthm extract-frame-pc-2-equal-extract-frame-pc
  (equal (extract-frame-pc-2 (stack-map-wrap stack-maps))
         (extract-frame-pc stack-maps)))

(defthm is-suffix-is-suffix-wrap
  (implies    (IS-SUFFIX STACK-MAPS1 STACK-MAPS)
              (IS-SUFFIX (STACK-MAP-WRAP STACK-MAPS1)
                         (STACK-MAP-WRAP STACK-MAPS))))
           

(defthm searchStackFrame-reduce-lemma
  (implies (equal (mapOffset stackframe) pc)
           (equal (SEARCHSTACKFRAME pc (cons (makestackmap stackframe) l))
                  (mapFrame stackframe))))

(defthm isstackmapframe-make-stack-map
  (ISSTACKMAPFRAME (MAKESTACKMAP STACK-MAPS2)))
        
(defthm searchStackFrame-reduce
  (implies (and (is-suffix stack-maps1 stack-maps)
                (consp stack-maps1)
                (strictly-ordered (extract-frame-pc stack-maps))
                (<= (mapOffset (car stack-maps1)) pc))
           (equal (searchStackFrame pc (stack-map-wrap stack-maps1))
                  (searchStackFrame pc (stack-map-wrap stack-maps))))
    :hints (("Goal" :do-not '(generalize)
             :do-not-induct t
             :in-theory (disable isstackmapframe 
                                 getMap
                                 ;;searchStackFrame-equal-if-append-prefix-less 
                                 strictly-ordered-is-suffix-reduce
                                 makestackmap
                                 mapFrame
                                 mapOffset)
             :use ((:instance strictly-ordered-is-suffix-reduce
                              (l2 (stack-map-wrap stack-maps))
                              (l1 (stack-map-wrap stack-maps1)))))))