Docs GODI Archive
Projects Blog Link DB

Search GODI:


More options
File lib/caduceus/isabelle/caduceus_why.thy GODI Package apps-why
 
   caduceus_why.thy  
(* This file was originally generated by why.
   It can be modified; only the generated parts will be overwritten. *)
theory caduceus_why = Main:

typedecl addr;
typedecl pointer;
typedecl alloc_table;
typedecl 'a memory;
typedecl assign_loc;

(*Why logic*) consts bw_compl :: "[int] => int";

(*Why logic*) consts bw_and :: "[int, int] => int";

(*Why logic*) consts bw_xor :: "[int, int] => int";

(*Why logic*) consts bw_or :: "[int, int] => int";

(*Why logic*) consts lsl :: "[int, int] => int";

(*Why logic*) consts lsr :: "[int, int] => int";

(*Why*) consts null :: "pointer";

(*Why logic*) consts block_length :: "[alloc_table, pointer] => int";

(*Why logic*) consts base_addr :: "[pointer] => addr";

(*Why logic*) consts offset :: "[pointer] => int";

(*Why logic*) consts shift :: "[pointer, int] => pointer";

(*Why logic*) consts sub_pointer :: "[pointer, pointer] => int";

(*Why predicate*) constdefs lt_pointer :: "[pointer, pointer] => bool"
     "lt_pointer p1
  p2 == (((base_addr p1) = (base_addr p2)) & ((offset p1) < (offset p2)))";

(*Why predicate*) constdefs le_pointer :: "[pointer, pointer] => bool"
     "le_pointer p1
  p2 == (((base_addr p1) = (base_addr p2)) & ((offset p1) <= (offset p2)))";

(*Why predicate*) constdefs gt_pointer :: "[pointer, pointer] => bool"
     "gt_pointer p1
  p2 == (((base_addr p1) = (base_addr p2)) & ((offset p2) < (offset p1)))";

(*Why predicate*) constdefs ge_pointer :: "[pointer, pointer] => bool"
     "ge_pointer p1
  p2 == (((base_addr p1) = (base_addr p2)) & ((offset p2) <= (offset p1)))";

(*Why predicate*) constdefs valid :: "[alloc_table, pointer] => bool"
     "valid a p == ((0 <= (offset p)) & ((offset p) < (block_length a p)))";

(*Why predicate*) constdefs valid_index :: "[alloc_table, pointer,
                                           int] => bool"
     "valid_index a p
  i == ((0 <= ((offset p) + i)) & (((offset p) + i) < (block_length a p)))";

(*Why predicate*) constdefs valid_range :: "[alloc_table, pointer, int,
                                           int] => bool"
     "valid_range a p i
  j == ((0 <= ((offset p) + i)) &
       ((i <= j) & (((offset p) + j) < (block_length a p))))";

(*Why axiom*) axioms offset_shift: "((!p::pointer.
                                     ((!i::int.
                                      ((offset (shift p i)) =
                                      ((offset p) + i))))))";


(*Why axiom*) axioms shift_zero: "((!p::pointer. ((shift p 0) = p)))";


(*Why axiom*) axioms shift_shift: "((!p::pointer.
                                    ((!i::int.
                                     ((!j::int.
                                      ((shift (shift p i) j) =
                                      (shift p (i + j)))))))))";


(*Why axiom*) axioms base_addr_shift: "((!p::pointer.
                                        ((!i::int.
                                         ((base_addr (shift p i)) =
                                         (base_addr p))))))";


(*Why axiom*) axioms block_length_shift: "((!a::alloc_table.
                                           ((!p::pointer.
                                            ((!i::int.
                                             ((block_length a (shift p i)) =
                                             (block_length a p))))))))";


(*Why axiom*) axioms base_addr_block_length: "((!a::alloc_table.
                                               ((!p1::pointer.
                                                ((!p2::pointer.
                                                 (((base_addr p1) =
                                                  (base_addr p2)) -->
                                                  ((block_length a p1) =
                                                  (block_length a p2)))))))))";


(*Why axiom*) axioms pointer_pair_1: "((!p1::pointer.
                                       ((!p2::pointer.
                                        ((((base_addr p1) = (base_addr p2)) &
                                         ((offset p1) = (offset p2))) -->
                                         (p1 = p2))))))";


