1 logic eq_unit : unit, unit -> prop
3 logic neq_unit : unit, unit -> prop
5 logic eq_bool : bool, bool -> prop
7 logic neq_bool : bool, bool -> prop
9 logic lt_int : int, int -> prop
11 logic le_int : int, int -> prop
13 logic gt_int : int, int -> prop
15 logic ge_int : int, int -> prop
17 logic eq_int : int, int -> prop
19 logic neq_int : int, int -> prop
21 logic add_int : int, int -> int
23 logic sub_int : int, int -> int
25 logic mul_int : int, int -> int
27 logic div_int : int, int -> int
29 logic mod_int : int, int -> int
31 logic neg_int : int -> int
33 predicate zwf_zero(a: int, b: int) = ((0 <= b) and (a < b))
35 logic bw_compl : int -> int
37 logic bw_and : int, int -> int
39 logic bw_xor : int, int -> int
41 logic bw_or : int, int -> int
43 logic lsl : int, int -> int
45 logic lsr : int, int -> int
53 logic block_length : alloc_table, 'a1 pointer -> int
55 logic base_addr : 'a1 pointer -> 'a1 addr
57 logic offset : 'a1 pointer -> int
59 logic shift : 'a1 pointer, int -> 'a1 pointer
61 logic sub_pointer : 'a1 pointer, 'a1 pointer -> int
63 predicate lt_pointer(p1: 'a1 pointer, p2: 'a1 pointer) =
64 ((base_addr(p1) = base_addr(p2)) and (offset(p1) < offset(p2)))
66 predicate le_pointer(p1: 'a1 pointer, p2: 'a1 pointer) =
67 ((base_addr(p1) = base_addr(p2)) and (offset(p1) <= offset(p2)))
69 predicate gt_pointer(p1: 'a1 pointer, p2: 'a1 pointer) =
70 ((base_addr(p1) = base_addr(p2)) and (offset(p1) > offset(p2)))
72 predicate ge_pointer(p1: 'a1 pointer, p2: 'a1 pointer) =
73 ((base_addr(p1) = base_addr(p2)) and (offset(p1) >= offset(p2)))
75 predicate valid(a: alloc_table, p: 'a1 pointer) =
76 ((0 <= offset(p)) and (offset(p) < block_length(a, p)))
78 predicate valid_index(a: alloc_table, p: 'a1 pointer, i: int) =
79 ((0 <= (offset(p) + i)) and ((offset(p) + i) < block_length(a, p)))
81 predicate valid_range(a: alloc_table, p: 'a1 pointer, i: int, j: int) =
82 ((0 <= (offset(p) + i)) and ((offset(p) + j) < block_length(a, p)))
85 (forall p:'a1 pointer.
86 (forall i:int [offset(shift(p, i))]. (offset(shift(p,
87 i)) = (offset(p) + i))))
89 axiom shift_zero: (forall p:'a1 pointer [shift(p, 0)]. (shift(p, 0) = p))
92 (forall p:'a1 pointer.
94 (forall j:int [shift(shift(p, i), j)]. (shift(shift(p, i),
95 j) = shift(p, (i + j))))))
97 axiom base_addr_shift:
98 (forall p:'a1 pointer.
99 (forall i:int [base_addr(shift(p, i))]. (base_addr(shift(p,
100 i)) = base_addr(p))))
102 axiom block_length_shift:
103 (forall a:alloc_table.
104 (forall p:'a1 pointer.
105 (forall i:int [block_length(a, shift(p, i))]. (block_length(a, shift(p,
106 i)) = block_length(a, p)))))
108 axiom base_addr_block_length:
109 (forall a:alloc_table.
110 (forall p1:'a1 pointer.
111 (forall p2:'a1 pointer.
112 ((base_addr(p1) = base_addr(p2)) -> (block_length(a,
113 p1) = block_length(a, p2))))))
115 axiom pointer_pair_1:
116 (forall p1:'a1 pointer.
117 (forall p2:'a1 pointer.
118 (((base_addr(p1) = base_addr(p2)) and (offset(p1) = offset(p2))) ->
121 axiom pointer_pair_2:
122 (forall p1:'a1 pointer.
123 (forall p2:'a1 pointer.
125 ((base_addr(p1) = base_addr(p2)) and (offset(p1) = offset(p2))))))
127 axiom neq_base_addr_neq_shift:
128 (forall p1:'a1 pointer.
129 (forall p2:'a1 pointer.
132 ((base_addr(p1) <> base_addr(p2)) -> (shift(p1, i) <> shift(p2, j)))))))
134 axiom neq_offset_neq_shift:
135 (forall p1:'a1 pointer.
136 (forall p2:'a1 pointer.
139 (((offset(p1) + i) <> (offset(p2) + j)) -> (shift(p1,
140 i) <> shift(p2, j)))))))
142 axiom eq_offset_eq_shift:
143 (forall p1:'a1 pointer.
144 (forall p2:'a1 pointer.
147 ((base_addr(p1) = base_addr(p2)) ->
148 (((offset(p1) + i) = (offset(p2) + j)) -> (shift(p1,
149 i) = shift(p2, j))))))))
151 axiom valid_index_valid_shift:
152 (forall a:alloc_table.
153 (forall p:'a1 pointer.
154 (forall i:int. (valid_index(a, p, i) -> valid(a, shift(p, i))))))
156 axiom valid_range_valid_shift:
157 (forall a:alloc_table.
158 (forall p:'a1 pointer.
162 (valid_range(a, p, i, j) ->
163 (((i <= k) and (k <= j)) -> valid(a, shift(p, k)))))))))
165 axiom valid_range_valid:
166 (forall a:alloc_table.
167 (forall p:'a1 pointer.
170 (valid_range(a, p, i, j) ->
171 (((i <= 0) and (0 <= j)) -> valid(a, p)))))))
173 axiom valid_range_valid_index:
174 (forall a:alloc_table.
175 (forall p:'a1 pointer.
179 (valid_range(a, p, i, j) ->
180 (((i <= k) and (k <= j)) -> valid_index(a, p, k))))))))
182 axiom sub_pointer_def:
183 (forall p1:'a1 pointer.
184 (forall p2:'a1 pointer.
185 ((base_addr(p1) = base_addr(p2)) -> (sub_pointer(p1,
186 p2) = (offset(p1) - offset(p2))))))
190 logic acc : ('a1, 'a2) memory, 'a2 pointer -> 'a1
192 logic upd : ('a1, 'a2) memory, 'a2 pointer, 'a1 -> ('a1, 'a2) memory
195 (forall m:('a1, 'a2) memory.
196 (forall p:'a2 pointer.
197 (forall a:'a1 [acc(upd(m, p, a), p)]. (acc(upd(m, p, a), p) = a))))
200 (forall m:('a1, 'a2) memory.
201 (forall p1:'a2 pointer.
202 (forall p2:'a2 pointer.
203 (forall a:'a1 [acc(upd(m, p1, a), p2)].
204 ((p1 <> p2) -> (acc(upd(m, p1, a), p2) = acc(m, p2)))))))
206 axiom false_not_true: (false <> true)
210 logic pset_empty : 'a1 pset
212 logic pset_singleton : 'a1 pointer -> 'a1 pset
214 logic pset_star : 'a2 pset, ('a1 pointer, 'a2) memory -> 'a1 pset
216 logic pset_all : 'a1 pset -> 'a1 pset
218 logic pset_range : 'a1 pset, int, int -> 'a1 pset
220 logic pset_range_left : 'a1 pset, int -> 'a1 pset
222 logic pset_range_right : 'a1 pset, int -> 'a1 pset
224 logic pset_acc_all : 'a2 pset, ('a1 pointer, 'a2) memory -> 'a1 pset
226 logic pset_acc_range : 'a2 pset, ('a1 pointer, 'a2) memory, int,
229 logic pset_acc_range_left : 'a2 pset, ('a1 pointer, 'a2) memory,
232 logic pset_acc_range_right : 'a2 pset, ('a1 pointer, 'a2) memory,
235 logic pset_union : 'a1 pset, 'a1 pset -> 'a1 pset
237 logic not_in_pset : 'a1 pointer, 'a1 pset -> prop
239 predicate not_assigns(a: alloc_table, m1: ('a1, 'a2) memory, m2: ('a1,
240 'a2) memory, l: 'a2 pset) =
241 (forall p:'a2 pointer.
242 (valid(a, p) -> (not_in_pset(p, l) -> (acc(m2, p) = acc(m1, p)))))
244 axiom pset_empty_intro: (forall p:'a1 pointer. not_in_pset(p, pset_empty))
246 axiom pset_singleton_intro:
247 (forall p1:'a1 pointer.
248 (forall p2:'a1 pointer [not_in_pset(p1, pset_singleton(p2))].
249 ((p1 <> p2) -> not_in_pset(p1, pset_singleton(p2)))))
251 axiom pset_singleton_elim:
252 (forall p1:'a1 pointer.
253 (forall p2:'a1 pointer [not_in_pset(p1, pset_singleton(p2))].
254 (not_in_pset(p1, pset_singleton(p2)) -> (p1 <> p2))))
256 axiom not_not_in_singleton:
257 (forall p:'a1 pointer. (not not_in_pset(p, pset_singleton(p))))
259 axiom pset_union_intro:
262 (forall p:'a1 pointer [not_in_pset(p, pset_union(l1, l2))].
263 ((not_in_pset(p, l1) and not_in_pset(p, l2)) -> not_in_pset(p,
264 pset_union(l1, l2))))))
266 axiom pset_union_elim1:
269 (forall p:'a1 pointer [not_in_pset(p, pset_union(l1, l2))].
270 (not_in_pset(p, pset_union(l1, l2)) -> not_in_pset(p, l1)))))
272 axiom pset_union_elim2:
275 (forall p:'a1 pointer [not_in_pset(p, pset_union(l1, l2))].
276 (not_in_pset(p, pset_union(l1, l2)) -> not_in_pset(p, l2)))))
278 axiom pset_star_intro:
280 (forall m:('a2 pointer, 'a1) memory.
281 (forall p:'a2 pointer [not_in_pset(p, pset_star(l, m))].
282 ((forall p1:'a1 pointer. ((p = acc(m, p1)) -> not_in_pset(p1, l))) ->
283 not_in_pset(p, pset_star(l, m))))))
285 axiom pset_star_elim:
287 (forall m:('a2 pointer, 'a1) memory.
288 (forall p:'a2 pointer [not_in_pset(p, pset_star(l, m))].
289 (not_in_pset(p, pset_star(l, m)) ->
290 (forall p1:'a1 pointer. ((p = acc(m, p1)) -> not_in_pset(p1, l)))))))
292 axiom pset_all_intro:
293 (forall p:'a1 pointer.
294 (forall l:'a1 pset [not_in_pset(p, pset_all(l))].
295 ((forall p1:'a1 pointer.
296 ((not not_in_pset(p1, l)) -> (base_addr(p) <> base_addr(p1)))) ->
297 not_in_pset(p, pset_all(l)))))
300 (forall p:'a1 pointer.
301 (forall l:'a1 pset [not_in_pset(p, pset_all(l))].
302 (not_in_pset(p, pset_all(l)) ->
303 (forall p1:'a1 pointer.
304 ((not not_in_pset(p1, l)) -> (base_addr(p) <> base_addr(p1)))))))
306 axiom pset_range_intro:
307 (forall p:'a1 pointer.
310 (forall b:int [not_in_pset(p, pset_range(l, a, b))].
311 ((forall p1:'a1 pointer.
312 (not_in_pset(p1, l) or
314 (((a <= i) and (i <= b)) -> (p <> shift(p1, i)))))) ->
315 not_in_pset(p, pset_range(l, a, b)))))))
317 axiom pset_range_elim:
318 (forall p:'a1 pointer.
321 (forall b:int [not_in_pset(p, pset_range(l, a, b))].
322 (not_in_pset(p, pset_range(l, a, b)) ->
323 (forall p1:'a1 pointer.
324 ((not not_in_pset(p1, l)) ->
326 (((a <= i) and (i <= b)) -> (shift(p1, i) <> p))))))))))
328 axiom pset_range_left_intro:
329 (forall p:'a1 pointer.
331 (forall a:int [not_in_pset(p, pset_range_left(l, a))].
332 ((forall p1:'a1 pointer.
333 (not_in_pset(p1, l) or
334 (forall i:int. ((i <= a) -> (p <> shift(p1, i)))))) ->
335 not_in_pset(p, pset_range_left(l, a))))))
337 axiom pset_range_left_elim:
338 (forall p:'a1 pointer.
340 (forall a:int [not_in_pset(p, pset_range_left(l, a))].
341 (not_in_pset(p, pset_range_left(l, a)) ->
342 (forall p1:'a1 pointer.
343 ((not not_in_pset(p1, l)) ->
344 (forall i:int. ((i <= a) -> (shift(p1, i) <> p)))))))))
346 axiom pset_range_right_intro:
347 (forall p:'a1 pointer.
349 (forall a:int [not_in_pset(p, pset_range_right(l, a))].
350 ((forall p1:'a1 pointer.
351 (not_in_pset(p1, l) or
352 (forall i:int. ((a <= i) -> (p <> shift(p1, i)))))) ->
353 not_in_pset(p, pset_range_right(l, a))))))
355 axiom pset_range_right_elim:
356 (forall p:'a1 pointer.
358 (forall a:int [not_in_pset(p, pset_range_right(l, a))].
359 (not_in_pset(p, pset_range_right(l, a)) ->
360 (forall p1:'a1 pointer.
361 ((not not_in_pset(p1, l)) ->
362 (forall i:int. ((a <= i) -> (shift(p1, i) <> p)))))))))
364 axiom pset_acc_all_intro:
365 (forall p:'a1 pointer.
367 (forall m:('a1 pointer, 'a2) memory [not_in_pset(p, pset_acc_all(l,
369 ((forall p1:'a2 pointer.
370 ((not not_in_pset(p1, l)) ->
371 (forall i:int. (p <> acc(m, shift(p1, i)))))) ->
372 not_in_pset(p, pset_acc_all(l, m))))))
374 axiom pset_acc_all_elim:
375 (forall p:'a1 pointer.
377 (forall m:('a1 pointer, 'a2) memory [not_in_pset(p, pset_acc_all(l,
379 (not_in_pset(p, pset_acc_all(l, m)) ->
380 (forall p1:'a2 pointer.
381 ((not not_in_pset(p1, l)) ->
382 (forall i:int. (acc(m, shift(p1, i)) <> p))))))))
384 axiom pset_acc_range_intro:
385 (forall p:'a1 pointer.
387 (forall m:('a1 pointer, 'a2) memory.
389 (forall b:int [not_in_pset(p, pset_acc_range(l, m, a, b))].
390 ((forall p1:'a2 pointer.
391 ((not not_in_pset(p1, l)) ->
393 (((a <= i) and (i <= b)) -> (p <> acc(m, shift(p1, i))))))) ->
394 not_in_pset(p, pset_acc_range(l, m, a, b))))))))
396 axiom pset_acc_range_elim:
397 (forall p:'a1 pointer.
399 (forall m:('a1 pointer, 'a2) memory.
402 (not_in_pset(p, pset_acc_range(l, m, a, b)) ->
403 (forall p1:'a2 pointer.
404 ((not not_in_pset(p1, l)) ->
406 (((a <= i) and (i <= b)) -> (acc(m, shift(p1, i)) <> p)))))))))))
408 axiom pset_acc_range_left_intro:
409 (forall p:'a1 pointer.
411 (forall m:('a1 pointer, 'a2) memory.
412 (forall a:int [not_in_pset(p, pset_acc_range_left(l, m, a))].
413 ((forall p1:'a2 pointer.
414 ((not not_in_pset(p1, l)) ->
415 (forall i:int. ((i <= a) -> (p <> acc(m, shift(p1, i))))))) ->
416 not_in_pset(p, pset_acc_range_left(l, m, a)))))))
418 axiom pset_acc_range_left_elim:
419 (forall p:'a1 pointer.
421 (forall m:('a1 pointer, 'a2) memory.
422 (forall a:int [not_in_pset(p, pset_acc_range_left(l, m, a))].
423 (not_in_pset(p, pset_acc_range_left(l, m, a)) ->
424 (forall p1:'a2 pointer.
425 ((not not_in_pset(p1, l)) ->
426 (forall i:int. ((i <= a) -> (acc(m, shift(p1, i)) <> p))))))))))
428 axiom pset_acc_range_right_intro:
429 (forall p:'a1 pointer.
431 (forall m:('a1 pointer, 'a2) memory.
432 (forall a:int [not_in_pset(p, pset_acc_range_right(l, m, a))].
433 ((forall p1:'a2 pointer.
434 ((not not_in_pset(p1, l)) ->
435 (forall i:int. ((a <= i) -> (p <> acc(m, shift(p1, i))))))) ->
436 not_in_pset(p, pset_acc_range_right(l, m, a)))))))
438 axiom pset_acc_range_right_elim:
439 (forall p:'a1 pointer.
441 (forall m:('a1 pointer, 'a2) memory.
442 (forall a:int [not_in_pset(p, pset_acc_range_right(l, m, a))].
443 (not_in_pset(p, pset_acc_range_right(l, m, a)) ->
444 (forall p1:'a2 pointer.
445 ((not not_in_pset(p1, l)) ->
446 (forall i:int. ((a <= i) -> (acc(m, shift(p1, i)) <> p))))))))))
448 axiom not_assigns_trans:
449 (forall a:alloc_table.
451 (forall m1:('a2, 'a1) memory.
452 (forall m2:('a2, 'a1) memory.
453 (forall m3:('a2, 'a1) memory.
454 (not_assigns(a, m1, m2, l) ->
455 (not_assigns(a, m2, m3, l) -> not_assigns(a, m1, m3, l))))))))
457 axiom not_assigns_refl:
458 (forall a:alloc_table.
460 (forall m:('a2, 'a1) memory. not_assigns(a, m, m, l))))
462 predicate valid_acc(m1: ('a1 pointer, 'a2) memory) =
463 (forall p:'a2 pointer.
464 (forall a:alloc_table. (valid(a, p) -> valid(a, acc(m1, p)))))
466 predicate valid_acc_range(m1: ('a1 pointer, 'a2) memory, size: int) =
467 (forall p:'a2 pointer.
468 (forall a:alloc_table.
469 (valid(a, p) -> valid_range(a, acc(m1, p), 0, (size - 1)))))
471 axiom valid_acc_range_valid:
472 (forall m1:('a1 pointer, 'a2) memory.
474 (forall p:'a2 pointer.
475 (forall a:alloc_table.
476 (valid_acc_range(m1, size) -> (valid(a, p) -> valid(a, acc(m1, p))))))))
478 predicate separation1(m1: ('a1 pointer, 'a2) memory, m2: ('a1 pointer,
480 (forall p:'a2 pointer.
481 (forall a:alloc_table.
482 (valid(a, p) -> (base_addr(acc(m1, p)) <> base_addr(acc(m2, p))))))
484 predicate separation1_range1(m1: ('a1 pointer, 'a2) memory, m2: ('a1 pointer,
485 'a2) memory, size: int) =
486 (forall p:'a2 pointer.
487 (forall a:alloc_table.
491 (((0 <= i1) and (i1 < size)) ->
492 (((0 <= i2) and (i2 < size)) -> (base_addr(acc(m1, shift(p,
493 i1))) <> base_addr(acc(m2, shift(p, i2)))))))))))
495 predicate separation1_range(m: ('a1 pointer, 'a2) memory, size: int) =
496 (forall p:'a2 pointer.
497 (forall a:alloc_table.
500 (((0 <= i1) and (i1 < size)) -> (base_addr(acc(m, shift(p,
501 i1))) <> base_addr(acc(m, p))))))))
503 predicate separation2(m1: ('a1 pointer, 'a2) memory, m2: ('a1 pointer,
505 (forall p1:'a2 pointer.
506 (forall p2:'a2 pointer.
507 ((p1 <> p2) -> (base_addr(acc(m1, p1)) <> base_addr(acc(m2, p2))))))
509 predicate separation2_range1(m1: ('a1 pointer, 'a2) memory, m2: ('a1 pointer,
510 'a2) memory, size: int) =
511 (forall p:'a2 pointer.
512 (forall q:'a2 pointer.
513 (forall a:alloc_table.
515 (((0 <= i) and (i < size)) -> (base_addr(acc(m1, shift(p,
516 i))) <> base_addr(acc(m2, q))))))))
518 logic on_heap : alloc_table, 'a1 pointer -> prop
520 logic on_stack : alloc_table, 'a1 pointer -> prop
522 logic fresh : alloc_table, 'a1 pointer -> prop
524 axiom fresh_not_valid:
525 (forall a:alloc_table.
526 (forall p:'a1 pointer. (fresh(a, p) -> (not valid(a, p)))))
528 axiom fresh_not_valid_shift:
529 (forall a:alloc_table.
530 (forall p:'a1 pointer.
531 (fresh(a, p) -> (forall i:int. (not valid(a, shift(p, i)))))))
533 logic alloc_extends : alloc_table, alloc_table -> prop
535 axiom alloc_extends_valid:
536 (forall a1:alloc_table.
537 (forall a2:alloc_table.
538 (alloc_extends(a1, a2) ->
539 (forall q:'a1 pointer. (valid(a1, q) -> valid(a2, q))))))
541 axiom alloc_extends_valid_index:
542 (forall a1:alloc_table.
543 (forall a2:alloc_table.
544 (alloc_extends(a1, a2) ->
545 (forall q:'a1 pointer.
546 (forall i:int. (valid_index(a1, q, i) -> valid_index(a2, q, i)))))))
548 axiom alloc_extends_valid_range:
549 (forall a1:alloc_table.
550 (forall a2:alloc_table.
551 (alloc_extends(a1, a2) ->
552 (forall q:'a1 pointer.
555 (valid_range(a1, q, i, j) -> valid_range(a2, q, i, j))))))))
557 axiom alloc_extends_refl: (forall a:alloc_table. alloc_extends(a, a))
559 axiom alloc_extends_trans:
560 (forall a1:alloc_table.
561 (forall a2:alloc_table.
562 (forall a3:alloc_table [alloc_extends(a1, a2), alloc_extends(a2, a3)].
563 (alloc_extends(a1, a2) ->
564 (alloc_extends(a2, a3) -> alloc_extends(a1, a3))))))
566 logic free_stack : alloc_table, alloc_table, alloc_table -> prop
568 axiom free_stack_heap:
569 (forall a1:alloc_table.
570 (forall a2:alloc_table.
571 (forall a3:alloc_table.
572 (free_stack(a1, a2, a3) ->
573 (forall p:'a1 pointer.
574 (valid(a2, p) -> (on_heap(a2, p) -> valid(a3, p))))))))
576 axiom free_stack_stack:
577 (forall a1:alloc_table.
578 (forall a2:alloc_table.
579 (forall a3:alloc_table.
580 (free_stack(a1, a2, a3) ->
581 (forall p:'a1 pointer.
582 (valid(a1, p) -> (on_stack(a1, p) -> valid(a3, p))))))))
584 logic null : 'a1 pointer
586 axiom null_not_valid: (forall a:alloc_table. (not valid(a, null)))
598 ((x <= y) -> ((x <= ((x + y) / 2)) and (((x + y) / 2) <= y))))))
600 goal binary_search_impl_po_1:
601 forall t:'a1 pointer.
603 forall alloc:alloc_table.
604 forall intM_t_2:(int,
607 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
610 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
611 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
612 ("CADUCEUS_4": ((n - 1) <= (n - 1)))
614 goal binary_search_impl_po_2:
615 forall t:'a1 pointer.
618 forall alloc:alloc_table.
619 forall intM_t_2:(int,
622 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
625 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
626 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
628 ((0 <= k) and (k < n)) ->
629 (acc(intM_t_2, shift(t, k)) = v) ->
630 ("CADUCEUS_4": (k <= (n - 1)))
632 goal binary_search_impl_po_3:
633 forall t:'a1 pointer.
636 forall alloc:alloc_table.
637 forall intM_t_2:(int,
640 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
643 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
644 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
648 (((0 <= l) and (u <= (n - 1))) and
650 (((0 <= k) and (k < n)) ->
651 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
655 (result = ((l + u) / 2)) ->
656 forall result0:'a1 pointer.
657 (result0 = shift(t, result)) ->
658 valid(alloc, result0)
660 goal binary_search_impl_po_4:
661 forall t:'a1 pointer.
664 forall alloc:alloc_table.
665 forall intM_t_2:(int,
668 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
671 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
672 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
676 (((0 <= l) and (u <= (n - 1))) and
678 (((0 <= k) and (k < n)) ->
679 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
683 (result = ((l + u) / 2)) ->
684 forall result0:'a1 pointer.
685 (result0 = shift(t, result)) ->
686 valid(alloc, result0) ->
688 (result1 = acc(intM_t_2, result0)) ->
691 (l0 = (result + 1)) ->
692 ("CADUCEUS_4": (0 <= l0))
694 goal binary_search_impl_po_5:
695 forall t:'a1 pointer.
698 forall alloc:alloc_table.
699 forall intM_t_2:(int,
702 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
705 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
706 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
710 (((0 <= l) and (u <= (n - 1))) and
712 (((0 <= k) and (k < n)) ->
713 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
717 (result = ((l + u) / 2)) ->
718 forall result0:'a1 pointer.
719 (result0 = shift(t, result)) ->
720 valid(alloc, result0) ->
722 (result1 = acc(intM_t_2, result0)) ->
725 (l0 = (result + 1)) ->
726 ("CADUCEUS_4": (u <= (n - 1)))
728 goal binary_search_impl_po_6:
729 forall t:'a1 pointer.
732 forall alloc:alloc_table.
733 forall intM_t_2:(int,
736 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
739 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
740 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
744 (((0 <= l) and (u <= (n - 1))) and
746 (((0 <= k) and (k < n)) ->
747 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
751 (result = ((l + u) / 2)) ->
752 forall result0:'a1 pointer.
753 (result0 = shift(t, result)) ->
754 valid(alloc, result0) ->
756 (result1 = acc(intM_t_2, result0)) ->
759 (l0 = (result + 1)) ->
761 ((0 <= k) and (k < n)) ->
762 (acc(intM_t_2, shift(t, k)) = v) ->
763 ("CADUCEUS_4": (l0 <= k))
765 goal binary_search_impl_po_7:
766 forall t:'a1 pointer.
769 forall alloc:alloc_table.
770 forall intM_t_2:(int,
773 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
776 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
777 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
781 (((0 <= l) and (u <= (n - 1))) and
783 (((0 <= k) and (k < n)) ->
784 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
788 (result = ((l + u) / 2)) ->
789 forall result0:'a1 pointer.
790 (result0 = shift(t, result)) ->
791 valid(alloc, result0) ->
793 (result1 = acc(intM_t_2, result0)) ->
796 (l0 = (result + 1)) ->
798 ((0 <= k) and (k < n)) ->
799 (acc(intM_t_2, shift(t, k)) = v) ->
800 ("CADUCEUS_4": (k <= u))
802 goal binary_search_impl_po_8:
803 forall t:'a1 pointer.
806 forall alloc:alloc_table.
807 forall intM_t_2:(int,
810 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
813 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
814 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
818 (((0 <= l) and (u <= (n - 1))) and
820 (((0 <= k) and (k < n)) ->
821 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
825 (result = ((l + u) / 2)) ->
826 forall result0:'a1 pointer.
827 (result0 = shift(t, result)) ->
828 valid(alloc, result0) ->
830 (result1 = acc(intM_t_2, result0)) ->
833 (l0 = (result + 1)) ->
834 (0 <= ("CADUCEUS_5": (u - l)))
836 goal binary_search_impl_po_9:
837 forall t:'a1 pointer.
840 forall alloc:alloc_table.
841 forall intM_t_2:(int,
844 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
847 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
848 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
852 (((0 <= l) and (u <= (n - 1))) and
854 (((0 <= k) and (k < n)) ->
855 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
859 (result = ((l + u) / 2)) ->
860 forall result0:'a1 pointer.
861 (result0 = shift(t, result)) ->
862 valid(alloc, result0) ->
864 (result1 = acc(intM_t_2, result0)) ->
867 (l0 = (result + 1)) ->
868 (("CADUCEUS_5": (u - l0)) < ("CADUCEUS_5": (u - l)))
870 goal binary_search_impl_po_10:
871 forall t:'a1 pointer.
874 forall alloc:alloc_table.
875 forall intM_t_2:(int,
878 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
881 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
882 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
886 (((0 <= l) and (u <= (n - 1))) and
888 (((0 <= k) and (k < n)) ->
889 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
893 (result = ((l + u) / 2)) ->
894 forall result0:'a1 pointer.
895 (result0 = shift(t, result)) ->
896 valid(alloc, result0) ->
898 (result1 = acc(intM_t_2, result0)) ->
900 forall result2:'a1 pointer.
901 (result2 = shift(t, result)) ->
902 valid(alloc, result2)
904 goal binary_search_impl_po_11:
905 forall t:'a1 pointer.
908 forall alloc:alloc_table.
909 forall intM_t_2:(int,
912 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
915 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
916 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
920 (((0 <= l) and (u <= (n - 1))) and
922 (((0 <= k) and (k < n)) ->
923 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
927 (result = ((l + u) / 2)) ->
928 forall result0:'a1 pointer.
929 (result0 = shift(t, result)) ->
930 valid(alloc, result0) ->
932 (result1 = acc(intM_t_2, result0)) ->
934 forall result2:'a1 pointer.
935 (result2 = shift(t, result)) ->
936 valid(alloc, result2) ->
938 (result3 = acc(intM_t_2, result2)) ->
941 (u0 = (result - 1)) ->
942 ("CADUCEUS_4": (0 <= l))
944 goal binary_search_impl_po_12:
945 forall t:'a1 pointer.
948 forall alloc:alloc_table.
949 forall intM_t_2:(int,
952 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
955 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
956 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
960 (((0 <= l) and (u <= (n - 1))) and
962 (((0 <= k) and (k < n)) ->
963 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
967 (result = ((l + u) / 2)) ->
968 forall result0:'a1 pointer.
969 (result0 = shift(t, result)) ->
970 valid(alloc, result0) ->
972 (result1 = acc(intM_t_2, result0)) ->
974 forall result2:'a1 pointer.
975 (result2 = shift(t, result)) ->
976 valid(alloc, result2) ->
978 (result3 = acc(intM_t_2, result2)) ->
981 (u0 = (result - 1)) ->
982 ("CADUCEUS_4": (u0 <= (n - 1)))
984 goal binary_search_impl_po_13:
985 forall t:'a1 pointer.
988 forall alloc:alloc_table.
989 forall intM_t_2:(int,
992 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
995 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
996 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
1000 (((0 <= l) and (u <= (n - 1))) and
1002 (((0 <= k) and (k < n)) ->
1003 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
1007 (result = ((l + u) / 2)) ->
1008 forall result0:'a1 pointer.
1009 (result0 = shift(t, result)) ->
1010 valid(alloc, result0) ->
1012 (result1 = acc(intM_t_2, result0)) ->
1014 forall result2:'a1 pointer.
1015 (result2 = shift(t, result)) ->
1016 valid(alloc, result2) ->
1018 (result3 = acc(intM_t_2, result2)) ->
1021 (u0 = (result - 1)) ->
1023 ((0 <= k) and (k < n)) ->
1024 (acc(intM_t_2, shift(t, k)) = v) ->
1025 ("CADUCEUS_4": (l <= k))
1027 goal binary_search_impl_po_14:
1028 forall t:'a1 pointer.
1031 forall alloc:alloc_table.
1032 forall intM_t_2:(int,
1035 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
1038 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
1039 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
1043 (((0 <= l) and (u <= (n - 1))) and
1045 (((0 <= k) and (k < n)) ->
1046 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
1050 (result = ((l + u) / 2)) ->
1051 forall result0:'a1 pointer.
1052 (result0 = shift(t, result)) ->
1053 valid(alloc, result0) ->
1055 (result1 = acc(intM_t_2, result0)) ->
1057 forall result2:'a1 pointer.
1058 (result2 = shift(t, result)) ->
1059 valid(alloc, result2) ->
1061 (result3 = acc(intM_t_2, result2)) ->
1064 (u0 = (result - 1)) ->
1066 ((0 <= k) and (k < n)) ->
1067 (acc(intM_t_2, shift(t, k)) = v) ->
1068 ("CADUCEUS_4": (k <= u0))
1070 goal binary_search_impl_po_15:
1071 forall t:'a1 pointer.
1074 forall alloc:alloc_table.
1075 forall intM_t_2:(int,
1078 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
1081 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
1082 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
1086 (((0 <= l) and (u <= (n - 1))) and
1088 (((0 <= k) and (k < n)) ->
1089 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
1093 (result = ((l + u) / 2)) ->
1094 forall result0:'a1 pointer.
1095 (result0 = shift(t, result)) ->
1096 valid(alloc, result0) ->
1098 (result1 = acc(intM_t_2, result0)) ->
1100 forall result2:'a1 pointer.
1101 (result2 = shift(t, result)) ->
1102 valid(alloc, result2) ->
1104 (result3 = acc(intM_t_2, result2)) ->
1107 (u0 = (result - 1)) ->
1108 (0 <= ("CADUCEUS_5": (u - l)))
1110 goal binary_search_impl_po_16:
1111 forall t:'a1 pointer.
1114 forall alloc:alloc_table.
1115 forall intM_t_2:(int,
1118 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
1121 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
1122 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
1126 (((0 <= l) and (u <= (n - 1))) and
1128 (((0 <= k) and (k < n)) ->
1129 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
1133 (result = ((l + u) / 2)) ->
1134 forall result0:'a1 pointer.
1135 (result0 = shift(t, result)) ->
1136 valid(alloc, result0) ->
1138 (result1 = acc(intM_t_2, result0)) ->
1140 forall result2:'a1 pointer.
1141 (result2 = shift(t, result)) ->
1142 valid(alloc, result2) ->
1144 (result3 = acc(intM_t_2, result2)) ->
1147 (u0 = (result - 1)) ->
1148 (("CADUCEUS_5": (u0 - l)) < ("CADUCEUS_5": (u - l)))
1150 goal binary_search_impl_po_17:
1151 forall t:'a1 pointer.
1154 forall alloc:alloc_table.
1155 forall intM_t_2:(int,
1158 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
1161 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
1162 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
1166 (((0 <= l) and (u <= (n - 1))) and
1168 (((0 <= k) and (k < n)) ->
1169 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
1173 (result = ((l + u) / 2)) ->
1174 forall result0:'a1 pointer.
1175 (result0 = shift(t, result)) ->
1176 valid(alloc, result0) ->
1178 (result1 = acc(intM_t_2, result0)) ->
1180 forall result2:'a1 pointer.
1181 (result2 = shift(t, result)) ->
1182 valid(alloc, result2) ->
1184 (result3 = acc(intM_t_2, result2)) ->
1187 (((result >= 0) and (acc(intM_t_2, shift(t, result)) = v)) or
1188 ((result = (-1)) and
1190 (((0 <= k) and (k < n)) -> (acc(intM_t_2, shift(t, k)) <> v))))))
1192 goal binary_search_impl_po_18:
1193 forall t:'a1 pointer.
1196 forall alloc:alloc_table.
1197 forall intM_t_2:(int,
1200 (((n >= 0) and valid_range(alloc, t, 0, (n - 1))) and
1203 ((((0 <= k1) and (k1 <= k2)) and (k2 <= (n - 1))) -> (acc(intM_t_2,
1204 shift(t, k1)) <= acc(intM_t_2, shift(t, k2)))))))) ->
1208 (((0 <= l) and (u <= (n - 1))) and
1210 (((0 <= k) and (k < n)) ->
1211 ((acc(intM_t_2, shift(t, k)) = v) -> ((l <= k) and (k <= u))))))) ->
1214 ((((-1) >= 0) and (acc(intM_t_2, shift(t, (-1))) = v)) or
1217 (((0 <= k) and (k < n)) -> (acc(intM_t_2, shift(t, k)) <> v))))))