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 lt_real : real, real -> prop
37 logic le_real : real, real -> prop
39 logic gt_real : real, real -> prop
41 logic ge_real : real, real -> prop
43 logic eq_real : real, real -> prop
45 logic neq_real : real, real -> prop
47 logic add_real : real, real -> real
49 logic sub_real : real, real -> real
51 logic mul_real : real, real -> real
53 logic div_real : real, real -> real
55 logic neg_real : real -> real
57 logic real_of_int : int -> real
59 logic int_of_real : real -> int
61 logic lt_real_bool : real, real -> bool
63 logic le_real_bool : real, real -> bool
65 logic gt_real_bool : real, real -> bool
67 logic ge_real_bool : real, real -> bool
69 logic eq_real_bool : real, real -> bool
71 logic neq_real_bool : real, real -> bool
73 axiom lt_real_bool_axiom:
74 (forall x:real. (forall y:real. ((lt_real_bool(x, y) = true) <-> (x < y))))
76 axiom le_real_bool_axiom:
78 (forall y:real. ((le_real_bool(x, y) = true) <-> (x <= y))))
80 axiom gt_real_bool_axiom:
81 (forall x:real. (forall y:real. ((gt_real_bool(x, y) = true) <-> (x > y))))
83 axiom ge_real_bool_axiom:
85 (forall y:real. ((ge_real_bool(x, y) = true) <-> (x >= y))))
87 axiom eq_real_bool_axiom:
88 (forall x:real. (forall y:real. ((eq_real_bool(x, y) = true) <-> (x = y))))
90 axiom neq_real_bool_axiom:
92 (forall y:real. ((neq_real_bool(x, y) = true) <-> (x <> y))))
94 logic real_max : real, real -> real
96 logic real_min : real, real -> real
100 (forall y:real. ((real_max(x, y) >= x) and (real_max(x, y) >= y))))
102 axiom real_max_is_some:
104 (forall y:real. ((real_max(x, y) = x) or (real_max(x, y) = y))))
106 axiom real_min_is_le:
108 (forall y:real. ((real_min(x, y) <= x) and (real_min(x, y) <= y))))
110 axiom real_min_is_some:
112 (forall y:real. ((real_min(x, y) = x) or (real_min(x, y) = y))))
114 logic sqrt_real : real -> real
116 logic pow_real : real, real -> real
118 logic abs_real : real -> real
121 (forall x:real [abs_real(x)]. ((x >= 0.0) -> (abs_real(x) = x)))
124 (forall x:real [abs_real(x)]. ((x <= 0.0) -> (abs_real(x) = (-x))))
126 logic exp : real -> real
128 logic log : real -> real
130 logic log10 : real -> real
132 axiom log_exp: (forall x:real. (log(exp(x)) = x))
134 logic cos : real -> real
136 logic sin : real -> real
138 logic tan : real -> real
140 logic cosh : real -> real
142 logic sinh : real -> real
144 logic tanh : real -> real
146 logic acos : real -> real
148 logic asin : real -> real
150 logic atan : real -> real
152 logic atan2 : real, real -> real
154 logic hypot : real, real -> real
159 ((((x > 0.0) and (y > 0.0)) -> ((x * y) > 0.0)) and
160 (((x < 0.0) and (y < 0.0)) -> ((x * y) > 0.0)))))
162 axiom abs_minus: (forall x:real. (abs_real((-x)) = abs_real(x)))
166 logic nearest_even : mode
174 logic nearest_away : mode
178 logic add_single : mode, single, single -> single
180 logic sub_single : mode, single, single -> single
182 logic mul_single : mode, single, single -> single
184 logic div_single : mode, single, single -> single
186 logic neg_single : mode, single -> single
188 logic abs_single : mode, single -> single
190 logic sqrt_single : mode, single -> single
192 logic s_to_r : single -> real
194 logic s_to_exact : single -> real
196 logic s_to_model : single -> real
198 logic r_to_s : mode, real -> single
200 logic single_round_error : single -> real
202 logic single_total_error : single -> real
204 logic single_set_model : single, real -> single
206 logic max_single : real
210 logic add_double : mode, double, double -> double
212 logic sub_double : mode, double, double -> double
214 logic mul_double : mode, double, double -> double
216 logic div_double : mode, double, double -> double
218 logic neg_double : mode, double -> double
220 logic abs_double : mode, double -> double
222 logic sqrt_double : mode, double -> double
224 logic d_to_r : double -> real
226 logic d_to_exact : double -> real
228 logic d_to_model : double -> real
230 logic r_to_d : mode, real -> double
232 logic double_round_error : double -> real
234 logic double_total_error : double -> real
236 logic double_set_model : double, real -> double
238 predicate eq_double(x: double, y: double) = (d_to_r(x) = d_to_r(y))
240 predicate neq_double(x: double, y: double) = (d_to_r(x) <> d_to_r(y))
242 predicate lt_double(x: double, y: double) = (d_to_r(x) < d_to_r(y))
244 predicate gt_double(x: double, y: double) = (d_to_r(x) > d_to_r(y))
246 predicate le_double(x: double, y: double) = (d_to_r(x) <= d_to_r(y))
248 predicate ge_double(x: double, y: double) = (d_to_r(x) >= d_to_r(y))
250 logic max_double : real
252 logic lt_double_bool : double, double -> bool
254 logic le_double_bool : double, double -> bool
256 logic gt_double_bool : double, double -> bool
258 logic ge_double_bool : double, double -> bool
260 logic eq_double_bool : double, double -> bool
262 logic neq_double_bool : double, double -> bool
264 axiom lt_double_bool_axiom:
267 ((lt_double_bool(x, y) = true) <-> (d_to_r(x) < d_to_r(y)))))
269 axiom le_double_bool_axiom:
272 ((le_double_bool(x, y) = true) <-> (d_to_r(x) <= d_to_r(y)))))
274 axiom gt_double_bool_axiom:
277 ((gt_double_bool(x, y) = true) <-> (d_to_r(x) > d_to_r(y)))))
279 axiom ge_double_bool_axiom:
282 ((ge_double_bool(x, y) = true) <-> (d_to_r(x) >= d_to_r(y)))))
284 axiom eq_double_bool_axiom:
287 ((eq_double_bool(x, y) = true) <-> (d_to_r(x) = d_to_r(y)))))
289 axiom neq_double_bool_axiom:
292 ((neq_double_bool(x, y) = true) <-> (d_to_r(x) <> d_to_r(y)))))
296 logic add_quad : mode, quad, quad -> quad
298 logic sub_quad : mode, quad, quad -> quad
300 logic mul_quad : mode, quad, quad -> quad
302 logic div_quad : mode, quad, quad -> quad
304 logic neg_quad : mode, quad -> quad
306 logic abs_quad : mode, quad -> quad
308 logic sqrt_quad : mode, quad -> quad
310 logic q_to_r : quad -> real
312 logic q_to_exact : quad -> real
314 logic q_to_model : quad -> real
316 logic r_to_q : mode, real -> quad
318 logic quad_round_error : quad -> real
320 logic quad_total_error : quad -> real
322 logic quad_set_model : quad, real -> quad
324 logic max_quad : real
326 logic double_of_single : single -> double
328 logic single_of_double : mode, double -> single
330 logic quad_of_single : single -> quad
332 logic single_of_quad : mode, quad -> single
334 logic quad_of_double : double -> quad
336 logic double_of_quad : mode, quad -> double
338 logic bw_compl : int -> int
340 logic bw_and : int, int -> int
342 logic bw_xor : int, int -> int
344 logic bw_or : int, int -> int
346 logic lsl : int, int -> int
348 logic lsr : int, int -> int
356 logic block_length : alloc_table, 'a1 pointer -> int
358 logic base_addr : 'a1 pointer -> 'a1 addr
360 logic offset : 'a1 pointer -> int
362 logic shift : 'a1 pointer, int -> 'a1 pointer
364 logic sub_pointer : 'a1 pointer, 'a1 pointer -> int
366 predicate lt_pointer(p1: 'a1 pointer, p2: 'a1 pointer) =
367 ((base_addr(p1) = base_addr(p2)) and (offset(p1) < offset(p2)))
369 predicate le_pointer(p1: 'a1 pointer, p2: 'a1 pointer) =
370 ((base_addr(p1) = base_addr(p2)) and (offset(p1) <= offset(p2)))
372 predicate gt_pointer(p1: 'a1 pointer, p2: 'a1 pointer) =
373 ((base_addr(p1) = base_addr(p2)) and (offset(p1) > offset(p2)))
375 predicate ge_pointer(p1: 'a1 pointer, p2: 'a1 pointer) =
376 ((base_addr(p1) = base_addr(p2)) and (offset(p1) >= offset(p2)))
378 predicate valid(a: alloc_table, p: 'a1 pointer) =
379 ((0 <= offset(p)) and (offset(p) < block_length(a, p)))
381 predicate valid_index(a: alloc_table, p: 'a1 pointer, i: int) =
382 ((0 <= (offset(p) + i)) and ((offset(p) + i) < block_length(a, p)))
384 predicate valid_range(a: alloc_table, p: 'a1 pointer, i: int, j: int) =
385 ((0 <= (offset(p) + i)) and ((offset(p) + j) < block_length(a, p)))
388 (forall p:'a1 pointer.
389 (forall i:int [offset(shift(p, i))]. (offset(shift(p,
390 i)) = (offset(p) + i))))
392 axiom shift_zero: (forall p:'a1 pointer [shift(p, 0)]. (shift(p, 0) = p))
395 (forall p:'a1 pointer.
397 (forall j:int [shift(shift(p, i), j)]. (shift(shift(p, i),
398 j) = shift(p, (i + j))))))
400 axiom base_addr_shift:
401 (forall p:'a1 pointer.
402 (forall i:int [base_addr(shift(p, i))]. (base_addr(shift(p,
403 i)) = base_addr(p))))
405 axiom block_length_shift:
406 (forall a:alloc_table.
407 (forall p:'a1 pointer.
408 (forall i:int [block_length(a, shift(p, i))]. (block_length(a, shift(p,
409 i)) = block_length(a, p)))))
411 axiom base_addr_block_length:
412 (forall a:alloc_table.
413 (forall p1:'a1 pointer.
414 (forall p2:'a1 pointer.
415 ((base_addr(p1) = base_addr(p2)) -> (block_length(a,
416 p1) = block_length(a, p2))))))
418 axiom pointer_pair_1:
419 (forall p1:'a1 pointer.
420 (forall p2:'a1 pointer.
421 (((base_addr(p1) = base_addr(p2)) and (offset(p1) = offset(p2))) ->
424 axiom pointer_pair_2:
425 (forall p1:'a1 pointer.
426 (forall p2:'a1 pointer.
428 ((base_addr(p1) = base_addr(p2)) and (offset(p1) = offset(p2))))))
430 axiom neq_base_addr_neq_shift:
431 (forall p1:'a1 pointer.
432 (forall p2:'a1 pointer.
435 ((base_addr(p1) <> base_addr(p2)) -> (shift(p1, i) <> shift(p2, j)))))))
437 axiom neq_offset_neq_shift:
438 (forall p1:'a1 pointer.
439 (forall p2:'a1 pointer.
442 (((offset(p1) + i) <> (offset(p2) + j)) -> (shift(p1,
443 i) <> shift(p2, j)))))))
445 axiom eq_offset_eq_shift:
446 (forall p1:'a1 pointer.
447 (forall p2:'a1 pointer.
450 ((base_addr(p1) = base_addr(p2)) ->
451 (((offset(p1) + i) = (offset(p2) + j)) -> (shift(p1,
452 i) = shift(p2, j))))))))
454 axiom valid_index_valid_shift:
455 (forall a:alloc_table.
456 (forall p:'a1 pointer.
457 (forall i:int. (valid_index(a, p, i) -> valid(a, shift(p, i))))))
459 axiom valid_range_valid_shift:
460 (forall a:alloc_table.
461 (forall p:'a1 pointer.
465 (valid_range(a, p, i, j) ->
466 (((i <= k) and (k <= j)) -> valid(a, shift(p, k)))))))))
468 axiom valid_range_valid:
469 (forall a:alloc_table.
470 (forall p:'a1 pointer.
473 (valid_range(a, p, i, j) ->
474 (((i <= 0) and (0 <= j)) -> valid(a, p)))))))
476 axiom valid_range_valid_index:
477 (forall a:alloc_table.
478 (forall p:'a1 pointer.
482 (valid_range(a, p, i, j) ->
483 (((i <= k) and (k <= j)) -> valid_index(a, p, k))))))))
485 axiom sub_pointer_def:
486 (forall p1:'a1 pointer.
487 (forall p2:'a1 pointer.
488 ((base_addr(p1) = base_addr(p2)) -> (sub_pointer(p1,
489 p2) = (offset(p1) - offset(p2))))))
493 logic acc : ('a1, 'a2) memory, 'a2 pointer -> 'a1
495 logic upd : ('a1, 'a2) memory, 'a2 pointer, 'a1 -> ('a1, 'a2) memory
498 (forall m:('a1, 'a2) memory.
499 (forall p:'a2 pointer.
500 (forall a:'a1 [acc(upd(m, p, a), p)]. (acc(upd(m, p, a), p) = a))))
503 (forall m:('a1, 'a2) memory.
504 (forall p1:'a2 pointer.
505 (forall p2:'a2 pointer.
506 (forall a:'a1 [acc(upd(m, p1, a), p2)].
507 ((p1 <> p2) -> (acc(upd(m, p1, a), p2) = acc(m, p2)))))))
509 axiom false_not_true: (false <> true)
513 logic pset_empty : 'a1 pset
515 logic pset_singleton : 'a1 pointer -> 'a1 pset
517 logic pset_star : 'a2 pset, ('a1 pointer, 'a2) memory -> 'a1 pset
519 logic pset_all : 'a1 pset -> 'a1 pset
521 logic pset_range : 'a1 pset, int, int -> 'a1 pset
523 logic pset_range_left : 'a1 pset, int -> 'a1 pset
525 logic pset_range_right : 'a1 pset, int -> 'a1 pset
527 logic pset_acc_all : 'a2 pset, ('a1 pointer, 'a2) memory -> 'a1 pset
529 logic pset_acc_range : 'a2 pset, ('a1 pointer, 'a2) memory, int,
532 logic pset_acc_range_left : 'a2 pset, ('a1 pointer, 'a2) memory,
535 logic pset_acc_range_right : 'a2 pset, ('a1 pointer, 'a2) memory,
538 logic pset_union : 'a1 pset, 'a1 pset -> 'a1 pset
540 logic not_in_pset : 'a1 pointer, 'a1 pset -> prop
542 predicate not_assigns(a: alloc_table, m1: ('a1, 'a2) memory, m2: ('a1,
543 'a2) memory, l: 'a2 pset) =
544 (forall p:'a2 pointer.
545 (valid(a, p) -> (not_in_pset(p, l) -> (acc(m2, p) = acc(m1, p)))))
547 axiom pset_empty_intro: (forall p:'a1 pointer. not_in_pset(p, pset_empty))
549 axiom pset_singleton_intro:
550 (forall p1:'a1 pointer.
551 (forall p2:'a1 pointer [not_in_pset(p1, pset_singleton(p2))].
552 ((p1 <> p2) -> not_in_pset(p1, pset_singleton(p2)))))
554 axiom pset_singleton_elim:
555 (forall p1:'a1 pointer.
556 (forall p2:'a1 pointer [not_in_pset(p1, pset_singleton(p2))].
557 (not_in_pset(p1, pset_singleton(p2)) -> (p1 <> p2))))
559 axiom not_not_in_singleton:
560 (forall p:'a1 pointer. (not not_in_pset(p, pset_singleton(p))))
562 axiom pset_union_intro:
565 (forall p:'a1 pointer [not_in_pset(p, pset_union(l1, l2))].
566 ((not_in_pset(p, l1) and not_in_pset(p, l2)) -> not_in_pset(p,
567 pset_union(l1, l2))))))
569 axiom pset_union_elim1:
572 (forall p:'a1 pointer [not_in_pset(p, pset_union(l1, l2))].
573 (not_in_pset(p, pset_union(l1, l2)) -> not_in_pset(p, l1)))))
575 axiom pset_union_elim2:
578 (forall p:'a1 pointer [not_in_pset(p, pset_union(l1, l2))].
579 (not_in_pset(p, pset_union(l1, l2)) -> not_in_pset(p, l2)))))
581 axiom pset_star_intro:
583 (forall m:('a2 pointer, 'a1) memory.
584 (forall p:'a2 pointer [not_in_pset(p, pset_star(l, m))].
585 ((forall p1:'a1 pointer. ((p = acc(m, p1)) -> not_in_pset(p1, l))) ->
586 not_in_pset(p, pset_star(l, m))))))
588 axiom pset_star_elim:
590 (forall m:('a2 pointer, 'a1) memory.
591 (forall p:'a2 pointer [not_in_pset(p, pset_star(l, m))].
592 (not_in_pset(p, pset_star(l, m)) ->
593 (forall p1:'a1 pointer. ((p = acc(m, p1)) -> not_in_pset(p1, l)))))))
595 axiom pset_all_intro:
596 (forall p:'a1 pointer.
597 (forall l:'a1 pset [not_in_pset(p, pset_all(l))].
598 ((forall p1:'a1 pointer.
599 ((not not_in_pset(p1, l)) -> (base_addr(p) <> base_addr(p1)))) ->
600 not_in_pset(p, pset_all(l)))))
603 (forall p:'a1 pointer.
604 (forall l:'a1 pset [not_in_pset(p, pset_all(l))].
605 (not_in_pset(p, pset_all(l)) ->
606 (forall p1:'a1 pointer.
607 ((not not_in_pset(p1, l)) -> (base_addr(p) <> base_addr(p1)))))))
609 axiom pset_range_intro:
610 (forall p:'a1 pointer.
613 (forall b:int [not_in_pset(p, pset_range(l, a, b))].
614 ((forall p1:'a1 pointer.
615 (not_in_pset(p1, l) or
617 (((a <= i) and (i <= b)) -> (p <> shift(p1, i)))))) ->
618 not_in_pset(p, pset_range(l, a, b)))))))
620 axiom pset_range_elim:
621 (forall p:'a1 pointer.
624 (forall b:int [not_in_pset(p, pset_range(l, a, b))].
625 (not_in_pset(p, pset_range(l, a, b)) ->
626 (forall p1:'a1 pointer.
627 ((not not_in_pset(p1, l)) ->
629 (((a <= i) and (i <= b)) -> (shift(p1, i) <> p))))))))))
631 axiom pset_range_left_intro:
632 (forall p:'a1 pointer.
634 (forall a:int [not_in_pset(p, pset_range_left(l, a))].
635 ((forall p1:'a1 pointer.
636 (not_in_pset(p1, l) or
637 (forall i:int. ((i <= a) -> (p <> shift(p1, i)))))) ->
638 not_in_pset(p, pset_range_left(l, a))))))
640 axiom pset_range_left_elim:
641 (forall p:'a1 pointer.
643 (forall a:int [not_in_pset(p, pset_range_left(l, a))].
644 (not_in_pset(p, pset_range_left(l, a)) ->
645 (forall p1:'a1 pointer.
646 ((not not_in_pset(p1, l)) ->
647 (forall i:int. ((i <= a) -> (shift(p1, i) <> p)))))))))
649 axiom pset_range_right_intro:
650 (forall p:'a1 pointer.
652 (forall a:int [not_in_pset(p, pset_range_right(l, a))].
653 ((forall p1:'a1 pointer.
654 (not_in_pset(p1, l) or
655 (forall i:int. ((a <= i) -> (p <> shift(p1, i)))))) ->
656 not_in_pset(p, pset_range_right(l, a))))))
658 axiom pset_range_right_elim:
659 (forall p:'a1 pointer.
661 (forall a:int [not_in_pset(p, pset_range_right(l, a))].
662 (not_in_pset(p, pset_range_right(l, a)) ->
663 (forall p1:'a1 pointer.
664 ((not not_in_pset(p1, l)) ->
665 (forall i:int. ((a <= i) -> (shift(p1, i) <> p)))))))))
667 axiom pset_acc_all_intro:
668 (forall p:'a1 pointer.
670 (forall m:('a1 pointer, 'a2) memory [not_in_pset(p, pset_acc_all(l,
672 ((forall p1:'a2 pointer.
673 ((not not_in_pset(p1, l)) ->
674 (forall i:int. (p <> acc(m, shift(p1, i)))))) ->
675 not_in_pset(p, pset_acc_all(l, m))))))
677 axiom pset_acc_all_elim:
678 (forall p:'a1 pointer.
680 (forall m:('a1 pointer, 'a2) memory [not_in_pset(p, pset_acc_all(l,
682 (not_in_pset(p, pset_acc_all(l, m)) ->
683 (forall p1:'a2 pointer.
684 ((not not_in_pset(p1, l)) ->
685 (forall i:int. (acc(m, shift(p1, i)) <> p))))))))
687 axiom pset_acc_range_intro:
688 (forall p:'a1 pointer.
690 (forall m:('a1 pointer, 'a2) memory.
692 (forall b:int [not_in_pset(p, pset_acc_range(l, m, a, b))].
693 ((forall p1:'a2 pointer.
694 ((not not_in_pset(p1, l)) ->
696 (((a <= i) and (i <= b)) -> (p <> acc(m, shift(p1, i))))))) ->
697 not_in_pset(p, pset_acc_range(l, m, a, b))))))))
699 axiom pset_acc_range_elim:
700 (forall p:'a1 pointer.
702 (forall m:('a1 pointer, 'a2) memory.
705 (not_in_pset(p, pset_acc_range(l, m, a, b)) ->
706 (forall p1:'a2 pointer.
707 ((not not_in_pset(p1, l)) ->
709 (((a <= i) and (i <= b)) -> (acc(m, shift(p1, i)) <> p)))))))))))
711 axiom pset_acc_range_left_intro:
712 (forall p:'a1 pointer.
714 (forall m:('a1 pointer, 'a2) memory.
715 (forall a:int [not_in_pset(p, pset_acc_range_left(l, m, a))].
716 ((forall p1:'a2 pointer.
717 ((not not_in_pset(p1, l)) ->
718 (forall i:int. ((i <= a) -> (p <> acc(m, shift(p1, i))))))) ->
719 not_in_pset(p, pset_acc_range_left(l, m, a)))))))
721 axiom pset_acc_range_left_elim:
722 (forall p:'a1 pointer.
724 (forall m:('a1 pointer, 'a2) memory.
725 (forall a:int [not_in_pset(p, pset_acc_range_left(l, m, a))].
726 (not_in_pset(p, pset_acc_range_left(l, m, a)) ->
727 (forall p1:'a2 pointer.
728 ((not not_in_pset(p1, l)) ->
729 (forall i:int. ((i <= a) -> (acc(m, shift(p1, i)) <> p))))))))))
731 axiom pset_acc_range_right_intro:
732 (forall p:'a1 pointer.
734 (forall m:('a1 pointer, 'a2) memory.
735 (forall a:int [not_in_pset(p, pset_acc_range_right(l, m, a))].
736 ((forall p1:'a2 pointer.
737 ((not not_in_pset(p1, l)) ->
738 (forall i:int. ((a <= i) -> (p <> acc(m, shift(p1, i))))))) ->
739 not_in_pset(p, pset_acc_range_right(l, m, a)))))))
741 axiom pset_acc_range_right_elim:
742 (forall p:'a1 pointer.
744 (forall m:('a1 pointer, 'a2) memory.
745 (forall a:int [not_in_pset(p, pset_acc_range_right(l, m, a))].
746 (not_in_pset(p, pset_acc_range_right(l, m, a)) ->
747 (forall p1:'a2 pointer.
748 ((not not_in_pset(p1, l)) ->
749 (forall i:int. ((a <= i) -> (acc(m, shift(p1, i)) <> p))))))))))
751 axiom not_assigns_trans:
752 (forall a:alloc_table.
754 (forall m1:('a2, 'a1) memory.
755 (forall m2:('a2, 'a1) memory.
756 (forall m3:('a2, 'a1) memory.
757 (not_assigns(a, m1, m2, l) ->
758 (not_assigns(a, m2, m3, l) -> not_assigns(a, m1, m3, l))))))))
760 axiom not_assigns_refl:
761 (forall a:alloc_table.
763 (forall m:('a2, 'a1) memory. not_assigns(a, m, m, l))))
765 predicate valid_acc(m1: ('a1 pointer, 'a2) memory) =
766 (forall p:'a2 pointer.
767 (forall a:alloc_table. (valid(a, p) -> valid(a, acc(m1, p)))))
769 predicate valid_acc_range(m1: ('a1 pointer, 'a2) memory, size: int) =
770 (forall p:'a2 pointer.
771 (forall a:alloc_table.
772 (valid(a, p) -> valid_range(a, acc(m1, p), 0, (size - 1)))))
774 axiom valid_acc_range_valid:
775 (forall m1:('a1 pointer, 'a2) memory.
777 (forall p:'a2 pointer.
778 (forall a:alloc_table.
779 (valid_acc_range(m1, size) -> (valid(a, p) -> valid(a, acc(m1, p))))))))
781 predicate separation1(m1: ('a1 pointer, 'a2) memory, m2: ('a1 pointer,
783 (forall p:'a2 pointer.
784 (forall a:alloc_table.
785 (valid(a, p) -> (base_addr(acc(m1, p)) <> base_addr(acc(m2, p))))))
787 predicate separation1_range1(m1: ('a1 pointer, 'a2) memory, m2: ('a1 pointer,
788 'a2) memory, size: int) =
789 (forall p:'a2 pointer.
790 (forall a:alloc_table.
794 (((0 <= i1) and (i1 < size)) ->
795 (((0 <= i2) and (i2 < size)) -> (base_addr(acc(m1, shift(p,
796 i1))) <> base_addr(acc(m2, shift(p, i2)))))))))))
798 predicate separation1_range(m: ('a1 pointer, 'a2) memory, size: int) =
799 (forall p:'a2 pointer.
800 (forall a:alloc_table.
803 (((0 <= i1) and (i1 < size)) -> (base_addr(acc(m, shift(p,
804 i1))) <> base_addr(acc(m, p))))))))
806 predicate separation2(m1: ('a1 pointer, 'a2) memory, m2: ('a1 pointer,
808 (forall p1:'a2 pointer.
809 (forall p2:'a2 pointer.
810 ((p1 <> p2) -> (base_addr(acc(m1, p1)) <> base_addr(acc(m2, p2))))))
812 predicate separation2_range1(m1: ('a1 pointer, 'a2) memory, m2: ('a1 pointer,
813 'a2) memory, size: int) =
814 (forall p:'a2 pointer.
815 (forall q:'a2 pointer.
816 (forall a:alloc_table.
818 (((0 <= i) and (i < size)) -> (base_addr(acc(m1, shift(p,
819 i))) <> base_addr(acc(m2, q))))))))
821 logic on_heap : alloc_table, 'a1 pointer -> prop
823 logic on_stack : alloc_table, 'a1 pointer -> prop
825 logic fresh : alloc_table, 'a1 pointer -> prop
827 axiom fresh_not_valid:
828 (forall a:alloc_table.
829 (forall p:'a1 pointer. (fresh(a, p) -> (not valid(a, p)))))
831 axiom fresh_not_valid_shift:
832 (forall a:alloc_table.
833 (forall p:'a1 pointer.
834 (fresh(a, p) -> (forall i:int. (not valid(a, shift(p, i)))))))
836 logic alloc_extends : alloc_table, alloc_table -> prop
838 axiom alloc_extends_valid:
839 (forall a1:alloc_table.
840 (forall a2:alloc_table.
841 (alloc_extends(a1, a2) ->
842 (forall q:'a1 pointer. (valid(a1, q) -> valid(a2, q))))))
844 axiom alloc_extends_valid_index:
845 (forall a1:alloc_table.
846 (forall a2:alloc_table.
847 (alloc_extends(a1, a2) ->
848 (forall q:'a1 pointer.
849 (forall i:int. (valid_index(a1, q, i) -> valid_index(a2, q, i)))))))
851 axiom alloc_extends_valid_range:
852 (forall a1:alloc_table.
853 (forall a2:alloc_table.
854 (alloc_extends(a1, a2) ->
855 (forall q:'a1 pointer.
858 (valid_range(a1, q, i, j) -> valid_range(a2, q, i, j))))))))
860 axiom alloc_extends_refl: (forall a:alloc_table. alloc_extends(a, a))
862 axiom alloc_extends_trans:
863 (forall a1:alloc_table.
864 (forall a2:alloc_table.
865 (forall a3:alloc_table [alloc_extends(a1, a2), alloc_extends(a2, a3)].
866 (alloc_extends(a1, a2) ->
867 (alloc_extends(a2, a3) -> alloc_extends(a1, a3))))))
869 logic free_stack : alloc_table, alloc_table, alloc_table -> prop
871 axiom free_stack_heap:
872 (forall a1:alloc_table.
873 (forall a2:alloc_table.
874 (forall a3:alloc_table.
875 (free_stack(a1, a2, a3) ->
876 (forall p:'a1 pointer.
877 (valid(a2, p) -> (on_heap(a2, p) -> valid(a3, p))))))))
879 axiom free_stack_stack:
880 (forall a1:alloc_table.
881 (forall a2:alloc_table.
882 (forall a3:alloc_table.
883 (free_stack(a1, a2, a3) ->
884 (forall p:'a1 pointer.
885 (valid(a1, p) -> (on_stack(a1, p) -> valid(a3, p))))))))
887 logic null : 'a1 pointer
889 axiom null_not_valid: (forall a:alloc_table. (not valid(a, null)))
898 forall a:a_2 pointer.
899 forall alloc:alloc_table.
900 ("CADUCEUS_1": valid_range(alloc, a, 0, 10000)) ->
901 forall mutable_x:int.
907 forall a:a_2 pointer.
908 forall alloc:alloc_table.
909 ("CADUCEUS_1": valid_range(alloc, a, 0, 10000)) ->
911 forall mutable_x:int.
916 (result = (g / mutable_x)) ->
917 forall result0:a_2 pointer.
918 (result0 = shift(a, p)) ->
919 valid(alloc, result0)
922 forall a:a_2 pointer.
923 forall alloc:alloc_table.
925 ("CADUCEUS_1": valid_range(alloc, a, 0, 10000)) ->
927 forall intM_a_2:(int,
929 forall mutable_x:int.
935 (result = (g / mutable_x)) ->
936 forall result0:a_2 pointer.
937 (result0 = shift(a, p)) ->
938 valid(alloc, result0) ->
940 (result1 = acc(intM_a_2, result0)) ->
943 (g0 = (((result * p) + (result1 * i)) + (2 * 1))) ->
945 forall mutable_x0:int.
946 (mutable_x0 = ((p * 2) - 1)) ->
949 forall result2:a_2 pointer.
950 (result2 = shift(a, p)) ->
954 forall a:a_2 pointer.
955 forall alloc:alloc_table.
957 ("CADUCEUS_1": valid_range(alloc, a, 0, 10000)) ->
959 forall intM_a_2:(int,
961 forall mutable_x:int.
967 (result = (g / mutable_x)) ->
968 forall result0:a_2 pointer.
969 (result0 = shift(a, p)) ->
970 valid(alloc, result0) ->
972 (result1 = acc(intM_a_2, result0)) ->
975 (g0 = (((result * p) + (result1 * i)) + (2 * 1))) ->
977 forall mutable_x0:int.
978 (mutable_x0 = ((p * 2) - 1)) ->
981 forall result2:a_2 pointer.
982 (result2 = shift(a, p)) ->
985 (result3 = (g0 % mutable_x0)) ->
986 valid(alloc, result2)
989 forall a:a_2 pointer.
990 forall alloc:alloc_table.
992 ("CADUCEUS_1": valid_range(alloc, a, 0, 10000)) ->
994 forall intM_a_2:(int,
996 forall mutable_x:int.
1002 (result = (g / mutable_x)) ->
1003 forall result0:a_2 pointer.
1004 (result0 = shift(a, p)) ->
1005 valid(alloc, result0) ->
1007 (result1 = acc(intM_a_2, result0)) ->
1010 (g0 = (((result * p) + (result1 * i)) + (2 * 0))) ->
1012 forall mutable_x0:int.
1013 (mutable_x0 = ((p * 2) - 1)) ->
1016 forall result2:a_2 pointer.
1017 (result2 = shift(a, p)) ->
1020 goal main_impl_po_6:
1021 forall a:a_2 pointer.
1022 forall alloc:alloc_table.
1024 ("CADUCEUS_1": valid_range(alloc, a, 0, 10000)) ->
1026 forall intM_a_2:(int,
1028 forall mutable_x:int.
1034 (result = (g / mutable_x)) ->
1035 forall result0:a_2 pointer.
1036 (result0 = shift(a, p)) ->
1037 valid(alloc, result0) ->
1039 (result1 = acc(intM_a_2, result0)) ->
1042 (g0 = (((result * p) + (result1 * i)) + (2 * 0))) ->
1044 forall mutable_x0:int.
1045 (mutable_x0 = ((p * 2) - 1)) ->
1048 forall result2:a_2 pointer.
1049 (result2 = shift(a, p)) ->
1050 (mutable_x0 <> 0) ->
1052 (result3 = (g0 % mutable_x0)) ->
1053 valid(alloc, result2)
1055 goal main_impl_po_7:
1056 forall a:a_2 pointer.
1057 forall alloc:alloc_table.
1059 ("CADUCEUS_1": valid_range(alloc, a, 0, 10000)) ->
1064 goal main_impl_po_8:
1065 forall a:a_2 pointer.
1066 forall alloc:alloc_table.
1068 ("CADUCEUS_1": valid_range(alloc, a, 0, 10000)) ->
1074 (result = (g / i)) ->
1079 (result0 = (g % i)) ->
1082 (bw_xor(53, o0) <> 0) ->
1083 forall mutable_x0:int.
1084 (mutable_x0 = ((p0 * 2) - 1)) ->
1087 forall result1:a_2 pointer.
1088 (result1 = shift(a, p0)) ->
1091 goal main_impl_po_9:
1092 forall a:a_2 pointer.
1093 forall alloc:alloc_table.
1095 ("CADUCEUS_1": valid_range(alloc, a, 0, 10000)) ->
1101 (result = (g / i)) ->
1106 (result0 = (g % i)) ->
1109 (bw_xor(53, o0) <> 0) ->
1110 forall mutable_x0:int.
1111 (mutable_x0 = ((p0 * 2) - 1)) ->
1114 forall result1:a_2 pointer.
1115 (result1 = shift(a, p0)) ->
1116 (mutable_x0 <> 0) ->
1118 (result2 = (g % mutable_x0)) ->
1119 valid(alloc, result1)