(*Why axiom*) axioms pointer_pair_2: "((!p1::pointer.
                                       ((!p2::pointer.
                                        ((p1 = p2) -->
                                         (((base_addr p1) = (base_addr p2)) &
                                         ((offset p1) = (offset p2))))))))";


(*Why axiom*) axioms neq_base_addr_neq_shift: "((!p1::pointer.
                                                ((!p2::pointer.
                                                 ((!i::int.
                                                  ((!j::int.
                                                   (~((base_addr p1) =
                                                    (base_addr p2)) -->
                                                    ~((shift p1 i) =
                                                    (shift p2 j)))))))))))";


(*Why axiom*) axioms neq_offset_neq_shift: "((!p1::pointer.
                                             ((!p2::pointer.
                                              ((!i::int.
                                               ((!j::int.
                                                (~(((offset p1) + i) =
                                                 ((offset p2) + j)) -->
                                                 ~((shift p1 i) =
                                                 (shift p2 j)))))))))))";


(*Why axiom*) axioms eq_offset_eq_shift: "((!p1::pointer.
                                           ((!p2::pointer.
                                            ((!i::int.
                                             ((!j::int.
                                              (((base_addr p1) =
                                               (base_addr p2)) -->
                                               ((((offset p1) + i) =
                                                ((offset p2) + j)) -->
                                                ((shift p1 i) = (shift p2 j))))))))))))";


(*Why axiom*) axioms valid_index_valid_shift: "((!a::alloc_table.
                                                ((!p::pointer.
                                                 ((!i::int.
                                                  ((valid_index a p i) -->
                                                   (valid a (shift p i)))))))))";


(*Why axiom*) axioms valid_range_valid_shift: "((!a::alloc_table.
                                                ((!p::pointer.
                                                 ((!i::int.
                                                  ((!j::int.
                                                   ((!k::int.
                                                    ((valid_range a p i j) -->
                                                     (((i <= k) & (k <= j)) -->
                                                      (valid a (shift p k))))))))))))))";


(*Why axiom*) axioms valid_range_valid: "((!a::alloc_table.
                                          ((!p::pointer.
                                           ((!i::int.
                                            ((!j::int.
                                             ((valid_range a p i j) -->
                                              (((i <= 0) & (0 <= j)) -->
                                               (valid a p)))))))))))";


(*Why axiom*) axioms valid_range_valid_index: "((!a::alloc_table.
                                                ((!p::pointer.
                                                 ((!i::int.
                                                  ((!j::int.
                                                   ((!k::int.
                                                    ((valid_range a p i j) -->
                                                     (((i <= k) & (k <= j)) -->
                                                      (valid_index a p k)))))))))))))";


(*Why axiom*) axioms sub_pointer_def: "((!p1::pointer.
                                        ((!p2::pointer.
                                         (((base_addr p1) = (base_addr p2)) -->
                                          ((sub_pointer p1 p2) =
                                          ((offset p1) - (offset p2))))))))";


(*Why logic*) consts acc :: "[('a43 memory), pointer] => 'a43";

(*Why logic*) consts upd :: "[('a44 memory), pointer, 'a44] => ('a44 memory)";

(*Why axiom*) axioms acc_upd: "((!m::('a45 memory).
                                ((!p::pointer.
                                 ((!a::'a45. ((acc (upd m p a) p) = a)))))))";


(*Why axiom*) axioms acc_upd_eq: "((!m::('a46 memory).
                                   ((!p1::pointer.
                                    ((!p2::pointer.
                                     ((!a::'a46.
                                      ((p1 = p2) -->
                                       ((acc (upd m p1 a) p2) = a))))))))))";


(*Why axiom*) axioms acc_upd_neq: "((!m::('a47 memory).
                                    ((!p1::pointer.
                                     ((!p2::pointer.
                                      ((!a::'a47.
                                       (~(p1 = p2) -->
                                        ((acc (upd m p1 a) p2) = (acc m p2)))))))))))";


(*Why axiom*) axioms false_not_true: "~(F = T)";

typedecl pset;

(*Why logic*) consts pset_empty :: "pset";

(*Why logic*) consts pset_singleton :: "[pointer] => pset";

