src/HOL/Import/HOL/HOL4Word32.thy
changeset 35416 d8d7d1b785af
parent 30971 7fbebf75b3ef
child 44763 b50d5d694838
equal deleted inserted replaced
35342:4dc65845eab3 35416:d8d7d1b785af
    66 
    66 
    67 lemma BITS_def: "ALL (h::nat) (l::nat) n::nat.
    67 lemma BITS_def: "ALL (h::nat) (l::nat) n::nat.
    68    BITS h l n = MOD_2EXP (Suc h - l) (DIV_2EXP l n)"
    68    BITS h l n = MOD_2EXP (Suc h - l) (DIV_2EXP l n)"
    69   by (import bits BITS_def)
    69   by (import bits BITS_def)
    70 
    70 
    71 constdefs
    71 definition bit :: "nat => nat => bool" where 
    72   bit :: "nat => nat => bool" 
       
    73   "bit == %(b::nat) n::nat. BITS b b n = 1"
    72   "bit == %(b::nat) n::nat. BITS b b n = 1"
    74 
    73 
    75 lemma BIT_def: "ALL (b::nat) n::nat. bit b n = (BITS b b n = 1)"
    74 lemma BIT_def: "ALL (b::nat) n::nat. bit b n = (BITS b b n = 1)"
    76   by (import bits BIT_def)
    75   by (import bits BIT_def)
    77 
    76 
   838   w_T_primdef: "w_T == mk_word32 (EQUIV COMP0)"
   837   w_T_primdef: "w_T == mk_word32 (EQUIV COMP0)"
   839 
   838 
   840 lemma w_T_def: "w_T = mk_word32 (EQUIV COMP0)"
   839 lemma w_T_def: "w_T = mk_word32 (EQUIV COMP0)"
   841   by (import word32 w_T_def)
   840   by (import word32 w_T_def)
   842 
   841 
   843 constdefs
   842 definition word_suc :: "word32 => word32" where 
   844   word_suc :: "word32 => word32" 
       
   845   "word_suc == %T1::word32. mk_word32 (EQUIV (Suc (Eps (dest_word32 T1))))"
   843   "word_suc == %T1::word32. mk_word32 (EQUIV (Suc (Eps (dest_word32 T1))))"
   846 
   844 
   847 lemma word_suc: "ALL T1::word32. word_suc T1 = mk_word32 (EQUIV (Suc (Eps (dest_word32 T1))))"
   845 lemma word_suc: "ALL T1::word32. word_suc T1 = mk_word32 (EQUIV (Suc (Eps (dest_word32 T1))))"
   848   by (import word32 word_suc)
   846   by (import word32 word_suc)
   849 
   847 
   850 constdefs
   848 definition word_add :: "word32 => word32 => word32" where 
   851   word_add :: "word32 => word32 => word32" 
       
   852   "word_add ==
   849   "word_add ==
   853 %(T1::word32) T2::word32.
   850 %(T1::word32) T2::word32.
   854    mk_word32 (EQUIV (Eps (dest_word32 T1) + Eps (dest_word32 T2)))"
   851    mk_word32 (EQUIV (Eps (dest_word32 T1) + Eps (dest_word32 T2)))"
   855 
   852 
   856 lemma word_add: "ALL (T1::word32) T2::word32.
   853 lemma word_add: "ALL (T1::word32) T2::word32.
   857    word_add T1 T2 =
   854    word_add T1 T2 =
   858    mk_word32 (EQUIV (Eps (dest_word32 T1) + Eps (dest_word32 T2)))"
   855    mk_word32 (EQUIV (Eps (dest_word32 T1) + Eps (dest_word32 T2)))"
   859   by (import word32 word_add)
   856   by (import word32 word_add)
   860 
   857 
   861 constdefs
   858 definition word_mul :: "word32 => word32 => word32" where 
   862   word_mul :: "word32 => word32 => word32" 
       
   863   "word_mul ==
   859   "word_mul ==
   864 %(T1::word32) T2::word32.
   860 %(T1::word32) T2::word32.
   865    mk_word32 (EQUIV (Eps (dest_word32 T1) * Eps (dest_word32 T2)))"
   861    mk_word32 (EQUIV (Eps (dest_word32 T1) * Eps (dest_word32 T2)))"
   866 
   862 
   867 lemma word_mul: "ALL (T1::word32) T2::word32.
   863 lemma word_mul: "ALL (T1::word32) T2::word32.
   868    word_mul T1 T2 =
   864    word_mul T1 T2 =
   869    mk_word32 (EQUIV (Eps (dest_word32 T1) * Eps (dest_word32 T2)))"
   865    mk_word32 (EQUIV (Eps (dest_word32 T1) * Eps (dest_word32 T2)))"
   870   by (import word32 word_mul)
   866   by (import word32 word_mul)
   871 
   867 
   872 constdefs
   868 definition word_1comp :: "word32 => word32" where 
   873   word_1comp :: "word32 => word32" 
       
   874   "word_1comp ==
   869   "word_1comp ==
   875 %T1::word32. mk_word32 (EQUIV (ONE_COMP (Eps (dest_word32 T1))))"
   870 %T1::word32. mk_word32 (EQUIV (ONE_COMP (Eps (dest_word32 T1))))"
   876 
   871 
   877 lemma word_1comp: "ALL T1::word32.
   872 lemma word_1comp: "ALL T1::word32.
   878    word_1comp T1 = mk_word32 (EQUIV (ONE_COMP (Eps (dest_word32 T1))))"
   873    word_1comp T1 = mk_word32 (EQUIV (ONE_COMP (Eps (dest_word32 T1))))"
   879   by (import word32 word_1comp)
   874   by (import word32 word_1comp)
   880 
   875 
   881 constdefs
   876 definition word_2comp :: "word32 => word32" where 
   882   word_2comp :: "word32 => word32" 
       
   883   "word_2comp ==
   877   "word_2comp ==
   884 %T1::word32. mk_word32 (EQUIV (TWO_COMP (Eps (dest_word32 T1))))"
   878 %T1::word32. mk_word32 (EQUIV (TWO_COMP (Eps (dest_word32 T1))))"
   885 
   879 
   886 lemma word_2comp: "ALL T1::word32.
   880 lemma word_2comp: "ALL T1::word32.
   887    word_2comp T1 = mk_word32 (EQUIV (TWO_COMP (Eps (dest_word32 T1))))"
   881    word_2comp T1 = mk_word32 (EQUIV (TWO_COMP (Eps (dest_word32 T1))))"
   888   by (import word32 word_2comp)
   882   by (import word32 word_2comp)
   889 
   883 
   890 constdefs
   884 definition word_lsr1 :: "word32 => word32" where 
   891   word_lsr1 :: "word32 => word32" 
       
   892   "word_lsr1 == %T1::word32. mk_word32 (EQUIV (LSR_ONE (Eps (dest_word32 T1))))"
   885   "word_lsr1 == %T1::word32. mk_word32 (EQUIV (LSR_ONE (Eps (dest_word32 T1))))"
   893 
   886 
   894 lemma word_lsr1: "ALL T1::word32.
   887 lemma word_lsr1: "ALL T1::word32.
   895    word_lsr1 T1 = mk_word32 (EQUIV (LSR_ONE (Eps (dest_word32 T1))))"
   888    word_lsr1 T1 = mk_word32 (EQUIV (LSR_ONE (Eps (dest_word32 T1))))"
   896   by (import word32 word_lsr1)
   889   by (import word32 word_lsr1)
   897 
   890 
   898 constdefs
   891 definition word_asr1 :: "word32 => word32" where 
   899   word_asr1 :: "word32 => word32" 
       
   900   "word_asr1 == %T1::word32. mk_word32 (EQUIV (ASR_ONE (Eps (dest_word32 T1))))"
   892   "word_asr1 == %T1::word32. mk_word32 (EQUIV (ASR_ONE (Eps (dest_word32 T1))))"
   901 
   893 
   902 lemma word_asr1: "ALL T1::word32.
   894 lemma word_asr1: "ALL T1::word32.
   903    word_asr1 T1 = mk_word32 (EQUIV (ASR_ONE (Eps (dest_word32 T1))))"
   895    word_asr1 T1 = mk_word32 (EQUIV (ASR_ONE (Eps (dest_word32 T1))))"
   904   by (import word32 word_asr1)
   896   by (import word32 word_asr1)
   905 
   897 
   906 constdefs
   898 definition word_ror1 :: "word32 => word32" where 
   907   word_ror1 :: "word32 => word32" 
       
   908   "word_ror1 == %T1::word32. mk_word32 (EQUIV (ROR_ONE (Eps (dest_word32 T1))))"
   899   "word_ror1 == %T1::word32. mk_word32 (EQUIV (ROR_ONE (Eps (dest_word32 T1))))"
   909 
   900 
   910 lemma word_ror1: "ALL T1::word32.
   901 lemma word_ror1: "ALL T1::word32.
   911    word_ror1 T1 = mk_word32 (EQUIV (ROR_ONE (Eps (dest_word32 T1))))"
   902    word_ror1 T1 = mk_word32 (EQUIV (ROR_ONE (Eps (dest_word32 T1))))"
   912   by (import word32 word_ror1)
   903   by (import word32 word_ror1)
   938   MSB_primdef: "MSB == %T1::word32. MSBn (Eps (dest_word32 T1))"
   929   MSB_primdef: "MSB == %T1::word32. MSBn (Eps (dest_word32 T1))"
   939 
   930 
   940 lemma MSB_def: "ALL T1::word32. MSB T1 = MSBn (Eps (dest_word32 T1))"
   931 lemma MSB_def: "ALL T1::word32. MSB T1 = MSBn (Eps (dest_word32 T1))"
   941   by (import word32 MSB_def)
   932   by (import word32 MSB_def)
   942 
   933 
   943 constdefs
   934 definition bitwise_or :: "word32 => word32 => word32" where 
   944   bitwise_or :: "word32 => word32 => word32" 
       
   945   "bitwise_or ==
   935   "bitwise_or ==
   946 %(T1::word32) T2::word32.
   936 %(T1::word32) T2::word32.
   947    mk_word32 (EQUIV (OR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
   937    mk_word32 (EQUIV (OR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
   948 
   938 
   949 lemma bitwise_or: "ALL (T1::word32) T2::word32.
   939 lemma bitwise_or: "ALL (T1::word32) T2::word32.
   950    bitwise_or T1 T2 =
   940    bitwise_or T1 T2 =
   951    mk_word32 (EQUIV (OR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
   941    mk_word32 (EQUIV (OR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
   952   by (import word32 bitwise_or)
   942   by (import word32 bitwise_or)
   953 
   943 
   954 constdefs
   944 definition bitwise_eor :: "word32 => word32 => word32" where 
   955   bitwise_eor :: "word32 => word32 => word32" 
       
   956   "bitwise_eor ==
   945   "bitwise_eor ==
   957 %(T1::word32) T2::word32.
   946 %(T1::word32) T2::word32.
   958    mk_word32 (EQUIV (EOR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
   947    mk_word32 (EQUIV (EOR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
   959 
   948 
   960 lemma bitwise_eor: "ALL (T1::word32) T2::word32.
   949 lemma bitwise_eor: "ALL (T1::word32) T2::word32.
   961    bitwise_eor T1 T2 =
   950    bitwise_eor T1 T2 =
   962    mk_word32 (EQUIV (EOR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
   951    mk_word32 (EQUIV (EOR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
   963   by (import word32 bitwise_eor)
   952   by (import word32 bitwise_eor)
   964 
   953 
   965 constdefs
   954 definition bitwise_and :: "word32 => word32 => word32" where 
   966   bitwise_and :: "word32 => word32 => word32" 
       
   967   "bitwise_and ==
   955   "bitwise_and ==
   968 %(T1::word32) T2::word32.
   956 %(T1::word32) T2::word32.
   969    mk_word32 (EQUIV (AND (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
   957    mk_word32 (EQUIV (AND (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
   970 
   958 
   971 lemma bitwise_and: "ALL (T1::word32) T2::word32.
   959 lemma bitwise_and: "ALL (T1::word32) T2::word32.
  1152   by (import word32 ADD_TWO_COMP)
  1140   by (import word32 ADD_TWO_COMP)
  1153 
  1141 
  1154 lemma ADD_TWO_COMP2: "ALL x::word32. word_add (word_2comp x) x = w_0"
  1142 lemma ADD_TWO_COMP2: "ALL x::word32. word_add (word_2comp x) x = w_0"
  1155   by (import word32 ADD_TWO_COMP2)
  1143   by (import word32 ADD_TWO_COMP2)
  1156 
  1144 
  1157 constdefs
  1145 definition word_sub :: "word32 => word32 => word32" where 
  1158   word_sub :: "word32 => word32 => word32" 
       
  1159   "word_sub == %(a::word32) b::word32. word_add a (word_2comp b)"
  1146   "word_sub == %(a::word32) b::word32. word_add a (word_2comp b)"
  1160 
  1147 
  1161 lemma word_sub: "ALL (a::word32) b::word32. word_sub a b = word_add a (word_2comp b)"
  1148 lemma word_sub: "ALL (a::word32) b::word32. word_sub a b = word_add a (word_2comp b)"
  1162   by (import word32 word_sub)
  1149   by (import word32 word_sub)
  1163 
  1150 
  1164 constdefs
  1151 definition word_lsl :: "word32 => nat => word32" where 
  1165   word_lsl :: "word32 => nat => word32" 
       
  1166   "word_lsl == %(a::word32) n::nat. word_mul a (n2w (2 ^ n))"
  1152   "word_lsl == %(a::word32) n::nat. word_mul a (n2w (2 ^ n))"
  1167 
  1153 
  1168 lemma word_lsl: "ALL (a::word32) n::nat. word_lsl a n = word_mul a (n2w (2 ^ n))"
  1154 lemma word_lsl: "ALL (a::word32) n::nat. word_lsl a n = word_mul a (n2w (2 ^ n))"
  1169   by (import word32 word_lsl)
  1155   by (import word32 word_lsl)
  1170 
  1156 
  1171 constdefs
  1157 definition word_lsr :: "word32 => nat => word32" where 
  1172   word_lsr :: "word32 => nat => word32" 
       
  1173   "word_lsr == %(a::word32) n::nat. (word_lsr1 ^^ n) a"
  1158   "word_lsr == %(a::word32) n::nat. (word_lsr1 ^^ n) a"
  1174 
  1159 
  1175 lemma word_lsr: "ALL (a::word32) n::nat. word_lsr a n = (word_lsr1 ^^ n) a"
  1160 lemma word_lsr: "ALL (a::word32) n::nat. word_lsr a n = (word_lsr1 ^^ n) a"
  1176   by (import word32 word_lsr)
  1161   by (import word32 word_lsr)
  1177 
  1162 
  1178 constdefs
  1163 definition word_asr :: "word32 => nat => word32" where 
  1179   word_asr :: "word32 => nat => word32" 
       
  1180   "word_asr == %(a::word32) n::nat. (word_asr1 ^^ n) a"
  1164   "word_asr == %(a::word32) n::nat. (word_asr1 ^^ n) a"
  1181 
  1165 
  1182 lemma word_asr: "ALL (a::word32) n::nat. word_asr a n = (word_asr1 ^^ n) a"
  1166 lemma word_asr: "ALL (a::word32) n::nat. word_asr a n = (word_asr1 ^^ n) a"
  1183   by (import word32 word_asr)
  1167   by (import word32 word_asr)
  1184 
  1168 
  1185 constdefs
  1169 definition word_ror :: "word32 => nat => word32" where 
  1186   word_ror :: "word32 => nat => word32" 
       
  1187   "word_ror == %(a::word32) n::nat. (word_ror1 ^^ n) a"
  1170   "word_ror == %(a::word32) n::nat. (word_ror1 ^^ n) a"
  1188 
  1171 
  1189 lemma word_ror: "ALL (a::word32) n::nat. word_ror a n = (word_ror1 ^^ n) a"
  1172 lemma word_ror: "ALL (a::word32) n::nat. word_ror a n = (word_ror1 ^^ n) a"
  1190   by (import word32 word_ror)
  1173   by (import word32 word_ror)
  1191 
  1174