src/HOL/Import/HOL/HOL4Vec.thy
author obua
Mon, 26 Sep 2005 16:10:19 +0200
changeset 17652 b1ef33ebfa17
parent 17644 bd59bfd4bf37
child 20485 3078fd2eec7b
permissions -rw-r--r--
Release HOL4 and HOLLight Importer.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
     1
(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
     2
17566
484ff733f29c new header syntax;
wenzelm
parents: 17188
diff changeset
     3
theory HOL4Vec imports HOL4Base begin
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     4
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     5
;setup_theory res_quan
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     6
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
     7
lemma RES_FORALL_CONJ_DIST: "ALL (P::'a::type => bool) (Q::'a::type => bool) R::'a::type => bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
     8
   RES_FORALL P (%i::'a::type. Q i & R i) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
     9
   (RES_FORALL P Q & RES_FORALL P R)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    10
  by (import res_quan RES_FORALL_CONJ_DIST)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    11
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    12
lemma RES_FORALL_DISJ_DIST: "ALL (P::'a::type => bool) (Q::'a::type => bool) R::'a::type => bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    13
   RES_FORALL (%j::'a::type. P j | Q j) R =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    14
   (RES_FORALL P R & RES_FORALL Q R)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    15
  by (import res_quan RES_FORALL_DISJ_DIST)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    16
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    17
lemma RES_FORALL_UNIQUE: "ALL (x::'a::type => bool) xa::'a::type. RES_FORALL (op = xa) x = x xa"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    18
  by (import res_quan RES_FORALL_UNIQUE)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    19
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    20
lemma RES_FORALL_FORALL: "ALL (P::'a::type => bool) (R::'a::type => 'b::type => bool) x::'b::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    21
   (ALL x::'b::type. RES_FORALL P (%i::'a::type. R i x)) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    22
   RES_FORALL P (%i::'a::type. All (R i))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    23
  by (import res_quan RES_FORALL_FORALL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    24
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    25
lemma RES_FORALL_REORDER: "ALL (P::'a::type => bool) (Q::'b::type => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    26
   R::'a::type => 'b::type => bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    27
   RES_FORALL P (%i::'a::type. RES_FORALL Q (R i)) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    28
   RES_FORALL Q (%j::'b::type. RES_FORALL P (%i::'a::type. R i j))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    29
  by (import res_quan RES_FORALL_REORDER)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    30
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    31
lemma RES_FORALL_EMPTY: "All (RES_FORALL EMPTY)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    32
  by (import res_quan RES_FORALL_EMPTY)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    33
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    34
lemma RES_FORALL_UNIV: "ALL p::'a::type => bool. RES_FORALL pred_set.UNIV p = All p"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    35
  by (import res_quan RES_FORALL_UNIV)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    36
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    37
lemma RES_FORALL_NULL: "ALL (p::'a::type => bool) m::bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    38
   RES_FORALL p (%x::'a::type. m) = (p = EMPTY | m)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    39
  by (import res_quan RES_FORALL_NULL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    40
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    41
lemma RES_EXISTS_DISJ_DIST: "ALL (P::'a::type => bool) (Q::'a::type => bool) R::'a::type => bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    42
   RES_EXISTS P (%i::'a::type. Q i | R i) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    43
   (RES_EXISTS P Q | RES_EXISTS P R)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    44
  by (import res_quan RES_EXISTS_DISJ_DIST)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    45
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    46
lemma RES_DISJ_EXISTS_DIST: "ALL (P::'a::type => bool) (Q::'a::type => bool) R::'a::type => bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    47
   RES_EXISTS (%i::'a::type. P i | Q i) R =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    48
   (RES_EXISTS P R | RES_EXISTS Q R)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    49
  by (import res_quan RES_DISJ_EXISTS_DIST)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    50
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    51
lemma RES_EXISTS_EQUAL: "ALL (x::'a::type => bool) xa::'a::type. RES_EXISTS (op = xa) x = x xa"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    52
  by (import res_quan RES_EXISTS_EQUAL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    53
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    54
lemma RES_EXISTS_REORDER: "ALL (P::'a::type => bool) (Q::'b::type => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    55
   R::'a::type => 'b::type => bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    56
   RES_EXISTS P (%i::'a::type. RES_EXISTS Q (R i)) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    57
   RES_EXISTS Q (%j::'b::type. RES_EXISTS P (%i::'a::type. R i j))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    58
  by (import res_quan RES_EXISTS_REORDER)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    59
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    60
lemma RES_EXISTS_EMPTY: "ALL p::'a::type => bool. ~ RES_EXISTS EMPTY p"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    61
  by (import res_quan RES_EXISTS_EMPTY)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    62
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    63
lemma RES_EXISTS_UNIV: "ALL p::'a::type => bool. RES_EXISTS pred_set.UNIV p = Ex p"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    64
  by (import res_quan RES_EXISTS_UNIV)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    65
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    66
lemma RES_EXISTS_NULL: "ALL (p::'a::type => bool) m::bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    67
   RES_EXISTS p (%x::'a::type. m) = (p ~= EMPTY & m)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    68
  by (import res_quan RES_EXISTS_NULL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    69
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    70
lemma RES_EXISTS_ALT: "ALL (p::'a::type => bool) m::'a::type => bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    71
   RES_EXISTS p m = (IN (RES_SELECT p m) p & m (RES_SELECT p m))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    72
  by (import res_quan RES_EXISTS_ALT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    73
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    74
lemma RES_EXISTS_UNIQUE_EMPTY: "ALL p::'a::type => bool. ~ RES_EXISTS_UNIQUE EMPTY p"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    75
  by (import res_quan RES_EXISTS_UNIQUE_EMPTY)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    76
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    77
lemma RES_EXISTS_UNIQUE_UNIV: "ALL p::'a::type => bool. RES_EXISTS_UNIQUE pred_set.UNIV p = Ex1 p"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    78
  by (import res_quan RES_EXISTS_UNIQUE_UNIV)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    79
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    80
lemma RES_EXISTS_UNIQUE_NULL: "ALL (p::'a::type => bool) m::bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    81
   RES_EXISTS_UNIQUE p (%x::'a::type. m) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    82
   ((EX x::'a::type. p = INSERT x EMPTY) & m)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    83
  by (import res_quan RES_EXISTS_UNIQUE_NULL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    84
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    85
lemma RES_EXISTS_UNIQUE_ALT: "ALL (p::'a::type => bool) m::'a::type => bool.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    86
   RES_EXISTS_UNIQUE p m =
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    87
   RES_EXISTS p
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    88
    (%x::'a::type. m x & RES_FORALL p (%y::'a::type. m y --> y = x))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    89
  by (import res_quan RES_EXISTS_UNIQUE_ALT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    90
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    91
lemma RES_SELECT_EMPTY: "ALL p::'a::type => bool. RES_SELECT EMPTY p = (SOME x::'a::type. False)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    92
  by (import res_quan RES_SELECT_EMPTY)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    93
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    94
lemma RES_SELECT_UNIV: "ALL p::'a::type => bool. RES_SELECT pred_set.UNIV p = Eps p"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    95
  by (import res_quan RES_SELECT_UNIV)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    96
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    97
lemma RES_ABSTRACT: "ALL (p::'a::type => bool) (m::'a::type => 'b::type) x::'a::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
    98
   IN x p --> RES_ABSTRACT p m x = m x"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    99
  by (import res_quan RES_ABSTRACT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   100
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   101
lemma RES_ABSTRACT_EQUAL: "ALL (p::'a::type => bool) (m1::'a::type => 'b::type)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   102
   m2::'a::type => 'b::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   103
   (ALL x::'a::type. IN x p --> m1 x = m2 x) -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   104
   RES_ABSTRACT p m1 = RES_ABSTRACT p m2"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   105
  by (import res_quan RES_ABSTRACT_EQUAL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   106
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   107
lemma RES_ABSTRACT_IDEMPOT: "ALL (p::'a::type => bool) m::'a::type => 'b::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   108
   RES_ABSTRACT p (RES_ABSTRACT p m) = RES_ABSTRACT p m"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   109
  by (import res_quan RES_ABSTRACT_IDEMPOT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   110
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   111
lemma RES_ABSTRACT_EQUAL_EQ: "ALL (p::'a::type => bool) (m1::'a::type => 'b::type)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   112
   m2::'a::type => 'b::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   113
   (RES_ABSTRACT p m1 = RES_ABSTRACT p m2) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   114
   (ALL x::'a::type. IN x p --> m1 x = m2 x)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   115
  by (import res_quan RES_ABSTRACT_EQUAL_EQ)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   116
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   117
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   118
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   119
;setup_theory word_base
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   120
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   121
typedef (open) ('a) word = "(Collect::('a::type list recspace => bool) => 'a::type list recspace set)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   122
 (%x::'a::type list recspace.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   123
     (All::(('a::type list recspace => bool) => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   124
      (%word::'a::type list recspace => bool.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   125
          (op -->::bool => bool => bool)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   126
           ((All::('a::type list recspace => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   127
             (%a0::'a::type list recspace.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   128
                 (op -->::bool => bool => bool)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   129
                  ((Ex::('a::type list => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   130
                    (%a::'a::type list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   131
                        (op =::'a::type list recspace
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   132
                               => 'a::type list recspace => bool)
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   133
                         a0 ((CONSTR::nat
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   134
=> 'a::type list
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   135
   => (nat => 'a::type list recspace) => 'a::type list recspace)
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   136
                              (0::nat) a
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   137
                              (%n::nat. BOTTOM::'a::type list recspace))))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   138
                  (word a0)))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   139
           (word x)))" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   140
  by (rule typedef_helper,import word_base word_TY_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   141
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   142
lemmas word_TY_DEF = typedef_hol2hol4 [OF type_definition_word]
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   143
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   144
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   145
  mk_word :: "'a list recspace => 'a word" 
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   146
  dest_word :: "'a word => 'a list recspace" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   147
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   148
specification (dest_word mk_word) word_repfns: "(ALL a::'a::type word. mk_word (dest_word a) = a) &
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   149
(ALL r::'a::type list recspace.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   150
    (ALL word::'a::type list recspace => bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   151
        (ALL a0::'a::type list recspace.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   152
            (EX a::'a::type list. a0 = CONSTR 0 a (%n::nat. BOTTOM)) -->
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   153
            word a0) -->
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   154
        word r) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   155
    (dest_word (mk_word r) = r))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   156
  by (import word_base word_repfns)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   157
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   158
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   159
  word_base0 :: "'a list => 'a word" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   160
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   161
defs
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   162
  word_base0_primdef: "word_base0 == %a::'a::type list. mk_word (CONSTR 0 a (%n::nat. BOTTOM))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   163
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   164
lemma word_base0_def: "word_base0 = (%a::'a::type list. mk_word (CONSTR 0 a (%n::nat. BOTTOM)))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   165
  by (import word_base word_base0_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   166
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   167
constdefs
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   168
  WORD :: "'a list => 'a word" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   169
  "WORD == word_base0"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   170
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   171
lemma WORD: "WORD = word_base0"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   172
  by (import word_base WORD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   173
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   174
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   175
  word_case :: "('a list => 'b) => 'a word => 'b" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   176
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   177
specification (word_case_primdef: word_case) word_case_def: "ALL (f::'a::type list => 'b::type) a::'a::type list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   178
   word_case f (WORD a) = f a"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   179
  by (import word_base word_case_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   180
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   181
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   182
  word_size :: "('a => nat) => 'a word => nat" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   183
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   184
specification (word_size_primdef: word_size) word_size_def: "ALL (f::'a::type => nat) a::'a::type list.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   185
   word_size f (WORD a) = 1 + list_size f a"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   186
  by (import word_base word_size_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   187
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   188
lemma word_11: "ALL (a::'a::type list) a'::'a::type list. (WORD a = WORD a') = (a = a')"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   189
  by (import word_base word_11)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   190
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   191
lemma word_case_cong: "ALL (M::'a::type word) (M'::'a::type word) f::'a::type list => 'b::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   192
   M = M' &
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   193
   (ALL a::'a::type list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   194
       M' = WORD a --> f a = (f'::'a::type list => 'b::type) a) -->
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   195
   word_case f M = word_case f' M'"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   196
  by (import word_base word_case_cong)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   197
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   198
lemma word_nchotomy: "ALL x::'a::type word. EX l::'a::type list. x = WORD l"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   199
  by (import word_base word_nchotomy)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   200
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   201
lemma word_Axiom: "ALL f::'a::type list => 'b::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   202
   EX fn::'a::type word => 'b::type. ALL a::'a::type list. fn (WORD a) = f a"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   203
  by (import word_base word_Axiom)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   204
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   205
lemma word_induction: "ALL P::'a::type word => bool. (ALL a::'a::type list. P (WORD a)) --> All P"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   206
  by (import word_base word_induction)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   207
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   208
lemma word_Ax: "ALL f::'a::type list => 'b::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   209
   EX fn::'a::type word => 'b::type. ALL a::'a::type list. fn (WORD a) = f a"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   210
  by (import word_base word_Ax)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   211
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   212
lemma WORD_11: "ALL (x::'a::type list) xa::'a::type list. (WORD x = WORD xa) = (x = xa)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   213
  by (import word_base WORD_11)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   214
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   215
lemma word_induct: "ALL x::'a::type word => bool. (ALL l::'a::type list. x (WORD l)) --> All x"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   216
  by (import word_base word_induct)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   217
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   218
lemma word_cases: "ALL x::'a::type word. EX l::'a::type list. x = WORD l"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   219
  by (import word_base word_cases)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   220
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   221
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   222
  WORDLEN :: "'a word => nat" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   223
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   224
specification (WORDLEN) WORDLEN_DEF: "ALL l::'a::type list. WORDLEN (WORD l) = length l"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   225
  by (import word_base WORDLEN_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   226
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   227
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   228
  PWORDLEN :: "nat => 'a word => bool" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   229
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   230
defs
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   231
  PWORDLEN_primdef: "PWORDLEN == %n::nat. GSPEC (%w::'a::type word. (w, WORDLEN w = n))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   232
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   233
lemma PWORDLEN_def: "ALL n::nat. PWORDLEN n = GSPEC (%w::'a::type word. (w, WORDLEN w = n))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   234
  by (import word_base PWORDLEN_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   235
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   236
lemma IN_PWORDLEN: "ALL (n::nat) l::'a::type list. IN (WORD l) (PWORDLEN n) = (length l = n)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   237
  by (import word_base IN_PWORDLEN)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   238
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   239
lemma PWORDLEN: "ALL (n::nat) w::'a::type word. IN w (PWORDLEN n) = (WORDLEN w = n)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   240
  by (import word_base PWORDLEN)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   241
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   242
lemma PWORDLEN0: "ALL w::'a::type word. IN w (PWORDLEN 0) --> w = WORD []"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   243
  by (import word_base PWORDLEN0)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   244
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   245
lemma PWORDLEN1: "ALL x::'a::type. IN (WORD [x]) (PWORDLEN 1)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   246
  by (import word_base PWORDLEN1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   247
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   248
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   249
  WSEG :: "nat => nat => 'a word => 'a word" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   250
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   251
specification (WSEG) WSEG_DEF: "ALL (m::nat) (k::nat) l::'a::type list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   252
   WSEG m k (WORD l) = WORD (LASTN m (BUTLASTN k l))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   253
  by (import word_base WSEG_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   254
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   255
lemma WSEG0: "ALL (k::nat) w::'a::type word. WSEG 0 k w = WORD []"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   256
  by (import word_base WSEG0)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   257
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   258
lemma WSEG_PWORDLEN: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   259
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   260
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   261
        ALL (m::nat) k::nat. m + k <= n --> IN (WSEG m k w) (PWORDLEN m))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   262
  by (import word_base WSEG_PWORDLEN)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   263
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   264
lemma WSEG_WORDLEN: "ALL x::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   265
   RES_FORALL (PWORDLEN x)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   266
    (%xa::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   267
        ALL (xb::nat) xc::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   268
           xb + xc <= x --> WORDLEN (WSEG xb xc xa) = xb)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   269
  by (import word_base WSEG_WORDLEN)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   270
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   271
lemma WSEG_WORD_LENGTH: "ALL n::nat. RES_FORALL (PWORDLEN n) (%w::'a::type word. WSEG n 0 w = w)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   272
  by (import word_base WSEG_WORD_LENGTH)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   273
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   274
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   275
  bit :: "nat => 'a word => 'a" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   276
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   277
specification (bit) BIT_DEF: "ALL (k::nat) l::'a::type list. bit k (WORD l) = ELL k l"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   278
  by (import word_base BIT_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   279
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   280
lemma BIT0: "ALL x::'a::type. bit 0 (WORD [x]) = x"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   281
  by (import word_base BIT0)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   282
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   283
lemma WSEG_BIT: "(All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   284
 (%n::nat.
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   285
     (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   286
                  => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   287
      ((PWORDLEN::nat => 'a::type word => bool) n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   288
      (%w::'a::type word.
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   289
          (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   290
           (%k::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   291
               (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   292
                ((op <::nat => nat => bool) k n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   293
                ((op =::'a::type word => 'a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   294
                  ((WSEG::nat => nat => 'a::type word => 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   295
                    (1::nat) k w)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   296
                  ((WORD::'a::type list => 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   297
                    ((op #::'a::type => 'a::type list => 'a::type list)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   298
                      ((bit::nat => 'a::type word => 'a::type) k w)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   299
                      ([]::'a::type list)))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   300
  by (import word_base WSEG_BIT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   301
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   302
lemma BIT_WSEG: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   303
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   304
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   305
        ALL (m::nat) (k::nat) j::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   306
           m + k <= n --> j < m --> bit j (WSEG m k w) = bit (j + k) w)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   307
  by (import word_base BIT_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   308
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   309
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   310
  MSB :: "'a word => 'a" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   311
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   312
specification (MSB) MSB_DEF: "ALL l::'a::type list. MSB (WORD l) = hd l"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   313
  by (import word_base MSB_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   314
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   315
lemma MSB: "ALL n::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   316
   RES_FORALL (PWORDLEN n)
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   317
    (%w::'a::type word. 0 < n --> MSB w = bit (PRE n) w)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   318
  by (import word_base MSB)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   319
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   320
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   321
  LSB :: "'a word => 'a" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   322
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   323
specification (LSB) LSB_DEF: "ALL l::'a::type list. LSB (WORD l) = last l"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   324
  by (import word_base LSB_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   325
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   326
lemma LSB: "ALL n::nat.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   327
   RES_FORALL (PWORDLEN n) (%w::'a::type word. 0 < n --> LSB w = bit 0 w)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   328
  by (import word_base LSB)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   329
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   330
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   331
  WSPLIT :: "nat => 'a word => 'a word * 'a word" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   332
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   333
specification (WSPLIT) WSPLIT_DEF: "ALL (m::nat) l::'a::type list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   334
   WSPLIT m (WORD l) = (WORD (BUTLASTN m l), WORD (LASTN m l))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   335
  by (import word_base WSPLIT_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   336
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   337
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   338
  WCAT :: "'a word * 'a word => 'a word" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   339
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   340
specification (WCAT) WCAT_DEF: "ALL (l1::'a::type list) l2::'a::type list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   341
   WCAT (WORD l1, WORD l2) = WORD (l1 @ l2)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   342
  by (import word_base WCAT_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   343
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   344
lemma WORD_PARTITION: "(op &::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   345
 ((All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   346
   (%n::nat.
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   347
       (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   348
                    => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   349
        ((PWORDLEN::nat => 'a::type word => bool) n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   350
        (%w::'a::type word.
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   351
            (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   352
             (%m::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   353
                 (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   354
                  ((op <=::nat => nat => bool) m n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   355
                  ((op =::'a::type word => 'a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   356
                    ((WCAT::'a::type word * 'a::type word => 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   357
                      ((WSPLIT::nat
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   358
                                => 'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   359
                                   => 'a::type word * 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   360
                        m w))
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   361
                    w)))))
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   362
 ((All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   363
   (%n::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   364
       (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   365
        (%m::nat.
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   366
            (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   367
                         => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   368
             ((PWORDLEN::nat => 'a::type word => bool) n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   369
             (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   370
                 (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   371
                              => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   372
                  ((PWORDLEN::nat => 'a::type word => bool) m)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   373
                  (%w2::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   374
                      (op =::'a::type word * 'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   375
                             => 'a::type word * 'a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   376
                       ((WSPLIT::nat
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   377
                                 => 'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   378
                                    => 'a::type word * 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   379
                         m ((WCAT::'a::type word * 'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   380
                                   => 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   381
                             ((Pair::'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   382
                                     => 'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   383
  => 'a::type word * 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   384
                               w1 w2)))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   385
                       ((Pair::'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   386
                               => 'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   387
                                  => 'a::type word * 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   388
                         w1 w2))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   389
  by (import word_base WORD_PARTITION)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   390
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   391
lemma WCAT_ASSOC: "ALL (w1::'a::type word) (w2::'a::type word) w3::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   392
   WCAT (w1, WCAT (w2, w3)) = WCAT (WCAT (w1, w2), w3)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   393
  by (import word_base WCAT_ASSOC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   394
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   395
lemma WCAT0: "ALL w::'a::type word. WCAT (WORD [], w) = w & WCAT (w, WORD []) = w"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   396
  by (import word_base WCAT0)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   397
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   398
lemma WCAT_11: "ALL (m::nat) n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   399
   RES_FORALL (PWORDLEN m)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   400
    (%wm1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   401
        RES_FORALL (PWORDLEN m)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   402
         (%wm2::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   403
             RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   404
              (%wn1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   405
                  RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   406
                   (%wn2::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   407
                       (WCAT (wm1, wn1) = WCAT (wm2, wn2)) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   408
                       (wm1 = wm2 & wn1 = wn2)))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   409
  by (import word_base WCAT_11)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   410
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   411
lemma WSPLIT_PWORDLEN: "(All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   412
 (%n::nat.
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   413
     (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   414
                  => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   415
      ((PWORDLEN::nat => 'a::type word => bool) n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   416
      (%w::'a::type word.
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   417
          (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   418
           (%m::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   419
               (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   420
                ((op <=::nat => nat => bool) m n)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   421
                ((op &::bool => bool => bool)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   422
                  ((IN::'a::type word => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   423
                    ((fst::'a::type word * 'a::type word => 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   424
                      ((WSPLIT::nat
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   425
                                => 'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   426
                                   => 'a::type word * 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   427
                        m w))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   428
                    ((PWORDLEN::nat => 'a::type word => bool)
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   429
                      ((op -::nat => nat => nat) n m)))
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   430
                  ((IN::'a::type word => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   431
                    ((snd::'a::type word * 'a::type word => 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   432
                      ((WSPLIT::nat
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   433
                                => 'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   434
                                   => 'a::type word * 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   435
                        m w))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   436
                    ((PWORDLEN::nat => 'a::type word => bool) m))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   437
  by (import word_base WSPLIT_PWORDLEN)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   438
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   439
lemma WCAT_PWORDLEN: "ALL n1::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   440
   RES_FORALL (PWORDLEN n1)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   441
    (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   442
        ALL n2::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   443
           RES_FORALL (PWORDLEN n2)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   444
            (%w2::'a::type word. IN (WCAT (w1, w2)) (PWORDLEN (n1 + n2))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   445
  by (import word_base WCAT_PWORDLEN)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   446
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   447
lemma WORDLEN_SUC_WCAT: "ALL (n::nat) w::'a::type word.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   448
   IN w (PWORDLEN (Suc n)) -->
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   449
   RES_EXISTS (PWORDLEN 1)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   450
    (%b::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   451
        RES_EXISTS (PWORDLEN n) (%w'::'a::type word. w = WCAT (b, w')))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   452
  by (import word_base WORDLEN_SUC_WCAT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   453
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   454
lemma WSEG_WSEG: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   455
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   456
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   457
        ALL (m1::nat) (k1::nat) (m2::nat) k2::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   458
           m1 + k1 <= n & m2 + k2 <= m1 -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   459
           WSEG m2 k2 (WSEG m1 k1 w) = WSEG m2 (k1 + k2) w)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   460
  by (import word_base WSEG_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   461
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   462
lemma WSPLIT_WSEG: "(All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   463
 (%n::nat.
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   464
     (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   465
                  => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   466
      ((PWORDLEN::nat => 'a::type word => bool) n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   467
      (%w::'a::type word.
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   468
          (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   469
           (%k::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   470
               (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   471
                ((op <=::nat => nat => bool) k n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   472
                ((op =::'a::type word * 'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   473
                        => 'a::type word * 'a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   474
                  ((WSPLIT::nat
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   475
                            => 'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   476
                               => 'a::type word * 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   477
                    k w)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   478
                  ((Pair::'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   479
                          => 'a::type word => 'a::type word * 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   480
                    ((WSEG::nat => nat => 'a::type word => 'a::type word)
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   481
                      ((op -::nat => nat => nat) n k) k w)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   482
                    ((WSEG::nat => nat => 'a::type word => 'a::type word) k
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   483
                      (0::nat) w))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   484
  by (import word_base WSPLIT_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   485
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   486
lemma WSPLIT_WSEG1: "(All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   487
 (%n::nat.
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   488
     (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   489
                  => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   490
      ((PWORDLEN::nat => 'a::type word => bool) n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   491
      (%w::'a::type word.
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   492
          (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   493
           (%k::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   494
               (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   495
                ((op <=::nat => nat => bool) k n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   496
                ((op =::'a::type word => 'a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   497
                  ((fst::'a::type word * 'a::type word => 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   498
                    ((WSPLIT::nat
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   499
                              => 'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   500
                                 => 'a::type word * 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   501
                      k w))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   502
                  ((WSEG::nat => nat => 'a::type word => 'a::type word)
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   503
                    ((op -::nat => nat => nat) n k) k w)))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   504
  by (import word_base WSPLIT_WSEG1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   505
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   506
lemma WSPLIT_WSEG2: "(All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   507
 (%n::nat.
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   508
     (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   509
                  => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   510
      ((PWORDLEN::nat => 'a::type word => bool) n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   511
      (%w::'a::type word.
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   512
          (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   513
           (%k::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   514
               (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   515
                ((op <=::nat => nat => bool) k n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   516
                ((op =::'a::type word => 'a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   517
                  ((snd::'a::type word * 'a::type word => 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   518
                    ((WSPLIT::nat
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   519
                              => 'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   520
                                 => 'a::type word * 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   521
                      k w))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   522
                  ((WSEG::nat => nat => 'a::type word => 'a::type word) k
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   523
                    (0::nat) w)))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   524
  by (import word_base WSPLIT_WSEG2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   525
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   526
lemma WCAT_WSEG_WSEG: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   527
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   528
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   529
        ALL (m1::nat) (m2::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   530
           m1 + (m2 + k) <= n -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   531
           WCAT (WSEG m2 (m1 + k) w, WSEG m1 k w) = WSEG (m1 + m2) k w)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   532
  by (import word_base WCAT_WSEG_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   533
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   534
lemma WORD_SPLIT: "ALL (x::nat) xa::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   535
   RES_FORALL (PWORDLEN (x + xa))
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   536
    (%w::'a::type word. w = WCAT (WSEG x xa w, WSEG xa 0 w))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   537
  by (import word_base WORD_SPLIT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   538
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   539
lemma WORDLEN_SUC_WCAT_WSEG_WSEG: "RES_FORALL (PWORDLEN (Suc (n::nat)))
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   540
 (%w::'a::type word. w = WCAT (WSEG 1 n w, WSEG n 0 w))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   541
  by (import word_base WORDLEN_SUC_WCAT_WSEG_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   542
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   543
lemma WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT: "RES_FORALL (PWORDLEN (Suc (n::nat)))
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   544
 (%w::'a::type word. w = WCAT (WSEG n 1 w, WSEG 1 0 w))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   545
  by (import word_base WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   546
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   547
lemma WORDLEN_SUC_WCAT_BIT_WSEG: "ALL n::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   548
   RES_FORALL (PWORDLEN (Suc n))
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   549
    (%w::'a::type word. w = WCAT (WORD [bit n w], WSEG n 0 w))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   550
  by (import word_base WORDLEN_SUC_WCAT_BIT_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   551
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   552
lemma WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT: "ALL n::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   553
   RES_FORALL (PWORDLEN (Suc n))
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   554
    (%w::'a::type word. w = WCAT (WSEG n 1 w, WORD [bit 0 w]))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   555
  by (import word_base WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   556
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   557
lemma WSEG_WCAT1: "ALL (n1::nat) n2::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   558
   RES_FORALL (PWORDLEN n1)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   559
    (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   560
        RES_FORALL (PWORDLEN n2)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   561
         (%w2::'a::type word. WSEG n1 n2 (WCAT (w1, w2)) = w1))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   562
  by (import word_base WSEG_WCAT1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   563
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   564
lemma WSEG_WCAT2: "ALL (n1::nat) n2::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   565
   RES_FORALL (PWORDLEN n1)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   566
    (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   567
        RES_FORALL (PWORDLEN n2)
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   568
         (%w2::'a::type word. WSEG n2 0 (WCAT (w1, w2)) = w2))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   569
  by (import word_base WSEG_WCAT2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   570
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   571
lemma WSEG_SUC: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   572
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   573
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   574
        ALL (k::nat) m1::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   575
           k + Suc m1 < n -->
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   576
           WSEG (Suc m1) k w = WCAT (WSEG 1 (k + m1) w, WSEG m1 k w))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   577
  by (import word_base WSEG_SUC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   578
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   579
lemma WORD_CONS_WCAT: "ALL (x::'a::type) l::'a::type list. WORD (x # l) = WCAT (WORD [x], WORD l)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   580
  by (import word_base WORD_CONS_WCAT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   581
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   582
lemma WORD_SNOC_WCAT: "ALL (l::'a::type list) x::'a::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   583
   WORD (SNOC x l) = WCAT (WORD l, WORD [x])"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   584
  by (import word_base WORD_SNOC_WCAT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   585
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   586
lemma BIT_WCAT_FST: "ALL (n1::nat) n2::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   587
   RES_FORALL (PWORDLEN n1)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   588
    (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   589
        RES_FORALL (PWORDLEN n2)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   590
         (%w2::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   591
             ALL k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   592
                n2 <= k & k < n1 + n2 -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   593
                bit k (WCAT (w1, w2)) = bit (k - n2) w1))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   594
  by (import word_base BIT_WCAT_FST)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   595
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   596
lemma BIT_WCAT_SND: "(All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   597
 (%n1::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   598
     (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   599
      (%n2::nat.
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   600
          (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   601
                       => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   602
           ((PWORDLEN::nat => 'a::type word => bool) n1)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   603
           (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   604
               (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   605
                            => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   606
                ((PWORDLEN::nat => 'a::type word => bool) n2)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   607
                (%w2::'a::type word.
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   608
                    (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   609
                     (%k::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   610
                         (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   611
                          ((op <::nat => nat => bool) k n2)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   612
                          ((op =::'a::type => 'a::type => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   613
                            ((bit::nat => 'a::type word => 'a::type) k
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   614
                              ((WCAT::'a::type word * 'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   615
=> 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   616
                                ((Pair::'a::type word
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   617
  => 'a::type word => 'a::type word * 'a::type word)
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   618
                                  w1 w2)))
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   619
                            ((bit::nat => 'a::type word => 'a::type) k
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   620
                              w2)))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   621
  by (import word_base BIT_WCAT_SND)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   622
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   623
lemma BIT_WCAT1: "ALL n::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   624
   RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   625
    (%w::'a::type word. ALL b::'a::type. bit n (WCAT (WORD [b], w)) = b)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   626
  by (import word_base BIT_WCAT1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   627
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   628
lemma WSEG_WCAT_WSEG1: "ALL (n1::nat) n2::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   629
   RES_FORALL (PWORDLEN n1)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   630
    (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   631
        RES_FORALL (PWORDLEN n2)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   632
         (%w2::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   633
             ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   634
                m <= n1 & n2 <= k -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   635
                WSEG m k (WCAT (w1, w2)) = WSEG m (k - n2) w1))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   636
  by (import word_base WSEG_WCAT_WSEG1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   637
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   638
lemma WSEG_WCAT_WSEG2: "ALL (n1::nat) n2::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   639
   RES_FORALL (PWORDLEN n1)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   640
    (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   641
        RES_FORALL (PWORDLEN n2)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   642
         (%w2::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   643
             ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   644
                m + k <= n2 --> WSEG m k (WCAT (w1, w2)) = WSEG m k w2))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   645
  by (import word_base WSEG_WCAT_WSEG2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   646
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   647
lemma WSEG_WCAT_WSEG: "ALL (n1::nat) n2::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   648
   RES_FORALL (PWORDLEN n1)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   649
    (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   650
        RES_FORALL (PWORDLEN n2)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   651
         (%w2::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   652
             ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   653
                m + k <= n1 + n2 & k < n2 & n2 <= m + k -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   654
                WSEG m k (WCAT (w1, w2)) =
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   655
                WCAT (WSEG (m + k - n2) 0 w1, WSEG (n2 - k) k w2)))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   656
  by (import word_base WSEG_WCAT_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   657
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   658
lemma BIT_EQ_IMP_WORD_EQ: "(All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   659
 (%n::nat.
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   660
     (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   661
                  => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   662
      ((PWORDLEN::nat => 'a::type word => bool) n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   663
      (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   664
          (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   665
                       => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   666
           ((PWORDLEN::nat => 'a::type word => bool) n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   667
           (%w2::'a::type word.
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   668
               (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   669
                ((All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   670
                  (%k::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   671
                      (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   672
                       ((op <::nat => nat => bool) k n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   673
                       ((op =::'a::type => 'a::type => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   674
                         ((bit::nat => 'a::type word => 'a::type) k w1)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   675
                         ((bit::nat => 'a::type word => 'a::type) k w2))))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   676
                ((op =::'a::type word => 'a::type word => bool) w1 w2))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   677
  by (import word_base BIT_EQ_IMP_WORD_EQ)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   678
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   679
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   680
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   681
;setup_theory word_num
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   682
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   683
constdefs
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   684
  LVAL :: "('a => nat) => nat => 'a list => nat" 
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   685
  "LVAL ==
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   686
%(f::'a::type => nat) b::nat. foldl (%(e::nat) x::'a::type. b * e + f x) 0"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   687
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   688
lemma LVAL_DEF: "ALL (f::'a::type => nat) (b::nat) l::'a::type list.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   689
   LVAL f b l = foldl (%(e::nat) x::'a::type. b * e + f x) 0 l"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   690
  by (import word_num LVAL_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   691
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   692
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   693
  NVAL :: "('a => nat) => nat => 'a word => nat" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   694
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   695
specification (NVAL) NVAL_DEF: "ALL (f::'a::type => nat) (b::nat) l::'a::type list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   696
   NVAL f b (WORD l) = LVAL f b l"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   697
  by (import word_num NVAL_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   698
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   699
lemma LVAL: "(ALL (x::'a::type => nat) xa::nat. LVAL x xa [] = 0) &
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   700
(ALL (x::'a::type list) (xa::'a::type => nat) (xb::nat) xc::'a::type.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   701
    LVAL xa xb (xc # x) = xa xc * xb ^ length x + LVAL xa xb x)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   702
  by (import word_num LVAL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   703
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   704
lemma LVAL_SNOC: "ALL (l::'a::type list) (h::'a::type) (f::'a::type => nat) b::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   705
   LVAL f b (SNOC h l) = LVAL f b l * b + f h"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   706
  by (import word_num LVAL_SNOC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   707
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   708
lemma LVAL_MAX: "ALL (l::'a::type list) (f::'a::type => nat) b::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   709
   (ALL x::'a::type. f x < b) --> LVAL f b l < b ^ length l"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   710
  by (import word_num LVAL_MAX)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   711
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   712
lemma NVAL_MAX: "ALL (f::'a::type => nat) b::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   713
   (ALL x::'a::type. f x < b) -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   714
   (ALL n::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   715
       RES_FORALL (PWORDLEN n) (%w::'a::type word. NVAL f b w < b ^ n))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   716
  by (import word_num NVAL_MAX)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   717
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   718
lemma NVAL0: "ALL (x::'a::type => nat) xa::nat. NVAL x xa (WORD []) = 0"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   719
  by (import word_num NVAL0)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   720
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   721
lemma NVAL1: "ALL (x::'a::type => nat) (xa::nat) xb::'a::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   722
   NVAL x xa (WORD [xb]) = x xb"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   723
  by (import word_num NVAL1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   724
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   725
lemma NVAL_WORDLEN_0: "RES_FORALL (PWORDLEN 0)
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   726
 (%w::'a::type word. ALL (fv::'a::type => nat) r::nat. NVAL fv r w = 0)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   727
  by (import word_num NVAL_WORDLEN_0)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   728
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   729
lemma NVAL_WCAT1: "ALL (w::'a::type word) (f::'a::type => nat) (b::nat) x::'a::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   730
   NVAL f b (WCAT (w, WORD [x])) = NVAL f b w * b + f x"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   731
  by (import word_num NVAL_WCAT1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   732
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   733
lemma NVAL_WCAT2: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   734
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   735
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   736
        ALL (f::'a::type => nat) (b::nat) x::'a::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   737
           NVAL f b (WCAT (WORD [x], w)) = f x * b ^ n + NVAL f b w)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   738
  by (import word_num NVAL_WCAT2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   739
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   740
lemma NVAL_WCAT: "ALL (n::nat) m::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   741
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   742
    (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   743
        RES_FORALL (PWORDLEN m)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   744
         (%w2::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   745
             ALL (f::'a::type => nat) b::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   746
                NVAL f b (WCAT (w1, w2)) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   747
                NVAL f b w1 * b ^ m + NVAL f b w2))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   748
  by (import word_num NVAL_WCAT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   749
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   750
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   751
  NLIST :: "nat => (nat => 'a) => nat => nat => 'a list" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   752
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   753
specification (NLIST) NLIST_DEF: "(ALL (frep::nat => 'a::type) (b::nat) m::nat. NLIST 0 frep b m = []) &
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   754
(ALL (n::nat) (frep::nat => 'a::type) (b::nat) m::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   755
    NLIST (Suc n) frep b m =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   756
    SNOC (frep (m mod b)) (NLIST n frep b (m div b)))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   757
  by (import word_num NLIST_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   758
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   759
constdefs
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   760
  NWORD :: "nat => (nat => 'a) => nat => nat => 'a word" 
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   761
  "NWORD ==
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   762
%(n::nat) (frep::nat => 'a::type) (b::nat) m::nat. WORD (NLIST n frep b m)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   763
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   764
lemma NWORD_DEF: "ALL (n::nat) (frep::nat => 'a::type) (b::nat) m::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   765
   NWORD n frep b m = WORD (NLIST n frep b m)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   766
  by (import word_num NWORD_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   767
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   768
lemma NWORD_LENGTH: "ALL (x::nat) (xa::nat => 'a::type) (xb::nat) xc::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   769
   WORDLEN (NWORD x xa xb xc) = x"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   770
  by (import word_num NWORD_LENGTH)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   771
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   772
lemma NWORD_PWORDLEN: "ALL (x::nat) (xa::nat => 'a::type) (xb::nat) xc::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   773
   IN (NWORD x xa xb xc) (PWORDLEN x)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   774
  by (import word_num NWORD_PWORDLEN)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   775
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   776
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   777
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   778
;setup_theory word_bitop
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   779
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   780
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   781
  PBITOP :: "('a word => 'b word) => bool" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   782
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   783
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   784
  PBITOP_primdef: "PBITOP ==
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   785
GSPEC
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   786
 (%oper::'a::type word => 'b::type word.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   787
     (oper,
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   788
      ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   789
         RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   790
          (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   791
              IN (oper w) (PWORDLEN n) &
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   792
              (ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   793
                  m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   794
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   795
lemma PBITOP_def: "PBITOP =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   796
GSPEC
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   797
 (%oper::'a::type word => 'b::type word.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   798
     (oper,
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   799
      ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   800
         RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   801
          (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   802
              IN (oper w) (PWORDLEN n) &
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   803
              (ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   804
                  m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   805
  by (import word_bitop PBITOP_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   806
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   807
lemma IN_PBITOP: "ALL oper::'a::type word => 'b::type word.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   808
   IN oper PBITOP =
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   809
   (ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   810
       RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   811
        (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   812
            IN (oper w) (PWORDLEN n) &
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   813
            (ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   814
                m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   815
  by (import word_bitop IN_PBITOP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   816
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   817
lemma PBITOP_PWORDLEN: "RES_FORALL PBITOP
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   818
 (%oper::'a::type word => 'b::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   819
     ALL n::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   820
        RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   821
         (%w::'a::type word. IN (oper w) (PWORDLEN n)))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   822
  by (import word_bitop PBITOP_PWORDLEN)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   823
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   824
lemma PBITOP_WSEG: "RES_FORALL PBITOP
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   825
 (%oper::'a::type word => 'b::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   826
     ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   827
        RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   828
         (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   829
             ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   830
                m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   831
  by (import word_bitop PBITOP_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   832
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   833
lemma PBITOP_BIT: "(RES_FORALL::(('a::type word => 'b::type word) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   834
             => (('a::type word => 'b::type word) => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   835
 (PBITOP::('a::type word => 'b::type word) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   836
 (%oper::'a::type word => 'b::type word.
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   837
     (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   838
      (%n::nat.
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   839
          (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   840
                       => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   841
           ((PWORDLEN::nat => 'a::type word => bool) n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   842
           (%w::'a::type word.
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   843
               (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   844
                (%k::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   845
                    (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   846
                     ((op <::nat => nat => bool) k n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   847
                     ((op =::'b::type word => 'b::type word => bool)
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   848
                       (oper
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   849
                         ((WORD::'a::type list => 'a::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   850
                           ((op #::'a::type
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   851
                                   => 'a::type list => 'a::type list)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   852
                             ((bit::nat => 'a::type word => 'a::type) k w)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   853
                             ([]::'a::type list))))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   854
                       ((WORD::'b::type list => 'b::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   855
                         ((op #::'b::type => 'b::type list => 'b::type list)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   856
                           ((bit::nat => 'b::type word => 'b::type) k
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   857
                             (oper w))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   858
                           ([]::'b::type list))))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   859
  by (import word_bitop PBITOP_BIT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   860
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   861
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   862
  PBITBOP :: "('a word => 'b word => 'c word) => bool" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   863
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   864
defs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   865
  PBITBOP_primdef: "PBITBOP ==
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   866
GSPEC
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   867
 (%oper::'a::type word => 'b::type word => 'c::type word.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   868
     (oper,
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   869
      ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   870
         RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   871
          (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   872
              RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   873
               (%w2::'b::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   874
                   IN (oper w1 w2) (PWORDLEN n) &
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   875
                   (ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   876
                       m + k <= n -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   877
                       oper (WSEG m k w1) (WSEG m k w2) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   878
                       WSEG m k (oper w1 w2))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   879
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   880
lemma PBITBOP_def: "PBITBOP =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   881
GSPEC
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   882
 (%oper::'a::type word => 'b::type word => 'c::type word.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   883
     (oper,
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   884
      ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   885
         RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   886
          (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   887
              RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   888
               (%w2::'b::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   889
                   IN (oper w1 w2) (PWORDLEN n) &
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   890
                   (ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   891
                       m + k <= n -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   892
                       oper (WSEG m k w1) (WSEG m k w2) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   893
                       WSEG m k (oper w1 w2))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   894
  by (import word_bitop PBITBOP_def)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   895
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   896
lemma IN_PBITBOP: "ALL oper::'a::type word => 'b::type word => 'c::type word.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   897
   IN oper PBITBOP =
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   898
   (ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   899
       RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   900
        (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   901
            RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   902
             (%w2::'b::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   903
                 IN (oper w1 w2) (PWORDLEN n) &
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   904
                 (ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   905
                     m + k <= n -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   906
                     oper (WSEG m k w1) (WSEG m k w2) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   907
                     WSEG m k (oper w1 w2)))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   908
  by (import word_bitop IN_PBITBOP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   909
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   910
lemma PBITBOP_PWORDLEN: "RES_FORALL PBITBOP
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   911
 (%oper::'a::type word => 'b::type word => 'c::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   912
     ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   913
        RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   914
         (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   915
             RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   916
              (%w2::'b::type word. IN (oper w1 w2) (PWORDLEN n))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   917
  by (import word_bitop PBITBOP_PWORDLEN)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   918
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   919
lemma PBITBOP_WSEG: "RES_FORALL PBITBOP
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   920
 (%oper::'a::type word => 'b::type word => 'c::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   921
     ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   922
        RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   923
         (%w1::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   924
             RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   925
              (%w2::'b::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   926
                  ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   927
                     m + k <= n -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   928
                     oper (WSEG m k w1) (WSEG m k w2) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   929
                     WSEG m k (oper w1 w2))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   930
  by (import word_bitop PBITBOP_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   931
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   932
lemma PBITBOP_EXISTS: "ALL f::'a::type => 'b::type => 'c::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   933
   EX x::'a::type word => 'b::type word => 'c::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   934
      ALL (l1::'a::type list) l2::'b::type list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   935
         x (WORD l1) (WORD l2) = WORD (map2 f l1 l2)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   936
  by (import word_bitop PBITBOP_EXISTS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   937
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   938
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   939
  WMAP :: "('a => 'b) => 'a word => 'b word" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   940
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   941
specification (WMAP) WMAP_DEF: "ALL (f::'a::type => 'b::type) l::'a::type list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   942
   WMAP f (WORD l) = WORD (map f l)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   943
  by (import word_bitop WMAP_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   944
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   945
lemma WMAP_PWORDLEN: "RES_FORALL (PWORDLEN (n::nat))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   946
 (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   947
     ALL f::'a::type => 'b::type. IN (WMAP f w) (PWORDLEN n))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   948
  by (import word_bitop WMAP_PWORDLEN)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   949
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   950
lemma WMAP_0: "ALL x::'a::type => 'b::type. WMAP x (WORD []) = WORD []"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   951
  by (import word_bitop WMAP_0)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   952
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   953
lemma WMAP_BIT: "(All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   954
 (%n::nat.
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   955
     (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   956
                  => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   957
      ((PWORDLEN::nat => 'a::type word => bool) n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   958
      (%w::'a::type word.
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   959
          (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   960
           (%k::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   961
               (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
   962
                ((op <::nat => nat => bool) k n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   963
                ((All::(('a::type => 'b::type) => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   964
                  (%f::'a::type => 'b::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   965
                      (op =::'b::type => 'b::type => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   966
                       ((bit::nat => 'b::type word => 'b::type) k
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   967
                         ((WMAP::('a::type => 'b::type)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   968
                                 => 'a::type word => 'b::type word)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   969
                           f w))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   970
                       (f ((bit::nat => 'a::type word => 'a::type) k
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   971
                            w)))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   972
  by (import word_bitop WMAP_BIT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   973
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   974
lemma WMAP_WSEG: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   975
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   976
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   977
        ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   978
           m + k <= n -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   979
           (ALL f::'a::type => 'b::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   980
               WMAP f (WSEG m k w) = WSEG m k (WMAP f w)))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   981
  by (import word_bitop WMAP_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   982
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   983
lemma WMAP_PBITOP: "ALL f::'a::type => 'b::type. IN (WMAP f) PBITOP"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   984
  by (import word_bitop WMAP_PBITOP)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   985
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   986
lemma WMAP_WCAT: "ALL (w1::'a::type word) (w2::'a::type word) f::'a::type => 'b::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   987
   WMAP f (WCAT (w1, w2)) = WCAT (WMAP f w1, WMAP f w2)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   988
  by (import word_bitop WMAP_WCAT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   989
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   990
lemma WMAP_o: "ALL (w::'a::type word) (f::'a::type => 'b::type) g::'b::type => 'c::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   991
   WMAP g (WMAP f w) = WMAP (g o f) w"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   992
  by (import word_bitop WMAP_o)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   993
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   994
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
   995
  FORALLBITS :: "('a => bool) => 'a word => bool" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   996
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   997
specification (FORALLBITS) FORALLBITS_DEF: "ALL (P::'a::type => bool) l::'a::type list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
   998
   FORALLBITS P (WORD l) = list_all P l"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   999
  by (import word_bitop FORALLBITS_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1000
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1001
lemma FORALLBITS: "(All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1002
 (%n::nat.
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1003
     (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1004
                  => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1005
      ((PWORDLEN::nat => 'a::type word => bool) n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1006
      (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1007
          (All::(('a::type => bool) => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1008
           (%P::'a::type => bool.
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1009
               (op =::bool => bool => bool)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1010
                ((FORALLBITS::('a::type => bool) => 'a::type word => bool) P
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1011
                  w)
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1012
                ((All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1013
                  (%k::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1014
                      (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1015
                       ((op <::nat => nat => bool) k n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1016
                       (P ((bit::nat => 'a::type word => 'a::type) k
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1017
                            w)))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1018
  by (import word_bitop FORALLBITS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1019
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1020
lemma FORALLBITS_WSEG: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1021
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1022
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1023
        ALL P::'a::type => bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1024
           FORALLBITS P w -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1025
           (ALL (m::nat) k::nat. m + k <= n --> FORALLBITS P (WSEG m k w)))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1026
  by (import word_bitop FORALLBITS_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1027
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1028
lemma FORALLBITS_WCAT: "ALL (w1::'a::type word) (w2::'a::type word) P::'a::type => bool.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1029
   FORALLBITS P (WCAT (w1, w2)) = (FORALLBITS P w1 & FORALLBITS P w2)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1030
  by (import word_bitop FORALLBITS_WCAT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1031
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1032
consts
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1033
  EXISTSABIT :: "('a => bool) => 'a word => bool" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1034
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1035
specification (EXISTSABIT) EXISTSABIT_DEF: "ALL (P::'a::type => bool) l::'a::type list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1036
   EXISTSABIT P (WORD l) = list_exists P l"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1037
  by (import word_bitop EXISTSABIT_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1038
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1039
lemma NOT_EXISTSABIT: "ALL (P::'a::type => bool) w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1040
   (~ EXISTSABIT P w) = FORALLBITS (Not o P) w"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1041
  by (import word_bitop NOT_EXISTSABIT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1042
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1043
lemma NOT_FORALLBITS: "ALL (P::'a::type => bool) w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1044
   (~ FORALLBITS P w) = EXISTSABIT (Not o P) w"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1045
  by (import word_bitop NOT_FORALLBITS)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1046
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1047
lemma EXISTSABIT: "(All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1048
 (%n::nat.
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1049
     (RES_FORALL::('a::type word => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1050
                  => ('a::type word => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1051
      ((PWORDLEN::nat => 'a::type word => bool) n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1052
      (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1053
          (All::(('a::type => bool) => bool) => bool)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1054
           (%P::'a::type => bool.
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1055
               (op =::bool => bool => bool)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1056
                ((EXISTSABIT::('a::type => bool) => 'a::type word => bool) P
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1057
                  w)
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1058
                ((Ex::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1059
                  (%k::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1060
                      (op &::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1061
                       ((op <::nat => nat => bool) k n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1062
                       (P ((bit::nat => 'a::type word => 'a::type) k
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1063
                            w)))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1064
  by (import word_bitop EXISTSABIT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1065
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1066
lemma EXISTSABIT_WSEG: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1067
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1068
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1069
        ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1070
           m + k <= n -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1071
           (ALL P::'a::type => bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1072
               EXISTSABIT P (WSEG m k w) --> EXISTSABIT P w))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1073
  by (import word_bitop EXISTSABIT_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1074
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1075
lemma EXISTSABIT_WCAT: "ALL (w1::'a::type word) (w2::'a::type word) P::'a::type => bool.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1076
   EXISTSABIT P (WCAT (w1, w2)) = (EXISTSABIT P w1 | EXISTSABIT P w2)"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1077
  by (import word_bitop EXISTSABIT_WCAT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1078
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1079
constdefs
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1080
  SHR :: "bool => 'a => 'a word => 'a word * 'a" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1081
  "SHR ==
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1082
%(f::bool) (b::'a::type) w::'a::type word.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1083
   (WCAT
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1084
     (if f then WSEG 1 (PRE (WORDLEN w)) w else WORD [b],
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1085
      WSEG (PRE (WORDLEN w)) 1 w),
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1086
    bit 0 w)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1087
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1088
lemma SHR_DEF: "ALL (f::bool) (b::'a::type) w::'a::type word.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1089
   SHR f b w =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1090
   (WCAT
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1091
     (if f then WSEG 1 (PRE (WORDLEN w)) w else WORD [b],
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1092
      WSEG (PRE (WORDLEN w)) 1 w),
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1093
    bit 0 w)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1094
  by (import word_bitop SHR_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1095
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1096
constdefs
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1097
  SHL :: "bool => 'a word => 'a => 'a * 'a word" 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1098
  "SHL ==
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1099
%(f::bool) (w::'a::type word) b::'a::type.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1100
   (bit (PRE (WORDLEN w)) w,
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1101
    WCAT (WSEG (PRE (WORDLEN w)) 0 w, if f then WSEG 1 0 w else WORD [b]))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1102
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1103
lemma SHL_DEF: "ALL (f::bool) (w::'a::type word) b::'a::type.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1104
   SHL f w b =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1105
   (bit (PRE (WORDLEN w)) w,
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1106
    WCAT (WSEG (PRE (WORDLEN w)) 0 w, if f then WSEG 1 0 w else WORD [b]))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1107
  by (import word_bitop SHL_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1108
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1109
lemma SHR_WSEG: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1110
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1111
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1112
        ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1113
           m + k <= n -->
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1114
           0 < m -->
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1115
           (ALL (f::bool) b::'a::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1116
               SHR f b (WSEG m k w) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1117
               (if f
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1118
                then WCAT (WSEG 1 (k + (m - 1)) w, WSEG (m - 1) (k + 1) w)
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1119
                else WCAT (WORD [b], WSEG (m - 1) (k + 1) w),
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1120
                bit k w)))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1121
  by (import word_bitop SHR_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1122
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1123
lemma SHR_WSEG_1F: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1124
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1125
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1126
        ALL (b::'a::type) (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1127
           m + k <= n -->
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1128
           0 < m -->
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1129
           SHR False b (WSEG m k w) =
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1130
           (WCAT (WORD [b], WSEG (m - 1) (k + 1) w), bit k w))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1131
  by (import word_bitop SHR_WSEG_1F)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1132
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1133
lemma SHR_WSEG_NF: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1134
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1135
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1136
        ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1137
           m + k < n -->
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1138
           0 < m -->
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1139
           SHR False (bit (m + k) w) (WSEG m k w) =
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1140
           (WSEG m (k + 1) w, bit k w))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1141
  by (import word_bitop SHR_WSEG_NF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1142
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1143
lemma SHL_WSEG: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1144
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1145
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1146
        ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1147
           m + k <= n -->
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1148
           0 < m -->
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1149
           (ALL (f::bool) b::'a::type.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1150
               SHL f (WSEG m k w) b =
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1151
               (bit (k + (m - 1)) w,
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1152
                if f then WCAT (WSEG (m - 1) k w, WSEG 1 k w)
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1153
                else WCAT (WSEG (m - 1) k w, WORD [b]))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1154
  by (import word_bitop SHL_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1155
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1156
lemma SHL_WSEG_1F: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1157
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1158
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1159
        ALL (b::'a::type) (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1160
           m + k <= n -->
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1161
           0 < m -->
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1162
           SHL False (WSEG m k w) b =
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1163
           (bit (k + (m - 1)) w, WCAT (WSEG (m - 1) k w, WORD [b])))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1164
  by (import word_bitop SHL_WSEG_1F)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1165
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1166
lemma SHL_WSEG_NF: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1167
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1168
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1169
        ALL (m::nat) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1170
           m + k <= n -->
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1171
           0 < m -->
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1172
           0 < k -->
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1173
           SHL False (WSEG m k w) (bit (k - 1) w) =
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1174
           (bit (k + (m - 1)) w, WSEG m (k - 1) w))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1175
  by (import word_bitop SHL_WSEG_NF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1176
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1177
lemma WSEG_SHL: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1178
   RES_FORALL (PWORDLEN (Suc n))
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1179
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1180
        ALL (m::nat) k::nat.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1181
           0 < k & m + k <= Suc n -->
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1182
           (ALL b::'a::type.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1183
               WSEG m k (snd (SHL (f::bool) w b)) = WSEG m (k - 1) w))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1184
  by (import word_bitop WSEG_SHL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1185
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1186
lemma WSEG_SHL_0: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1187
   RES_FORALL (PWORDLEN (Suc n))
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1188
    (%w::'a::type word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1189
        ALL (m::nat) b::'a::type.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1190
           0 < m & m <= Suc n -->
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1191
           WSEG m 0 (snd (SHL (f::bool) w b)) =
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1192
           WCAT (WSEG (m - 1) 0 w, if f then WSEG 1 0 w else WORD [b]))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1193
  by (import word_bitop WSEG_SHL_0)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1194
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1195
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1196
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1197
;setup_theory bword_num
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1198
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1199
constdefs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1200
  BV :: "bool => nat" 
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1201
  "BV == %b::bool. if b then Suc 0 else 0"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1202
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1203
lemma BV_DEF: "ALL b::bool. BV b = (if b then Suc 0 else 0)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1204
  by (import bword_num BV_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1205
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1206
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1207
  BNVAL :: "bool word => nat" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1208
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1209
specification (BNVAL) BNVAL_DEF: "ALL l::bool list. BNVAL (WORD l) = LVAL BV 2 l"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1210
  by (import bword_num BNVAL_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1211
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1212
lemma BV_LESS_2: "ALL x::bool. BV x < 2"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1213
  by (import bword_num BV_LESS_2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1214
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1215
lemma BNVAL_NVAL: "ALL w::bool word. BNVAL w = NVAL BV 2 w"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1216
  by (import bword_num BNVAL_NVAL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1217
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1218
lemma BNVAL0: "BNVAL (WORD []) = 0"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1219
  by (import bword_num BNVAL0)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1220
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1221
lemma BNVAL_11: "ALL (w1::bool word) w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1222
   WORDLEN w1 = WORDLEN w2 --> BNVAL w1 = BNVAL w2 --> w1 = w2"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1223
  by (import bword_num BNVAL_11)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1224
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1225
lemma BNVAL_ONTO: "ALL w::bool word. Ex (op = (BNVAL w))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1226
  by (import bword_num BNVAL_ONTO)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1227
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1228
lemma BNVAL_MAX: "ALL n::nat. RES_FORALL (PWORDLEN n) (%w::bool word. BNVAL w < 2 ^ n)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1229
  by (import bword_num BNVAL_MAX)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1230
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1231
lemma BNVAL_WCAT1: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1232
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1233
    (%w::bool word.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1234
        ALL x::bool. BNVAL (WCAT (w, WORD [x])) = BNVAL w * 2 + BV x)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1235
  by (import bword_num BNVAL_WCAT1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1236
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1237
lemma BNVAL_WCAT2: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1238
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1239
    (%w::bool word.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1240
        ALL x::bool. BNVAL (WCAT (WORD [x], w)) = BV x * 2 ^ n + BNVAL w)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1241
  by (import bword_num BNVAL_WCAT2)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1242
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1243
lemma BNVAL_WCAT: "ALL (n::nat) m::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1244
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1245
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1246
        RES_FORALL (PWORDLEN m)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1247
         (%w2::bool word.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1248
             BNVAL (WCAT (w1, w2)) = BNVAL w1 * 2 ^ m + BNVAL w2))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1249
  by (import bword_num BNVAL_WCAT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1250
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1251
constdefs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1252
  VB :: "nat => bool" 
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1253
  "VB == %n::nat. n mod 2 ~= 0"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1254
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1255
lemma VB_DEF: "ALL n::nat. VB n = (n mod 2 ~= 0)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1256
  by (import bword_num VB_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1257
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1258
constdefs
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1259
  NBWORD :: "nat => nat => bool word" 
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1260
  "NBWORD == %(n::nat) m::nat. WORD (NLIST n VB 2 m)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1261
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1262
lemma NBWORD_DEF: "ALL (n::nat) m::nat. NBWORD n m = WORD (NLIST n VB 2 m)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1263
  by (import bword_num NBWORD_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1264
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1265
lemma NBWORD0: "ALL x::nat. NBWORD 0 x = WORD []"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1266
  by (import bword_num NBWORD0)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1267
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1268
lemma WORDLEN_NBWORD: "ALL (x::nat) xa::nat. WORDLEN (NBWORD x xa) = x"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1269
  by (import bword_num WORDLEN_NBWORD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1270
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1271
lemma PWORDLEN_NBWORD: "ALL (x::nat) xa::nat. IN (NBWORD x xa) (PWORDLEN x)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1272
  by (import bword_num PWORDLEN_NBWORD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1273
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1274
lemma NBWORD_SUC: "ALL (n::nat) m::nat.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1275
   NBWORD (Suc n) m = WCAT (NBWORD n (m div 2), WORD [VB (m mod 2)])"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1276
  by (import bword_num NBWORD_SUC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1277
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1278
lemma VB_BV: "ALL x::bool. VB (BV x) = x"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1279
  by (import bword_num VB_BV)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1280
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1281
lemma BV_VB: "(All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1282
 (%x::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1283
     (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1284
      ((op <::nat => nat => bool) x
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1285
        ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  1286
          ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  1287
            ((op BIT::bin => bit => bin) (Numeral.Pls::bin) (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  1288
            (bit.B0::bit))))
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1289
      ((op =::nat => nat => bool) ((BV::bool => nat) ((VB::nat => bool) x))
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1290
        x))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1291
  by (import bword_num BV_VB)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1292
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1293
lemma NBWORD_BNVAL: "ALL n::nat. RES_FORALL (PWORDLEN n) (%w::bool word. NBWORD n (BNVAL w) = w)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1294
  by (import bword_num NBWORD_BNVAL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1295
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1296
lemma BNVAL_NBWORD: "ALL (n::nat) m::nat. m < 2 ^ n --> BNVAL (NBWORD n m) = m"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1297
  by (import bword_num BNVAL_NBWORD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1298
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1299
lemma ZERO_WORD_VAL: "RES_FORALL (PWORDLEN (n::nat))
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1300
 (%w::bool word. (w = NBWORD n 0) = (BNVAL w = 0))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1301
  by (import bword_num ZERO_WORD_VAL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1302
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1303
lemma WCAT_NBWORD_0: "ALL (n1::nat) n2::nat. WCAT (NBWORD n1 0, NBWORD n2 0) = NBWORD (n1 + n2) 0"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1304
  by (import bword_num WCAT_NBWORD_0)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1305
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1306
lemma WSPLIT_NBWORD_0: "ALL (n::nat) m::nat.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1307
   m <= n --> WSPLIT m (NBWORD n 0) = (NBWORD (n - m) 0, NBWORD m 0)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1308
  by (import bword_num WSPLIT_NBWORD_0)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1309
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1310
lemma EQ_NBWORD0_SPLIT: "(All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1311
 (%n::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1312
     (RES_FORALL::(bool word => bool) => (bool word => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1313
      ((PWORDLEN::nat => bool word => bool) n)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1314
      (%w::bool word.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1315
          (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1316
           (%m::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1317
               (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1318
                ((op <=::nat => nat => bool) m n)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1319
                ((op =::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1320
                  ((op =::bool word => bool word => bool) w
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1321
                    ((NBWORD::nat => nat => bool word) n (0::nat)))
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1322
                  ((op &::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1323
                    ((op =::bool word => bool word => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1324
                      ((WSEG::nat => nat => bool word => bool word)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1325
                        ((op -::nat => nat => nat) n m) m w)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1326
                      ((NBWORD::nat => nat => bool word)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1327
                        ((op -::nat => nat => nat) n m) (0::nat)))
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1328
                    ((op =::bool word => bool word => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1329
                      ((WSEG::nat => nat => bool word => bool word) m
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1330
                        (0::nat) w)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1331
                      ((NBWORD::nat => nat => bool word) m (0::nat))))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1332
  by (import bword_num EQ_NBWORD0_SPLIT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1333
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1334
lemma NBWORD_MOD: "ALL (n::nat) m::nat. NBWORD n (m mod 2 ^ n) = NBWORD n m"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1335
  by (import bword_num NBWORD_MOD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1336
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1337
lemma WSEG_NBWORD_SUC: "ALL (n::nat) m::nat. WSEG n 0 (NBWORD (Suc n) m) = NBWORD n m"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1338
  by (import bword_num WSEG_NBWORD_SUC)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1339
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1340
lemma NBWORD_SUC_WSEG: "ALL n::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1341
   RES_FORALL (PWORDLEN (Suc n))
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1342
    (%w::bool word. NBWORD n (BNVAL w) = WSEG n 0 w)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1343
  by (import bword_num NBWORD_SUC_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1344
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1345
lemma DOUBL_EQ_SHL: "ALL x>0.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1346
   RES_FORALL (PWORDLEN x)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1347
    (%xa::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1348
        ALL xb::bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1349
           NBWORD x (BNVAL xa + BNVAL xa + BV xb) = snd (SHL False xa xb))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1350
  by (import bword_num DOUBL_EQ_SHL)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1351
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1352
lemma MSB_NBWORD: "ALL (n::nat) m::nat. bit n (NBWORD (Suc n) m) = VB (m div 2 ^ n mod 2)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1353
  by (import bword_num MSB_NBWORD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1354
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1355
lemma NBWORD_SPLIT: "ALL (n1::nat) (n2::nat) m::nat.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1356
   NBWORD (n1 + n2) m = WCAT (NBWORD n1 (m div 2 ^ n2), NBWORD n2 m)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1357
  by (import bword_num NBWORD_SPLIT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1358
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1359
lemma WSEG_NBWORD: "ALL (m::nat) (k::nat) n::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1360
   m + k <= n -->
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1361
   (ALL l::nat. WSEG m k (NBWORD n l) = NBWORD m (l div 2 ^ k))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1362
  by (import bword_num WSEG_NBWORD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1363
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1364
lemma NBWORD_SUC_FST: "ALL (n::nat) x::nat.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1365
   NBWORD (Suc n) x = WCAT (WORD [VB (x div 2 ^ n mod 2)], NBWORD n x)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1366
  by (import bword_num NBWORD_SUC_FST)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1367
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1368
lemma BIT_NBWORD0: "ALL (k::nat) n::nat. k < n --> bit k (NBWORD n 0) = False"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1369
  by (import bword_num BIT_NBWORD0)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1370
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1371
lemma ADD_BNVAL_LEFT: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1372
   RES_FORALL (PWORDLEN (Suc n))
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1373
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1374
        RES_FORALL (PWORDLEN (Suc n))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1375
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1376
             BNVAL w1 + BNVAL w2 =
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1377
             (BV (bit n w1) + BV (bit n w2)) * 2 ^ n +
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1378
             (BNVAL (WSEG n 0 w1) + BNVAL (WSEG n 0 w2))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1379
  by (import bword_num ADD_BNVAL_LEFT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1380
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1381
lemma ADD_BNVAL_RIGHT: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1382
   RES_FORALL (PWORDLEN (Suc n))
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1383
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1384
        RES_FORALL (PWORDLEN (Suc n))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1385
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1386
             BNVAL w1 + BNVAL w2 =
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1387
             (BNVAL (WSEG n 1 w1) + BNVAL (WSEG n 1 w2)) * 2 +
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1388
             (BV (bit 0 w1) + BV (bit 0 w2))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1389
  by (import bword_num ADD_BNVAL_RIGHT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1390
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1391
lemma ADD_BNVAL_SPLIT: "ALL (n1::nat) n2::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1392
   RES_FORALL (PWORDLEN (n1 + n2))
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1393
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1394
        RES_FORALL (PWORDLEN (n1 + n2))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1395
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1396
             BNVAL w1 + BNVAL w2 =
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1397
             (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2)) * 2 ^ n2 +
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1398
             (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1399
  by (import bword_num ADD_BNVAL_SPLIT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1400
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1401
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1402
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1403
;setup_theory bword_arith
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1404
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1405
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1406
  ACARRY :: "nat => bool word => bool word => bool => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1407
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1408
specification (ACARRY) ACARRY_DEF: "(ALL (w1::bool word) (w2::bool word) cin::bool. ACARRY 0 w1 w2 cin = cin) &
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1409
(ALL (n::nat) (w1::bool word) (w2::bool word) cin::bool.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1410
    ACARRY (Suc n) w1 w2 cin =
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1411
    VB ((BV (bit n w1) + BV (bit n w2) + BV (ACARRY n w1 w2 cin)) div 2))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1412
  by (import bword_arith ACARRY_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1413
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1414
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1415
  ICARRY :: "nat => bool word => bool word => bool => bool" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1416
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1417
specification (ICARRY) ICARRY_DEF: "(ALL (w1::bool word) (w2::bool word) cin::bool. ICARRY 0 w1 w2 cin = cin) &
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1418
(ALL (n::nat) (w1::bool word) (w2::bool word) cin::bool.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1419
    ICARRY (Suc n) w1 w2 cin =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1420
    (bit n w1 & bit n w2 | (bit n w1 | bit n w2) & ICARRY n w1 w2 cin))"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1421
  by (import bword_arith ICARRY_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1422
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1423
lemma ACARRY_EQ_ICARRY: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1424
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1425
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1426
        RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1427
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1428
             ALL (cin::bool) k::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1429
                k <= n --> ACARRY k w1 w2 cin = ICARRY k w1 w2 cin))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1430
  by (import bword_arith ACARRY_EQ_ICARRY)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1431
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1432
lemma BNVAL_LESS_EQ: "ALL n::nat. RES_FORALL (PWORDLEN n) (%w::bool word. BNVAL w <= 2 ^ n - 1)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1433
  by (import bword_arith BNVAL_LESS_EQ)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1434
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1435
lemma ADD_BNVAL_LESS_EQ1: "ALL (n::nat) cin::bool.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1436
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1437
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1438
        RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1439
         (%w2::bool word.
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1440
             (BNVAL w1 + (BNVAL w2 + BV cin)) div 2 ^ n <= Suc 0))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1441
  by (import bword_arith ADD_BNVAL_LESS_EQ1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1442
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1443
lemma ADD_BV_BNVAL_DIV_LESS_EQ1: "ALL (n::nat) (x1::bool) (x2::bool) cin::bool.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1444
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1445
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1446
        RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1447
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1448
             (BV x1 + BV x2 +
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1449
              (BNVAL w1 + (BNVAL w2 + BV cin)) div 2 ^ n) div
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1450
             2
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1451
             <= 1))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1452
  by (import bword_arith ADD_BV_BNVAL_DIV_LESS_EQ1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1453
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1454
lemma ADD_BV_BNVAL_LESS_EQ: "ALL (n::nat) (x1::bool) (x2::bool) cin::bool.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1455
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1456
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1457
        RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1458
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1459
             BV x1 + BV x2 + (BNVAL w1 + (BNVAL w2 + BV cin))
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1460
             <= Suc (2 ^ Suc n)))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1461
  by (import bword_arith ADD_BV_BNVAL_LESS_EQ)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1462
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1463
lemma ADD_BV_BNVAL_LESS_EQ1: "ALL (n::nat) (x1::bool) (x2::bool) cin::bool.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1464
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1465
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1466
        RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1467
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1468
             (BV x1 + BV x2 + (BNVAL w1 + (BNVAL w2 + BV cin))) div
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1469
             2 ^ Suc n
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1470
             <= 1))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1471
  by (import bword_arith ADD_BV_BNVAL_LESS_EQ1)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1472
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1473
lemma ACARRY_EQ_ADD_DIV: "(All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1474
 (%n::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1475
     (RES_FORALL::(bool word => bool) => (bool word => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1476
      ((PWORDLEN::nat => bool word => bool) n)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1477
      (%w1::bool word.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1478
          (RES_FORALL::(bool word => bool) => (bool word => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1479
           ((PWORDLEN::nat => bool word => bool) n)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1480
           (%w2::bool word.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1481
               (All::(nat => bool) => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1482
                (%k::nat.
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1483
                    (op -->::bool => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1484
                     ((op <::nat => nat => bool) k n)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1485
                     ((op =::nat => nat => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1486
                       ((BV::bool => nat)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1487
                         ((ACARRY::nat
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1488
                                   => bool word
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1489
=> bool word => bool => bool)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1490
                           k w1 w2 (cin::bool)))
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1491
                       ((op div::nat => nat => nat)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1492
                         ((op +::nat => nat => nat)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1493
                           ((op +::nat => nat => nat)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1494
                             ((BNVAL::bool word => nat)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1495
                               ((WSEG::nat => nat => bool word => bool word)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1496
                                 k (0::nat) w1))
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1497
                             ((BNVAL::bool word => nat)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1498
                               ((WSEG::nat => nat => bool word => bool word)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1499
                                 k (0::nat) w2)))
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1500
                           ((BV::bool => nat) cin))
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1501
                         ((op ^::nat => nat => nat)
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1502
                           ((number_of::bin => nat)
15647
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  1503
                             ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  1504
                               ((op BIT::bin => bit => bin)
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  1505
                                 (Numeral.Pls::bin) (bit.B1::bit))
b1f486a9c56b Updated import configuration.
skalberg
parents: 15071
diff changeset
  1506
                               (bit.B0::bit)))
14847
44d92c12b255 updated;
wenzelm
parents: 14516
diff changeset
  1507
                           k)))))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1508
  by (import bword_arith ACARRY_EQ_ADD_DIV)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1509
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1510
lemma ADD_WORD_SPLIT: "ALL (n1::nat) n2::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1511
   RES_FORALL (PWORDLEN (n1 + n2))
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1512
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1513
        RES_FORALL (PWORDLEN (n1 + n2))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1514
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1515
             ALL cin::bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1516
                NBWORD (n1 + n2) (BNVAL w1 + BNVAL w2 + BV cin) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1517
                WCAT
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1518
                 (NBWORD n1
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1519
                   (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2) +
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1520
                    BV (ACARRY n2 w1 w2 cin)),
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1521
                  NBWORD n2
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1522
                   (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2) + BV cin))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1523
  by (import bword_arith ADD_WORD_SPLIT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1524
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1525
lemma WSEG_NBWORD_ADD: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1526
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1527
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1528
        RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1529
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1530
             ALL (m::nat) (k::nat) cin::bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1531
                m + k <= n -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1532
                WSEG m k (NBWORD n (BNVAL w1 + BNVAL w2 + BV cin)) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1533
                NBWORD m
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1534
                 (BNVAL (WSEG m k w1) + BNVAL (WSEG m k w2) +
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1535
                  BV (ACARRY k w1 w2 cin))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1536
  by (import bword_arith WSEG_NBWORD_ADD)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1537
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1538
lemma ADD_NBWORD_EQ0_SPLIT: "ALL (n1::nat) n2::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1539
   RES_FORALL (PWORDLEN (n1 + n2))
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1540
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1541
        RES_FORALL (PWORDLEN (n1 + n2))
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1542
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1543
             ALL cin::bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1544
                (NBWORD (n1 + n2) (BNVAL w1 + BNVAL w2 + BV cin) =
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1545
                 NBWORD (n1 + n2) 0) =
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1546
                (NBWORD n1
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1547
                  (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2) +
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1548
                   BV (ACARRY n2 w1 w2 cin)) =
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1549
                 NBWORD n1 0 &
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1550
                 NBWORD n2
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1551
                  (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2) + BV cin) =
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1552
                 NBWORD n2 0)))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1553
  by (import bword_arith ADD_NBWORD_EQ0_SPLIT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1554
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1555
lemma ACARRY_MSB: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1556
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1557
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1558
        RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1559
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1560
             ALL cin::bool.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1561
                ACARRY n w1 w2 cin =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1562
                bit n (NBWORD (Suc n) (BNVAL w1 + BNVAL w2 + BV cin))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1563
  by (import bword_arith ACARRY_MSB)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1564
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1565
lemma ACARRY_WSEG: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1566
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1567
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1568
        RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1569
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1570
             ALL (cin::bool) (k::nat) m::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1571
                k < m & m <= n -->
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1572
                ACARRY k (WSEG m 0 w1) (WSEG m 0 w2) cin =
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1573
                ACARRY k w1 w2 cin))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1574
  by (import bword_arith ACARRY_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1575
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1576
lemma ICARRY_WSEG: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1577
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1578
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1579
        RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1580
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1581
             ALL (cin::bool) (k::nat) m::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1582
                k < m & m <= n -->
17652
b1ef33ebfa17 Release HOL4 and HOLLight Importer.
obua
parents: 17644
diff changeset
  1583
                ICARRY k (WSEG m 0 w1) (WSEG m 0 w2) cin =
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1584
                ICARRY k w1 w2 cin))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1585
  by (import bword_arith ICARRY_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1586
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1587
lemma ACARRY_ACARRY_WSEG: "ALL n::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1588
   RES_FORALL (PWORDLEN n)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1589
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1590
        RES_FORALL (PWORDLEN n)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1591
         (%w2::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1592
             ALL (cin::bool) (m::nat) (k1::nat) k2::nat.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1593
                k1 < m & k2 < n & m + k2 <= n -->
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1594
                ACARRY k1 (WSEG m k2 w1) (WSEG m k2 w2)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1595
                 (ACARRY k2 w1 w2 cin) =
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1596
                ACARRY (k1 + k2) w1 w2 cin))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1597
  by (import bword_arith ACARRY_ACARRY_WSEG)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1598
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1599
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1600
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1601
;setup_theory bword_bitop
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1602
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1603
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1604
  WNOT :: "bool word => bool word" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1605
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1606
specification (WNOT) WNOT_DEF: "ALL l::bool list. WNOT (WORD l) = WORD (map Not l)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1607
  by (import bword_bitop WNOT_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1608
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1609
lemma PBITOP_WNOT: "IN WNOT PBITOP"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1610
  by (import bword_bitop PBITOP_WNOT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1611
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1612
lemma WNOT_WNOT: "ALL w::bool word. WNOT (WNOT w) = w"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1613
  by (import bword_bitop WNOT_WNOT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1614
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1615
lemma WCAT_WNOT: "ALL (n1::nat) n2::nat.
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1616
   RES_FORALL (PWORDLEN n1)
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1617
    (%w1::bool word.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1618
        RES_FORALL (PWORDLEN n2)
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1619
         (%w2::bool word. WCAT (WNOT w1, WNOT w2) = WNOT (WCAT (w1, w2))))"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1620
  by (import bword_bitop WCAT_WNOT)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1621
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1622
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1623
  WAND :: "bool word => bool word => bool word" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1624
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1625
specification (WAND) WAND_DEF: "ALL (l1::bool list) l2::bool list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1626
   WAND (WORD l1) (WORD l2) = WORD (map2 op & l1 l2)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1627
  by (import bword_bitop WAND_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1628
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1629
lemma PBITBOP_WAND: "IN WAND PBITBOP"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1630
  by (import bword_bitop PBITBOP_WAND)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1631
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1632
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1633
  WOR :: "bool word => bool word => bool word" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1634
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1635
specification (WOR) WOR_DEF: "ALL (l1::bool list) l2::bool list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1636
   WOR (WORD l1) (WORD l2) = WORD (map2 op | l1 l2)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1637
  by (import bword_bitop WOR_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1638
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1639
lemma PBITBOP_WOR: "IN WOR PBITBOP"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1640
  by (import bword_bitop PBITBOP_WOR)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1641
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1642
consts
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1643
  WXOR :: "bool word => bool word => bool word" 
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1644
17644
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1645
specification (WXOR) WXOR_DEF: "ALL (l1::bool list) l2::bool list.
bd59bfd4bf37 fixed disambiguation problem
obua
parents: 17566
diff changeset
  1646
   WXOR (WORD l1) (WORD l2) = WORD (map2 (%(x::bool) y::bool. x ~= y) l1 l2)"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1647
  by (import bword_bitop WXOR_DEF)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1648
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1649
lemma PBITBOP_WXOR: "IN WXOR PBITBOP"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1650
  by (import bword_bitop PBITBOP_WXOR)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1651
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1652
;end_setup
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1653
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1654
end
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
  1655