(*Why logic*) consts pset_star :: "[pset, (pointer memory)] => pset";

(*Why logic*) consts pset_all :: "[pset] => pset";

(*Why logic*) consts pset_range :: "[pset, int, int] => pset";

(*Why logic*) consts pset_range_left :: "[pset, int] => pset";

(*Why logic*) consts pset_range_right :: "[pset, int] => pset";

(*Why logic*) consts pset_acc_all :: "[pset, (pointer memory)] => pset";

(*Why logic*) consts pset_acc_range ::
  "[pset, (pointer memory), int, int] => pset";

(*Why logic*) consts pset_acc_range_left ::
  "[pset, (pointer memory), int] => pset";

(*Why logic*) consts pset_acc_range_right ::
  "[pset, (pointer memory), int] => pset";

(*Why logic*) consts pset_union :: "[pset, pset] => pset";

(*Why logic*) consts not_in_pset :: "[pointer, pset] => bool";

(*Why predicate*) constdefs not_assigns :: "[alloc_table, ('a48 memory),
                                           ('a48 memory), pset] => bool"
     "not_assigns a m1 m2
  l == ((!p::pointer.
        ((valid a p) --> ((not_in_pset p l) --> ((acc m2 p) = (acc m1 p))))))";

(*Why axiom*) axioms pset_empty_intro: "((!p::pointer.
                                         (not_in_pset p pset_empty)))";


(*Why axiom*) axioms pset_singleton_intro: "((!p1::pointer.
                                             ((!p2::pointer.
                                              (~(p1 = p2) -->
                                               (not_in_pset p1
                                               (pset_singleton p2)))))))";


(*Why axiom*) axioms pset_singleton_elim: "((!p1::pointer.
                                            ((!p2::pointer.
                                             ((not_in_pset p1
                                              (pset_singleton p2)) -->
                                              ~(p1 = p2))))))";


(*Why axiom*) axioms not_not_in_singleton: "((!p::pointer.
                                             ~((not_in_pset p
                                               (pset_singleton p)))))";


(*Why axiom*) axioms pset_union_intro: "((!l1::pset.
                                         ((!l2::pset.
                                          ((!p::pointer.
                                           (((not_in_pset p l1) &
                                            (not_in_pset p l2)) -->
                                            (not_in_pset p
                                            (pset_union l1 l2)))))))))";


(*Why axiom*) axioms pset_union_elim1: "((!l1::pset.
                                         ((!l2::pset.
                                          ((!p::pointer.
                                           ((not_in_pset p
                                            (pset_union l1 l2)) -->
                                            (not_in_pset p l1))))))))";


(*Why axiom*) axioms pset_union_elim2: "((!l1::pset.
                                         ((!l2::pset.
                                          ((!p::pointer.
                                           ((not_in_pset p
                                            (pset_union l1 l2)) -->
                                            (not_in_pset p l2))))))))";


(*Why axiom*) axioms pset_star_intro: "((!l::pset.
                                        ((!m::(pointer memory).
                                         ((!p::pointer.
                                          (((!p1::pointer.
                                            ((p = (acc m p1)) -->
                                             (not_in_pset p1 l)))) -->
                                           (not_in_pset p (pset_star l m)))))))))";


(*Why axiom*) axioms pset_star_elim: "((!l::pset.
                                       ((!m::(pointer memory).
                                        ((!p::pointer.
                                         ((not_in_pset p (pset_star l m)) -->
                                          ((!p1::pointer.
                                           ((p = (acc m p1)) -->
                                            (not_in_pset p1 l)))))))))))";


(*Why axiom*) axioms pset_all_intro: "((!p::pointer.
                                       ((!l::pset.
                                        (((!p1::pointer.
                                          (~((not_in_pset p1 l)) -->
                                           ~((base_addr p) = (base_addr p1))))) -->
                                         (not_in_pset p (pset_all l)))))))";


(*Why axiom*) axioms pset_all_elim: "((!p::pointer.
                                      ((!l::pset.
                                       ((not_in_pset p (pset_all l)) -->
                                        ((!p1::pointer.
                                         (~((not_in_pset p1 l)) -->
                                          ~((base_addr p) = (base_addr p1))))))))))";


(*Why axiom*) axioms pset_range_intro: "((!p::pointer.
                                         ((!l::pset.
                                          ((!a::int.
                                           ((!b::int.
                                            (((!p1::pointer.
                                              ((not_in_pset p1 l) |
                                              ((!i::int.
                                               (((a <= i) & (i <= b)) -->
                                                ~(p = (shift p1 i)))))))) -->
                                             (not_in_pset p
                                             (pset_range l a b)))))))))))";


(*Why axiom*) axioms pset_range_elim: "((!p::pointer.
                                        ((!l::pset.
                                         ((!a::int.
                                          ((!b::int.
                                           ((not_in_pset p
                                            (pset_range l a b)) -->
                                            ((!p1::pointer.
                                             (~((not_in_pset p1 l)) -->
                                              ((!i::int.
                                               (((a <= i) & (i <= b)) -->
                                                ~((shift p1 i) = p))))))))))))))))";


(*Why axiom*) axioms pset_range_left_intro: "((!p::pointer.
                                              ((!l::pset.
                                               ((!a::int.
                                                (((!p1::pointer.
                                                  ((not_in_pset p1 l) |
                                                  ((!i::int.
                                                   ((i <= a) -->
                                                    ~(p = (shift p1 i)))))))) -->
                                                 (not_in_pset p
                                                 (pset_range_left l a)))))))))";


(*Why axiom*) axioms pset_range_left_elim: "((!p::pointer.
                                             ((!l::pset.
                                              ((!a::int.
                                               ((not_in_pset p
                                                (pset_range_left l a)) -->
                                                ((!p1::pointer.
                                                 (~((not_in_pset p1 l)) -->
                                                  ((!i::int.
                                                   ((i <= a) -->
                                                    ~((shift p1 i) = p))))))))))))))";


(*Why axiom*) axioms pset_range_right_intro: "((!p::pointer.
                                               ((!l::pset.
                                                ((!a::int.
                                                 (((!p1::pointer.
                                                   ((not_in_pset p1 l) |
                                                   ((!i::int.
                                                    ((a <= i) -->
                                                     ~(p = (shift p1 i)))))))) -->
                                                  (not_in_pset p
                                                  (pset_range_right l a)))))))))";


(*Why axiom*) axioms pset_range_right_elim: "((!p::pointer.
                                              ((!l::pset.
                                               ((!a::int.
                                                ((not_in_pset p
                                                 (pset_range_right l a)) -->
                                                 ((!p1::pointer.
                                                  (~((not_in_pset p1 l)) -->
                                                   ((!i::int.
                                                    ((a <= i) -->
                                                     ~((shift p1 i) = p))))))))))))))";


(*Why axiom*) axioms pset_acc_all_intro: "((!p::pointer.
                                           ((!l::pset.
                                            ((!m::(pointer memory).
                                             (((!p1::pointer.
                                               (~((not_in_pset p1 l)) -->
                                                ((!i::int.
                                                 ~(p = (acc m (shift p1 i)))))))) -->
                                              (not_in_pset p
                                              (pset_acc_all l m)))))))))";


(*Why axiom*) axioms pset_acc_all_elim: "((!p::pointer.
                                          ((!l::pset.
                                           ((!m::(pointer memory).
                                            ((not_in_pset p
                                             (pset_acc_all l m)) -->
                                             ((!p1::pointer.
                                              (~((not_in_pset p1 l)) -->
                                               ((!i::int.
                                                ~((acc m (shift p1 i)) = p)))))))))))))";


(*Why axiom*) axioms pset_acc_range_intro: "((!p::pointer.
                                             ((!l::pset.
                                              ((!m::(pointer memory).
                                               ((!a::int.
                                                ((!b::int.
                                                 (((!p1::pointer.
                                                   (~((not_in_pset p1 l)) -->
                                                    ((!i::int.
                                                     (((a <= i) & (i <= b)) -->
                                                      ~(p =
                                                      (acc m (shift p1 i))))))))) -->
                                                  (not_in_pset p
                                                  (pset_acc_range l m a b)))))))))))))";


(*Why axiom*) axioms pset_acc_range_elim: "((!p::pointer.
                                            ((!l::pset.
                                             ((!m::(pointer memory).
                                              ((!a::int.
                                               ((!b::int.
                                                ((not_in_pset p
                                                 (pset_acc_range l m a b)) -->
                                                 ((!p1::pointer.
                                                  (~((not_in_pset p1 l)) -->
                                                   ((!i::int.
                                                    (((a <= i) & (i <= b)) -->
                                                     ~((acc m (shift p1 i)) =
                                                     p))))))))))))))))))";


(*Why axiom*) axioms pset_acc_range_left_intro: "((!p::pointer.
                                                  ((!l::pset.
                                                   ((!m::(pointer memory).
                                                    ((!a::int.
                                                     (((!p1::pointer.
                                                       (~((not_in_pset p1 l)) -->
                                                        ((!i::int.
                                                         ((i <= a) -->
                                                          ~(p =
                                                          (acc m
                                                          (shift p1 i))))))))) -->
                                                      (not_in_pset p
                                                      (pset_acc_range_left l
                                                      m a)))))))))))";


(*Why axiom*) axioms pset_acc_range_left_elim: "((!p::pointer.
                                                 ((!l::pset.
                                                  ((!m::(pointer memory).
                                                   ((!a::int.
                                                    ((not_in_pset p
                                                     (pset_acc_range_left l m
                                                     a)) -->
                                                     ((!p1::pointer.
                                                      (~((not_in_pset p1 l)) -->
                                                       ((!i::int.
                                                        ((i <= a) -->
                                                         ~((acc m
                                                           (shift p1 i)) =
                                                         p))))))))))))))))";


(*Why axiom*) axioms pset_acc_range_right_intro: "((!p::pointer.
                                                   ((!l::pset.
                                                    ((!m::(pointer memory).
                                                     ((!a::int.
                                                      (((!p1::pointer.
                                                        (~((not_in_pset p1 l)) -->
                                                         ((!i::int.
                                                          ((a <= i) -->
                                                           ~(p =
                                                           (acc m
                                                           (shift p1 i))))))))) -->
                                                       (not_in_pset p
                                                       (pset_acc_range_right
                                                       l m a)))))))))))";


(*Why axiom*) axioms pset_acc_range_right_elim: "((!p::pointer.
                                                  ((!l::pset.
                                                   ((!m::(pointer memory).
                                                    ((!a::int.
                                                     ((not_in_pset p
                                                      (pset_acc_range_right l
                                                      m a)) -->
                                                      ((!p1::pointer.
                                                       (~((not_in_pset p1 l)) -->
                                                        ((!i::int.
                                                         ((a <= i) -->
                                                          ~((acc m
                                                            (shift p1 i)) =
                                                          p))))))))))))))))";


(*Why axiom*) axioms not_assigns_trans: "((!a::alloc_table.
                                          ((!l::pset.
                                           ((!m1::('a49 memory).
                                            ((!m2::('a49 memory).
                                             ((!m3::('a49 memory).
                                              ((not_assigns a m1 m2 l) -->
                                               ((not_assigns a m2 m3 l) -->
                                                (not_assigns a m1 m3 l)))))))))))))";


(*Why axiom*) axioms not_assigns_refl: "((!a::alloc_table.
                                         ((!l::pset.
                                          ((!m::('a50 memory).
                                           (not_assigns a m m l)))))))";


(*Why predicate*) constdefs valid1 :: "[(pointer memory)] => bool"
     "valid1 m1 == ((!p::pointer.
                    ((!a::alloc_table.
                     ((valid a p) --> (valid a (acc m1 p)))))))";

(*Why predicate*) constdefs valid1_range :: "[(pointer memory), int] => bool"
     "valid1_range m1
  xsize == ((!p::pointer.
           ((!a::alloc_table.
            ((valid a p) --> (valid_range a (acc m1 p) 0 (xsize - 1)))))))";

(*Why predicate*) constdefs separation1 :: "[(pointer memory),
                                           (pointer memory)] => bool"
     "separation1 m1
  m2 == ((!p::pointer.
         ((!a::alloc_table.
          ((valid a p) --> ~((base_addr (acc m1 p)) = (base_addr (acc m2 p))))))))";

(*Why predicate*) constdefs separation1_range1 :: "[(pointer memory),
                                                  (pointer memory),
                                                  int] => bool"
     "separation1_range1 m1 m2
  xsize == ((!p::pointer.
           ((!a::alloc_table.
            ((valid a p) -->
             ((!i::int.
              (((0 <= i) & (i < xsize)) -->
               ~((base_addr (acc m1 (shift p i))) = (base_addr (acc m2 p)))))))))))";

(*Why predicate*) constdefs separation1_range :: "[(pointer memory),
                                                 int] => bool"
     "separation1_range m
  xsize == ((!p::pointer.
           ((!a::alloc_table.
            ((valid a p) -->
             ((!i1::int.
              ((!i2::int.
               (((0 <= i1) & (i1 < xsize)) -->
                (((0 <= i2) & (i2 < xsize)) -->
                 (~(i1 = i2) -->
                  ~((base_addr (acc m (shift p i1))) =
                  (base_addr (acc m (shift p i2))))))))))))))))";

(*Why predicate*) constdefs separation2 :: "[(pointer memory),
                                           (pointer memory)] => bool"
     "separation2 m1
  m2 == ((!p1::pointer.
         ((!p2::pointer.
          ((!a::alloc_table.
           (~(p1 = p2) -->
            ~((base_addr (acc m1 p1)) = (base_addr (acc m2 p2))))))))))";

(*Why predicate*) constdefs separation2_range1 :: "[(pointer memory),
                                                  (pointer memory),
                                                  int] => bool"
     "separation2_range1 m1 m2
  xsize == ((!p::pointer.
           ((!q::pointer.
            ((!a::alloc_table.
             ((!i::int.
              (((0 <= i) & (i < xsize)) -->
               ~((base_addr (acc m1 (shift p i))) = (base_addr (acc m2 q))))))))))))";

(*Why logic*) consts on_heap :: "[alloc_table, pointer] => bool";

(*Why logic*) consts on_stack :: "[alloc_table, pointer] => bool";

(*Why logic*) consts fresh :: "[alloc_table, pointer] => bool";

(*Why axiom*) axioms fresh_not_valid: "((!a::alloc_table.
                                        ((!p::pointer.
                                         ((fresh a p) -->
                                          ((!i::int.
                                           ~((valid a (shift p i))))))))))";


(*Why logic*) consts alloc_stack ::
  "[pointer, alloc_table, alloc_table] => bool";

(*Why axiom*) axioms alloc_stack_p: "((!p::pointer.
                                      ((!a1::alloc_table.
                                       ((!a2::alloc_table.
                                        ((alloc_stack p a1 a2) -->
                                         (valid a2 p))))))))";


(*Why axiom*) axioms alloc_stack_valid: "((!p::pointer.
                                          ((!a1::alloc_table.
                                           ((!a2::alloc_table.
                                            ((alloc_stack p a1 a2) -->
                                             ((!q::pointer.
                                              ((valid a1 q) --> (valid a2 q)))))))))))";


(*Why axiom*) axioms alloc_stack_valid_range: "((!p::pointer.
                                                ((!a1::alloc_table.
                                                 ((!a2::alloc_table.
                                                  ((alloc_stack p a1 a2) -->
                                                   ((!q::pointer.
                                                    ((!i::int.
                                                     ((!j::int.
                                                      ((valid_range a1 q i j) -->
                                                       (valid_range a2 q i j)))))))))))))))";


(*Why logic*) consts free_heap ::
  "[pointer, alloc_table, alloc_table] => bool";

(*Why logic*) consts free_stack ::
  "[alloc_table, alloc_table, alloc_table] => bool";

(*Why axiom*) axioms free_stack_heap: "((!a1::alloc_table.
                                        ((!a2::alloc_table.
                                         ((!a3::alloc_table.
                                          ((free_stack a1 a2 a3) -->
                                           ((!p::pointer.
                                            ((valid a2 p) -->
                                             ((on_heap a2 p) --> (valid a3 p))))))))))))";


(*Why axiom*) axioms free_stack_stack: "((!a1::alloc_table.
                                         ((!a2::alloc_table.
                                          ((!a3::alloc_table.
                                           ((free_stack a1 a2 a3) -->
                                            ((!p::pointer.
                                             ((valid a1 p) -->
                                              ((on_stack a1 p) -->
                                               (valid a3 p))))))))))))";

end

This web site is published by Informatikbüro Gerd Stolpmann
Powered by Caml